diff --git a/BUILD.gn b/BUILD.gn
index 239c4d6..47e8e92 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -226,15 +226,12 @@
     }
   }
 
-  if (!is_ios && !is_android && !is_fuchsia) {
-    deps += [ "//components/viz/demo:viz_demo" ]
-    if (!use_libfuzzer) {
-      # TODO(crbug.com/1241949): libcronet.$version.so fails to link in libfuzzer builds.
-      deps += [
-        "//components/cronet:cronet_tests",
-        "//components/cronet:cronet_unittests",
-      ]
-    }
+  if (!is_ios && !is_android) {
+    deps += [
+      "//components/cronet:cronet_tests",
+      "//components/cronet:cronet_unittests",
+      "//components/viz/demo:viz_demo",
+    ]
   }
 
   if (!is_ios) {
diff --git a/DEPS b/DEPS
index c423a416..bdc502da 100644
--- a/DEPS
+++ b/DEPS
@@ -300,15 +300,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': '848fe76219b0a1f65815b90f1c6a648658328fc3',
+  'skia_revision': 'dee2a6ebfcdfff981b8b0a520c23220ab5673089',
   # 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': 'f99c9d0827a1df7cc4524a6a67f1834341e701b2',
+  'v8_revision': 'a592493139de6ec635765007ea9e61e636212587',
   # 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': 'efa9a4d914fce3be312b3ca5afe86ab4b7031b57',
+  'angle_revision': '15b1678f2ed1dbd37c1684403ff0fcb479dde0ec',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
@@ -327,7 +327,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Fuchsia sdk
   # and whatever else without interference from each other.
-  'fuchsia_version': 'version:9.20220825.0.1',
+  'fuchsia_version': 'version:9.20220825.2.1',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling google-toolbox-for-mac
   # and whatever else without interference from each other.
@@ -347,7 +347,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling NaCl
   # and whatever else without interference from each other.
-  'nacl_revision': '3418b267ecc8ead003eb328fc52d479bc5b00193',
+  'nacl_revision': '59db500cd13aaad0fa3838c3f05b369caa47b5f7',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
@@ -379,7 +379,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': '3379193dc5e947b26ce3e66d87f4ce40c28c583f',
+  'devtools_frontend_revision': '4969d42cdf99eb6094d0691110197b41d5c0f6c8',
   # 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.
@@ -415,7 +415,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': '4b0147002041fc0b63fdd26a1aef6ea869105f26',
+  'dawn_revision': '667db19838e0e17d14f773f7203541a2e00336fd',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -865,7 +865,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/linux-amd64',
-          'version': '7eU7i-Vr9L92x3du01674VzQoCm_N_v50FHo-9FpIyIC',
+          'version': 'V49mCr8KRJKf1Ngrg-A91kO4wzR3Yr13mc77gd7na4gC',
         },
       ],
       'dep_type': 'cipd',
@@ -876,7 +876,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/mac-amd64',
-          'version': '8qeeU6LuQhAJ8B-ByrB_kPIPLhSfqkiIl_kDyTt-thUC',
+          'version': 'Rs-klRFTjqwyY3fOsjerCxZAcDCKkWUOX5iwSojUf9gC',
         },
       ],
       'dep_type': 'cipd',
@@ -887,7 +887,7 @@
       'packages': [
         {
           'package': 'chromium/rts/model/windows-amd64',
-          'version': 'OIpjzGBsh27JH-OBESqtB6RsIbMhBHEqZisrUKiLXOAC',
+          'version': 'X9jyIhr789MjmifTqosS1RDNuNl93vckvDnhK7SPQgIC',
         },
       ],
       'dep_type': 'cipd',
@@ -1576,7 +1576,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'ee7e55c548972cb286c595a89e308768cff1f379',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'f6016b7c1ce6f7b79fd6048e4a1496c043d5ff99',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1616,7 +1616,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/r8',
-              'version': 'QXtnqOo6mUvEBgxfd_2YYYeMxB5fcgIDXmNAmf73VGEC',
+              'version': '67dSHl38KOWsT791ovMUFl0ETdJP2RHkRpgr5STYS7sC',
           },
       ],
       'condition': 'checkout_android',
@@ -1694,7 +1694,7 @@
     Var('chromium_git') + '/external/github.com/GoogleChromeLabs/text-fragments-polyfill.git' + '@' + 'c036420683f672d685e27415de0a5f5e85bdc23f',
 
   'src/third_party/tflite/src':
-    Var('chromium_git') + '/external/github.com/tensorflow/tensorflow.git' + '@' + '6848b213e0cbfbc216dd8a87e27d37c6efbdcfbe',
+    Var('chromium_git') + '/external/github.com/tensorflow/tensorflow.git' + '@' + 'b6b10f9f529189ab903782ca308f44a35d3d427d',
 
   'src/third_party/turbine': {
       'packages': [
@@ -1746,7 +1746,7 @@
     Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '7ecbc03b24dc0975fd6e49fc385bae6957e89c5b',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'a7dcd29c1f503673e92576b1876db15b8e92e4ed',
+    Var('webrtc_git') + '/src.git' + '@' + 'b61f39e00e22e80029de32710dd21f5fef6012e7',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1819,7 +1819,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@ec56c50fcb9eedaade23b8791366bfbdfd72acde',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@42e3d00504323f2a52adfaf3df1e1c093b399171',
     'condition': 'checkout_src_internal',
   },
 
@@ -1849,7 +1849,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/help_app/app',
-        'version': '66iUOg8c7ZXbY8kzVA8myAkPJPgB-RnEinwt21tcg9kC',
+        'version': 'sZ52H6bpUu6z3YDQ02fUc-l3ZwKTGmFWz_HDug4j7Q0C',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
@@ -1871,7 +1871,7 @@
     'packages': [
       {
         'package': 'chromeos_internal/apps/projector_app/app',
-        'version': '_mdOrvLHSmVw9emmQ_yYHOf2m_ZmhNLR_mVNIplEgg4C',
+        'version': 'aDRTupQL7T6LWT9dhn-tgILoOlwvm1Xm2UFCPVDr6uQC',
       },
     ],
     'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index aeff250f..4325cd5a 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -1583,6 +1583,12 @@
     "system/privacy/privacy_indicators_controller.h",
     "system/privacy/privacy_indicators_tray_item_view.cc",
     "system/privacy/privacy_indicators_tray_item_view.h",
+    "system/privacy/screen_capture_observer.h",
+    "system/privacy/screen_security_notification_controller.cc",
+    "system/privacy/screen_security_notification_controller.h",
+    "system/privacy/screen_share_observer.h",
+    "system/privacy/screen_switch_check_controller.cc",
+    "system/privacy/screen_switch_check_controller.h",
     "system/privacy_hub/camera_privacy_switch_controller.cc",
     "system/privacy_hub/camera_privacy_switch_controller.h",
     "system/privacy_hub/microphone_privacy_switch_controller.cc",
@@ -1615,12 +1621,6 @@
     "system/scheduled_feature/scheduled_feature.h",
     "system/screen_layout_observer.cc",
     "system/screen_layout_observer.h",
-    "system/screen_security/screen_capture_observer.h",
-    "system/screen_security/screen_security_notification_controller.cc",
-    "system/screen_security/screen_security_notification_controller.h",
-    "system/screen_security/screen_share_observer.h",
-    "system/screen_security/screen_switch_check_controller.cc",
-    "system/screen_security/screen_switch_check_controller.h",
     "system/session/logout_button_tray.cc",
     "system/session/logout_button_tray.h",
     "system/session/logout_confirmation_controller.cc",
@@ -2881,6 +2881,7 @@
     "system/network/wifi_toggle_notification_controller_unittest.cc",
     "system/night_light/night_light_controller_unittest.cc",
     "system/night_light/night_light_feature_pod_controller_unittest.cc",
+    "system/notification_center/notification_center_tray_unittest.cc",
     "system/overview/overview_button_tray_unittest.cc",
     "system/palette/mock_palette_tool_delegate.cc",
     "system/palette/mock_palette_tool_delegate.h",
@@ -2916,6 +2917,7 @@
     "system/power/video_activity_notifier_unittest.cc",
     "system/privacy/privacy_indicators_controller_unittest.cc",
     "system/privacy/privacy_indicators_tray_item_view_unittest.cc",
+    "system/privacy/screen_security_notification_controller_unittest.cc",
     "system/privacy_hub/camera_privacy_switch_controller_unittest.cc",
     "system/privacy_hub/microphone_privacy_switch_controller_unittest.cc",
     "system/progress_indicator/progress_indicator_animation_registry_unittest.cc",
@@ -2923,7 +2925,6 @@
     "system/rotation/rotation_lock_feature_pod_controller_unittest.cc",
     "system/scheduled_feature/scheduled_feature_unittest.cc",
     "system/screen_layout_observer_unittest.cc",
-    "system/screen_security/screen_security_notification_controller_unittest.cc",
     "system/session/logout_button_tray_unittest.cc",
     "system/session/logout_confirmation_controller_unittest.cc",
     "system/session/session_limit_notification_controller_unittest.cc",
diff --git a/ash/app_list/views/apps_container_view.cc b/ash/app_list/views/apps_container_view.cc
index 2a533c20..726a3ac8 100644
--- a/ash/app_list/views/apps_container_view.cc
+++ b/ash/app_list/views/apps_container_view.cc
@@ -29,7 +29,6 @@
 #include "ash/app_list/views/search_result_page_dialog_controller.h"
 #include "ash/app_list/views/suggestion_chip_container_view.h"
 #include "ash/constants/ash_features.h"
-#include "ash/controls/gradient_layer_delegate.h"
 #include "ash/keyboard/ui/keyboard_ui_controller.h"
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/app_list/app_list_model_delegate.h"
@@ -694,23 +693,18 @@
 }
 
 void AppsContainerView::MaybeCreateGradientMask() {
-  if (features::IsBackgroundBlurEnabled()) {
-    if (!layer()->layer_mask_layer() && !gradient_layer_delegate_) {
-      gradient_layer_delegate_ =
-          std::make_unique<GradientLayerDelegate>(/*animate_in=*/false);
-      UpdateGradientMaskBounds();
-    }
-    if (gradient_layer_delegate_) {
-      scrollable_container_->layer()->SetMaskLayer(
-          gradient_layer_delegate_->layer());
-    }
-  }
+  if (!features::IsBackgroundBlurEnabled())
+    return;
+
+  if (scrollable_container_->layer()->gradient_mask().IsEmpty())
+    UpdateGradientMaskBounds();
 }
 
 void AppsContainerView::MaybeRemoveGradientMask() {
-  if (scrollable_container_->layer()->layer_mask_layer() &&
+  if (!scrollable_container_->layer()->gradient_mask().IsEmpty() &&
       !keep_gradient_mask_for_cardified_state_) {
-    scrollable_container_->layer()->SetMaskLayer(nullptr);
+    scrollable_container_->layer()->SetGradientMask(
+        gfx::LinearGradient::GetEmpty());
   }
 }
 
@@ -1024,7 +1018,7 @@
         gfx::Insets::TLBR(-kDefaultFadeoutMaskHeight, 0, 0, 0));
   scrollable_container_->SetBoundsRect(scrollable_bounds);
 
-  if (gradient_layer_delegate_)
+  if (!scrollable_container_->layer()->gradient_mask().IsEmpty())
     UpdateGradientMaskBounds();
 
   bool separator_need_centering = false;
@@ -1669,20 +1663,22 @@
 }
 
 void AppsContainerView::UpdateGradientMaskBounds() {
-  const gfx::Rect container_bounds = scrollable_container_->bounds();
-  const gfx::Rect top_gradient_bounds(0, 0, container_bounds.width(),
-                                      kDefaultFadeoutMaskHeight);
-  const gfx::Rect bottom_gradient_bounds(
-      0, container_bounds.height() - kDefaultFadeoutMaskHeight,
-      container_bounds.width(), kDefaultFadeoutMaskHeight);
+  if (scrollable_container_->bounds().IsEmpty())
+    return;
 
-  gradient_layer_delegate_->set_start_fade_zone({top_gradient_bounds,
-                                                 /*fade_in=*/true,
-                                                 /*is_horizontal=*/false});
-  gradient_layer_delegate_->set_end_fade_zone({bottom_gradient_bounds,
-                                               /*fade_in=*/false,
-                                               /*is_horizonal=*/false});
-  gradient_layer_delegate_->layer()->SetBounds(container_bounds);
+  // Vertical linear gradient from top to bottom.
+  gfx::LinearGradient gradient_mask(/*angle=*/-90);
+  float fade_in_out_fraction = static_cast<float>(kDefaultFadeoutMaskHeight) /
+                               scrollable_container_->bounds().height();
+  // Fade in section.
+  gradient_mask.AddStep(/*fraction=*/0, /*alpha=*/0);
+  gradient_mask.AddStep(fade_in_out_fraction, 255);
+  // Fade out section
+  gradient_mask.AddStep((1 - fade_in_out_fraction), 255);
+  gradient_mask.AddStep(1, 0);
+
+  if (gradient_mask != scrollable_container_->layer()->gradient_mask())
+    scrollable_container_->layer()->SetGradientMask(gradient_mask);
 }
 
 void AppsContainerView::OnAppsGridViewFadeOutAnimationEnded(
diff --git a/ash/app_list/views/apps_container_view.h b/ash/app_list/views/apps_container_view.h
index 608c4c65e..86b2059b 100644
--- a/ash/app_list/views/apps_container_view.h
+++ b/ash/app_list/views/apps_container_view.h
@@ -35,7 +35,6 @@
 class ContentsView;
 class ContinueSectionView;
 class FolderBackgroundView;
-class GradientLayerDelegate;
 class PageSwitcher;
 class SearchResultPageAnchoredDialog;
 class SuggestionChipContainerView;
@@ -313,12 +312,13 @@
   // `scrollable_container_`.
   void UpdateGradientMaskBounds();
 
-  // Creates a layer mask for gradient alpha when the feature is enabled. The
-  // gradient appears at the top and bottom of the 'scrollable_container_' to
-  // create a "fade out" effect when dragging the whole page.
+  // Creates a layer mask for gradient alpha and applies it to the
+  // `scrollable_container_` layer. The gradient appears at the top and bottom
+  // of the `scrollable_container_` to create a "fade out" effect when dragging
+  // the whole page.
   void MaybeCreateGradientMask();
 
-  // Removes the gradient mask from being set as the mask layer.
+  // Removes the gradient mask from the `scrollable_container_`.
   void MaybeRemoveGradientMask();
 
   // Called when the animation to fade out app list items is completed.
@@ -394,8 +394,6 @@
   // arguments (otherwise the margins will be recalculated).
   CachedContainerMargins cached_container_margins_;
 
-  std::unique_ptr<GradientLayerDelegate> gradient_layer_delegate_;
-
   // A closure to update item positions. It should run at the end of the fade
   // out animation when items are reordered.
   base::OnceClosure update_position_closure_;
diff --git a/ash/app_list/views/apps_container_view_unittest.cc b/ash/app_list/views/apps_container_view_unittest.cc
index 27ffe61f..4ab29ca 100644
--- a/ash/app_list/views/apps_container_view_unittest.cc
+++ b/ash/app_list/views/apps_container_view_unittest.cc
@@ -103,11 +103,12 @@
   }
 
   bool HasGradientMask() {
-    return GetAppListTestHelper()
-        ->GetAppsContainerView()
-        ->scrollable_container_for_test()
-        ->layer()
-        ->layer_mask_layer();
+    return !GetAppListTestHelper()
+                ->GetAppsContainerView()
+                ->scrollable_container_for_test()
+                ->layer()
+                ->gradient_mask()
+                .IsEmpty();
   }
 
  private:
diff --git a/ash/app_list/views/apps_grid_view_unittest.cc b/ash/app_list/views/apps_grid_view_unittest.cc
index cc5eafc6..dc807d7 100644
--- a/ash/app_list/views/apps_grid_view_unittest.cc
+++ b/ash/app_list/views/apps_grid_view_unittest.cc
@@ -4777,7 +4777,7 @@
                                           ->contents_view()
                                           ->apps_container_view()
                                           ->scrollable_container_for_test();
-  ASSERT_FALSE(scrollable_container->layer()->layer_mask_layer());
+  ASSERT_TRUE(scrollable_container->layer()->gradient_mask().IsEmpty());
 
   // On the first page drag upwards, there should not be a page switch and the
   // layer mask should make the folder lose blur.
@@ -4788,7 +4788,7 @@
   EXPECT_TRUE(scroll_update_upwards.handled());
 
   ASSERT_EQ(0, GetPaginationModel()->selected_page());
-  ASSERT_TRUE(scrollable_container->layer()->layer_mask_layer());
+  ASSERT_FALSE(scrollable_container->layer()->gradient_mask().IsEmpty());
 
   // Continue drag, now switching directions and release. There shouldn't be
   // any transition and the mask layer should've been reset.
@@ -4798,7 +4798,7 @@
   EXPECT_TRUE(scroll_end.handled());
 
   EXPECT_FALSE(GetPaginationModel()->has_transition());
-  EXPECT_FALSE(scrollable_container->layer()->layer_mask_layer());
+  EXPECT_TRUE(scrollable_container->layer()->gradient_mask().IsEmpty());
 }
 
 TEST_F(AppsGridViewTest, PopulateAppsGridWithTwoApps) {
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index c2475f2..5cfadd4 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -1033,6 +1033,12 @@
 const base::Feature kLacrosMoveProfileMigration{
     "LacrosMoveProfileMigration", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// If enabled, it is allowed to migrate data from lacros back to ash, provided
+// that other conditions are also met (e.g. the policy is enabled, or the
+// command line flag is passed).
+const base::Feature kLacrosProfileBackwardMigration{
+    "LacrosProfileBackwardMigration", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enables or disables sorting app icons shown on the launcher.
 const base::Feature kLauncherAppSort{"LauncherAppSort",
                                      base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index 889e2e4..7694216 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -421,6 +421,8 @@
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kLacrosMoveProfileMigration;
 COMPONENT_EXPORT(ASH_CONSTANTS)
+extern const base::Feature kLacrosProfileBackwardMigration;
+COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kLauncherAppSort;
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kLauncherFolderRenameKeepsSortOrder;
diff --git a/ash/glanceables/DEPS b/ash/glanceables/DEPS
new file mode 100644
index 0000000..d6963ca1
--- /dev/null
+++ b/ash/glanceables/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+  "+google_apis/calendar",
+  "+google_apis/common",
+]
diff --git a/ash/glanceables/glanceables_controller.cc b/ash/glanceables/glanceables_controller.cc
index 50342a8..9a235634 100644
--- a/ash/glanceables/glanceables_controller.cc
+++ b/ash/glanceables/glanceables_controller.cc
@@ -12,9 +12,18 @@
 #include "ash/glanceables/glanceables_view.h"
 #include "ash/glanceables/glanceables_window_hider.h"
 #include "ash/public/cpp/shell_window_ids.h"
+#include "ash/public/cpp/style/color_provider.h"
+#include "ash/root_window_controller.h"
 #include "ash/shell.h"
+#include "ash/system/model/system_tray_model.h"
+#include "ash/system/time/calendar_utils.h"
 #include "ash/wm/desks/desks_util.h"
+#include "base/bind.h"
+#include "base/time/time.h"
+#include "third_party/skia/include/core/SkColor.h"
 #include "ui/base/ui_base_types.h"
+#include "ui/compositor/layer.h"
+#include "ui/views/background.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/widget/widget_delegate.h"
 #include "ui/wm/public/activation_client.h"
@@ -87,6 +96,7 @@
 
   view_ = widget_->SetContentsView(std::make_unique<GlanceablesView>());
 
+  ApplyBackdrop();
   widget_->Show();
 }
 
@@ -119,6 +129,22 @@
       ->ambient_controller()
       ->ambient_weather_controller()
       ->FetchWeather();
+
+  // GlanceablesUpNextView observes the calendar model for updates.
+  // TODO(crbug.com/1353495): remove timer.
+  timer_.Start(
+      FROM_HERE, base::Milliseconds(1000), base::BindOnce([]() {
+        Shell::Get()->system_tray_model()->calendar_model()->FetchEvents(
+            calendar_utils::GetStartOfMonthUTC(base::Time::Now()));
+      }));
+}
+
+void GlanceablesController::ApplyBackdrop() const {
+  auto* layer = widget_->GetLayer();
+  layer->SetBackgroundBlur(ColorProvider::kBackgroundBlurSigma);
+  layer->SetBackdropFilterQuality(ColorProvider::kBackgroundBlurQuality);
+  view_->SetBackground(
+      views::CreateSolidBackground(SkColorSetARGB(0x80, 0x00, 0x00, 0x00)));
 }
 
 }  // namespace ash
diff --git a/ash/glanceables/glanceables_controller.h b/ash/glanceables/glanceables_controller.h
index 24387a9..b74ad15 100644
--- a/ash/glanceables/glanceables_controller.h
+++ b/ash/glanceables/glanceables_controller.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "ash/ash_export.h"
+#include "base/timer/timer.h"
 #include "ui/wm/public/activation_change_observer.h"
 
 namespace views {
@@ -60,9 +61,15 @@
   // Triggers a fetch of data from the server.
   void FetchData();
 
+  // Adds blur to `widget_` and semiopaque black background to `view_`.
+  // TODO(crbug.com/1354343): investigate if there's a more efficient way to do
+  // this.
+  void ApplyBackdrop() const;
+
   std::unique_ptr<GlanceablesDelegate> delegate_;
   std::unique_ptr<views::Widget> widget_;
   GlanceablesView* view_ = nullptr;
+  base::OneShotTimer timer_;
 
   // Hides windows while glanceables are showing.
   std::unique_ptr<GlanceablesWindowHider> window_hider_;
diff --git a/ash/glanceables/glanceables_unittests.cc b/ash/glanceables/glanceables_unittests.cc
index 02cad48..dda57adc 100644
--- a/ash/glanceables/glanceables_unittests.cc
+++ b/ash/glanceables/glanceables_unittests.cc
@@ -5,6 +5,7 @@
 #include "ash/ambient/ambient_controller.h"
 #include "ash/ambient/model/ambient_weather_model.h"
 #include "ash/app_list/test/app_list_test_helper.h"
+#include "ash/components/settings/scoped_timezone_settings.h"
 #include "ash/constants/ash_features.h"
 #include "ash/glanceables/glanceables_controller.h"
 #include "ash/glanceables/glanceables_restore_view.h"
@@ -16,13 +17,22 @@
 #include "ash/public/cpp/ambient/fake_ambient_backend_controller_impl.h"
 #include "ash/shell.h"
 #include "ash/style/pill_button.h"
+#include "ash/system/model/system_tray_model.h"
+#include "ash/system/time/calendar_unittest_utils.h"
+#include "ash/system/time/calendar_utils.h"
 #include "ash/system/unified/unified_system_tray.h"
 #include "ash/test/ash_test_base.h"
 #include "ash/wm/desks/desks_bar_view.h"
 #include "ash/wm/desks/desks_test_util.h"
 #include "ash/wm/overview/overview_controller.h"
 #include "ash/wm/window_state.h"
+#include "base/check.h"
 #include "base/test/scoped_feature_list.h"
+#include "base/time/time.h"
+#include "base/time/time_override.h"
+#include "google_apis/calendar/calendar_api_response_types.h"
+#include "google_apis/common/api_error_codes.h"
+#include "ui/compositor/layer.h"
 #include "ui/events/test/test_event.h"
 #include "ui/gfx/image/image_unittest_util.h"
 #include "ui/views/controls/image_view.h"
@@ -58,6 +68,29 @@
         std::make_unique<FakeAmbientBackendControllerImpl>());
   }
 
+  void SimulateCalendarEventsFetched() {
+    auto fetched_events = std::make_unique<google_apis::calendar::EventList>();
+    fetched_events->set_time_zone("Greenwich Mean Time");
+    fetched_events->InjectItemForTesting(calendar_test_utils::CreateEvent(
+        "id_0", "Past event, the day before", "9 Jan 2022 8:30 GMT",
+        "9 Jan 2022 9:30 GMT"));
+    fetched_events->InjectItemForTesting(calendar_test_utils::CreateEvent(
+        "id_1", "Future event, the day after", "11 Jan 2022 18:00 GMT",
+        "11 Jan 2022 18:45 GMT"));
+    fetched_events->InjectItemForTesting(calendar_test_utils::CreateEvent(
+        "id_2", "Past event, today", "10 Jan 2022 10:00 GMT",
+        "10 Jan 2022 11:00 GMT"));
+    fetched_events->InjectItemForTesting(calendar_test_utils::CreateEvent(
+        "id_3", "Ongoing event, started in the past", "10 Jan 2022 10:00 GMT",
+        "10 Jan 2022 14:00 GMT"));
+    fetched_events->InjectItemForTesting(calendar_test_utils::CreateEvent(
+        "id_4", "Future event, later today", "10 Jan 2022 21:30 GMT",
+        "10 Jan 2022 22:30 GMT"));
+    Shell::Get()->system_tray_model()->calendar_model()->OnEventsFetched(
+        calendar_utils::GetStartOfMonthUTC(base::Time::Now()),
+        google_apis::ApiErrorCode::HTTP_SUCCESS, fetched_events.get());
+  }
+
   TestGlanceablesDelegate* GetTestDelegate() {
     return static_cast<TestGlanceablesDelegate*>(controller_->delegate_.get());
   }
@@ -104,6 +137,10 @@
   EXPECT_TRUE(view);
   EXPECT_EQ(view, widget->GetContentsView());
 
+  // Backdrop was applied.
+  EXPECT_GT(GetWidget()->GetLayer()->background_blur(), 0);
+  EXPECT_TRUE(view->GetBackground());
+
   controller_->DestroyUi();
 
   // Widget and glanceables view are destroyed.
@@ -145,15 +182,54 @@
 }
 
 TEST_F(GlanceablesTest, UpNextViewRendersCorrectly) {
+  ash::system::ScopedTimezoneSettings timezone_settings(u"GMT");
+  base::subtle::ScopedTimeClockOverrides time_override(
+      []() {
+        base::Time now;
+        EXPECT_TRUE(base::Time::FromString("10 Jan 2022 13:00 GMT", &now));
+        return now;
+      },
+      nullptr, nullptr);
+
   controller_->CreateUi();
+  SimulateCalendarEventsFetched();
 
   // Events list contains rendered event items inside.
   const auto& items = GetUpNextView()->events_list_items_views_for_test();
-  EXPECT_EQ(items.size(), 5u);
-  for (const auto& item : items) {
-    EXPECT_EQ(std::get<0>(item)->GetText(), u"James / Artsiom");
-    EXPECT_EQ(std::get<1>(item)->GetText(), u"2:00 – 2:30pm");
-  }
+  EXPECT_EQ(items.size(), 2u);
+
+  EXPECT_EQ(std::get<0>(items[0])->GetText(),
+            u"Ongoing event, started in the past");
+  EXPECT_EQ(std::get<1>(items[0])->GetText(), u"10:00 AM – 2:00 PM");
+
+  EXPECT_EQ(std::get<0>(items[1])->GetText(), u"Future event, later today");
+  EXPECT_EQ(std::get<1>(items[1])->GetText(), u"9:30 – 10:30 PM");
+}
+
+TEST_F(GlanceablesTest, UpNextViewRendersCorrectlyIn24HrClockFormat) {
+  Shell::Get()->system_tray_model()->SetUse24HourClock(true);
+  ash::system::ScopedTimezoneSettings timezone_settings(u"GMT");
+  base::subtle::ScopedTimeClockOverrides time_override(
+      []() {
+        base::Time now;
+        EXPECT_TRUE(base::Time::FromString("10 Jan 2022 13:00 GMT", &now));
+        return now;
+      },
+      nullptr, nullptr);
+
+  controller_->CreateUi();
+  SimulateCalendarEventsFetched();
+
+  // Events list contains rendered event items inside.
+  const auto& items = GetUpNextView()->events_list_items_views_for_test();
+  EXPECT_EQ(items.size(), 2u);
+
+  EXPECT_EQ(std::get<0>(items[0])->GetText(),
+            u"Ongoing event, started in the past");
+  EXPECT_EQ(std::get<1>(items[0])->GetText(), u"10:00 – 14:00");
+
+  EXPECT_EQ(std::get<0>(items[1])->GetText(), u"Future event, later today");
+  EXPECT_EQ(std::get<1>(items[1])->GetText(), u"21:30 – 22:30");
 }
 
 TEST_F(GlanceablesTest, ClickOnSessionRestore) {
diff --git a/ash/glanceables/glanceables_up_next_view.cc b/ash/glanceables/glanceables_up_next_view.cc
index 9c21ea3..1369fbb 100644
--- a/ash/glanceables/glanceables_up_next_view.cc
+++ b/ash/glanceables/glanceables_up_next_view.cc
@@ -8,6 +8,13 @@
 #include <string>
 #include <tuple>
 
+#include "ash/shell.h"
+#include "ash/system/model/clock_model.h"
+#include "ash/system/model/system_tray_model.h"
+#include "ash/system/time/calendar_utils.h"
+#include "base/i18n/time_formatting.h"
+#include "base/time/time.h"
+#include "google_apis/calendar/calendar_api_response_types.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
 #include "ui/gfx/geometry/insets.h"
@@ -19,9 +26,34 @@
 #include "ui/views/view.h"
 
 namespace ash {
+namespace {
+
+using ::google_apis::calendar::CalendarEvent;
+using ::google_apis::calendar::EventList;
+
+std::u16string GetFormattedEventTimeInterval(const CalendarEvent& event) {
+  const base::Time& event_start_time = event.start_time().date_time();
+  const base::Time& event_end_time = event.end_time().date_time();
+  bool use_12_hour_clock =
+      Shell::Get()->system_tray_model()->clock()->hour_clock_type() ==
+      base::k12HourClock;
+  if (use_12_hour_clock) {
+    return calendar_utils::FormatTwelveHourClockTimeInterval(event_start_time,
+                                                             event_end_time);
+  }
+  return calendar_utils::FormatTwentyFourHourClockTimeInterval(event_start_time,
+                                                               event_end_time);
+}
+
+}  // namespace
 
 // TODO(crbug.com/1353495): file-level todo list:
-// - fetch events for today using the existing calendar api/model;
+// - update existing `CalendarModel` and `CalendarEventFetch` to support 1-day
+//   fetches or consider implementing own simplified model (keep calendar-view
+//   team in the loop);
+// - add "Loading" / "Nothing for today" UI states;
+// - refetch events at 00:00 and decide how to pull new events for current day;
+// - correctly display multi-day events (limit to 00:00 and/or 23:59);
 // - limit events list height and switch to `views::ScrollView`;
 // - remove events from the list on their end times;
 // - move fonts/colors/sizes to a config.
@@ -29,25 +61,52 @@
 GlanceablesUpNextView::GlanceablesUpNextView() {
   SetBorder(views::CreateEmptyBorder(gfx::Insets::VH(15, 0)));
   SetLayoutManager(std::make_unique<views::BoxLayout>());
-  CreateEventsListView();
+  calendar_model_ = Shell::Get()->system_tray_model()->calendar_model();
+  calendar_model_->AddObserver(this);
 }
 
-GlanceablesUpNextView::~GlanceablesUpNextView() = default;
+GlanceablesUpNextView::~GlanceablesUpNextView() {
+  calendar_model_->RemoveObserver(this);
+};
 
-void GlanceablesUpNextView::CreateEventsListItemView() {
+void GlanceablesUpNextView::OnEventsFetched(
+    const CalendarModel::FetchingStatus status,
+    const base::Time start_time,
+    const EventList* fetched_events) {
+  calendar_model_->RemoveObserver(this);
+
+  const base::Time now = base::Time::Now();
+  const base::Time midnight =
+      (now + calendar_utils::GetTimeDifference(now)).UTCMidnight();
+  const SingleDayEventList& all_todays_events =
+      calendar_model_->FindEvents(midnight);
+
+  SingleDayEventList up_next_events;
+  for (const auto& event : all_todays_events) {
+    if (event.start_time().date_time() >= now ||
+        event.end_time().date_time() >= now) {
+      up_next_events.push_back(event);
+    }
+  }
+
+  CreateEventsListView(up_next_events);
+}
+
+void GlanceablesUpNextView::CreateEventsListItemView(
+    const CalendarEvent& event) {
   auto* item = events_list_view_->AddChildView(std::make_unique<views::View>());
   auto* layout = item->SetLayoutManager(std::make_unique<views::BoxLayout>(
       views::BoxLayout::Orientation::kHorizontal, gfx::Insets(), 10));
 
-  auto* event_title_label =
-      item->AddChildView(std::make_unique<views::Label>(u"James / Artsiom"));
+  auto* event_title_label = item->AddChildView(
+      std::make_unique<views::Label>(base::UTF8ToUTF16(event.summary())));
   event_title_label->SetAutoColorReadabilityEnabled(false);
   event_title_label->SetEnabledColor(SK_ColorWHITE);
   event_title_label->SetHorizontalAlignment(
       gfx::HorizontalAlignment::ALIGN_LEFT);
 
-  auto* event_time_label =
-      item->AddChildView(std::make_unique<views::Label>(u"2:00 – 2:30pm"));
+  auto* event_time_label = item->AddChildView(
+      std::make_unique<views::Label>(GetFormattedEventTimeInterval(event)));
   event_time_label->SetAutoColorReadabilityEnabled(false);
   event_time_label->SetEnabledColor(SK_ColorWHITE);
 
@@ -57,7 +116,8 @@
   layout->SetFlexForView(event_time_label, 0, true);
 }
 
-void GlanceablesUpNextView::CreateEventsListView() {
+void GlanceablesUpNextView::CreateEventsListView(
+    const SingleDayEventList& events) {
   events_list_view_ = AddChildView(std::make_unique<views::View>());
   events_list_view_->SetPreferredSize(gfx::Size(300, 150));
   auto* events_list_layout =
@@ -65,8 +125,8 @@
           views::BoxLayout::Orientation::kVertical));
   events_list_layout->set_between_child_spacing(4);
 
-  for (size_t i = 0; i < 5; ++i)
-    CreateEventsListItemView();
+  for (const auto& event : events)
+    CreateEventsListItemView(event);
 }
 
 BEGIN_METADATA(GlanceablesUpNextView, views::View)
diff --git a/ash/glanceables/glanceables_up_next_view.h b/ash/glanceables/glanceables_up_next_view.h
index cac41f5..694ff18a 100644
--- a/ash/glanceables/glanceables_up_next_view.h
+++ b/ash/glanceables/glanceables_up_next_view.h
@@ -9,17 +9,27 @@
 #include <vector>
 
 #include "ash/ash_export.h"
+#include "ash/system/time/calendar_model.h"
+#include "base/time/time.h"
+#include "google_apis/calendar/calendar_api_response_types.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/view.h"
 
+namespace google_apis::calendar {
+class EventList;
+}  // namespace google_apis::calendar
+
 namespace views {
 class Label;
 }  // namespace views
 
 namespace ash {
 
+class CalendarModel;
+
 // "Up next" section with today's calendar events.
-class ASH_EXPORT GlanceablesUpNextView : public views::View {
+class ASH_EXPORT GlanceablesUpNextView : public views::View,
+                                         public CalendarModel::Observer {
  public:
   METADATA_HEADER(GlanceablesUpNextView);
 
@@ -28,15 +38,23 @@
   GlanceablesUpNextView& operator=(const GlanceablesUpNextView&) = delete;
   ~GlanceablesUpNextView() override;
 
+  // CalendarModel::Observer:
+  void OnEventsFetched(
+      const CalendarModel::FetchingStatus status,
+      const base::Time start_time,
+      const google_apis::calendar::EventList* fetched_events) override;
+
   std::vector<std::tuple<views::Label*, views::Label*>>
   events_list_items_views_for_test() {
     return events_list_items_views_;
   }
 
  private:
-  void CreateEventsListItemView();
-  void CreateEventsListView();
+  void CreateEventsListItemView(
+      const google_apis::calendar::CalendarEvent& event);
+  void CreateEventsListView(const SingleDayEventList& events);
 
+  CalendarModel* calendar_model_ = nullptr;
   views::View* events_list_view_ = nullptr;
   std::vector<std::tuple<views::Label*, views::Label*>>
       events_list_items_views_;
diff --git a/ash/ime/ime_controller_impl.h b/ash/ime/ime_controller_impl.h
index d4286ea..82dff62 100644
--- a/ash/ime/ime_controller_impl.h
+++ b/ash/ime/ime_controller_impl.h
@@ -13,7 +13,7 @@
 #include "ash/public/cpp/ime_controller.h"
 #include "ash/public/cpp/ime_controller_client.h"
 #include "ash/public/cpp/ime_info.h"
-#include "ash/system/screen_security/screen_capture_observer.h"
+#include "ash/system/privacy/screen_capture_observer.h"
 #include "base/observer_list.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
diff --git a/ash/public/cpp/holding_space/holding_space_prefs.cc b/ash/public/cpp/holding_space/holding_space_prefs.cc
index 1c9b475..54e6c7d1 100644
--- a/ash/public/cpp/holding_space/holding_space_prefs.cc
+++ b/ash/public/cpp/holding_space/holding_space_prefs.cc
@@ -4,6 +4,7 @@
 
 #include "ash/public/cpp/holding_space/holding_space_prefs.h"
 
+#include "ash/constants/ash_features.h"
 #include "base/json/values_util.h"
 #include "base/time/time.h"
 #include "components/prefs/pref_change_registrar.h"
@@ -40,7 +41,8 @@
 
 void RegisterProfilePrefs(PrefRegistrySimple* registry) {
   // Boolean prefs.
-  registry->RegisterBooleanPref(kPreviewsEnabled, true);
+  registry->RegisterBooleanPref(
+      kPreviewsEnabled, !features::IsHoldingSpacePredictabilityEnabled());
 
   // Time prefs.
   const base::Time unix_epoch = base::Time::UnixEpoch();
diff --git a/ash/session/session_controller_impl.cc b/ash/session/session_controller_impl.cc
index be9fb4c..09c6c160 100644
--- a/ash/session/session_controller_impl.cc
+++ b/ash/session/session_controller_impl.cc
@@ -20,7 +20,7 @@
 #include "ash/session/teleport_warning_dialog.h"
 #include "ash/shell.h"
 #include "ash/system/power/power_event_observer.h"
-#include "ash/system/screen_security/screen_switch_check_controller.h"
+#include "ash/system/privacy/screen_switch_check_controller.h"
 #include "ash/wm/lock_state_controller.h"
 #include "ash/wm/mru_window_tracker.h"
 #include "ash/wm/window_util.h"
diff --git a/ash/shell.cc b/ash/shell.cc
index cfd74cb..0118c42 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -148,9 +148,9 @@
 #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/screen_switch_check_controller.h"
 #include "ash/system/privacy_hub/privacy_hub_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"
 #include "ash/system/status_area_widget.h"
 #include "ash/system/system_notification_controller.h"
diff --git a/ash/strings/ash_strings_af.xtb b/ash/strings/ash_strings_af.xtb
index 97bb6e7..92dcd29d 100644
--- a/ash/strings/ash_strings_af.xtb
+++ b/ash/strings/ash_strings_af.xtb
@@ -1434,6 +1434,7 @@
 <translation id="9211490828691860325">Alle lessenaars</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> oor totdat battery vol gelaai is.</translation>
 <translation id="9215934040295798075">Stel muurpapier</translation>
+<translation id="9219103736887031265">Prente</translation>
 <translation id="921989828232331238">Jou ouer het jou toestel vir die dag gesluit</translation>
 <translation id="9220525904950070496">Verwyder rekening</translation>
 <translation id="923686485342484400">Druk Ctrl Shift Q twee keer om af te meld.</translation>
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index faa7e92..54773724 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">ሁሉም ዴስኮች</translation>
 <translation id="9211681782751733685">ባትሪ ሙሉ በሙሉ ኃይል እስኪሞላ ድረስ <ph name="TIME_REMAINING" /> ይቀራል።</translation>
 <translation id="9215934040295798075">ልጣፍ ያዘጋጁ</translation>
+<translation id="9219103736887031265">ምስሎች</translation>
 <translation id="921989828232331238">የእርስዎ ወላጅ ለቀኑ መሣሪያውን ቆልፈውታል</translation>
 <translation id="9220525904950070496">መለያ ያስወግዱ</translation>
 <translation id="923686485342484400">ዘግተው ለመውጣት Ctrl Shift Qን ሁለቴ ይጫኑ።</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index ae8ab55..1afa6c8b 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -855,6 +855,7 @@
 <translation id="5860033963881614850">غير مفعّل</translation>
 <translation id="5860491529813859533">تفعيل</translation>
 <translation id="5867217927013474703">جارٍ جمع معلومات الشبكة</translation>
+<translation id="5867606971598166637">يراقب مشرف النظام الشاشات المعروضة على جهازك.</translation>
 <translation id="5876666360658629066">إدخال رمز أحد الوالدَين</translation>
 <translation id="5881540930187678962">إعداد "مركز التحكم بالهاتف" لاحقًا</translation>
 <translation id="5887954372087850114">تم تخصيص النافذة <ph name="WINDOW_TITLE" /> لسطح المكتب <ph name="DESK_TITLE" /> وإلغاء تخصيصها من جميع أسطح المكتب الأخرى.</translation>
@@ -1434,6 +1435,7 @@
 <translation id="9211490828691860325">جميع أسطح المكتب</translation>
 <translation id="9211681782751733685">الوقت المتبقي حتى يتم شحن البطارية بالكامل<ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">ضبط الخلفية</translation>
+<translation id="9219103736887031265">الصور</translation>
 <translation id="921989828232331238">قفّل أحد الوالدين جهازك لليوم</translation>
 <translation id="9220525904950070496">إزالة الحساب</translation>
 <translation id="923686485342484400">‏للخروج اضغط على Ctrl Shift Q مرتين.</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb
index 7edb23c..0311fd6 100644
--- a/ash/strings/ash_strings_as.xtb
+++ b/ash/strings/ash_strings_as.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">অফ আছে</translation>
 <translation id="5860491529813859533">অন কৰক</translation>
 <translation id="5867217927013474703">নেটৱৰ্কৰ তথ্য সংগ্ৰহ কৰি থকা হৈছে</translation>
+<translation id="5867606971598166637">আপোনাৰ ছিষ্টেমৰ প্ৰশাসকে আপোনাৰ স্ক্ৰীন নিৰীক্ষণ কৰি আছে</translation>
 <translation id="5876666360658629066">অভিভাৱকীয় ক’ডটো দিয়ক</translation>
 <translation id="5881540930187678962">ফ’ন হাব পাছত ছেট আপ কৰক</translation>
 <translation id="5887954372087850114">ৱিণ্ড’ <ph name="WINDOW_TITLE" /> <ph name="DESK_TITLE" />ক আবণ্টন কৰা হৈছে আৰু অন্য আটাইবোৰ ডেস্কৰ পৰা আবণ্টন আঁতৰোৱা হৈছে</translation>
@@ -1432,6 +1433,7 @@
 <translation id="9211490828691860325">আটাইবোৰ ডেস্ক</translation>
 <translation id="9211681782751733685">বেটাৰী সম্পূৰ্ণ চ্চাৰ্জ হ’বলৈ <ph name="TIME_REMAINING" /> বাকী আছে।</translation>
 <translation id="9215934040295798075">ৱালপেপাৰ ছেট কৰক</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="921989828232331238">আপোনাৰ অভিভাৱকে আপোনাৰ ডিভাইচটো দিনটোৰ বাবে লক কৰিছে</translation>
 <translation id="9220525904950070496">একাউণ্ট আঁতৰাওক</translation>
 <translation id="923686485342484400">ছাইন আউট কৰিবলৈ Control Shift Q দুবাৰ টিপক।</translation>
diff --git a/ash/strings/ash_strings_az.xtb b/ash/strings/ash_strings_az.xtb
index a4a1700..926fc15 100644
--- a/ash/strings/ash_strings_az.xtb
+++ b/ash/strings/ash_strings_az.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Bütün masalar</translation>
 <translation id="9211681782751733685">Batareyanın tam dolmağına <ph name="TIME_REMAINING" /> qalır.</translation>
 <translation id="9215934040295798075">Divar kağızı ayarlayın</translation>
+<translation id="9219103736887031265">Şəkillər</translation>
 <translation id="921989828232331238">Valideyniniz cihazı bugün üçün kilidləyib</translation>
 <translation id="9220525904950070496">Hesabı silin</translation>
 <translation id="923686485342484400">Hesabdan çıxmaq üçün iki dəfə Control Shift Q basın</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb
index 41005c7..6fb7fbf 100644
--- a/ash/strings/ash_strings_be.xtb
+++ b/ash/strings/ash_strings_be.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Усе працоўныя сталы</translation>
 <translation id="9211681782751733685">Засталося часу да поўнай зарадкі акумулятара: <ph name="TIME_REMAINING" /></translation>
 <translation id="9215934040295798075">Задаць шпалеры</translation>
+<translation id="9219103736887031265">Відарысы</translation>
 <translation id="921989828232331238">На сёння бацькі заблакіравалі гэту прыладу</translation>
 <translation id="9220525904950070496">Выдаліць уліковы запіс</translation>
 <translation id="923686485342484400">Каб выйсці з уліковага запісу, двойчы націсніце "Ctrl+Shift+Q".</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index d7e5867..f2d776e 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Всички работни кътове</translation>
 <translation id="9211681782751733685">Оставащо време до пълното зареждане на батерията: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Задаване на тапета</translation>
+<translation id="9219103736887031265">Изображения</translation>
 <translation id="921989828232331238">Родителят ви заключи устройството ви за деня</translation>
 <translation id="9220525904950070496">Премахване на профила</translation>
 <translation id="923686485342484400">Натиснете два пъти „Control+Shift+Q“ за изход.</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 489a628..9eb917f7 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -1254,6 +1254,7 @@
 <translation id="8152264887680882389"><ph name="TEXT" />, নিজে থেকে সম্পূর্ন করা</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> এই সেটিং আপনার অ্যাডমিনিস্ট্রেটর ম্যানেজ করে থাকে।</translation>
 <translation id="8155628902202578800"><ph name="USER_EMAIL_ADDRESS" />-এর জন্য তথ্য সংক্রান্ত ডায়ালগ খুলুন</translation>
+<translation id="8157728322324420120">আপনার জন্য সাজেস্ট করা হয়েছে</translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> ব্যবহার করা হচ্ছে</translation>
 <translation id="8183592608247778598"><ph name="DEVICE_TYPE" />-এ আপনার ফোনের সাম্প্রতিক ফটো, মিডিয়া, বিজ্ঞপ্তি ও অ্যাপ দেখুন</translation>
 <translation id="8192202700944119416">বিজ্ঞপ্তি লুকানো আছে।</translation>
@@ -1433,6 +1434,7 @@
 <translation id="9211490828691860325">সব ডেক্স</translation>
 <translation id="9211681782751733685">ব্যাটারি পুরো চার্জ হতে <ph name="TIME_REMAINING" /> বাকি আছে।</translation>
 <translation id="9215934040295798075">ওয়ালপেপার সেট করুন</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="921989828232331238">আপনার অভিভাবক এই ডিভাইসটি আজকের জন্য লক করে দিয়েছেন</translation>
 <translation id="9220525904950070496">অ্যাকাউন্ট সরান</translation>
 <translation id="923686485342484400">সাইন-আউট করার জন্য দু'বার Control Shift Q টিপুন৷</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb
index ae0da86..5772521 100644
--- a/ash/strings/ash_strings_bs.xtb
+++ b/ash/strings/ash_strings_bs.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Sve radne površine</translation>
 <translation id="9211681782751733685">Baterija će se napuniti za <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Postavi pozadinsku sliku</translation>
+<translation id="9219103736887031265">Slike</translation>
 <translation id="921989828232331238">Roditelj je zaključao uređaj za danas</translation>
 <translation id="9220525904950070496">Ukloni račun</translation>
 <translation id="923686485342484400">Dvaput pritisnite Control Shift Q da se odjavite.</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index be354885..e27763ce 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -1430,6 +1430,7 @@
 <translation id="9211490828691860325">Tots els escriptoris</translation>
 <translation id="9211681782751733685">Temps restant perquè es carregui totalment la bateria: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Estableix el fons de pantalla</translation>
+<translation id="9219103736887031265">Imatges</translation>
 <translation id="921989828232331238">El teu pare o mare han bloquejat el dispositiu per a tot el dia</translation>
 <translation id="9220525904950070496">Suprimir el compte</translation>
 <translation id="923686485342484400">Premeu Control+Maj+Q dues vegades per tancar la sessió.</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 267feced..97d3a4c 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">Vypnuto</translation>
 <translation id="5860491529813859533">Zapnout</translation>
 <translation id="5867217927013474703">Shromažďování informací o síti</translation>
+<translation id="5867606971598166637">Vaše obrazovky sleduje administrátor systému.</translation>
 <translation id="5876666360658629066">Zadejte rodičovský kód</translation>
 <translation id="5881540930187678962">Nastavte Telefonní centrum později</translation>
 <translation id="5887954372087850114">Okno <ph name="WINDOW_TITLE" /> bylo přidruženo k ploše <ph name="DESK_TITLE" /> a bylo odebráno ze všech ostatních ploch</translation>
@@ -1432,6 +1433,7 @@
 <translation id="9211490828691860325">Všechny plochy</translation>
 <translation id="9211681782751733685">Doba zbývající do úplného nabití baterie: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Nastavit tapetu</translation>
+<translation id="9219103736887031265">Obrázky</translation>
 <translation id="921989828232331238">Rodič zařízení na celý den uzamkl</translation>
 <translation id="9220525904950070496">Odebrat účet</translation>
 <translation id="923686485342484400">Odhlásíte se dvojitým stisknutím kombinace kláves Control Shift Q.</translation>
diff --git a/ash/strings/ash_strings_cy.xtb b/ash/strings/ash_strings_cy.xtb
index 75f8659..f88eb6f 100644
--- a/ash/strings/ash_strings_cy.xtb
+++ b/ash/strings/ash_strings_cy.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Pob desg</translation>
 <translation id="9211681782751733685">Mae <ph name="TIME_REMAINING" /> ar ôl nes bod y batri wedi'i wefru'n llawn.</translation>
 <translation id="9215934040295798075">Gosod papur wal</translation>
+<translation id="9219103736887031265">Lluniau</translation>
 <translation id="921989828232331238">Gwnaeth dy riant gloi dy ddyfais am y dydd</translation>
 <translation id="9220525904950070496">Tynnu cyfrif</translation>
 <translation id="923686485342484400">Pwyswch Control Shift Q ddwywaith i allgofnodi.</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index fc200ba..43babee 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Alle skriveborde</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> til batteriet er fuldt opladet.</translation>
 <translation id="9215934040295798075">Vælg baggrund</translation>
+<translation id="9219103736887031265">Billeder</translation>
 <translation id="921989828232331238">Din forælder har låst din enhed resten af dagen</translation>
 <translation id="9220525904950070496">Fjern konto</translation>
 <translation id="923686485342484400">Tryk på Control+Shift+Q to gange for at logge ud.</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index 2b67521..96caf96 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">Aus</translation>
 <translation id="5860491529813859533">Aktivieren</translation>
 <translation id="5867217927013474703">Netzwerkinformationen werden erfasst</translation>
+<translation id="5867606971598166637">Dein Systemadministrator greift auf deine Bildschirme zu</translation>
 <translation id="5876666360658629066">Elterncode eingeben</translation>
 <translation id="5881540930187678962">Phone Hub später einrichten</translation>
 <translation id="5887954372087850114">Das Fenster „<ph name="WINDOW_TITLE" />“ wurde „<ph name="DESK_TITLE" />“ zugewiesen und von allen anderen Desktops entfernt</translation>
@@ -1432,6 +1433,7 @@
 <translation id="9211490828691860325">Alle Desktops</translation>
 <translation id="9211681782751733685">Noch <ph name="TIME_REMAINING" />, bis der Akku vollständig geladen ist.</translation>
 <translation id="9215934040295798075">Hintergrund festlegen</translation>
+<translation id="9219103736887031265">Bilder</translation>
 <translation id="921989828232331238">Deine Eltern haben dein Gerät für heute gesperrt</translation>
 <translation id="9220525904950070496">Konto entfernen</translation>
 <translation id="923686485342484400">Drücke zum Abmelden zweimal Steuerung - Umschalttaste - Q.</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index c4e4e8a..07d87e0 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Όλα τα γραφεία</translation>
 <translation id="9211681782751733685">Απομένουν <ph name="TIME_REMAINING" /> έως την πλήρη φόρτιση της μπαταρίας.</translation>
 <translation id="9215934040295798075">Ορισμός ταπετσαρίας</translation>
+<translation id="9219103736887031265">Εικόνες</translation>
 <translation id="921989828232331238">Ο γονέας σας κλείδωσε τη συσκευή σας για σήμερα</translation>
 <translation id="9220525904950070496">Κατάργηση λογαριασμού</translation>
 <translation id="923686485342484400">Πατήστε Ctrl + Shift + Q δύο φορές για να αποσυνδεθείτε.</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb
index 5f511209..41ddc61 100644
--- a/ash/strings/ash_strings_en-GB.xtb
+++ b/ash/strings/ash_strings_en-GB.xtb
@@ -1254,6 +1254,7 @@
 <translation id="8152264887680882389"><ph name="TEXT" />, autocomplete</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> This setting is managed by your administrator.</translation>
 <translation id="8155628902202578800">Open info dialogue for <ph name="USER_EMAIL_ADDRESS" /></translation>
+<translation id="8157728322324420120">Suggested for you</translation>
 <translation id="8167567890448493835">Using <ph name="LOCALE_NAME" /></translation>
 <translation id="8183592608247778598">View your phone's recent photos, media, notifications and apps on your <ph name="DEVICE_TYPE" /></translation>
 <translation id="8192202700944119416">Notifications are hidden.</translation>
@@ -1433,6 +1434,7 @@
 <translation id="9211490828691860325">All desks</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> remaining until battery is fully charged.</translation>
 <translation id="9215934040295798075">Set wallpaper</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="921989828232331238">Your parent locked your device for the day</translation>
 <translation id="9220525904950070496">Remove account</translation>
 <translation id="923686485342484400">Press Control Shift Q twice to sign out.</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index fb2926d..f3e7801 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -854,6 +854,7 @@
 <translation id="5860033963881614850">Desactivado</translation>
 <translation id="5860491529813859533">Activar</translation>
 <translation id="5867217927013474703">Recopilando información de la red</translation>
+<translation id="5867606971598166637">El administrador del sistema está supervisando las pantallas</translation>
 <translation id="5876666360658629066">Ingresa el código parental</translation>
 <translation id="5881540930187678962">Configura Phone Hub más tarde</translation>
 <translation id="5887954372087850114">Se asignó la ventana <ph name="WINDOW_TITLE" /> al escritorio <ph name="DESK_TITLE" /> y se anuló la asignación al resto de los escritorios</translation>
@@ -1433,6 +1434,7 @@
 <translation id="9211490828691860325">Todos los escritorios</translation>
 <translation id="9211681782751733685">Tiempo restante hasta que se cargue por completo la batería: <ph name="TIME_REMAINING" /></translation>
 <translation id="9215934040295798075">Fondo de pantalla</translation>
+<translation id="9219103736887031265">Imágenes</translation>
 <translation id="921989828232331238">Tus padres bloquearon el dispositivo por el día</translation>
 <translation id="9220525904950070496">Eliminar cuenta</translation>
 <translation id="923686485342484400">Presiona Control Mayús Q dos veces para salir.</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index 488d6698..7f56b45 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -854,6 +854,7 @@
 <translation id="5860033963881614850">Desactivado</translation>
 <translation id="5860491529813859533">Activar</translation>
 <translation id="5867217927013474703">Recogiendo información de red</translation>
+<translation id="5867606971598166637">El administrador del sistema está monitorizando tus pantallas</translation>
 <translation id="5876666360658629066">Introduce el código parental</translation>
 <translation id="5881540930187678962">Configurar Mi teléfono más tarde</translation>
 <translation id="5887954372087850114">Ventana <ph name="WINDOW_TITLE" /> asignada a <ph name="DESK_TITLE" /> y desasignada de todos los demás escritorios</translation>
@@ -1433,6 +1434,7 @@
 <translation id="9211490828691860325">Todos los escritorios</translation>
 <translation id="9211681782751733685">Tiempo restante para que se cargue totalmente la batería: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Fondo de pantalla</translation>
+<translation id="9219103736887031265">Imágenes</translation>
 <translation id="921989828232331238">Tu padre, madre o tutor/a han bloqueado tu dispositivo todo el día</translation>
 <translation id="9220525904950070496">Quitar cuenta</translation>
 <translation id="923686485342484400">Pulsa Control Mayús Q dos veces para cerrar sesión.</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index ab67ffc4..79e9fb59 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -1434,6 +1434,7 @@
 <translation id="9211490828691860325">Kõik töölauad</translation>
 <translation id="9211681782751733685">Aku täitumiseni on aega <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Taustapildi määramine</translation>
+<translation id="9219103736887031265">Pildid</translation>
 <translation id="921989828232331238">Vanem lukustas sinu seadme päevaks</translation>
 <translation id="9220525904950070496">Konto eemaldamine</translation>
 <translation id="923686485342484400">Väljalogimiseks vajutage kaks korda klahvikombinatsiooni Ctrl + tõstuklahv + Q.</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb
index 3c8f5c23..f748096 100644
--- a/ash/strings/ash_strings_eu.xtb
+++ b/ash/strings/ash_strings_eu.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Lan-eremu guztiak</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> bateria guztiz kargatu arte.</translation>
 <translation id="9215934040295798075">Ezarri horma-papera</translation>
+<translation id="9219103736887031265">Irudiak</translation>
 <translation id="921989828232331238">Guraso batek gailua blokeatu dizu gaurkoz</translation>
 <translation id="9220525904950070496">Kendu kontua</translation>
 <translation id="923686485342484400">Saioa amaitzeko, sakatu Kontrol + Maius + Q bi aldiz.</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index 83c5d35..1141c2a 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">همه میزکارها</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> زمان تا شارژ کامل باتری باقی‌مانده است.</translation>
 <translation id="9215934040295798075">تنظیم کاغذدیواری</translation>
+<translation id="9219103736887031265">تصاویر</translation>
 <translation id="921989828232331238">پدر یا مادرتان دستگاهتان را برای تمام روز قفل کرده‌ است</translation>
 <translation id="9220525904950070496">حذف حساب</translation>
 <translation id="923686485342484400">‏برای خروج از سیستم Control Shift Q را دو بار فشار دهید.</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index 20874ad..7d4ef05 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Kaikki työpöydät</translation>
 <translation id="9211681782751733685">Akku on ladattu täyteen <ph name="TIME_REMAINING" /> kuluttua.</translation>
 <translation id="9215934040295798075">Aseta taustakuva</translation>
+<translation id="9219103736887031265">Kuvat</translation>
 <translation id="921989828232331238">Vanhempasi lukitsi laitteen loppupäivän ajaksi</translation>
 <translation id="9220525904950070496">Poista tili</translation>
 <translation id="923686485342484400">Kirjaudu ulos painamalla Control Shift Q kahdesti.</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 7a9c0de4..6b7a424 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Lahat ng desk</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> ang natitira bago ma-charge nang kumpleto ang baterya.</translation>
 <translation id="9215934040295798075">Magtakda ng wallpaper</translation>
+<translation id="9219103736887031265">Mga Larawan</translation>
 <translation id="921989828232331238">Ni-lock ng iyong magulang ang device mo para sa araw na ito</translation>
 <translation id="9220525904950070496">Alisin ang account</translation>
 <translation id="923686485342484400">Pindutin ang Control Shift Q nang dalawang beses upang mag-sign out.</translation>
diff --git a/ash/strings/ash_strings_fr-CA.xtb b/ash/strings/ash_strings_fr-CA.xtb
index 46881c62..3c34f3c 100644
--- a/ash/strings/ash_strings_fr-CA.xtb
+++ b/ash/strings/ash_strings_fr-CA.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Tous les bureaux</translation>
 <translation id="9211681782751733685">Il reste <ph name="TIME_REMAINING" /> avant que la pile soit complètement rechargée.</translation>
 <translation id="9215934040295798075">Définir le fond d'écran</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="921989828232331238">Ton parent a verrouillé ton appareil pour la journée</translation>
 <translation id="9220525904950070496">Supprimer le compte</translation>
 <translation id="923686485342484400">Appuyez deux fois sur Contrôle + Maj + Q pour vous déconnecter.</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index 8923b6c6..61c0a20 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">Désactivé</translation>
 <translation id="5860491529813859533">Activer</translation>
 <translation id="5867217927013474703">Récupération des infos du réseau</translation>
+<translation id="5867606971598166637">Votre administrateur système surveille vos écrans</translation>
 <translation id="5876666360658629066">Saisir le code parental</translation>
 <translation id="5881540930187678962">Configurer Phone Hub plus tard</translation>
 <translation id="5887954372087850114">La fenêtre <ph name="WINDOW_TITLE" /> est associée à <ph name="DESK_TITLE" /> et dissociée de tous les autres bureaux</translation>
@@ -1432,6 +1433,7 @@
 <translation id="9211490828691860325">Tous les bureaux</translation>
 <translation id="9211681782751733685">Temps restant avant que la batterie soit entièrement rechargée : <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Définir le fond d'écran</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="921989828232331238">Ton parent a verrouillé ton appareil pour la journée</translation>
 <translation id="9220525904950070496">Supprimer le compte</translation>
 <translation id="923686485342484400">Appuyez deux fois sur Contrôle + Maj + Q pour vous déconnecter.</translation>
diff --git a/ash/strings/ash_strings_gl.xtb b/ash/strings/ash_strings_gl.xtb
index 5e361372..0983134 100644
--- a/ash/strings/ash_strings_gl.xtb
+++ b/ash/strings/ash_strings_gl.xtb
@@ -854,6 +854,7 @@
 <translation id="5860033963881614850">Non</translation>
 <translation id="5860491529813859533">Activar</translation>
 <translation id="5867217927013474703">Recompilando información da rede</translation>
+<translation id="5867606971598166637">O administrador do sistema está supervisando as túas pantallas</translation>
 <translation id="5876666360658629066">Escribe o código parental</translation>
 <translation id="5881540930187678962">Configurar O meu teléfono máis tarde</translation>
 <translation id="5887954372087850114">A ventá <ph name="WINDOW_TITLE" /> está asignada ao escritorio <ph name="DESK_TITLE" /> e a ningún outro máis</translation>
@@ -1433,6 +1434,7 @@
 <translation id="9211490828691860325">Todos os ordenadores</translation>
 <translation id="9211681782751733685">Tempo restante para que se cargue a batería por completo: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Definir fondo de pantalla</translation>
+<translation id="9219103736887031265">Imaxes</translation>
 <translation id="921989828232331238">O teu pai ou nai bloqueou o dispositivo para todo o día</translation>
 <translation id="9220525904950070496">Quitar conta</translation>
 <translation id="923686485342484400">Preme Control, maiúsculas e Q dúas veces para pechar sesión.</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index 8a2a0e2..899e1129 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">તમામ ડેસ્ક</translation>
 <translation id="9211681782751733685">બૅટરી સંપૂર્ણપણે ચાર્જ થવામાં <ph name="TIME_REMAINING" /> બાકી છે.</translation>
 <translation id="9215934040295798075">વૉલપેપર સેટ કરો</translation>
+<translation id="9219103736887031265">છબીઓ</translation>
 <translation id="921989828232331238">તમારા માતાપિતાએ તમારા ડિવાઇસને આજના માટે લૉક કર્યું છે</translation>
 <translation id="9220525904950070496">એકાઉન્ટ દૂર કરો</translation>
 <translation id="923686485342484400">સાઇન આઉટ કરવા માટે બે વાર Control Shift Q દબાવો.</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index 58449df..e8efae2 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">बंद</translation>
 <translation id="5860491529813859533">चालू करें</translation>
 <translation id="5867217927013474703">नेटवर्क की जानकारी इकट्ठा की जा रही है</translation>
+<translation id="5867606971598166637">आपका सिस्टम एडमिन आपकी स्क्रीन पर नज़र रख रहा है</translation>
 <translation id="5876666360658629066">अभिभावक वाला कोड डालें</translation>
 <translation id="5881540930187678962">फ़ोन हब को बाद में सेट अप करें</translation>
 <translation id="5887954372087850114"><ph name="WINDOW_TITLE" /> विंडो, <ph name="DESK_TITLE" /> को असाइन किया गया. साथ ही, इसे अन्य सभी डेस्क से हटाया गया</translation>
@@ -1432,6 +1433,7 @@
 <translation id="9211490828691860325">सभी डेस्क</translation>
 <translation id="9211681782751733685">बैटरी के पूरी तरह से चार्ज होने में<ph name="TIME_REMAINING" /> का समय बाकी है.</translation>
 <translation id="9215934040295798075">वॉलपेपर सेट करें</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="921989828232331238">आपके अभिभावक ने आज के लिए यह डिवाइस लॉक कर दिया है</translation>
 <translation id="9220525904950070496">खाता हटाएं</translation>
 <translation id="923686485342484400">साइन आउट करने के लिए दो बार Control Shift Q दबाएं.</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index 6a3c08f..db36187 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Sve radne površine</translation>
 <translation id="9211681782751733685">Baterija će se napuniti za <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Postavi pozadinu</translation>
+<translation id="9219103736887031265">Slike</translation>
 <translation id="921989828232331238">Tvoj je roditelj zaključao ovaj uređaj za danas</translation>
 <translation id="9220525904950070496">Uklanjanje računa</translation>
 <translation id="923686485342484400">Pritisnite Ctrl, Shift i Q dvaput da biste se odjavili.</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index 20c5faf0..292c97c 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -854,6 +854,7 @@
 <translation id="5860033963881614850">Kikapcsolva</translation>
 <translation id="5860491529813859533">Bekapcsolás</translation>
 <translation id="5867217927013474703">A hálózati információk összegyűjtése folyamatban van</translation>
+<translation id="5867606971598166637">Rendszergazdája felügyeli a képernyőit</translation>
 <translation id="5876666360658629066">Adja meg a szülői kódot</translation>
 <translation id="5881540930187678962">A Telefonközpont későbbi beállítása</translation>
 <translation id="5887954372087850114">A(z) <ph name="WINDOW_TITLE" /> ablak hozzárendelve a(z) <ph name="DESK_TITLE" /> asztalhoz; minden más asztalhoz való hozzárendelése megszüntetve</translation>
@@ -1433,6 +1434,7 @@
 <translation id="9211490828691860325">Az összes asztal</translation>
 <translation id="9211681782751733685">Akkumulátor teljes feltöltéséig hátralévő idő: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Háttérkép beállítása</translation>
+<translation id="9219103736887031265">Képek</translation>
 <translation id="921989828232331238">A szülőd zárolta az eszközt mára</translation>
 <translation id="9220525904950070496">Fiók eltávolítása</translation>
 <translation id="923686485342484400">Nyomja meg a Ctrl Shift Q billentyűkombinációt kétszer a kijelentkezéshez.</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb
index 52edbdf..f185ff7 100644
--- a/ash/strings/ash_strings_hy.xtb
+++ b/ash/strings/ash_strings_hy.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">Անջատ.</translation>
 <translation id="5860491529813859533">Միացնել</translation>
 <translation id="5867217927013474703">Ցանցի մասին տեղեկությունների հավաքում</translation>
+<translation id="5867606971598166637">Համակարգի ադմինիստրատորը հետևում է ձեր էկրաններին</translation>
 <translation id="5876666360658629066">Մուտքագրեք ծնողի մուտքի կոդը</translation>
 <translation id="5881540930187678962">Կարգավորեք Հեռախոսի կառավարման կենտրոնն ավելի ուշ</translation>
 <translation id="5887954372087850114">«<ph name="WINDOW_TITLE" />» պատուհանը նշանակվել է «<ph name="DESK_TITLE" />» աշխատասեղանին։ Նշանակումը մյուս աշխատասեղանների համար չեղարկվել է։</translation>
@@ -1431,6 +1432,7 @@
 <translation id="9211490828691860325">Բոլոր աշխատասեղանները</translation>
 <translation id="9211681782751733685">Մարտկոցի լրիվ լիցքավորման համար մնացել է <ph name="TIME_REMAINING" />։</translation>
 <translation id="9215934040295798075">Ընտրել պաստառ</translation>
+<translation id="9219103736887031265">Պատկերներ</translation>
 <translation id="921989828232331238">Ձեր ծնողը կողպել է սարքը մեկ օրով</translation>
 <translation id="9220525904950070496">Հեռացնել հաշիվը</translation>
 <translation id="923686485342484400">Դուրս գրվելու համար երկու անգամ սեղմեք Control Shift Q:</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index 6e268cd..b1887dfc 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Semua desktop</translation>
 <translation id="9211681782751733685">Kurang <ph name="TIME_REMAINING" /> lagi sampai baterai terisi penuh.</translation>
 <translation id="9215934040295798075">Setel wallpaper</translation>
+<translation id="9219103736887031265">Gambar</translation>
 <translation id="921989828232331238">Orang tuamu mengunci perangkat untuk hari ini</translation>
 <translation id="9220525904950070496">Hapus akun</translation>
 <translation id="923686485342484400">Tekan Control Shift Q dua kali untuk keluar.</translation>
diff --git a/ash/strings/ash_strings_is.xtb b/ash/strings/ash_strings_is.xtb
index d7c4d0c..49ce536 100644
--- a/ash/strings/ash_strings_is.xtb
+++ b/ash/strings/ash_strings_is.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Öll skrifborð</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> eftir þar til rafhlaðan er fullhlaðin.</translation>
 <translation id="9215934040295798075">Velja veggfóður</translation>
+<translation id="9219103736887031265">Myndir</translation>
 <translation id="921989828232331238">Foreldri þitt læsti tækinu þínu fyrir daginn</translation>
 <translation id="9220525904950070496">Fjarlægja reikning</translation>
 <translation id="923686485342484400">Ýttu tvisvar á Control, Shift og Q til að skrá þig út.</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index 3bc8d15..0e01d05 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Tutte le scrivanie</translation>
 <translation id="9211681782751733685">Tempo rimanente al caricamento completo della batteria: <ph name="TIME_REMAINING" /></translation>
 <translation id="9215934040295798075">Imposta sfondo</translation>
+<translation id="9219103736887031265">Immagini</translation>
 <translation id="921989828232331238">Uno dei tuoi genitori ha bloccato il tuo dispositivo per tutto il giorno</translation>
 <translation id="9220525904950070496">Rimuovi account</translation>
 <translation id="923686485342484400">Premi due volte Control Maiusc Q per uscire.</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb
index 4508d0d..8d3a106 100644
--- a/ash/strings/ash_strings_iw.xtb
+++ b/ash/strings/ash_strings_iw.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">כבוי</translation>
 <translation id="5860491529813859533">הפעלה</translation>
 <translation id="5867217927013474703">מתבצע איסוף של פרטי הרשת</translation>
+<translation id="5867606971598166637">האדמין עוקב אחר המסכים שלך</translation>
 <translation id="5876666360658629066">יש להזין קוד גישה להורים</translation>
 <translation id="5881540930187678962">‏להגדרת Phone Hub במועד מאוחר יותר</translation>
 <translation id="5887954372087850114">החלון <ph name="WINDOW_TITLE" /> מוקצה לטובת <ph name="DESK_TITLE" /> וההקצאה שלו לכל שאר שולחנות העבודה הווירטואליים בוטלה.</translation>
@@ -1436,6 +1437,7 @@
 <translation id="9211490828691860325">כל שולחנות העבודה הווירטואליים</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> עד לטעינה מלאה של הסוללה.</translation>
 <translation id="9215934040295798075">הגדרת טפט</translation>
+<translation id="9219103736887031265">תמונות</translation>
 <translation id="921989828232331238">הורה נעל את המכשיר שלך להיום</translation>
 <translation id="9220525904950070496">הסרת חשבון</translation>
 <translation id="923686485342484400">‏יש להקיש פעמיים על Control Shift Q כדי לצאת.</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index bdbf7311..d8bab4d 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">すべてのデスク</translation>
 <translation id="9211681782751733685">充電完了まであと <ph name="TIME_REMAINING" />です。</translation>
 <translation id="9215934040295798075">壁紙を設定</translation>
+<translation id="9219103736887031265">画像</translation>
 <translation id="921989828232331238">保護者の方がこのデバイスを終日ロックしています</translation>
 <translation id="9220525904950070496">アカウントを削除</translation>
 <translation id="923686485342484400">ログアウトするには、Ctrl Shift Q を 2 回押します。</translation>
diff --git a/ash/strings/ash_strings_ka.xtb b/ash/strings/ash_strings_ka.xtb
index 23da0166..915266f 100644
--- a/ash/strings/ash_strings_ka.xtb
+++ b/ash/strings/ash_strings_ka.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">ყველა სამუშაო მაგიდა</translation>
 <translation id="9211681782751733685">ბატარეის სრულ დატენამდე დარჩენილია <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">ფონის დაყენება</translation>
+<translation id="9219103736887031265">გამოსახულებები</translation>
 <translation id="921989828232331238">თქვენმა მშობელმა ჩაკეტა მოწყობილობა ერთი დღით</translation>
 <translation id="9220525904950070496">ანგარიშის წაშლა</translation>
 <translation id="923686485342484400">დააჭირეთ Control Shift Q ორჯერ, რათა გამოხვიდეთ.</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb
index c3440b5..3aa33cc 100644
--- a/ash/strings/ash_strings_kk.xtb
+++ b/ash/strings/ash_strings_kk.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">Өшірулі</translation>
 <translation id="5860491529813859533">Қосу</translation>
 <translation id="5867217927013474703">Желі туралы ақпарат жиналуда</translation>
+<translation id="5867606971598166637">Әкімшіңіз экрандарды бақылап отыр.</translation>
 <translation id="5876666360658629066">Ата-ана кодын енгізіңіз</translation>
 <translation id="5881540930187678962">Phone Hub кейін орнату</translation>
 <translation id="5887954372087850114"><ph name="WINDOW_TITLE" /> терезесі <ph name="DESK_TITLE" /> жұмыс үстеліне тағайындалып, басқаларының бәрінен алынды.</translation>
@@ -1432,6 +1433,7 @@
 <translation id="9211490828691860325">Барлық жұмыс үстелдері</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> өткен соң, батарея толық зарядталады.</translation>
 <translation id="9215934040295798075">Тұсқағазды орнату</translation>
+<translation id="9219103736887031265">Кескіндер</translation>
 <translation id="921989828232331238">Ата-анаңыз құрылғыны бір күнге құлыптап қойды</translation>
 <translation id="9220525904950070496">Аккаунтты жою</translation>
 <translation id="923686485342484400">Шығу үшін Control + Shift + Q тіркесімін екі рет басыңыз.</translation>
diff --git a/ash/strings/ash_strings_km.xtb b/ash/strings/ash_strings_km.xtb
index 8d853f0..d1031a48 100644
--- a/ash/strings/ash_strings_km.xtb
+++ b/ash/strings/ash_strings_km.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">តុនិម្មិត​ទាំងអស់</translation>
 <translation id="9211681782751733685">នៅសល់ <ph name="TIME_REMAINING" /> ទៀត ទើប​សាកថ្មពេញ។</translation>
 <translation id="9215934040295798075">កំណត់ផ្ទាំងរូបភាព</translation>
+<translation id="9219103736887031265">រូបភាព</translation>
 <translation id="921989828232331238">មាតា​បិតា​របស់អ្នក​បាន​ចាក់​សោ​ឧបករណ៍​របស់អ្នក​ពេញ​មួយ​ថ្ងៃ</translation>
 <translation id="9220525904950070496">ដកគណនីចេញ</translation>
 <translation id="923686485342484400">ចុច Control Shift Q ពីរដងដើម្បីចាកចេញ។</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index 2436cb11..5e9d582 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -1255,6 +1255,7 @@
 <translation id="8152264887680882389"><ph name="TEXT" />, ಸ್ವಯಂಪೂರ್ಣಗೊಳಿಸುವಿಕೆ</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿರ್ವಹಿಸುತ್ತಾರೆ.</translation>
 <translation id="8155628902202578800"><ph name="USER_EMAIL_ADDRESS" /> ಗೆ ಸಂಬಂಧಿಸಿದ ಮಾಹಿತಿ ಡೈಲಾಗ್ ಅನ್ನು ತೆರೆಯಿರಿ</translation>
+<translation id="8157728322324420120">ನಿಮಗಾಗಿ ಸೂಚಿಸಲಾಗಿರುವುದು</translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> ಬಳಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="8183592608247778598">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನಲ್ಲಿ ನಿಮ್ಮ ಫೋನ್‌ನ ಇತ್ತೀಚಿನ ಫೋಟೋಗಳು, ಮೀಡಿಯಾ, ಅಧಿಸೂಚನೆಗಳು ಮತ್ತು ಆ್ಯಪ್‌ಗಳಲ್ಲಿ ವೀಕ್ಷಿಸಿ</translation>
 <translation id="8192202700944119416">ಅಧಿಸೂಚನೆಗಳು ಮರೆಯಾಗಿವೆ.</translation>
@@ -1434,6 +1435,7 @@
 <translation id="9211490828691860325">ಎಲ್ಲಾ ಡೆಸ್ಕ್‌ಗಳು</translation>
 <translation id="9211681782751733685">ಬ್ಯಾಟರಿ ಸಂಪೂರ್ಣವಾಗಿ ಚಾರ್ಜ್ ಆಗಲು <ph name="TIME_REMAINING" /> ಉಳಿದಿದೆ.</translation>
 <translation id="9215934040295798075">ವಾಲ್‌ಪೇಪರ್‌ ಹೊಂದಿಸಿ</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="921989828232331238">ಈ ದಿನ ನಿಮ್ಮ ಪೋಷಕರು ನಿಮ್ಮ ಸಾಧನವನ್ನು ಲಾಕ್ ಮಾಡಿದ್ದಾರೆ</translation>
 <translation id="9220525904950070496">ಖಾತೆಯನ್ನು ತೆಗೆದುಹಾಕಿ</translation>
 <translation id="923686485342484400">ಸೈನ್ ಔಟ್ ಮಾಡಲು Control Shift Q ಅನ್ನು ಎರಡುಬಾರಿ ಒತ್ತಿರಿ.</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index 66ad7a38..6eceb45 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">모든 데스크</translation>
 <translation id="9211681782751733685">배터리 충전이 완료될 때까지 남은 시간은 <ph name="TIME_REMAINING" />입니다.</translation>
 <translation id="9215934040295798075">배경화면 설정</translation>
+<translation id="9219103736887031265">이미지</translation>
 <translation id="921989828232331238">부모님이 오늘 하루 동안 기기를 잠갔습니다.</translation>
 <translation id="9220525904950070496">계정 삭제</translation>
 <translation id="923686485342484400">로그아웃하려면 Ctrl+Shift+Q를 두 번 누릅니다.</translation>
diff --git a/ash/strings/ash_strings_ky.xtb b/ash/strings/ash_strings_ky.xtb
index a8fa3ef4..3cee5238 100644
--- a/ash/strings/ash_strings_ky.xtb
+++ b/ash/strings/ash_strings_ky.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Бардык иш такталар</translation>
 <translation id="9211681782751733685">Батарея <ph name="TIME_REMAINING" /> кийин толот.</translation>
 <translation id="9215934040295798075">Тушкагаз коюу</translation>
+<translation id="9219103736887031265">Сүрөттөр</translation>
 <translation id="921989828232331238">Ата-энеңиз түзмөгүңүздү бир күнгө кулпулап койду</translation>
 <translation id="9220525904950070496">Аккаунтту өчүрүү</translation>
 <translation id="923686485342484400">Чыгуу үчүн эки ирет Control Shift Q басыңыз.</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb
index 10fe420..b3bee94 100644
--- a/ash/strings/ash_strings_lo.xtb
+++ b/ash/strings/ash_strings_lo.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">ປິດ</translation>
 <translation id="5860491529813859533">ເປີດ</translation>
 <translation id="5867217927013474703">ກຳລັງຮວບຮວມຂໍ້ມູນເຄືອຂ່າຍ</translation>
+<translation id="5867606971598166637">ລະບົບຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານກຳລັງຕິດຕາມໜ້າຈໍຂອງທ່ານຢູ່</translation>
 <translation id="5876666360658629066">ປ້ອນລະຫັດພໍ່ແມ່</translation>
 <translation id="5881540930187678962">ຕັ້ງຄ່າ Phone Hub ໃນພາຍຫຼັງ</translation>
 <translation id="5887954372087850114">ໜ້າຈໍ <ph name="WINDOW_TITLE" /> ຖືກມອບໝາຍໃຫ້ <ph name="DESK_TITLE" /> ແລະ ຍົກເລີກການມອບໝາຍຈາກໂຕະອື່ນທັງໝົດແລ້ວ</translation>
@@ -1432,6 +1433,7 @@
 <translation id="9211490828691860325">ໂຕະທັງໝົດ</translation>
 <translation id="9211681782751733685">ຍັງເຫຼືອ <ph name="TIME_REMAINING" /> ຈົນກວ່າແບັດເຕີຣີຈະສາກເຕັມ.</translation>
 <translation id="9215934040295798075">ຕັ້ງພາບພື້ນຫຼັງ</translation>
+<translation id="9219103736887031265">ຮູບ</translation>
 <translation id="921989828232331238">ພໍ່ແມ່ຂອງທ່ານໄດ້ລັອກອຸປະກອນຂອງທ່ານໄວ້ແລ້ວສຳລັບມື້ນີ້</translation>
 <translation id="9220525904950070496">ລົບບັນ​ຊີອອກ</translation>
 <translation id="923686485342484400">ກົດ Control Shift Q ສອງຄັ້ງເພື່ອອອກຈາກລະບົບ.</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index 0ab28d8..dbb40690 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Visi darbalaukiai</translation>
 <translation id="9211681782751733685">Iki akumuliatoriaus įkrovimo liko <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Nustatyti ekrano foną</translation>
+<translation id="9219103736887031265">Vaizdai</translation>
 <translation id="921989828232331238">Vienas iš tėvų užrakino įrenginį dienai</translation>
 <translation id="9220525904950070496">Pašalinti paskyrą</translation>
 <translation id="923686485342484400">Jei norite atsijungti, du kartus paspauskite „Control“ + „Shift“ + Q.</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index a1adcc3..79e5ac8 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Visas darbvietas</translation>
 <translation id="9211681782751733685">Līdz pilnīgai akumulatora uzlādei atlikušais laiks: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Iestatīt fona tapeti</translation>
+<translation id="9219103736887031265">Attēli</translation>
 <translation id="921989828232331238">Jūsu vecāki bloķēja jūsu ierīci šai dienai</translation>
 <translation id="9220525904950070496">Konta noņemšana</translation>
 <translation id="923686485342484400">Lai izrakstītos, divas reizes nospiediet taustiņu kombināciju Ctrl+Shift+Q.</translation>
diff --git a/ash/strings/ash_strings_mk.xtb b/ash/strings/ash_strings_mk.xtb
index de8f522..f7feaa2 100644
--- a/ash/strings/ash_strings_mk.xtb
+++ b/ash/strings/ash_strings_mk.xtb
@@ -854,6 +854,7 @@
 <translation id="5860033963881614850">Исклучено</translation>
 <translation id="5860491529813859533">Вклучи</translation>
 <translation id="5867217927013474703">Се прибираат податоци за мрежата</translation>
+<translation id="5867606971598166637">Администраторот на системот ги надгледува вашите екрани</translation>
 <translation id="5876666360658629066">Внесете го кодот на родител</translation>
 <translation id="5881540930187678962">Поставете ја Phone Hub подоцна</translation>
 <translation id="5887954372087850114">Прозорецот <ph name="WINDOW_TITLE" /> е доделен на <ph name="DESK_TITLE" /> и отстранет од сите други работни површини</translation>
@@ -1254,6 +1255,7 @@
 <translation id="8152264887680882389"><ph name="TEXT" />, автоматско довршување</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Администраторот управува со поставкава.</translation>
 <translation id="8155628902202578800">Отвори го дијалогот со податоци за <ph name="USER_EMAIL_ADDRESS" /></translation>
+<translation id="8157728322324420120">Препорачано за вас</translation>
 <translation id="8167567890448493835">Се користи <ph name="LOCALE_NAME" /></translation>
 <translation id="8183592608247778598">Прегледувајте ги неодамнешните фотографии, аудиовизуелни содржини, известувања и апликации од телефонот на вашиот <ph name="DEVICE_TYPE" />.</translation>
 <translation id="8192202700944119416">Известувањата се скриени.</translation>
@@ -1433,6 +1435,7 @@
 <translation id="9211490828691860325">Сите работни површини</translation>
 <translation id="9211681782751733685">Уште <ph name="TIME_REMAINING" /> до целосно полнење на батеријата.</translation>
 <translation id="9215934040295798075">Постави тапет</translation>
+<translation id="9219103736887031265">Слики</translation>
 <translation id="921989828232331238">Вашиот родител го заклучи уредот за денес</translation>
 <translation id="9220525904950070496">Отстрани сметка</translation>
 <translation id="923686485342484400">Притиснете Control Shift Q двапати за да се одјавите.</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index 6fefdde..71efe05a 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">എല്ലാ ഡെസ്കുകളും</translation>
 <translation id="9211681782751733685">ബാറ്ററി പൂർണ്ണമായി ചാർജ് ആകാൻ <ph name="TIME_REMAINING" /> ശേഷിക്കുന്നു.</translation>
 <translation id="9215934040295798075">വാൾപേപ്പർ സജ്ജമാക്കുക</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="921989828232331238">നിങ്ങളുടെ രക്ഷിതാവ് ഇന്നത്തേക്ക് ഉപകരണം ലോക്ക് ചെയ്‌തു</translation>
 <translation id="9220525904950070496">അക്കൗണ്ട് നീക്കംചെയ്യൽ</translation>
 <translation id="923686485342484400">സൈൻ ഔട്ട് ചെയ്യുന്നതിന് രണ്ടു‌തവണ Control Shift Q അമർത്തുക.</translation>
diff --git a/ash/strings/ash_strings_mn.xtb b/ash/strings/ash_strings_mn.xtb
index 95f1a35a..83eebd48 100644
--- a/ash/strings/ash_strings_mn.xtb
+++ b/ash/strings/ash_strings_mn.xtb
@@ -1435,6 +1435,7 @@
 <translation id="9211490828691860325">Бүх дэлгэц</translation>
 <translation id="9211681782751733685">Батарейг бүрэн цэнэглэхэд <ph name="TIME_REMAINING" /> үлдсэн байна.</translation>
 <translation id="9215934040295798075">Дэлгэцийн зураг тохируулах</translation>
+<translation id="9219103736887031265">Зураг</translation>
 <translation id="921989828232331238">Таны эцэг эх таны төхөөрөмжийг өдрийн турш түгжсэн байна</translation>
 <translation id="9220525904950070496">Бүртгэлийг хасах</translation>
 <translation id="923686485342484400">Гарахын тулд Control Shift Q дээр хоёр удаа дарна уу.</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index 4b54b5b..69ba9ef 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -1254,6 +1254,7 @@
 <translation id="8152264887680882389"><ph name="TEXT" />, ऑटोकंप्लीट</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> हे सेटिंग तुमच्या अ‍ॅडमिनिस्ट्रेटरद्वारे व्यवस्थापित केले जाते.</translation>
 <translation id="8155628902202578800"><ph name="USER_EMAIL_ADDRESS" /> साठी माहिती डायलॉग उघडा</translation>
+<translation id="8157728322324420120">तुमच्यासाठी सुचवलेले</translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> वापरत आहे</translation>
 <translation id="8183592608247778598">तुमच्या <ph name="DEVICE_TYPE" /> वर, तुमच्या फोनमधील अलीकडील फोटो, मीडिया, सूचना आणि ॲप्स पहा</translation>
 <translation id="8192202700944119416">सूचना लपवलेल्या आहेत.</translation>
@@ -1434,6 +1435,7 @@
 <translation id="9211490828691860325">सर्व डेस्क</translation>
 <translation id="9211681782751733685">बॅटरी पूर्णपणे चार्ज होण्यासाठी <ph name="TIME_REMAINING" /> तास बाकी.</translation>
 <translation id="9215934040295798075">वॉलपेपर सेट करा</translation>
+<translation id="9219103736887031265">इमेज</translation>
 <translation id="921989828232331238">तुमच्या पालकाने आज दिवसभरासाठी तुमचे डिव्हाइस लॉक केले</translation>
 <translation id="9220525904950070496">खाते काढून टाका</translation>
 <translation id="923686485342484400">साइन आउट करण्यासाठी Control Shift Q दोनदा दाबा.</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index 9aed108..477b6b6 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -1434,6 +1434,7 @@
 <translation id="9211490828691860325">Semua meja</translation>
 <translation id="9211681782751733685">Tinggal <ph name="TIME_REMAINING" /> sehingga bateri dicas sepenuhnya.</translation>
 <translation id="9215934040295798075">Tetapkan kertas dinding</translation>
+<translation id="9219103736887031265">Imej</translation>
 <translation id="921989828232331238">Ibu/bapa anda mengunci peranti untuk hari ini</translation>
 <translation id="9220525904950070496">Alih keluar akaun</translation>
 <translation id="923686485342484400">Tekan Tekan Shift Q dua kali untuk keluar.</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index d4f6671b..9fb1dda5 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">မျက်နှာပြင်နေရာအားလုံး</translation>
 <translation id="9211681782751733685">ဘက်ထရီ အားအပြည့်သွင်းရန် <ph name="TIME_REMAINING" /> လိုသေးသည်။</translation>
 <translation id="9215934040295798075">နောက်ခံပုံ သတ်မှတ်ပါ</translation>
+<translation id="9219103736887031265">ပုံများ</translation>
 <translation id="921989828232331238">သင်၏စက်ကို သင့်မိဘက ဤနေ့အဖို့ လော့ခ်ချထားပါပြီ</translation>
 <translation id="9220525904950070496">အကောင့်ကို ဖယ်ရှားရန်</translation>
 <translation id="923686485342484400">ထွက်ခွာရန် Control Shift Q နှစ်ကြိမ် နှိပ်ပါ။</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb
index 0105593..da27273 100644
--- a/ash/strings/ash_strings_ne.xtb
+++ b/ash/strings/ash_strings_ne.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">सबै डेस्कहरू</translation>
 <translation id="9211681782751733685">ब्याट्री पूर्ण रूपमा चार्ज हुन <ph name="TIME_REMAINING" /> बाँकी छ।</translation>
 <translation id="9215934040295798075">वालपेपर सेट गर्नुहोस्</translation>
+<translation id="9219103736887031265">फोटो</translation>
 <translation id="921989828232331238">तपाईंका अभिभावकले आजका लागि तपाईंको यन्त्र लक गर्नुभयो</translation>
 <translation id="9220525904950070496">खाता हटाउनुहोस्</translation>
 <translation id="923686485342484400">साइन आउट गर्न दुई पटक Control Q थिच्नुहोस्।</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index db720ed..c90e5c0 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">Uit</translation>
 <translation id="5860491529813859533">Aanzetten</translation>
 <translation id="5867217927013474703">Netwerkinformatie ophalen</translation>
+<translation id="5867606971598166637">Je systeembeheerder houdt je schermen in de gaten</translation>
 <translation id="5876666360658629066">Voer de oudercode in</translation>
 <translation id="5881540930187678962">Telefoonhub later instellen</translation>
 <translation id="5887954372087850114">Venster <ph name="WINDOW_TITLE" /> is toegewezen aan <ph name="DESK_TITLE" /> en is niet meer toegewezen aan andere bureaus</translation>
@@ -1429,6 +1430,7 @@
 <translation id="9211490828691860325">Alle bureaus</translation>
 <translation id="9211681782751733685">Nog <ph name="TIME_REMAINING" /> totdat de batterij volledig is opgeladen.</translation>
 <translation id="9215934040295798075">Achtergrond instellen</translation>
+<translation id="9219103736887031265">Afbeeldingen</translation>
 <translation id="921989828232331238">Je ouder heeft je apparaat de hele dag vergrendeld</translation>
 <translation id="9220525904950070496">Account verwijderen</translation>
 <translation id="923686485342484400">Druk twee keer op Control+Shift+Q om uit te loggen.</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index d792490..4576e30c 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Alle skrivebord</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> gjenstår til batteriet er fulladet.</translation>
 <translation id="9215934040295798075">Velg bakgrunn</translation>
+<translation id="9219103736887031265">Bilder</translation>
 <translation id="921989828232331238">Forelderen din har låst enheten din for dagen</translation>
 <translation id="9220525904950070496">Fjern konto</translation>
 <translation id="923686485342484400">Trykk på Control+Shift+Q to ganger for å logge av.</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb
index b603094..7698771 100644
--- a/ash/strings/ash_strings_or.xtb
+++ b/ash/strings/ash_strings_or.xtb
@@ -1432,6 +1432,7 @@
 <translation id="9211490828691860325">ସମସ୍ତ ଡେସ୍କ</translation>
 <translation id="9211681782751733685">ବ୍ୟାଟେରୀ ସମ୍ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବା ପର୍ଯ୍ୟନ୍ତ ବାକିଥିବା ସମୟ, <ph name="TIME_REMAINING" />।</translation>
 <translation id="9215934040295798075">ୱାଲ୍‌‌ପେପର୍‌ ସେଟ୍ କରନ୍ତୁ</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="921989828232331238">ଆପଣଙ୍କ ମାତା-ପିତା ଆଜି ପାଇଁ ଆପଣଙ୍କର ଡିଭାଇସ୍‌କୁ ଲକ୍ କରିଦେଇଛନ୍ତି</translation>
 <translation id="9220525904950070496">ଆକାଉଣ୍ଟ କାଢ଼ିଦିଅନ୍ତୁ</translation>
 <translation id="923686485342484400">ସାଇନ୍‍ ଆଉଟ୍‍ ହେବାକୁ ଦୁଇଥର Control Shift Q ଦବାନ୍ତୁ।</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb
index e4a591a..32227ec7 100644
--- a/ash/strings/ash_strings_pa.xtb
+++ b/ash/strings/ash_strings_pa.xtb
@@ -1434,6 +1434,7 @@
 <translation id="9211490828691860325">ਸਾਰੇ ਡੈਸਕ</translation>
 <translation id="9211681782751733685">ਬੈਟਰੀ ਦੇ ਪੂਰਾ ਚਾਰਜ ਹੋਣ ਵਿੱਚ <ph name="TIME_REMAINING" /> ਬਾਕੀ।</translation>
 <translation id="9215934040295798075">ਵਾਲਪੇਪਰ ਸੈੱਟ ਕਰੋ</translation>
+<translation id="9219103736887031265">ਚਿੱਤਰ</translation>
 <translation id="921989828232331238">ਤੁਹਾਡੇ ਮਾਂ-ਪਿਓ ਨੇ ਅੱਜ ਦੇ ਦਿਨ ਲਈ ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਲਾਕ ਕਰ ਦਿੱਤਾ ਹੈ</translation>
 <translation id="9220525904950070496">ਖਾਤਾ ਹਟਾਓ</translation>
 <translation id="923686485342484400">ਸਾਈਨ-ਆਊਟ ਕਰਨ ਲਈ ਦੋ ਵਾਰ Control Shift Q ਦਬਾਓ।</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index e960a02..5bc09d8 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -1432,6 +1432,7 @@
 <translation id="9211490828691860325">Wszystkie biurka</translation>
 <translation id="9211681782751733685">Czas pozostały do pełnego naładowania baterii: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Ustaw tapetę</translation>
+<translation id="9219103736887031265">Grafika</translation>
 <translation id="921989828232331238">Twój rodzic zablokował urządzenie na cały dzień</translation>
 <translation id="9220525904950070496">Usuń konto</translation>
 <translation id="923686485342484400">Naciśnij dwukrotnie Control Shift Q, by się wylogować.</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index 185f5b73..84b9f0b 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Todos os espaços de trabalho</translation>
 <translation id="9211681782751733685">Tempo restante até que a bateria esteja totalmente carregada: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Definir plano de fundo</translation>
+<translation id="9219103736887031265">Imagens</translation>
 <translation id="921989828232331238">Seu pai/mãe bloqueou o dispositivo por hoje</translation>
 <translation id="9220525904950070496">Remover conta</translation>
 <translation id="923686485342484400">Pressione Control+Shift+Q duas vezes para sair.</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index 53b7ac8..ef63258 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -1254,6 +1254,7 @@
 <translation id="8152264887680882389"><ph name="TEXT" />, preenchimento automático</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Esta definição é gerida pelo seu administrador.</translation>
 <translation id="8155628902202578800">Abrir a caixa de diálogo de informações de <ph name="USER_EMAIL_ADDRESS" /></translation>
+<translation id="8157728322324420120">Sugerido para si</translation>
 <translation id="8167567890448493835">A utilizar <ph name="LOCALE_NAME" />...</translation>
 <translation id="8183592608247778598">Veja as fotos, os conteúdos multimédia, as notificações e as apps recentes do seu telemóvel no dispositivo <ph name="DEVICE_TYPE" /></translation>
 <translation id="8192202700944119416">As notificações estão ocultas.</translation>
@@ -1433,6 +1434,7 @@
 <translation id="9211490828691860325">Todos os espaços de trabalho</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> restante(s) até a bateria estar totalmente carregada.</translation>
 <translation id="9215934040295798075">Definir imagem de fundo</translation>
+<translation id="9219103736887031265">Imagens</translation>
 <translation id="921989828232331238">Os teus pais bloquearam o dispositivo para o resto do dia</translation>
 <translation id="9220525904950070496">Remover conta</translation>
 <translation id="923686485342484400">Prima Control Shift Q duas vezes para terminar sessão.</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index 8ace92d..2496f11 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Toate desktopurile</translation>
 <translation id="9211681782751733685">Timp rămas până la încărcarea completă a bateriei: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Setează o imagine de fundal</translation>
+<translation id="9219103736887031265">Imagini</translation>
 <translation id="921989828232331238">Părintele tău ți-a blocat dispozitivul pentru întreaga zi</translation>
 <translation id="9220525904950070496">Eliminați contul</translation>
 <translation id="923686485342484400">Apăsați de două ori Control Shift Q pentru a vă deconecta.</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index 82ffbfa..57cd6c2 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Все рабочие столы</translation>
 <translation id="9211681782751733685">Оставшееся время до полной зарядки батареи: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Выбрать обои</translation>
+<translation id="9219103736887031265">Картинки</translation>
 <translation id="921989828232331238">Ваш родитель заблокировал это устройство на целый день.</translation>
 <translation id="9220525904950070496">Удалить аккаунт</translation>
 <translation id="923686485342484400">Чтобы выйти, дважды нажмите Control+Shift+Q.</translation>
diff --git a/ash/strings/ash_strings_si.xtb b/ash/strings/ash_strings_si.xtb
index afa06c4..07a5f92 100644
--- a/ash/strings/ash_strings_si.xtb
+++ b/ash/strings/ash_strings_si.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">අක්‍රීය</translation>
 <translation id="5860491529813859533">ක්‍රියාත්මක කරන්න</translation>
 <translation id="5867217927013474703">ජාල තොරතුරු රැස් කරමින්</translation>
+<translation id="5867606971598166637">ඔබේ පද්ධති පරිපාලක ඔබේ තිර අධීක්ෂණය කරයි</translation>
 <translation id="5876666360658629066">මාපිය කේතය ඇතුළත් කරන්න</translation>
 <translation id="5881540930187678962">පසුව Phone Hub පිහිටුවන්න</translation>
 <translation id="5887954372087850114"><ph name="WINDOW_TITLE" /> කවුළුව <ph name="DESK_TITLE" /> වෙත පවරා අනෙකුත් සියලු මේසවලින් පැවරීම ඉවත් කරන ලදි</translation>
@@ -1432,6 +1433,7 @@
 <translation id="9211490828691860325">සියලු වැඩතල</translation>
 <translation id="9211681782751733685">බැටරිය සම්පූර්ණයෙන් ආරෝපණ වන තෙක් <ph name="TIME_REMAINING" />ක් ඉතුරුයි.</translation>
 <translation id="9215934040295798075">වෝල්පේපර සකසන්න</translation>
+<translation id="9219103736887031265">රූප</translation>
 <translation id="921989828232331238">ඔබේ මාපියන් ඔබේ උපාංගයට අද අඟුලු දමා ඇත</translation>
 <translation id="9220525904950070496">ගිනුම ඉවත් කරන්න</translation>
 <translation id="923686485342484400">වැරීමට Control Shift Q දෙසැරයක් ඔබන්න</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index 41eb50d..b558ec6e 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Všetky plochy</translation>
 <translation id="9211681782751733685">Zostávajúci čas do úplného nabitia batérie: <ph name="TIME_REMAINING" /></translation>
 <translation id="9215934040295798075">Nastaviť tapetu</translation>
+<translation id="9219103736887031265">Obrázky</translation>
 <translation id="921989828232331238">Rodič na dnes toto zariadenie uzamkol</translation>
 <translation id="9220525904950070496">Odstrániť účet</translation>
 <translation id="923686485342484400">Ak sa chcete odhlásiť, stlačte dvakrát kombináciu klávesov Ctrl, Shift a Q.</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index 0151ae3..38a8d52 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Vsa namizja</translation>
 <translation id="9211681782751733685">Še <ph name="TIME_REMAINING" />, da bo akumulator povsem napolnjen.</translation>
 <translation id="9215934040295798075">Nastavi sliko za ozadje</translation>
+<translation id="9219103736887031265">Slike</translation>
 <translation id="921989828232331238">Tvoj starš je zaklenil napravo za ves dan</translation>
 <translation id="9220525904950070496">Odstranitev računa</translation>
 <translation id="923686485342484400">Dvakrat pritisnite Control Shift Q, če se želite odjaviti.</translation>
diff --git a/ash/strings/ash_strings_sq.xtb b/ash/strings/ash_strings_sq.xtb
index d1e1355..473fb99 100644
--- a/ash/strings/ash_strings_sq.xtb
+++ b/ash/strings/ash_strings_sq.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">Çaktivizuar</translation>
 <translation id="5860491529813859533">Aktivizo</translation>
 <translation id="5867217927013474703">Po mblidhet informacioni i rrjetit</translation>
+<translation id="5867606971598166637">Administratori i sistemit po monitoron ekranet e tua</translation>
 <translation id="5876666360658629066">Fut kodin e prindit</translation>
 <translation id="5881540930187678962">Konfiguroje Phone Hub më vonë</translation>
 <translation id="5887954372087850114">Dritarja <ph name="WINDOW_TITLE" /> u caktua në <ph name="DESK_TITLE" /> dhe u hoq nga të gjitha tavolinat e tjera të punës</translation>
@@ -1432,6 +1433,7 @@
 <translation id="9211490828691860325">Të gjitha tavolinat e punës</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> të mbetura deri sa bateria të karikohet plotësisht.</translation>
 <translation id="9215934040295798075">Cakto imazhin e sfondit</translation>
+<translation id="9219103736887031265">Imazhet</translation>
 <translation id="921989828232331238">Prindi yt e kyçi pajisjen tënde për këtë ditë</translation>
 <translation id="9220525904950070496">Hiq llogarinë</translation>
 <translation id="923686485342484400">Shtyp dy herë Control, Shift, Q për të dalë.</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb
index 122e99e1..42491c9 100644
--- a/ash/strings/ash_strings_sr-Latn.xtb
+++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -1434,6 +1434,7 @@
 <translation id="9211490828691860325">Sve radne površine</translation>
 <translation id="9211681782751733685">Još <ph name="TIME_REMAINING" /> i baterija će se u potpunosti napuniti.</translation>
 <translation id="9215934040295798075">Podesi pozadinu</translation>
+<translation id="9219103736887031265">Slike</translation>
 <translation id="921989828232331238">Roditelj je zaključao ovaj uređaj za danas</translation>
 <translation id="9220525904950070496">Uklanjanje naloga</translation>
 <translation id="923686485342484400">Dvaput pritisnite Control Shift Q da biste se odjavili.</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index f332623..75f5997 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -1434,6 +1434,7 @@
 <translation id="9211490828691860325">Све радне површине</translation>
 <translation id="9211681782751733685">Још <ph name="TIME_REMAINING" /> и батерија ће се у потпуности напунити.</translation>
 <translation id="9215934040295798075">Подеси позадину</translation>
+<translation id="9219103736887031265">Слике</translation>
 <translation id="921989828232331238">Родитељ је закључао овај уређај за данас</translation>
 <translation id="9220525904950070496">Уклањање налога</translation>
 <translation id="923686485342484400">Двапут притисните Control Shift Q да бисте се одјавили.</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index 433b02c..8a39e0e2 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Alla skrivbord</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> återstår tills batteriet är fulladdat.</translation>
 <translation id="9215934040295798075">Ange bakgrund</translation>
+<translation id="9219103736887031265">Bilder</translation>
 <translation id="921989828232331238">Din förälder har låst enheten för dagen</translation>
 <translation id="9220525904950070496">Ta bort konto</translation>
 <translation id="923686485342484400">Tryck på Control + skift + Q två gånger om du vill logga ut.</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb
index 2474fdf..38a018c 100644
--- a/ash/strings/ash_strings_sw.xtb
+++ b/ash/strings/ash_strings_sw.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">Kimezimwa</translation>
 <translation id="5860491529813859533">Washa</translation>
 <translation id="5867217927013474703">Inakusanya maelezo ya mtandao</translation>
+<translation id="5867606971598166637">Msimamizi wako wa mfumo anafuatilia skrini zako</translation>
 <translation id="5876666360658629066">Weka msimbo wa mzazi</translation>
 <translation id="5881540930187678962">Weka mipangillio ya Kituo cha Kudhibiti Simu baadaye</translation>
 <translation id="5887954372087850114">Dirisha la <ph name="WINDOW_TITLE" /> limewekwa kwenye <ph name="DESK_TITLE" /> na limeondolewa kwenye maeneokazi mengine yote</translation>
@@ -1433,6 +1434,7 @@
 <translation id="9211490828691860325">Maeneokazi yote</translation>
 <translation id="9211681782751733685">Zimebaki <ph name="TIME_REMAINING" /> kabla ya chaji ya betri kujaa.</translation>
 <translation id="9215934040295798075">Weka mandhari</translation>
+<translation id="9219103736887031265">Picha</translation>
 <translation id="921989828232331238">Kifaa chako kimefungwa na mzazi wako kwa leo</translation>
 <translation id="9220525904950070496">Ondoa akaunti</translation>
 <translation id="923686485342484400">Bonyeza Control Shift Q mara mbili ili kuondoka katika akaunti.</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 07fd07e2..e0d5f93 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">ஆஃப்</translation>
 <translation id="5860491529813859533">இயக்கு</translation>
 <translation id="5867217927013474703">நெட்வொர்க் தகவல்களைச் சேகரிக்கிறது</translation>
+<translation id="5867606971598166637">சிஸ்டம் நிர்வாகி உங்கள் திரைகளைக் கண்காணிக்கிறார்</translation>
 <translation id="5876666360658629066">பெற்றோர் குறியீட்டை உள்ளிடுங்கள்</translation>
 <translation id="5881540930187678962">Phone Hubபைப் பின்னர் அமைத்திடுங்கள்</translation>
 <translation id="5887954372087850114"><ph name="WINDOW_TITLE" /> சாளர ஒதுக்கீடு பிற டெஸ்க்குகளில் இருந்து அகற்றப்பட்டு <ph name="DESK_TITLE" />க்கு வழங்கப்பட்டுள்ளது</translation>
@@ -1432,6 +1433,7 @@
 <translation id="9211490828691860325">அனைத்து டெஸ்குகளும்</translation>
 <translation id="9211681782751733685">பேட்டரி முழுவதும் சார்ஜ் ஆவதற்கான நேரம்: <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">வால்பேப்பரை அமை</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="921989828232331238">உங்கள் பெற்றோர் இன்று சாதனத்தைப் பயன்படுத்த முடியாதபடி பூட்டிவிட்டனர்</translation>
 <translation id="9220525904950070496">கணக்கை அகற்றுக</translation>
 <translation id="923686485342484400">வெளியேற Control Shift Q ஐ இருமுறை அழுத்தவும்.</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 463dad2..c48e4a8 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -1434,6 +1434,7 @@
 <translation id="9211490828691860325">అన్ని డెస్క్‌లు</translation>
 <translation id="9211681782751733685">బ్యాటరీ పూర్తిగా ఛార్జ్ కావడానికి పట్టే సమయం, <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">వాల్‌పేపర్‌ను సెట్ చేయండి</translation>
+<translation id="9219103736887031265">ఇమేజ్‌లు</translation>
 <translation id="921989828232331238">మీ తల్లి/తండ్రి ఈ రోజుకి మీ పరికరాన్ని లాక్ చేసి ఉంచారు</translation>
 <translation id="9220525904950070496">ఖాతాను తీసివేయండి</translation>
 <translation id="923686485342484400">సైన్ అవుట్ చేయడానికి Control Shift Qను రెండుసార్లు నొక్కండి.</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index ddaeb59..dd9b258 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">เดสก์ทั้งหมด</translation>
 <translation id="9211681782751733685">อีก <ph name="TIME_REMAINING" />จะชาร์จเต็ม</translation>
 <translation id="9215934040295798075">ตั้งค่าวอลเปเปอร์</translation>
+<translation id="9219103736887031265">ภาพ</translation>
 <translation id="921989828232331238">ผู้ปกครองล็อกอุปกรณ์ของคุณไว้ทั้งวัน</translation>
 <translation id="9220525904950070496">ลบบัญชี</translation>
 <translation id="923686485342484400">กด Control Shift Q 2 ครั้งเพื่อออกจากระบบ</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index 2d12c990..7c5c12e1 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Tüm masalar</translation>
 <translation id="9211681782751733685">Pilin tam olarak şarj olmasına <ph name="TIME_REMAINING" /> kaldı.</translation>
 <translation id="9215934040295798075">Duvar kağıdını ayarla</translation>
+<translation id="9219103736887031265">Resimler</translation>
 <translation id="921989828232331238">Ebeveyniniz cihazınızı bugün için kilitledi</translation>
 <translation id="9220525904950070496">Hesabı kaldır</translation>
 <translation id="923686485342484400">Oturumu kapatmak için Control ÜstKrktr Q tuşlarına iki defa basın.</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb
index 2a919f01..a4858aa 100644
--- a/ash/strings/ash_strings_uk.xtb
+++ b/ash/strings/ash_strings_uk.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Усі робочі столи</translation>
 <translation id="9211681782751733685">До повного зарядження акумулятора залишилося <ph name="TIME_REMAINING" />.</translation>
 <translation id="9215934040295798075">Вибрати фоновий малюнок</translation>
+<translation id="9219103736887031265">Зображення</translation>
 <translation id="921989828232331238">Батьки заблокували твій пристрій на весь день</translation>
 <translation id="9220525904950070496">Видалення облікового запису</translation>
 <translation id="923686485342484400">Щоб вийти, двічі натисніть Control Shift Q.</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb
index 01c4ce2..8402203 100644
--- a/ash/strings/ash_strings_ur.xtb
+++ b/ash/strings/ash_strings_ur.xtb
@@ -1432,6 +1432,7 @@
 <translation id="9211490828691860325">تمام ڈیسکس</translation>
 <translation id="9211681782751733685">بیٹری کے مکمل طور پر چارج ہونے میں <ph name="TIME_REMAINING" /> باقی ہے۔</translation>
 <translation id="9215934040295798075">وال پیپر سیٹ کریں</translation>
+<translation id="9219103736887031265">تصاویر</translation>
 <translation id="921989828232331238">آپ کے والد/والدہ نے آپ کے آلے کو دن بھر کے لئے مقفل کر دیا</translation>
 <translation id="9220525904950070496">اکاؤنٹ ہٹائیں</translation>
 <translation id="923686485342484400">‏سائن آؤٹ کرنے کیلئے Control Shift Q کو دو بار دبائیں۔</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb
index f1e6587..79b098d 100644
--- a/ash/strings/ash_strings_uz.xtb
+++ b/ash/strings/ash_strings_uz.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Barcha ish stollari</translation>
 <translation id="9211681782751733685">Batareya toʻliq quvvatlanishigacha qolgan vaqt: <ph name="TIME_REMAINING" /></translation>
 <translation id="9215934040295798075">Fon rasmini tanlash</translation>
+<translation id="9219103736887031265">Rasmlar</translation>
 <translation id="921989828232331238">Ota-onangiz qurilmangizni butun kun uchun qulfladi</translation>
 <translation id="9220525904950070496">Hisobni olib tashlash</translation>
 <translation id="923686485342484400">Chiqish uchun “Control+Shift+Q” tugmalarini ikki marta bosing.</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index 4e3208a..c9119fb 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -853,6 +853,7 @@
 <translation id="5860033963881614850">Tắt</translation>
 <translation id="5860491529813859533">Bật</translation>
 <translation id="5867217927013474703">Đang thu thập thông tin mạng</translation>
+<translation id="5867606971598166637">Quản trị viên hệ thống đang giám sát các màn hình của bạn</translation>
 <translation id="5876666360658629066">Nhập mã dành cho cha mẹ</translation>
 <translation id="5881540930187678962">Thiết lập Trung tâm điều khiển điện thoại sau</translation>
 <translation id="5887954372087850114">Cửa sổ <ph name="WINDOW_TITLE" /> đã được chỉ định cho <ph name="DESK_TITLE" /> và được gỡ chỉ định khỏi tất cả không gian làm việc khác</translation>
@@ -1432,6 +1433,7 @@
 <translation id="9211490828691860325">Tất cả các không gian làm việc</translation>
 <translation id="9211681782751733685">Còn <ph name="TIME_REMAINING" /> nữa là sạc đầy pin.</translation>
 <translation id="9215934040295798075">Đặt hình nền</translation>
+<translation id="9219103736887031265">Hình ảnh</translation>
 <translation id="921989828232331238">Cha mẹ đã khóa thiết bị của bạn cả ngày</translation>
 <translation id="9220525904950070496">Xóa tài khoản</translation>
 <translation id="923686485342484400">Nhấn Control Shift Q hai lần để đăng xuất.</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index 8c512da..e184d5e 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -1430,6 +1430,7 @@
 <translation id="9211490828691860325">所有桌面</translation>
 <translation id="9211681782751733685">电池电量将在 <ph name="TIME_REMAINING" />后充满。</translation>
 <translation id="9215934040295798075">设置壁纸</translation>
+<translation id="9219103736887031265">图片</translation>
 <translation id="921989828232331238">您的家长已全天锁定您的设备</translation>
 <translation id="9220525904950070496">移除帐号</translation>
 <translation id="923686485342484400">连按两次Ctrl+Shift+Q即可退出。</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb
index 5dc1626..14a8e3af 100644
--- a/ash/strings/ash_strings_zh-HK.xtb
+++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -852,7 +852,7 @@
 <translation id="5860033963881614850">關閉</translation>
 <translation id="5860491529813859533">開啟</translation>
 <translation id="5867217927013474703">正在收集網絡資料</translation>
-<translation id="5867606971598166637">系統管理員正在監控你的畫面</translation>
+<translation id="5867606971598166637">系統管理員正在監控您的畫面</translation>
 <translation id="5876666360658629066">輸入家長存取碼</translation>
 <translation id="5881540930187678962">稍後再設定 Phone Hub</translation>
 <translation id="5887954372087850114">「<ph name="WINDOW_TITLE" />」視窗已指派給「<ph name="DESK_TITLE" />」,並取消指派給所有其他桌面</translation>
@@ -1431,6 +1431,7 @@
 <translation id="9211490828691860325">所有桌面</translation>
 <translation id="9211681782751733685">電池仲有 <ph name="TIME_REMAINING" />就差滿電。</translation>
 <translation id="9215934040295798075">設定桌布</translation>
+<translation id="9219103736887031265">圖片</translation>
 <translation id="921989828232331238">您的家長今天已鎖定此裝置</translation>
 <translation id="9220525904950070496">移除帳戶</translation>
 <translation id="923686485342484400">按兩下 Ctrl+Shift+Q 鍵即可登出。</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index 22ea3ed..aa08ec8 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -1432,6 +1432,7 @@
 <translation id="9211490828691860325">所有桌面</translation>
 <translation id="9211681782751733685">電池剩餘充電時間:<ph name="TIME_REMAINING" />。</translation>
 <translation id="9215934040295798075">設定桌布</translation>
+<translation id="9219103736887031265">圖片</translation>
 <translation id="921989828232331238">你的家長今天已鎖定這部裝置</translation>
 <translation id="9220525904950070496">移除帳戶</translation>
 <translation id="923686485342484400">按兩下 Ctrl+Shift+Q 鍵即可登出。</translation>
diff --git a/ash/strings/ash_strings_zu.xtb b/ash/strings/ash_strings_zu.xtb
index b8b8233..3084e8c 100644
--- a/ash/strings/ash_strings_zu.xtb
+++ b/ash/strings/ash_strings_zu.xtb
@@ -1433,6 +1433,7 @@
 <translation id="9211490828691860325">Wonke amatafula</translation>
 <translation id="9211681782751733685"><ph name="TIME_REMAINING" /> osele ibhethri lize lishajiwe ngokugcwele.</translation>
 <translation id="9215934040295798075">Setha isithombe sangemuva</translation>
+<translation id="9219103736887031265">Izithombe</translation>
 <translation id="921989828232331238">Umzali wakho ukhiyele idivayisi yakho usuku</translation>
 <translation id="9220525904950070496">Susa i-akhawunti</translation>
 <translation id="923686485342484400">Cindezela u-Control Shift Q kabili ukuze uphume ngemvume.</translation>
diff --git a/ash/system/holding_space/holding_space_animation_registry_unittest.cc b/ash/system/holding_space/holding_space_animation_registry_unittest.cc
index 8defc9b2..223b0a8 100644
--- a/ash/system/holding_space/holding_space_animation_registry_unittest.cc
+++ b/ash/system/holding_space/holding_space_animation_registry_unittest.cc
@@ -92,6 +92,13 @@
     GetSessionControllerClient()->SwitchActiveUser(user_account);
   }
 
+  void EnableTrayIconPreviews() {
+    AccountId account_id = AccountId::FromUserEmail(kTestUser);
+    auto* prefs = GetSessionControllerClient()->GetUserPrefService(account_id);
+    ASSERT_TRUE(prefs);
+    holding_space_prefs::SetPreviewsEnabled(prefs, true);
+  }
+
   HoldingSpaceController* controller() { return HoldingSpaceController::Get(); }
 
   testing::NiceMock<MockHoldingSpaceClient>* client() {
@@ -117,6 +124,7 @@
   using Type = ProgressRingAnimation::Type;
 
   StartSession();
+  EnableTrayIconPreviews();
 
   // Verify initial animation `registry()` state.
   ExpectProgressIconAnimationExistsForKey(controller(), false);
diff --git a/ash/system/holding_space/holding_space_tray_unittest.cc b/ash/system/holding_space/holding_space_tray_unittest.cc
index f8847a57..99c5d0b 100644
--- a/ash/system/holding_space/holding_space_tray_unittest.cc
+++ b/ash/system/holding_space/holding_space_tray_unittest.cc
@@ -8,6 +8,7 @@
 #include <deque>
 #include <vector>
 
+#include "ash/constants/ash_features.h"
 #include "ash/public/cpp/holding_space/holding_space_client.h"
 #include "ash/public/cpp/holding_space/holding_space_constants.h"
 #include "ash/public/cpp/holding_space/holding_space_controller.h"
@@ -43,6 +44,7 @@
 #include "base/strings/strcat.h"
 #include "base/test/bind.h"
 #include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "ui/compositor/layer.h"
 #include "ui/events/base_event_utils.h"
@@ -365,12 +367,10 @@
 
 }  // namespace
 
-// HoldingSpaceTrayTest --------------------------------------------------------
+// HoldingSpaceAshTestBase ----------------------------------------------------
 
-class HoldingSpaceTrayTest : public AshTestBase {
+class HoldingSpaceAshTestBase : public AshTestBase {
  public:
-  HoldingSpaceTrayTest() = default;
-
   // AshTestBase:
   void SetUp() override {
     AshTestBase::SetUp();
@@ -486,6 +486,13 @@
         user_account, nullptr, nullptr);
   }
 
+  void EnableTrayIconPreviews(std::string testUserEmail = kTestUser) {
+    AccountId account_id = AccountId::FromUserEmail(testUserEmail);
+    auto* prefs = GetSessionControllerClient()->GetUserPrefService(account_id);
+    ASSERT_TRUE(prefs);
+    holding_space_prefs::SetPreviewsEnabled(prefs, true);
+  }
+
   HoldingSpaceTestApi* test_api() { return test_api_.get(); }
 
   testing::NiceMock<MockHoldingSpaceClient>* client() {
@@ -514,9 +521,35 @@
   HoldingSpaceModel holding_space_model_;
 };
 
+class HoldingSpaceTrayTest : public HoldingSpaceAshTestBase,
+                             public testing::WithParamInterface<bool> {
+ public:
+  HoldingSpaceTrayTest() {
+    scoped_feature_list_.InitWithFeatureState(
+        features::kHoldingSpacePredictability,
+        IsHoldingSpacePredictabilityEnabled());
+  };
+
+  bool IsHoldingSpacePredictabilityEnabled() const { return GetParam(); }
+
+  // If holding space predictability flag is enabled, then the default tray icon
+  // will be displayed, otherwise it'll be the previews tray icon.
+  void ExpectedTrayIconIsShown() {
+    EXPECT_EQ(IsViewVisible(test_api()->GetDefaultTrayIcon()),
+              IsHoldingSpacePredictabilityEnabled());
+    EXPECT_EQ(IsViewVisible(test_api()->GetPreviewsTrayIcon()),
+              !IsHoldingSpacePredictabilityEnabled());
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+INSTANTIATE_TEST_SUITE_P(All, HoldingSpaceTrayTest, testing::Bool());
+
 // Tests -----------------------------------------------------------------------
 
-TEST_F(HoldingSpaceTrayTest, ShowTrayButtonOnFirstUse) {
+TEST_P(HoldingSpaceTrayTest, ShowTrayButtonOnFirstUse) {
   StartSession(/*pre_mark_time_of_first_add=*/false);
   GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
 
@@ -530,8 +563,7 @@
   MarkTimeOfFirstAdd();
   GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
   EXPECT_TRUE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
-  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
+  ExpectedTrayIconIsShown();
 
   // Show the bubble - both the pinned files and recent files child bubbles
   // should be shown.
@@ -565,7 +597,7 @@
   EXPECT_FALSE(test_api()->IsShowingInShelf());
 }
 
-TEST_F(HoldingSpaceTrayTest, HideButtonWhenModelDetached) {
+TEST_P(HoldingSpaceTrayTest, HideButtonWhenModelDetached) {
   MarkTimeOfFirstPin();
   StartSession();
 
@@ -576,8 +608,7 @@
   // Add a download item - the button should be shown.
   AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake_1"));
   EXPECT_TRUE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
-  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
+  ExpectedTrayIconIsShown();
 
   SwitchToSecondaryUser("user@secondary", /*client=*/nullptr,
                         /*model=*/nullptr);
@@ -587,63 +618,7 @@
   UnregisterModelForUser("user@secondary");
 }
 
-TEST_F(HoldingSpaceTrayTest, HideButtonOnChangeToEmptyModel) {
-  MarkTimeOfFirstPin();
-  StartSession();
-
-  // The tray button should be hidden if the user has previously pinned an item,
-  // and the holding space is empty.
-  EXPECT_FALSE(test_api()->IsShowingInShelf());
-
-  // Add a download item - the button should be shown.
-  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake_1"));
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
-  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
-
-  HoldingSpaceModel secondary_holding_space_model;
-  SwitchToSecondaryUser("user@secondary", /*client=*/nullptr,
-                        /*model=*/&secondary_holding_space_model);
-  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
-  EXPECT_FALSE(test_api()->IsShowingInShelf());
-
-  AddItemToModel(&secondary_holding_space_model,
-                 HoldingSpaceItem::Type::kDownload,
-                 base::FilePath("/tmp/fake_2"));
-  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
-  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
-
-  UnregisterModelForUser("user@secondary");
-}
-
-TEST_F(HoldingSpaceTrayTest, HideButtonOnChangeToNonEmptyModel) {
-  MarkTimeOfFirstPin();
-  StartSession();
-
-  // The tray button should be hidden if the user has previously pinned an item,
-  // and the holding space is empty.
-  EXPECT_FALSE(test_api()->IsShowingInShelf());
-
-  HoldingSpaceModel secondary_holding_space_model;
-  AddItemToModel(&secondary_holding_space_model,
-                 HoldingSpaceItem::Type::kDownload,
-                 base::FilePath("/tmp/fake_2"));
-  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
-  EXPECT_FALSE(test_api()->IsShowingInShelf());
-
-  SwitchToSecondaryUser("user@secondary", /*client=*/nullptr,
-                        /*model=*/&secondary_holding_space_model);
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
-  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
-
-  UnregisterModelForUser("user@secondary");
-}
-
-TEST_F(HoldingSpaceTrayTest, HideButtonOnUserAddingScreen) {
+TEST_P(HoldingSpaceTrayTest, HideButtonOnUserAddingScreen) {
   MarkTimeOfFirstPin();
   StartSession();
 
@@ -664,7 +639,7 @@
   EXPECT_TRUE(test_api()->IsShowingInShelf());
 }
 
-TEST_F(HoldingSpaceTrayTest, AddingItemShowsTrayBubble) {
+TEST_P(HoldingSpaceTrayTest, AddingItemShowsTrayBubble) {
   MarkTimeOfFirstPin();
   StartSession();
 
@@ -677,8 +652,7 @@
       AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake_1"));
   GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
   EXPECT_TRUE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
-  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
+  ExpectedTrayIconIsShown();
 
   // Remove the only item - the button should be hidden.
   model()->RemoveItem(item_1->id());
@@ -689,8 +663,7 @@
   HoldingSpaceItem* item_2 =
       AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake_2"));
   EXPECT_TRUE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
-  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
+  ExpectedTrayIconIsShown();
 
   // Remove the only item - the button should be hidden.
   model()->RemoveItem(item_2->id());
@@ -702,8 +675,7 @@
       AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake_3"));
   GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
   EXPECT_TRUE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
-  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
+  ExpectedTrayIconIsShown();
 
   // Remove the only item - the button should be hidden.
   model()->RemoveItem(item_3->id());
@@ -711,7 +683,7 @@
   EXPECT_FALSE(test_api()->IsShowingInShelf());
 }
 
-TEST_F(HoldingSpaceTrayTest, TrayButtonNotShownForPartialItemsOnly) {
+TEST_P(HoldingSpaceTrayTest, TrayButtonNotShownForPartialItemsOnly) {
   MarkTimeOfFirstPin();
   StartSession();
 
@@ -739,8 +711,7 @@
 
   GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
   EXPECT_TRUE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
-  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
+  ExpectedTrayIconIsShown();
 
   // Remove the initialized item - the shelf button should get hidden.
   model()->RemoveItem(item_2->id());
@@ -748,11 +719,1325 @@
   EXPECT_FALSE(test_api()->IsShowingInShelf());
 }
 
-// Tests that the tray icon size changes on in-app shelf.
-TEST_F(HoldingSpaceTrayTest, UpdateTrayIconSizeForInAppShelf) {
+// Tests that a shelf config change just after an item has been removed does
+// not cause a crash.
+TEST_P(HoldingSpaceTrayTest, ShelfConfigChangeWithDelayedItemRemoval) {
   MarkTimeOfFirstPin();
   StartSession();
 
+  // Create a test widget to force in-app shelf in tablet mode.
+  std::unique_ptr<views::Widget> widget = CreateTestWidget();
+  ASSERT_TRUE(widget);
+
+  // The tray button should be hidden if the user has previously pinned an item,
+  // and the holding space is empty.
+  EXPECT_FALSE(test_api()->IsShowingInShelf());
+
+  HoldingSpaceItem* item_1 =
+      AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake_1"));
+  HoldingSpaceItem* item_2 =
+      AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake_2"));
+  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
+
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+
+  model()->RemoveItem(item_1->id());
+  TabletModeControllerTestApi().EnterTabletMode();
+  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
+
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+
+  model()->RemoveItem(item_2->id());
+  TabletModeControllerTestApi().LeaveTabletMode();
+  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
+  EXPECT_FALSE(test_api()->IsShowingInShelf());
+}
+
+// Verifies the pinned files bubble is not shown if it only contains partially
+// initialized items.
+TEST_P(HoldingSpaceTrayTest,
+       PinnedFilesBubbleWithPartiallyInitializedItemsOnly) {
+  MarkTimeOfFirstPin();
+  StartSession();
+
+  // Add a download item to show the tray button.
+  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/download"));
+
+  AddPartiallyInitializedItem(HoldingSpaceItem::Type::kPinnedFile,
+                              base::FilePath("/tmp/fake_1"));
+
+  test_api()->Show();
+  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
+
+  // Add another partially initialized item.
+  HoldingSpaceItem* item_2 = AddPartiallyInitializedItem(
+      HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake_2"));
+  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
+
+  // Add a fully initialized item, and verify it gets shown.
+  HoldingSpaceItem* item_3 = AddItem(HoldingSpaceItem::Type::kPinnedFile,
+                                     base::FilePath("/tmp/fake_3"));
+  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
+
+  std::vector<views::View*> pinned_files = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(1u, pinned_files.size());
+  EXPECT_EQ(item_3->id(),
+            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
+  EXPECT_TRUE(HoldingSpaceItemView::Cast(pinned_files[0])->GetVisible());
+
+  // Fully initialize a partially initialized item with an empty URL - it should
+  // get removed.
+  model()->InitializeOrRemoveItem(item_2->id(), GURL());
+
+  pinned_files = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(1u, pinned_files.size());
+  EXPECT_EQ(item_3->id(),
+            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
+}
+
+// Verifies the pinned items section is shown and orders items as expected when
+// the model contains a number of initialized items prior to showing UI.
+TEST_P(HoldingSpaceTrayTest, PinnedFilesSectionWithInitializedItemsOnly) {
+  MarkTimeOfFirstPin();
+  StartSession();
+
+  // Add a number of initialized pinned items.
+  std::deque<HoldingSpaceItem*> items;
+  for (int i = 0; i < 10; ++i) {
+    items.push_back(
+        AddItem(HoldingSpaceItem::Type::kPinnedFile,
+                base::FilePath("/tmp/fake_" + base::NumberToString(i))));
+  }
+
+  test_api()->Show();
+  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
+
+  std::vector<views::View*> pinned_files = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(items.size(), pinned_files.size());
+
+  while (!items.empty()) {
+    // View order is expected to be reverse of item order.
+    auto* pinned_file = HoldingSpaceItemView::Cast(pinned_files.back());
+    EXPECT_EQ(pinned_file->item()->id(), items.front()->id());
+
+    items.pop_front();
+    pinned_files.pop_back();
+  }
+  test_api()->Close();
+}
+
+// Right clicking the holding space tray should show a context menu if the
+// previews feature is enabled. Otherwise it should do nothing.
+TEST_P(HoldingSpaceTrayTest, ShouldMaybeShowContextMenuOnRightClick) {
+  StartSession();
+
+  views::View* tray = test_api()->GetTray();
+  ASSERT_TRUE(tray);
+
+  EXPECT_FALSE(views::MenuController::GetActiveInstance());
+
+  // Move the mouse to and perform a right click on `tray`.
+  auto* root_window = tray->GetWidget()->GetNativeWindow()->GetRootWindow();
+  ui::test::EventGenerator event_generator(root_window);
+  event_generator.MoveMouseTo(tray->GetBoundsInScreen().CenterPoint());
+  event_generator.ClickRightButton();
+
+  EXPECT_TRUE(views::MenuController::GetActiveInstance());
+}
+
+// Tests that a partially initialized screen recording item shows in the UI in
+// the reverse order from added time rather than initialization time.
+TEST_P(HoldingSpaceTrayTest,
+       PartialScreenRecordingItemWithExistingScreenshotItems) {
+  StartSession();
+  test_api()->Show();
+
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+  ASSERT_TRUE(test_api()->GetScreenCaptureViews().empty());
+
+  // Add partially initialized screen recording item - verify it doesn't get
+  // shown in the UI yet.
+  HoldingSpaceItem* screen_recording_item =
+      AddPartiallyInitializedItem(HoldingSpaceItem::Type::kScreenRecording,
+                                  base::FilePath("/tmp/screen_recording"));
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+
+  // Add three screenshot items to fill up the section.
+  HoldingSpaceItem* screenshot_item_1 = AddItem(
+      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/screenshot_1"));
+  HoldingSpaceItem* screenshot_item_2 = AddItem(
+      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/screenshot_2"));
+  HoldingSpaceItem* screenshot_item_3 = AddItem(
+      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/screenshot_3"));
+  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  std::vector<views::View*> screen_capture_chips =
+      test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_capture_chips.size());
+  EXPECT_EQ(screenshot_item_3->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
+  EXPECT_EQ(screenshot_item_2->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
+  EXPECT_EQ(screenshot_item_1->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
+
+  // Initialize the screen recording item and verify it is not shown.
+  model()->InitializeOrRemoveItem(screen_recording_item->id(),
+                                  GURL("filesystem:screen_recording"));
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  screen_capture_chips = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_capture_chips.size());
+  EXPECT_EQ(screenshot_item_3->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
+  EXPECT_EQ(screenshot_item_2->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
+  EXPECT_EQ(screenshot_item_1->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
+
+  // Remove one of the fully initialized items, and verify the screen recording
+  // item that was initialized late is shown.
+  model()->RemoveItem(screenshot_item_1->id());
+
+  screen_capture_chips = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_capture_chips.size());
+  EXPECT_EQ(screenshot_item_3->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
+  EXPECT_EQ(screenshot_item_2->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
+  EXPECT_EQ(screen_recording_item->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
+
+  // Add partially initialized screen recording item - verify it doesn't get
+  // shown in the UI yet.
+  HoldingSpaceItem* screen_recording_item_last =
+      AddPartiallyInitializedItem(HoldingSpaceItem::Type::kScreenRecording,
+                                  base::FilePath("/tmp/screen_recording_last"));
+  screen_capture_chips = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_capture_chips.size());
+  EXPECT_EQ(screenshot_item_3->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
+  EXPECT_EQ(screenshot_item_2->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
+  EXPECT_EQ(screen_recording_item->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
+
+  // Initialize the screen recording item and verify it is shown first.
+  model()->InitializeOrRemoveItem(screen_recording_item_last->id(),
+                                  GURL("filesystem:screen_recording"));
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  screen_capture_chips = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_capture_chips.size());
+  EXPECT_EQ(screen_recording_item_last->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
+  EXPECT_EQ(screenshot_item_3->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
+  EXPECT_EQ(screenshot_item_2->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
+
+  test_api()->Close();
+}
+
+// Tests that partially initialized screenshot item shows in the UI in the
+// reverse order from added time rather than initialization time.
+TEST_P(HoldingSpaceTrayTest,
+       PartialScreenshotItemWithExistingScreenRecordingItems) {
+  StartSession();
+  test_api()->Show();
+
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+  ASSERT_TRUE(test_api()->GetScreenCaptureViews().empty());
+
+  // Add partially initialized screenshot item - verify it doesn't get shown
+  // in the UI yet.
+  HoldingSpaceItem* screenshot_item = AddPartiallyInitializedItem(
+      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake_1"));
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+
+  // Add three screenshot recording items to fill up the section.
+  HoldingSpaceItem* screen_recording_item_1 = AddItem(
+      HoldingSpaceItem::Type::kScreenRecording, base::FilePath("/tmp/fake_2"));
+  HoldingSpaceItem* screen_recording_item_2 = AddItem(
+      HoldingSpaceItem::Type::kScreenRecording, base::FilePath("/tmp/fake_3"));
+  HoldingSpaceItem* screen_recording_item_3 = AddItem(
+      HoldingSpaceItem::Type::kScreenRecording, base::FilePath("/tmp/fake_4"));
+  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  std::vector<views::View*> screen_capture_chips =
+      test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_capture_chips.size());
+  EXPECT_EQ(screen_recording_item_3->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
+  EXPECT_EQ(screen_recording_item_2->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
+  EXPECT_EQ(screen_recording_item_1->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
+
+  // Initialize the screenshot item and verify it is not shown.
+  model()->InitializeOrRemoveItem(screenshot_item->id(),
+                                  GURL("filesystem:fake_1"));
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  screen_capture_chips = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_capture_chips.size());
+  EXPECT_EQ(screen_recording_item_3->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
+  EXPECT_EQ(screen_recording_item_2->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
+  EXPECT_EQ(screen_recording_item_1->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
+
+  // Remove one of the fully initialized items, and verify the partially
+  // initialized item is not shown.
+  model()->RemoveItem(screen_recording_item_1->id());
+
+  screen_capture_chips = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_capture_chips.size());
+  EXPECT_EQ(screen_recording_item_3->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
+  EXPECT_EQ(screen_recording_item_2->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
+  EXPECT_EQ(screenshot_item->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
+
+  test_api()->Close();
+}
+
+// Screen recordings should have an overlaying play icon.
+TEST_P(HoldingSpaceTrayTest, PlayIconForScreenRecordings) {
+  StartSession();
+  test_api()->Show();
+
+  // Add one screenshot item and one screen recording item.
+  HoldingSpaceItem* screenshot_item = AddItem(
+      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake_1"));
+  HoldingSpaceItem* screen_recording_item = AddItem(
+      HoldingSpaceItem::Type::kScreenRecording, base::FilePath("/tmp/fake_2"));
+  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
+
+  std::vector<views::View*> screen_capture_chips =
+      test_api()->GetScreenCaptureViews();
+
+  EXPECT_EQ(2u, screen_capture_chips.size());
+
+  EXPECT_EQ(screenshot_item->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
+  EXPECT_FALSE(screen_capture_chips[1]->GetViewByID(
+      kHoldingSpaceScreenCapturePlayIconId));
+  EXPECT_EQ(screen_recording_item->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
+  EXPECT_TRUE(screen_capture_chips[0]->GetViewByID(
+      kHoldingSpaceScreenCapturePlayIconId));
+}
+
+// Until the user has pinned an item, a placeholder should exist in the pinned
+// files bubble which contains a chip to open the Files app.
+TEST_P(HoldingSpaceTrayTest, PlaceholderContainsFilesAppChip) {
+  StartSession(/*pre_mark_time_of_first_add=*/false);
+
+  // The tray button should *not* be shown for users that have never added
+  // anything to the holding space.
+  EXPECT_FALSE(test_api()->IsShowingInShelf());
+
+  // Add a download item. This should cause the tray button to show.
+  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake"));
+  MarkTimeOfFirstAdd();
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+
+  // Show the bubble. Both the pinned files and recent files child bubbles
+  // should be shown.
+  test_api()->Show();
+  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
+  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
+
+  // A chip to open the Files app should exist in the pinned files bubble.
+  views::View* pinned_files_bubble = test_api()->GetPinnedFilesBubble();
+  ASSERT_TRUE(pinned_files_bubble);
+  views::View* files_app_chip =
+      pinned_files_bubble->GetViewByID(kHoldingSpaceFilesAppChipId);
+  ASSERT_TRUE(files_app_chip);
+
+  // Prior to being acted upon by the user, there should be no events logged to
+  // the Files app chip histogram.
+  base::HistogramTester histogram_tester;
+  histogram_tester.ExpectBucketCount(
+      "HoldingSpace.FilesAppChip.Action.All",
+      holding_space_metrics::FilesAppChipAction::kClick, 0);
+
+  // Click the chip and expect a call to open the Files app.
+  EXPECT_CALL(*client(), OpenMyFiles);
+  Click(files_app_chip);
+
+  // After having been acted upon by the user, there should be a single click
+  // event logged to the Files app chip histogram.
+  histogram_tester.ExpectBucketCount(
+      "HoldingSpace.FilesAppChip.Action.All",
+      holding_space_metrics::FilesAppChipAction::kClick, 1);
+
+  // Because the holding space model contains a download item, the holding space
+  // tray should still be shown. The recent files bubble should be shown but
+  // pinned files child bubble should have been hidden due to destruction of the
+  // pinned files section placeholder which is no longer relevant.
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
+  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
+}
+
+// The pinned files section of holding space UI contains a placeholder if the
+// user has never pinned a file. The placeholder contains a Files app chip to
+// take the user to the Files app to pin their first file. Once the user has
+// pressed the Files app chip, the pinned files section placeholder should be
+// permanently hidden.
+TEST_P(HoldingSpaceTrayTest, PlaceholderHiddenAfterFilesAppChipPressed) {
+  StartSession(/*pre_mark_time_of_first_add=*/true);
+
+  // The tray button should be shown because the user has previously added an
+  // item to their holding space.
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+
+  // Show the bubble. Only the pinned files child bubble should be shown.
+  test_api()->Show();
+  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+
+  // A chip to open the Files app should exist in the pinned files bubble.
+  views::View* pinned_files_bubble = test_api()->GetPinnedFilesBubble();
+  ASSERT_TRUE(pinned_files_bubble);
+  views::View* files_app_chip =
+      pinned_files_bubble->GetViewByID(kHoldingSpaceFilesAppChipId);
+  ASSERT_TRUE(files_app_chip);
+
+  // Click the chip and expect a call to open the Files app.
+  EXPECT_CALL(*client(), OpenMyFiles);
+  Click(files_app_chip);
+
+  // Because the holding space is completely empty, clicking the Files app chip
+  // should cause the holding space tray and all associated bubbles to hide.
+  EXPECT_FALSE(test_api()->IsShowingInShelf());
+  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+
+  // Add a download item. This should cause the tray button to show.
+  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake"));
+  MarkTimeOfFirstAdd();
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+
+  // Show holding space UI. Because the Files app chip was previously pressed,
+  // the recent files bubble should be shown but the pinned files bubble should
+  // not.
+  test_api()->Show();
+  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
+  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
+}
+
+// User should be able to open the Downloads folder in the Files app by pressing
+// the enter key on the Downloads section header.
+TEST_P(HoldingSpaceTrayTest, EnterKeyOpensDownloads) {
+  StartSession();
+
+  // Add a download item.
+  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake1"));
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+
+  // Show the bubble.
+  test_api()->Show();
+  std::vector<views::View*> download_chips = test_api()->GetDownloadChips();
+  ASSERT_EQ(download_chips.size(), 1u);
+
+  // Select the download item. Previously there was a bug where if a holding
+  // space item view was selected, the enter key would *not* open Downloads.
+  Click(download_chips[0]);
+  EXPECT_TRUE(HoldingSpaceItemView::Cast(download_chips[0])->selected());
+
+  // Focus the downloads section header.
+  auto* downloads_section_header = test_api()->GetDownloadsSectionHeader();
+  ASSERT_TRUE(downloads_section_header);
+  EXPECT_TRUE(PressTabUntilFocused(downloads_section_header));
+
+  // Press ENTER and expect an attempt to open the Downloads folder in the Files
+  // app. There should be *no* attempts to open an holding space items.
+  EXPECT_CALL(*client(), OpenItems).Times(0);
+  EXPECT_CALL(*client(), OpenDownloads);
+  PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN);
+}
+
+// User should be able to launch selected holding space items by pressing the
+// enter key.
+TEST_P(HoldingSpaceTrayTest, EnterKeyOpensSelectedFiles) {
+  StartSession();
+
+  // Add three holding space items.
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake2"));
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake3"));
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+
+  // Show the bubble.
+  test_api()->Show();
+  const std::vector<views::View*> pinned_file_chips =
+      test_api()->GetPinnedFileChips();
+  ASSERT_EQ(pinned_file_chips.size(), 3u);
+  const std::array<HoldingSpaceItemView*, 3> item_views = {
+      HoldingSpaceItemView::Cast(pinned_file_chips[0]),
+      HoldingSpaceItemView::Cast(pinned_file_chips[1]),
+      HoldingSpaceItemView::Cast(pinned_file_chips[2]),
+  };
+
+  // Press the enter key. The client should *not* attempt to open any items.
+  EXPECT_CALL(*client(), OpenItems).Times(0);
+  PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN);
+  testing::Mock::VerifyAndClearExpectations(client());
+
+  // Click an item. The view should be selected.
+  Click(item_views[0]);
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+  EXPECT_FALSE(item_views[2]->selected());
+
+  // Press the enter key. We expect the client to open the selected item.
+  EXPECT_CALL(*client(), OpenItems(testing::ElementsAre(item_views[0]->item()),
+                                   testing::_));
+  PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN);
+  testing::Mock::VerifyAndClearExpectations(client());
+
+  // Shift-click on the second item. Both views should be selected.
+  Click(item_views[1], ui::EF_SHIFT_DOWN);
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_TRUE(item_views[1]->selected());
+
+  // Press the enter key. We expect the client to open the selected items.
+  EXPECT_CALL(*client(), OpenItems(testing::ElementsAre(item_views[0]->item(),
+                                                        item_views[1]->item()),
+                                   testing::_));
+  PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN);
+  testing::Mock::VerifyAndClearExpectations(client());
+
+  // Tab traverse to the last item.
+  EXPECT_TRUE(PressTabUntilFocused(item_views[2]));
+
+  // Press the enter key. The client should open only the focused item since
+  // it was *not* selected prior to pressing the enter key.
+  EXPECT_CALL(*client(), OpenItems(testing::ElementsAre(item_views[2]->item()),
+                                   testing::_));
+  PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+  EXPECT_TRUE(item_views[2]->selected());
+}
+
+// Clicking on tote bubble background should deselect any selected items.
+TEST_P(HoldingSpaceTrayTest, ClickBackgroundToDeselectItems) {
+  StartSession();
+
+  // Add two items.
+  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake1"));
+  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake2"));
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+
+  // Show the bubble and cache holding space item views.
+  test_api()->Show();
+  std::vector<views::View*> download_chips = test_api()->GetDownloadChips();
+  ASSERT_EQ(2u, download_chips.size());
+  std::array<HoldingSpaceItemView*, 2> item_views = {
+      HoldingSpaceItemView::Cast(download_chips[0]),
+      HoldingSpaceItemView::Cast(download_chips[1])};
+
+  // Click an item chip. The view should be selected.
+  Click(download_chips[0]);
+  ASSERT_TRUE(item_views[0]->selected());
+  ASSERT_FALSE(item_views[1]->selected());
+
+  // Clicking on the parent view should deselect item.
+  Click(download_chips[0]->parent());
+  ASSERT_FALSE(item_views[0]->selected());
+  ASSERT_FALSE(item_views[1]->selected());
+
+  // Click on both items to select them both.
+  Click(download_chips[0], ui::EF_SHIFT_DOWN);
+  Click(download_chips[1], ui::EF_SHIFT_DOWN);
+  ASSERT_TRUE(item_views[0]->selected());
+  ASSERT_TRUE(item_views[1]->selected());
+
+  // Clicking on the parent view should deselect both items.
+  Click(download_chips[0]->parent());
+  ASSERT_FALSE(item_views[0]->selected());
+  ASSERT_FALSE(item_views[1]->selected());
+}
+
+// It should be possible to select multiple items in clamshell mode.
+TEST_P(HoldingSpaceTrayTest, MultiselectInClamshellMode) {
+  StartSession();
+
+  // Add a few holding space items to populate each section.
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
+  AddItem(HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake2"));
+  AddItem(HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake3"));
+  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake4"));
+  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake5"));
+
+  // Show the bubble and cache holding space item views.
+  test_api()->Show();
+  std::vector<views::View*> pinned_file_chips =
+      test_api()->GetPinnedFileChips();
+  ASSERT_EQ(pinned_file_chips.size(), 1u);
+  std::vector<views::View*> screen_capture_views =
+      test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(screen_capture_views.size(), 2u);
+  std::vector<views::View*> download_chips = test_api()->GetDownloadChips();
+  ASSERT_EQ(download_chips.size(), 2u);
+  std::vector<HoldingSpaceItemView*> item_views(
+      {HoldingSpaceItemView::Cast(pinned_file_chips[0]),
+       HoldingSpaceItemView::Cast(screen_capture_views[0]),
+       HoldingSpaceItemView::Cast(screen_capture_views[1]),
+       HoldingSpaceItemView::Cast(download_chips[0]),
+       HoldingSpaceItemView::Cast(download_chips[1])});
+
+  // Shift-click the middle view. It should become selected.
+  Click(item_views[2], ui::EF_SHIFT_DOWN);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+  EXPECT_TRUE(item_views[2]->selected());  // The clicked view.
+  EXPECT_FALSE(item_views[3]->selected());
+  EXPECT_FALSE(item_views[4]->selected());
+
+  // Click the middle view. It should *not* become unselected.
+  Click(item_views[2]);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+  EXPECT_TRUE(item_views[2]->selected());  // The clicked view.
+  EXPECT_FALSE(item_views[3]->selected());
+  EXPECT_FALSE(item_views[4]->selected());
+
+  // Shift-click the bottom view. We should now have selected a range.
+  Click(item_views[4], ui::EF_SHIFT_DOWN);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+  EXPECT_TRUE(item_views[2]->selected());  // The previously clicked view.
+  EXPECT_TRUE(item_views[3]->selected());
+  EXPECT_TRUE(item_views[4]->selected());  // The clicked view.
+
+  // Shift-click the top view. The previous range should be cleared and the
+  // new range selected.
+  Click(item_views[0], ui::EF_SHIFT_DOWN);
+  EXPECT_TRUE(item_views[0]->selected());  // The clicked view.
+  EXPECT_TRUE(item_views[1]->selected());
+  EXPECT_TRUE(item_views[2]->selected());  // The previously clicked view.
+  EXPECT_FALSE(item_views[3]->selected());
+  EXPECT_FALSE(item_views[4]->selected());
+
+  // Control-click the bottom view. The previous range should still be selected
+  // as well as the view that was just clicked.
+  Click(item_views[4], ui::EF_CONTROL_DOWN);
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_TRUE(item_views[1]->selected());
+  EXPECT_TRUE(item_views[2]->selected());
+  EXPECT_FALSE(item_views[3]->selected());
+  EXPECT_TRUE(item_views[4]->selected());  // The clicked view.
+
+  // Shift-click the second-from-the-bottom view. A new range should be selected
+  // from the bottom view to the view that was just clicked. The previous range
+  // that was selected should still be selected.
+  Click(item_views[3], ui::EF_SHIFT_DOWN);
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_TRUE(item_views[1]->selected());
+  EXPECT_TRUE(item_views[2]->selected());
+  EXPECT_TRUE(item_views[3]->selected());  // The clicked view.
+  EXPECT_TRUE(item_views[4]->selected());  // The previously clicked view.
+
+  // Control-click the second-from-the-top view. The view that was just clicked
+  // should now be unselected. No other views that were selected should change.
+  Click(item_views[1], ui::EF_CONTROL_DOWN);
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());  // The clicked view.
+  EXPECT_TRUE(item_views[2]->selected());
+  EXPECT_TRUE(item_views[3]->selected());
+  EXPECT_TRUE(item_views[4]->selected());
+
+  // Add another holding space item. This should cause views for existing
+  // holding space items to be destroyed and recreated.
+  AddItem(HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake6"));
+  pinned_file_chips = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(pinned_file_chips.size(), 1u);
+  screen_capture_views = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(screen_capture_views.size(), 3u);
+  download_chips = test_api()->GetDownloadChips();
+  ASSERT_EQ(download_chips.size(), 2u);
+  item_views = {HoldingSpaceItemView::Cast(pinned_file_chips[0]),
+                HoldingSpaceItemView::Cast(screen_capture_views[0]),
+                HoldingSpaceItemView::Cast(screen_capture_views[1]),
+                HoldingSpaceItemView::Cast(screen_capture_views[2]),
+                HoldingSpaceItemView::Cast(download_chips[0]),
+                HoldingSpaceItemView::Cast(download_chips[1])};
+
+  // Views for items previously selected should have selection restored.
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());  // The view for the new item.
+  EXPECT_FALSE(item_views[2]->selected());  // The previously clicked view.
+  EXPECT_TRUE(item_views[3]->selected());
+  EXPECT_TRUE(item_views[4]->selected());
+  EXPECT_TRUE(item_views[5]->selected());
+
+  // Shift-click the second-from-the-bottom view. A new range should be selected
+  // from the previously clicked view to the view that was just clicked.
+  Click(item_views[4], ui::EF_SHIFT_DOWN);
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+  EXPECT_TRUE(item_views[2]->selected());  // The previously clicked view.
+  EXPECT_TRUE(item_views[3]->selected());
+  EXPECT_TRUE(item_views[4]->selected());  // The clicked view.
+  EXPECT_TRUE(item_views[5]->selected());
+
+  // Click the third-from-the-bottom view. Even though it was already selected
+  // it should now be the only view selected.
+  Click(item_views[3]);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+  EXPECT_FALSE(item_views[2]->selected());
+  EXPECT_TRUE(item_views[3]->selected());  // The clicked view.
+  EXPECT_FALSE(item_views[4]->selected());
+  EXPECT_FALSE(item_views[5]->selected());
+
+  // Control-click the third-from-the-bottom view. There should no longer be
+  // any views selected.
+  Click(item_views[3], ui::EF_CONTROL_DOWN);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+  EXPECT_FALSE(item_views[2]->selected());
+  EXPECT_FALSE(item_views[3]->selected());  // The clicked view.
+  EXPECT_FALSE(item_views[4]->selected());
+  EXPECT_FALSE(item_views[5]->selected());
+}
+
+// It should be possible to select multiple items in touch mode.
+TEST_P(HoldingSpaceTrayTest, MultiselectInTouchMode) {
+  StartSession();
+
+  // Add a few holding space items.
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake2"));
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake3"));
+
+  // Show the bubble and cache holding space item views.
+  test_api()->Show();
+  const std::vector<views::View*> pinned_file_chips =
+      test_api()->GetPinnedFileChips();
+  ASSERT_EQ(pinned_file_chips.size(), 3u);
+  std::array<HoldingSpaceItemView*, 3> item_views = {
+      HoldingSpaceItemView::Cast(pinned_file_chips[0]),
+      HoldingSpaceItemView::Cast(pinned_file_chips[1]),
+      HoldingSpaceItemView::Cast(pinned_file_chips[2])};
+
+  // Long press an item. The view should be selected and a context menu shown.
+  LongPress(item_views[0]);
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+  EXPECT_FALSE(item_views[2]->selected());
+  EXPECT_TRUE(views::MenuController::GetActiveInstance());
+
+  // Close the context menu. The view that was long pressed should still be
+  // selected.
+  PressAndReleaseKey(ui::KeyboardCode::VKEY_ESCAPE);
+  EXPECT_FALSE(views::MenuController::GetActiveInstance());
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+  EXPECT_FALSE(item_views[2]->selected());
+
+  // Long press another item. Both views that were long pressed should be
+  // selected and a context menu shown.
+  LongPress(item_views[1]);
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_TRUE(item_views[1]->selected());
+  EXPECT_FALSE(item_views[2]->selected());
+  EXPECT_TRUE(views::MenuController::GetActiveInstance());
+
+  // Close the context menu. Both views that were long pressed should still be
+  // selected.
+  PressAndReleaseKey(ui::KeyboardCode::VKEY_ESCAPE);
+  EXPECT_FALSE(views::MenuController::GetActiveInstance());
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_TRUE(item_views[1]->selected());
+  EXPECT_FALSE(item_views[2]->selected());
+
+  // Tap one of the selected views. It should no longer be selected.
+  GestureTap(item_views[0]);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_TRUE(item_views[1]->selected());
+  EXPECT_FALSE(item_views[2]->selected());
+
+  // Tap one of the unselected views. It should become selected.
+  GestureTap(item_views[2]);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_TRUE(item_views[1]->selected());
+  EXPECT_TRUE(item_views[2]->selected());
+
+  // Tap both selected views. No views should be selected.
+  GestureTap(item_views[1]);
+  GestureTap(item_views[2]);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+  EXPECT_FALSE(item_views[2]->selected());
+
+  // Tap an unselected view. This is the only way to open an item via touch.
+  // There must be *no* views currently selected when tapping a view.
+  EXPECT_CALL(*client(), OpenItems)
+      .WillOnce(
+          testing::Invoke([&](const std::vector<const HoldingSpaceItem*>& items,
+                              HoldingSpaceClient::SuccessCallback callback) {
+            ASSERT_EQ(items.size(), 1u);
+            EXPECT_EQ(items[0], item_views[2]->item());
+          }));
+  GestureTap(item_views[2]);
+  testing::Mock::VerifyAndClearExpectations(client());
+}
+
+// Verifies that selection UI is correctly represented depending on device state
+// and the number of selected holding space item views.
+TEST_P(HoldingSpaceTrayTest, SelectionUi) {
+  StartSession();
+
+  // Add both a chip-style and screen-capture-style holding space item.
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
+  AddItem(HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake2"));
+
+  // Show holding space UI.
+  test_api()->Show();
+  ASSERT_TRUE(test_api()->IsShowing());
+
+  // Cache holding space item views.
+  std::vector<views::View*> pinned_file_chips =
+      test_api()->GetPinnedFileChips();
+  ASSERT_EQ(pinned_file_chips.size(), 1u);
+  std::vector<views::View*> screen_capture_views =
+      test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(screen_capture_views.size(), 1u);
+  std::vector<HoldingSpaceItemView*> item_views = {
+      HoldingSpaceItemView::Cast(pinned_file_chips[0]),
+      HoldingSpaceItemView::Cast(screen_capture_views[0])};
+
+  // Expects visibility of `view` to match `visible`.
+  auto expect_visible = [](views::View* view, bool visible) {
+    ASSERT_TRUE(view);
+    EXPECT_EQ(view->GetVisible(), visible);
+  };
+
+  // Expects visibility of `item_view`'s checkmark to match `visible`.
+  auto expect_checkmark_visible = [&](HoldingSpaceItemView* item_view,
+                                      bool visible) {
+    auto* checkmark = item_view->GetViewByID(kHoldingSpaceItemCheckmarkId);
+    expect_visible(checkmark, visible);
+  };
+
+  // Expects visibility of `item_view`'s image to match `visible`.
+  auto expect_image_visible = [&](HoldingSpaceItemView* item_view,
+                                  bool visible) {
+    auto* image = item_view->GetViewByID(kHoldingSpaceItemImageId);
+    expect_visible(image, visible);
+  };
+
+  // Initially no holding space item views are selected.
+  for (HoldingSpaceItemView* item_view : item_views) {
+    EXPECT_FALSE(item_view->selected());
+    expect_checkmark_visible(item_view, false);
+    expect_image_visible(item_view, true);
+  }
+
+  // Select the first holding space item view.
+  Click(item_views[0]);
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+
+  // Since the device is not in tablet mode and only a single holding space item
+  // view is selected, no checkmarks should be shown.
+  for (HoldingSpaceItemView* item_view : item_views) {
+    expect_checkmark_visible(item_view, false);
+    expect_image_visible(item_view, true);
+  }
+
+  // Add the second holding space item view to the selection.
+  Click(item_views[1], ui::EF_CONTROL_DOWN);
+
+  // Because there are multiple holding space item views selected, checkmarks
+  // should be shown. For chip-style holding space item views the checkmark
+  // replaces the image.
+  for (HoldingSpaceItemView* item_view : item_views) {
+    EXPECT_TRUE(item_view->selected());
+    expect_checkmark_visible(item_view, true);
+    expect_image_visible(item_view, item_view->item()->IsScreenCapture());
+  }
+
+  // Remove the second holding space item. Note that its view was selected.
+  HoldingSpaceController::Get()->model()->RemoveItem(item_views[1]->item_id());
+
+  // Re-cache holding space item views as they will have been destroyed and
+  // recreated when animating item view removal.
+  pinned_file_chips = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(pinned_file_chips.size(), 1u);
+  screen_capture_views = test_api()->GetScreenCaptureViews();
+  EXPECT_EQ(screen_capture_views.size(), 0u);
+  item_views = {HoldingSpaceItemView::Cast(pinned_file_chips[0])};
+
+  // The first (and only) holding space item view should still be selected
+  // although it should no longer show its checkmark since now only a single
+  // holding space item view is selected.
+  EXPECT_TRUE(item_views[0]->selected());
+  expect_checkmark_visible(item_views[0], false);
+  expect_image_visible(item_views[0], true);
+
+  // Switch to tablet mode. Note that this closes holding space UI.
+  ShellTestApi().SetTabletModeEnabledForTest(true);
+  EXPECT_FALSE(test_api()->IsShowing());
+
+  // Re-show holding space UI.
+  test_api()->Show();
+  ASSERT_TRUE(test_api()->IsShowing());
+
+  // Cache holding space item views.
+  pinned_file_chips = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(pinned_file_chips.size(), 1u);
+  screen_capture_views = test_api()->GetScreenCaptureViews();
+  EXPECT_EQ(screen_capture_views.size(), 0u);
+  item_views = {HoldingSpaceItemView::Cast(pinned_file_chips[0])};
+
+  // Initially no holding space item views are selected.
+  EXPECT_FALSE(item_views[0]->selected());
+
+  // Select the first (and only) holding space item view.
+  Click(item_views[0]);
+
+  // In tablet mode, a selected holding space item view should always show its
+  // checkmark even if it is the only holding space item view selected.
+  EXPECT_TRUE(item_views[0]->selected());
+  expect_checkmark_visible(item_views[0], true);
+  expect_image_visible(item_views[0], false);
+
+  // Switch out of tablet mode. Note that this *doesn't* close holding space UI.
+  ShellTestApi().SetTabletModeEnabledForTest(false);
+  ASSERT_TRUE(test_api()->IsShowing());
+
+  // The first (and only) holding space item should still be selected but it
+  // should update checkmark/image visibility given that it is the only holding
+  // space item view selected.
+  EXPECT_TRUE(item_views[0]->selected());
+  expect_checkmark_visible(item_views[0], false);
+  expect_image_visible(item_views[0], true);
+}
+
+// Verifies selection state after pressing primary/secondary actions.
+TEST_P(HoldingSpaceTrayTest, SelectionWithPrimaryAndSecondaryActions) {
+  StartSession();
+
+  // Add multiple in-progress holding space items.
+  std::vector<HoldingSpaceItem*> items = {
+      AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake1"),
+              HoldingSpaceProgress(0, 100)),
+      AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake2"),
+              HoldingSpaceProgress(0, 100))};
+
+  // In-progress download items typically support in-progress commands.
+  std::vector<const HoldingSpaceItem*> cancelled_items;
+  std::vector<const HoldingSpaceItem*> paused_items;
+  for (HoldingSpaceItem* item : items) {
+    EXPECT_TRUE(item->SetInProgressCommands(
+        {CreateInProgressCommand(
+             HoldingSpaceCommandId::kCancelItem,
+             IDS_ASH_HOLDING_SPACE_CONTEXT_MENU_CANCEL,
+             base::BindLambdaForTesting([&](const HoldingSpaceItem* item,
+                                            HoldingSpaceCommandId command_id) {
+               DCHECK_EQ(command_id, HoldingSpaceCommandId::kCancelItem);
+               cancelled_items.push_back(item);
+             })),
+         CreateInProgressCommand(
+             HoldingSpaceCommandId::kPauseItem,
+             IDS_ASH_HOLDING_SPACE_CONTEXT_MENU_PAUSE,
+             base::BindLambdaForTesting([&](const HoldingSpaceItem* item,
+                                            HoldingSpaceCommandId command_id) {
+               DCHECK_EQ(command_id, HoldingSpaceCommandId::kPauseItem);
+               paused_items.push_back(item);
+             }))}));
+  }
+
+  // Show UI.
+  test_api()->Show();
+  ASSERT_TRUE(test_api()->IsShowing());
+
+  // Cache views.
+  const std::vector<views::View*> views = test_api()->GetDownloadChips();
+  ASSERT_EQ(views.size(), 2u);
+  const std::vector<HoldingSpaceItemView*> item_views = {
+      HoldingSpaceItemView::Cast(views[0]),
+      HoldingSpaceItemView::Cast(views[1])};
+
+  // Verify initial selection state.
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+
+  // Move mouse to the 1st item.
+  MoveMouseTo(item_views[0]);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+
+  // Select the 1st item.
+  Click(item_views[0]);
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+
+  {
+    auto* primary_action =
+        item_views[0]->GetViewByID(kHoldingSpaceItemPrimaryActionContainerId);
+    ViewDrawnWaiter().Wait(primary_action);
+
+    // Click the 1st item's primary action. Selection state shouldn't change.
+    EXPECT_TRUE(cancelled_items.empty());
+    Click(primary_action);
+    EXPECT_THAT(cancelled_items, ElementsAre(item_views[0]->item()));
+    EXPECT_TRUE(item_views[0]->selected());
+    EXPECT_FALSE(item_views[1]->selected());
+
+    // Reset tracking.
+    cancelled_items.clear();
+  }
+
+  // Move mouse to the 2nd item.
+  MoveMouseTo(item_views[1]);
+  EXPECT_TRUE(item_views[0]->selected());
+  EXPECT_FALSE(item_views[1]->selected());
+
+  {
+    auto* primary_action =
+        item_views[1]->GetViewByID(kHoldingSpaceItemPrimaryActionContainerId);
+    ViewDrawnWaiter().Wait(primary_action);
+
+    // Click the 2nd item's primary action. Selection state should change.
+    EXPECT_TRUE(cancelled_items.empty());
+    Click(primary_action);
+    EXPECT_THAT(cancelled_items, ElementsAre(item_views[1]->item()));
+    EXPECT_FALSE(item_views[0]->selected());
+    EXPECT_FALSE(item_views[1]->selected());
+  }
+
+  // Select the 2nd item.
+  Click(item_views[1]);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_TRUE(item_views[1]->selected());
+
+  {
+    auto* secondary_action =
+        item_views[1]->GetViewByID(kHoldingSpaceItemSecondaryActionContainerId);
+    ViewDrawnWaiter().Wait(secondary_action);
+
+    // Click the 2nd item's secondary action. Selection state shouldn't change.
+    EXPECT_TRUE(paused_items.empty());
+    Click(secondary_action);
+    EXPECT_THAT(paused_items, ElementsAre(item_views[1]->item()));
+    EXPECT_FALSE(item_views[0]->selected());
+    EXPECT_TRUE(item_views[1]->selected());
+
+    // Reset tracking.
+    paused_items.clear();
+  }
+
+  // Move mouse to the 1st item.
+  MoveMouseTo(item_views[0]);
+  EXPECT_FALSE(item_views[0]->selected());
+  EXPECT_TRUE(item_views[1]->selected());
+
+  {
+    auto* secondary_action =
+        item_views[0]->GetViewByID(kHoldingSpaceItemSecondaryActionContainerId);
+    ViewDrawnWaiter().Wait(secondary_action);
+
+    // Click the 1st item's secondary action. Selection state should change.
+    EXPECT_TRUE(paused_items.empty());
+    Click(secondary_action);
+    EXPECT_THAT(paused_items, ElementsAre(item_views[0]->item()));
+    EXPECT_FALSE(item_views[0]->selected());
+    EXPECT_FALSE(item_views[1]->selected());
+  }
+}
+
+// Verifies that attempting to open holding space items via double click works
+// as expected with event modifiers.
+TEST_P(HoldingSpaceTrayTest, OpenItemsViaDoubleClickWithEventModifiers) {
+  StartSession();
+
+  // Add multiple holding space items.
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake2"));
+
+  const auto show_holding_space_and_cache_views =
+      [&](std::vector<HoldingSpaceItemView*>* item_views) {
+        // Show holding space UI.
+        test_api()->Show();
+        ASSERT_TRUE(test_api()->IsShowing());
+
+        // Cache holding space item views.
+        const std::vector<views::View*> views =
+            test_api()->GetPinnedFileChips();
+        ASSERT_EQ(views.size(), 2u);
+        *item_views = {HoldingSpaceItemView::Cast(views[0]),
+                       HoldingSpaceItemView::Cast(views[1])};
+      };
+
+  std::vector<HoldingSpaceItemView*> item_views;
+  show_holding_space_and_cache_views(&item_views);
+
+  // Double click an item with the control key down. Expect the clicked holding
+  // space item to be opened.
+  EXPECT_CALL(*client(), OpenItems(ElementsAre(item_views[0]->item()), _));
+  DoubleClick(item_views[0], ui::EF_CONTROL_DOWN);
+  testing::Mock::VerifyAndClearExpectations(client());
+
+  // Reset.
+  test_api()->Close();
+  show_holding_space_and_cache_views(&item_views);
+
+  // Double click an item with the shift key down. Expect the clicked holding
+  // space item to be opened.
+  EXPECT_CALL(*client(), OpenItems(ElementsAre(item_views[0]->item()), _));
+  DoubleClick(item_views[0], ui::EF_SHIFT_DOWN);
+  testing::Mock::VerifyAndClearExpectations(client());
+
+  // Reset.
+  test_api()->Close();
+  show_holding_space_and_cache_views(&item_views);
+
+  // Click a holding space item. Then double click the same item with the
+  // control key down. Expect the clicked holding space item to be opened.
+  EXPECT_CALL(*client(), OpenItems(ElementsAre(item_views[0]->item()), _));
+  Click(item_views[0]);
+  DoubleClick(item_views[0], ui::EF_CONTROL_DOWN);
+  testing::Mock::VerifyAndClearExpectations(client());
+
+  // Reset.
+  test_api()->Close();
+  show_holding_space_and_cache_views(&item_views);
+
+  // Click a holding space item. Then double click the same item with the
+  // shift key down. Expect the clicked holding space item to be opened.
+  EXPECT_CALL(*client(), OpenItems(ElementsAre(item_views[0]->item()), _));
+  Click(item_views[0]);
+  DoubleClick(item_views[0], ui::EF_SHIFT_DOWN);
+  testing::Mock::VerifyAndClearExpectations(client());
+
+  // Reset.
+  test_api()->Close();
+  show_holding_space_and_cache_views(&item_views);
+
+  // Click a holding space item. Then double click a different item with the
+  // control key down. Expect both holding space items to be opened.
+  EXPECT_CALL(
+      *client(),
+      OpenItems(ElementsAre(item_views[0]->item(), item_views[1]->item()), _));
+  Click(item_views[0]);
+  DoubleClick(item_views[1], ui::EF_CONTROL_DOWN);
+  testing::Mock::VerifyAndClearExpectations(client());
+
+  // Reset.
+  test_api()->Close();
+  show_holding_space_and_cache_views(&item_views);
+
+  // Click a holding space item. Then double click a different item with the
+  // shift key down. Expect both holding space items to be opened.
+  EXPECT_CALL(
+      *client(),
+      OpenItems(ElementsAre(item_views[0]->item(), item_views[1]->item()), _));
+  Click(item_views[0]);
+  DoubleClick(item_views[1], ui::EF_SHIFT_DOWN);
+  testing::Mock::VerifyAndClearExpectations(client());
+}
+
+// TODO(crbug.com/1208501): Fix flakes and re-enable.
+// Verifies that the holding space tray animates in and out as expected.
+TEST_P(HoldingSpaceTrayTest, DISABLED_EnterAndExitAnimations) {
+  // Prior to session start, the tray should not be showing.
+  EXPECT_FALSE(test_api()->IsShowingInShelf());
+
+  views::View* const tray = test_api()->GetTray();
+  ASSERT_TRUE(tray && tray->layer());
+
+  // Record transforms performed to the `tray` layer.
+  ScopedTransformRecordingLayerDelegate transform_recorder(tray->layer());
+
+  // Start the session. Because a holding space item was added in a previous
+  // session (according to prefs state), the tray should show up without
+  // animation.
+  StartSession();
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(tray->layer()->transform().IsIdentity());
+  EXPECT_FALSE(transform_recorder.DidAnimate());
+  transform_recorder.Reset();
+
+  // Pin a holding space item. Because the tray was already showing there
+  // should be no change in tray visibility.
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
+  MarkTimeOfFirstPin();
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+
+  // Because there was no change in visibility, there should be no transform.
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(tray->layer()->transform().IsIdentity());
+  EXPECT_FALSE(transform_recorder.DidAnimate());
+  transform_recorder.Reset();
+
+  // Remove all holding space items. Because a holding space item was
+  // previously pinned, the tray should animate out.
+  RemoveAllItems();
+  ViewVisibilityChangedWaiter().Wait(tray);
+  EXPECT_FALSE(test_api()->IsShowingInShelf());
+
+  // The exit animation should be the default exit animation in which the tray
+  // scales down and pivots about its center point.
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(transform_recorder.DidAnimate());
+  EXPECT_TRUE(transform_recorder.ScaledFrom({1.f, 1.f}, {0.5f, 0.5f}));
+  EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
+  EXPECT_TRUE(transform_recorder.TranslatedFrom({0.f, 0.f}, {11.f, 12.f}));
+  EXPECT_TRUE(transform_recorder.TranslatedInRange({0.f, 0.f}, {11.f, 12.f}));
+  transform_recorder.Reset();
+
+  // Pin a holding space item. The tray should animate in.
+  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake2"));
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+
+  // The entry animation should be the bounce in animation in which the tray
+  // translates in vertically with scaling (since it previously scaled out).
+  LayerAnimationStoppedWaiter().Wait(tray->layer());
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(transform_recorder.DidAnimate());
+  EXPECT_TRUE(transform_recorder.ScaledFrom({0.5f, 0.5f}, {1.f, 1.f}));
+  EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
+  EXPECT_TRUE(transform_recorder.TranslatedFrom({11.f, 12.f}, {0.f, 0.f}));
+  EXPECT_TRUE(transform_recorder.TranslatedInRange({0.f, -16.f}, {11.f, 12.f}));
+  transform_recorder.Reset();
+
+  // Lock the screen. The tray should animate out.
+  auto* session_controller =
+      ash_test_helper()->test_session_controller_client();
+  session_controller->LockScreen();
+  ViewVisibilityChangedWaiter().Wait(tray);
+  EXPECT_FALSE(test_api()->IsShowingInShelf());
+
+  // The exit animation should be the default exit animation in which the tray
+  // scales down and pivots about its center point.
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(transform_recorder.DidAnimate());
+  EXPECT_TRUE(transform_recorder.ScaledFrom({1.0f, 1.0f}, {0.5f, 0.5f}));
+  EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
+  EXPECT_TRUE(transform_recorder.TranslatedFrom({0.f, 0.f}, {11.f, 12.f}));
+  EXPECT_TRUE(transform_recorder.TranslatedInRange({0.f, 0.f}, {11.f, 12.f}));
+  transform_recorder.Reset();
+
+  // Unlock the screen. The tray should show up without animation.
+  session_controller->UnlockScreen();
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(tray->layer()->transform().IsIdentity());
+  EXPECT_FALSE(transform_recorder.DidAnimate());
+  transform_recorder.Reset();
+
+  // Switch to another user with a populated model. The tray should show up
+  // without animation.
+  constexpr char kSecondaryUserId[] = "user@secondary";
+  HoldingSpaceModel secondary_holding_space_model;
+  AddItemToModel(&secondary_holding_space_model,
+                 HoldingSpaceItem::Type::kPinnedFile,
+                 base::FilePath("/tmp/fake3"));
+  SwitchToSecondaryUser(kSecondaryUserId, /*client=*/nullptr,
+                        &secondary_holding_space_model);
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+
+  // NOTE: When switching to the secondary user the tray will have briefly been
+  // hidden while the primary user's holding space model was detached until the
+  // secondary user's holding space model was attached. That said, the tray will
+  // have scaled out and must scale back in but should *not* bounce.
+  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
+  EXPECT_TRUE(transform_recorder.ScaledFrom({1.f, 1.f}, {1.f, 1.f}));
+  EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
+  EXPECT_TRUE(transform_recorder.TranslatedFrom({0.f, 0.f}, {0.f, 0.f}));
+  EXPECT_TRUE(transform_recorder.TranslatedInRange({0.f, 0.f}, {11.f, 12.f}));
+  transform_recorder.Reset();
+
+  // Clean up.
+  UnregisterModelForUser(kSecondaryUserId);
+}
+
+class HoldingSpacePreviewsTrayTest : public HoldingSpaceAshTestBase {};
+
+TEST_F(HoldingSpacePreviewsTrayTest, HideButtonOnChangeToEmptyModel) {
+  MarkTimeOfFirstPin();
+  StartSession();
+  EnableTrayIconPreviews();
+
+  // The tray button should be hidden if the user has previously pinned an item,
+  // and the holding space is empty.
+  EXPECT_FALSE(test_api()->IsShowingInShelf());
+
+  // Add a download item - the button should be shown.
+  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake_1"));
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
+  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
+
+  HoldingSpaceModel secondary_holding_space_model;
+  SwitchToSecondaryUser("user@secondary", /*client=*/nullptr,
+                        /*model=*/&secondary_holding_space_model);
+  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
+  EXPECT_FALSE(test_api()->IsShowingInShelf());
+  EnableTrayIconPreviews("user@secondary");
+
+  AddItemToModel(&secondary_holding_space_model,
+                 HoldingSpaceItem::Type::kDownload,
+                 base::FilePath("/tmp/fake_2"));
+  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
+  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
+
+  UnregisterModelForUser("user@secondary");
+}
+
+TEST_F(HoldingSpacePreviewsTrayTest, HideButtonOnChangeToNonEmptyModel) {
+  MarkTimeOfFirstPin();
+  StartSession();
+  EnableTrayIconPreviews();
+
+  // The tray button should be hidden if the user has previously pinned an item,
+  // and the holding space is empty.
+  EXPECT_FALSE(test_api()->IsShowingInShelf());
+
+  HoldingSpaceModel secondary_holding_space_model;
+  AddItemToModel(&secondary_holding_space_model,
+                 HoldingSpaceItem::Type::kDownload,
+                 base::FilePath("/tmp/fake_2"));
+  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
+  EXPECT_FALSE(test_api()->IsShowingInShelf());
+
+  SwitchToSecondaryUser("user@secondary", /*client=*/nullptr,
+                        /*model=*/&secondary_holding_space_model);
+  EXPECT_TRUE(test_api()->IsShowingInShelf());
+  EnableTrayIconPreviews("user@secondary");
+
+  EXPECT_FALSE(IsViewVisible(test_api()->GetDefaultTrayIcon()));
+  EXPECT_TRUE(IsViewVisible(test_api()->GetPreviewsTrayIcon()));
+
+  UnregisterModelForUser("user@secondary");
+}
+
+// Tests that the tray icon size changes on in-app shelf.
+TEST_F(HoldingSpacePreviewsTrayTest, UpdateTrayIconSizeForInAppShelf) {
+  MarkTimeOfFirstPin();
+  StartSession();
+  EnableTrayIconPreviews();
+
   // The tray button should be hidden if the user has previously pinned an item,
   // and the holding space is empty.
   EXPECT_FALSE(test_api()->IsShowingInShelf());
@@ -788,11 +2073,12 @@
 // Tests that the tray icon size changes on in-app shelf after transition from
 // overview when overview is not showing in-app shelf.
 TEST_F(
-    HoldingSpaceTrayTest,
+    HoldingSpacePreviewsTrayTest,
     UpdateTrayIconSizeForInAppShelfAfterTransitionFromOverviewWithHomeShelf) {
   MarkTimeOfFirstPin();
   StartSession();
   TabletModeControllerTestApi().EnterTabletMode();
+  EnableTrayIconPreviews();
 
   // Add a download item - the button should be shown.
   AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake_1"));
@@ -839,48 +2125,15 @@
             test_api()->GetPreviewsTrayIcon()->size());
 }
 
-// Tests that a shelf config change just after an item has been removed does
-// not cause a crash.
-TEST_F(HoldingSpaceTrayTest, ShelfConfigChangeWithDelayedItemRemoval) {
-  MarkTimeOfFirstPin();
-  StartSession();
-
-  // Create a test widget to force in-app shelf in tablet mode.
-  std::unique_ptr<views::Widget> widget = CreateTestWidget();
-  ASSERT_TRUE(widget);
-
-  // The tray button should be hidden if the user has previously pinned an item,
-  // and the holding space is empty.
-  EXPECT_FALSE(test_api()->IsShowingInShelf());
-
-  HoldingSpaceItem* item_1 =
-      AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake_1"));
-  HoldingSpaceItem* item_2 =
-      AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake_2"));
-  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
-
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  model()->RemoveItem(item_1->id());
-  TabletModeControllerTestApi().EnterTabletMode();
-  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
-
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  model()->RemoveItem(item_2->id());
-  TabletModeControllerTestApi().LeaveTabletMode();
-  GetTray()->FirePreviewsUpdateTimerIfRunningForTesting();
-  EXPECT_FALSE(test_api()->IsShowingInShelf());
-}
-
 // Tests that a shelf alignment change will behave as expected when there are
 // multiple displays (and therefore multiple shelves/trays).
-TEST_F(HoldingSpaceTrayTest, ShelfAlignmentChangeWithMultipleDisplays) {
+TEST_F(HoldingSpacePreviewsTrayTest, ShelfAlignmentChangeWithMultipleDisplays) {
   // This test requires multiple displays. Create two.
   UpdateDisplay("1280x768,1280x768");
 
   MarkTimeOfFirstPin();
   StartSession();
+  EnableTrayIconPreviews();
 
   // Cache shelves/trays for each display.
   Shelf* const primary_shelf = GetShelf(GetPrimaryDisplay());
@@ -961,10 +2214,418 @@
   }
 }
 
+// Tests how screen captures section is updated during item addition, removal
+// and initialization.
+TEST_F(HoldingSpacePreviewsTrayTest, ScreenCapturesSection) {
+  StartSession();
+  test_api()->Show();
+  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+
+  // Add a screenshot item and verify recent file bubble gets shown.
+  HoldingSpaceItem* item_1 = AddItem(HoldingSpaceItem::Type::kScreenshot,
+                                     base::FilePath("/tmp/fake_1"));
+
+  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
+  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  ASSERT_EQ(1u, test_api()->GetScreenCaptureViews().size());
+
+  // Add partially initialized download item - verify it doesn't get shown in
+  // the UI yet.
+  HoldingSpaceItem* item_2 = AddPartiallyInitializedItem(
+      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake_2"));
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  std::vector<views::View*> screen_captures =
+      test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(1u, screen_captures.size());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
+
+  // Add more items to fill up the section.
+  HoldingSpaceItem* item_3 = AddItem(HoldingSpaceItem::Type::kScreenshot,
+                                     base::FilePath("/tmp/fake_3"));
+  HoldingSpaceItem* item_4 = AddItem(HoldingSpaceItem::Type::kScreenshot,
+                                     base::FilePath("/tmp/fake_4"));
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  screen_captures = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_captures.size());
+  EXPECT_EQ(item_4->id(),
+            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
+  EXPECT_EQ(item_3->id(),
+            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
+
+  // Fully initialize partially initialized item, and verify it gets added to
+  // the section, in the order of addition, replacing the oldest item.
+  model()->InitializeOrRemoveItem(item_2->id(), GURL("filesystem:fake_2"));
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  screen_captures = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_captures.size());
+  EXPECT_EQ(item_4->id(),
+            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
+  EXPECT_EQ(item_3->id(),
+            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
+  EXPECT_EQ(item_2->id(),
+            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
+
+  // Remove the newest item, and verify the section gets updated.
+  model()->RemoveItem(item_4->id());
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  screen_captures = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_captures.size());
+  EXPECT_EQ(item_3->id(),
+            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
+  EXPECT_EQ(item_2->id(),
+            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
+
+  // Remove other items, and verify the recent files bubble gets hidden.
+  model()->RemoveItem(item_2->id());
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  screen_captures = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(2u, screen_captures.size());
+  EXPECT_EQ(item_3->id(),
+            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
+
+  model()->RemoveItem(item_3->id());
+  model()->RemoveItem(item_1->id());
+
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+
+  // Pinned bubble is showing "educational" info, and it should remain shown.
+  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
+}
+
+// Verifies the screen captures section is shown and orders items as expected
+// when the model contains a number of initialized items prior to showing UI.
+TEST_F(HoldingSpacePreviewsTrayTest,
+       ScreenCapturesSectionWithInitializedItemsOnly) {
+  MarkTimeOfFirstPin();
+  StartSession();
+
+  // Add a number of initialized screen capture items.
+  std::deque<HoldingSpaceItem*> items;
+  for (size_t i = 0; i < kMaxScreenCaptures; ++i) {
+    items.push_back(
+        AddItem(HoldingSpaceItem::Type::kScreenshot,
+                base::FilePath("/tmp/fake_" + base::NumberToString(i))));
+  }
+
+  test_api()->Show();
+  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
+
+  std::vector<views::View*> screenshots = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(items.size(), screenshots.size());
+
+  while (!items.empty()) {
+    // View order is expected to be reverse of item order.
+    auto* screenshot = HoldingSpaceItemView::Cast(screenshots.back());
+    EXPECT_EQ(screenshot->item()->id(), items.front()->id());
+
+    items.pop_front();
+    screenshots.pop_back();
+  }
+
+  test_api()->Close();
+}
+
+TEST_F(HoldingSpacePreviewsTrayTest,
+       InitializingScreenCaptureItemThatShouldBeInvisible) {
+  StartSession();
+  test_api()->Show();
+
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+
+  // Add partially initialized download item - verify it doesn't get shown in
+  // the UI yet.
+  HoldingSpaceItem* item_1 = AddPartiallyInitializedItem(
+      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake_1"));
+
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+
+  // Add enough screenshot items to fill up the section.
+  HoldingSpaceItem* item_2 = AddItem(HoldingSpaceItem::Type::kScreenshot,
+                                     base::FilePath("/tmp/fake_2"));
+  HoldingSpaceItem* item_3 = AddItem(HoldingSpaceItem::Type::kScreenshot,
+                                     base::FilePath("/tmp/fake_3"));
+  HoldingSpaceItem* item_4 = AddItem(HoldingSpaceItem::Type::kScreenshot,
+                                     base::FilePath("/tmp/fake_4"));
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  std::vector<views::View*> screen_captures =
+      test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_captures.size());
+  EXPECT_EQ(item_4->id(),
+            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
+  EXPECT_EQ(item_3->id(),
+            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
+  EXPECT_EQ(item_2->id(),
+            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
+
+  // Fully initialize partially initialized item, and verify it's not added to
+  // the section.
+  model()->InitializeOrRemoveItem(item_1->id(), GURL("filesystem:fake_1"));
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  screen_captures = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_captures.size());
+  EXPECT_EQ(item_4->id(),
+            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
+  EXPECT_EQ(item_3->id(),
+            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
+  EXPECT_EQ(item_2->id(),
+            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
+
+  // Remove the oldest item, and verify the section doesn't get updated.
+  model()->RemoveItem(item_1->id());
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  screen_captures = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_captures.size());
+  EXPECT_EQ(item_4->id(),
+            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
+  EXPECT_EQ(item_3->id(),
+            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
+  EXPECT_EQ(item_2->id(),
+            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
+
+  test_api()->Close();
+}
+
+// Tests that a partially initialized screenshot item does not get shown if a
+// fully initialized screenshot item gets removed from the holding space.
+TEST_F(HoldingSpacePreviewsTrayTest,
+       PartialItemNowShownOnRemovingAScreenCapture) {
+  StartSession();
+  test_api()->Show();
+
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+
+  // Add partially initialized item - verify it doesn't get shown in the UI yet.
+  AddPartiallyInitializedItem(HoldingSpaceItem::Type::kScreenshot,
+                              base::FilePath("/tmp/fake_1"));
+
+  HoldingSpaceItem* item_2 = AddItem(HoldingSpaceItem::Type::kScreenshot,
+                                     base::FilePath("/tmp/fake_2"));
+  HoldingSpaceItem* item_3 = AddItem(HoldingSpaceItem::Type::kScreenshot,
+                                     base::FilePath("/tmp/fake_3"));
+  HoldingSpaceItem* item_4 = AddItem(HoldingSpaceItem::Type::kScreenshot,
+                                     base::FilePath("/tmp/fake_4"));
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  std::vector<views::View*> screen_captures =
+      test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(3u, screen_captures.size());
+  EXPECT_EQ(item_4->id(),
+            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
+  EXPECT_EQ(item_3->id(),
+            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
+  EXPECT_EQ(item_2->id(),
+            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
+
+  // Remove one of the fully initialized items, and verify the partially
+  // initialized item is no shown.
+  model()->RemoveItem(item_2->id());
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  screen_captures = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(2u, screen_captures.size());
+  EXPECT_EQ(item_4->id(),
+            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
+  EXPECT_EQ(item_3->id(),
+            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
+
+  test_api()->Close();
+}
+
+// Tests how the pinned item section is updated during item addition, removal
+// and initialization.
+TEST_F(HoldingSpacePreviewsTrayTest, PinnedFilesSection) {
+  MarkTimeOfFirstPin();
+  StartSession();
+
+  HoldingSpaceItem* item_1 = AddItem(HoldingSpaceItem::Type::kPinnedFile,
+                                     base::FilePath("/tmp/fake_1"));
+
+  test_api()->Show();
+  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+  std::vector<views::View*> pinned_files = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(1u, pinned_files.size());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
+
+  // Add a partially initialized item - verify it doesn't get shown in the UI
+  // yet.
+  HoldingSpaceItem* item_2 = AddPartiallyInitializedItem(
+      HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake_2"));
+
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+  pinned_files = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(1u, pinned_files.size());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
+
+  // Add more items to the section.
+  HoldingSpaceItem* item_3 = AddPartiallyInitializedItem(
+      HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake_3"));
+  HoldingSpaceItem* item_4 = AddItem(HoldingSpaceItem::Type::kPinnedFile,
+                                     base::FilePath("/tmp/fake_4"));
+
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+  pinned_files = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(2u, pinned_files.size());
+  EXPECT_EQ(item_4->id(),
+            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(pinned_files[1])->item()->id());
+
+  // Full initialize partially initialized item, and verify it gets shown.
+  model()->InitializeOrRemoveItem(item_2->id(), GURL("filesystem:fake_2"));
+
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+  pinned_files = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(3u, pinned_files.size());
+  EXPECT_EQ(item_4->id(),
+            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
+  EXPECT_EQ(item_2->id(),
+            HoldingSpaceItemView::Cast(pinned_files[1])->item()->id());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(pinned_files[2])->item()->id());
+
+  // Remove a partial item.
+  model()->RemoveItem(item_3->id());
+
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+  pinned_files = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(3u, pinned_files.size());
+  EXPECT_EQ(item_4->id(),
+            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
+  EXPECT_EQ(item_2->id(),
+            HoldingSpaceItemView::Cast(pinned_files[1])->item()->id());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(pinned_files[2])->item()->id());
+
+  // Remove the newest item, and verify the section gets updated.
+  model()->RemoveItem(item_4->id());
+
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+  pinned_files = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(2u, pinned_files.size());
+  EXPECT_EQ(item_2->id(),
+            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(pinned_files[1])->item()->id());
+
+  // Remove other items, and verify the files section gets hidden.
+  model()->RemoveItem(item_2->id());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+  pinned_files = test_api()->GetPinnedFileChips();
+  ASSERT_EQ(1u, pinned_files.size());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
+
+  model()->RemoveItem(item_1->id());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
+}
+
+// Tests that as screen recording files are added to the model, they show in the
+// screen captures section.
+TEST_F(HoldingSpacePreviewsTrayTest,
+       ScreenCapturesSectionWithScreenRecordingFiles) {
+  StartSession();
+
+  test_api()->Show();
+  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
+  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  ASSERT_TRUE(test_api()->GetScreenCaptureViews().empty());
+
+  // Add a screen recording item and verify recent files section gets shown.
+  HoldingSpaceItem* item_1 = AddItem(HoldingSpaceItem::Type::kScreenRecording,
+                                     base::FilePath("/tmp/fake_1"));
+  ASSERT_TRUE(item_1->IsInitialized());
+
+  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
+  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  ASSERT_EQ(1u, test_api()->GetScreenCaptureViews().size());
+
+  // Add a screenshot item, and verify it's also shown in the UI in the reverse
+  // order they were added.
+  HoldingSpaceItem* item_2 = AddItem(HoldingSpaceItem::Type::kScreenshot,
+                                     base::FilePath("/tmp/fake_2"));
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  std::vector<views::View*> screen_capture_chips =
+      test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(2u, screen_capture_chips.size());
+  EXPECT_EQ(item_2->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
+  EXPECT_EQ(item_1->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
+
+  // Remove the first item, and verify the section gets updated.
+  model()->RemoveItem(item_1->id());
+
+  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
+  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
+  screen_capture_chips = test_api()->GetScreenCaptureViews();
+  ASSERT_EQ(1u, screen_capture_chips.size());
+  EXPECT_EQ(item_2->id(),
+            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
+
+  test_api()->Close();
+}
+
 // Base class for tests of the holding space downloads section parameterized by:
 // * the set of holding space item types which are expected to appear there.
 class HoldingSpaceTrayDownloadsSectionTest
-    : public HoldingSpaceTrayTest,
+    : public HoldingSpaceAshTestBase,
       public ::testing::WithParamInterface<HoldingSpaceItem::Type> {
  public:
   // Returns the holding space item type given the test parameterization.
@@ -1280,6 +2941,7 @@
 TEST_P(HoldingSpaceTrayDownloadsSectionTest,
        TrayIconPreviewOpacityAndTransform) {
   StartSession();
+  EnableTrayIconPreviews();
 
   // Add an in-progress `item` to the model.
   HoldingSpaceItem* const item = AddItem(
@@ -1382,1633 +3044,11 @@
   }
 }
 
-// Tests how screen captures section is updated during item addition, removal
-// and initialization.
-TEST_F(HoldingSpaceTrayTest, ScreenCapturesSection) {
-  StartSession();
-  test_api()->Show();
-  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-
-  // Add a screenshot item and verify recent file bubble gets shown.
-  HoldingSpaceItem* item_1 = AddItem(HoldingSpaceItem::Type::kScreenshot,
-                                     base::FilePath("/tmp/fake_1"));
-
-  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
-  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  ASSERT_EQ(1u, test_api()->GetScreenCaptureViews().size());
-
-  // Add partially initialized download item - verify it doesn't get shown in
-  // the UI yet.
-  HoldingSpaceItem* item_2 = AddPartiallyInitializedItem(
-      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake_2"));
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  std::vector<views::View*> screen_captures =
-      test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(1u, screen_captures.size());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
-
-  // Add more items to fill up the section.
-  HoldingSpaceItem* item_3 = AddItem(HoldingSpaceItem::Type::kScreenshot,
-                                     base::FilePath("/tmp/fake_3"));
-  HoldingSpaceItem* item_4 = AddItem(HoldingSpaceItem::Type::kScreenshot,
-                                     base::FilePath("/tmp/fake_4"));
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  screen_captures = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_captures.size());
-  EXPECT_EQ(item_4->id(),
-            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
-  EXPECT_EQ(item_3->id(),
-            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
-
-  // Fully initialize partially initialized item, and verify it gets added to
-  // the section, in the order of addition, replacing the oldest item.
-  model()->InitializeOrRemoveItem(item_2->id(), GURL("filesystem:fake_2"));
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  screen_captures = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_captures.size());
-  EXPECT_EQ(item_4->id(),
-            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
-  EXPECT_EQ(item_3->id(),
-            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
-  EXPECT_EQ(item_2->id(),
-            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
-
-  // Remove the newest item, and verify the section gets updated.
-  model()->RemoveItem(item_4->id());
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  screen_captures = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_captures.size());
-  EXPECT_EQ(item_3->id(),
-            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
-  EXPECT_EQ(item_2->id(),
-            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
-
-  // Remove other items, and verify the recent files bubble gets hidden.
-  model()->RemoveItem(item_2->id());
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  screen_captures = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(2u, screen_captures.size());
-  EXPECT_EQ(item_3->id(),
-            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
-
-  model()->RemoveItem(item_3->id());
-  model()->RemoveItem(item_1->id());
-
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-
-  // Pinned bubble is showing "educational" info, and it should remain shown.
-  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
-}
-
-// Verifies the screen captures section is shown and orders items as expected
-// when the model contains a number of initialized items prior to showing UI.
-TEST_F(HoldingSpaceTrayTest, ScreenCapturesSectionWithInitializedItemsOnly) {
-  MarkTimeOfFirstPin();
-  StartSession();
-
-  // Add a number of initialized screen capture items.
-  std::deque<HoldingSpaceItem*> items;
-  for (size_t i = 0; i < kMaxScreenCaptures; ++i) {
-    items.push_back(
-        AddItem(HoldingSpaceItem::Type::kScreenshot,
-                base::FilePath("/tmp/fake_" + base::NumberToString(i))));
-  }
-
-  test_api()->Show();
-  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
-
-  std::vector<views::View*> screenshots = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(items.size(), screenshots.size());
-
-  while (!items.empty()) {
-    // View order is expected to be reverse of item order.
-    auto* screenshot = HoldingSpaceItemView::Cast(screenshots.back());
-    EXPECT_EQ(screenshot->item()->id(), items.front()->id());
-
-    items.pop_front();
-    screenshots.pop_back();
-  }
-
-  test_api()->Close();
-}
-
-TEST_F(HoldingSpaceTrayTest,
-       InitializingScreenCaptureItemThatShouldBeInvisible) {
-  StartSession();
-  test_api()->Show();
-
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-
-  // Add partially initialized download item - verify it doesn't get shown in
-  // the UI yet.
-  HoldingSpaceItem* item_1 = AddPartiallyInitializedItem(
-      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake_1"));
-
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-
-  // Add enough screenshot items to fill up the section.
-  HoldingSpaceItem* item_2 = AddItem(HoldingSpaceItem::Type::kScreenshot,
-                                     base::FilePath("/tmp/fake_2"));
-  HoldingSpaceItem* item_3 = AddItem(HoldingSpaceItem::Type::kScreenshot,
-                                     base::FilePath("/tmp/fake_3"));
-  HoldingSpaceItem* item_4 = AddItem(HoldingSpaceItem::Type::kScreenshot,
-                                     base::FilePath("/tmp/fake_4"));
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  std::vector<views::View*> screen_captures =
-      test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_captures.size());
-  EXPECT_EQ(item_4->id(),
-            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
-  EXPECT_EQ(item_3->id(),
-            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
-  EXPECT_EQ(item_2->id(),
-            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
-
-  // Fully initialize partially initialized item, and verify it's not added to
-  // the section.
-  model()->InitializeOrRemoveItem(item_1->id(), GURL("filesystem:fake_1"));
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  screen_captures = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_captures.size());
-  EXPECT_EQ(item_4->id(),
-            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
-  EXPECT_EQ(item_3->id(),
-            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
-  EXPECT_EQ(item_2->id(),
-            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
-
-  // Remove the oldest item, and verify the section doesn't get updated.
-  model()->RemoveItem(item_1->id());
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  screen_captures = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_captures.size());
-  EXPECT_EQ(item_4->id(),
-            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
-  EXPECT_EQ(item_3->id(),
-            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
-  EXPECT_EQ(item_2->id(),
-            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
-
-  test_api()->Close();
-}
-
-// Tests that a partially initialized screenshot item does not get shown if a
-// fully initialized screenshot item gets removed from the holding space.
-TEST_F(HoldingSpaceTrayTest, PartialItemNowShownOnRemovingAScreenCapture) {
-  StartSession();
-  test_api()->Show();
-
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-
-  // Add partially initialized item - verify it doesn't get shown in the UI yet.
-  AddPartiallyInitializedItem(HoldingSpaceItem::Type::kScreenshot,
-                              base::FilePath("/tmp/fake_1"));
-
-  HoldingSpaceItem* item_2 = AddItem(HoldingSpaceItem::Type::kScreenshot,
-                                     base::FilePath("/tmp/fake_2"));
-  HoldingSpaceItem* item_3 = AddItem(HoldingSpaceItem::Type::kScreenshot,
-                                     base::FilePath("/tmp/fake_3"));
-  HoldingSpaceItem* item_4 = AddItem(HoldingSpaceItem::Type::kScreenshot,
-                                     base::FilePath("/tmp/fake_4"));
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  std::vector<views::View*> screen_captures =
-      test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_captures.size());
-  EXPECT_EQ(item_4->id(),
-            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
-  EXPECT_EQ(item_3->id(),
-            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
-  EXPECT_EQ(item_2->id(),
-            HoldingSpaceItemView::Cast(screen_captures[2])->item()->id());
-
-  // Remove one of the fully initialized items, and verify the partially
-  // initialized item is no shown.
-  model()->RemoveItem(item_2->id());
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  screen_captures = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(2u, screen_captures.size());
-  EXPECT_EQ(item_4->id(),
-            HoldingSpaceItemView::Cast(screen_captures[0])->item()->id());
-  EXPECT_EQ(item_3->id(),
-            HoldingSpaceItemView::Cast(screen_captures[1])->item()->id());
-
-  test_api()->Close();
-}
-
-// Tests how the pinned item section is updated during item addition, removal
-// and initialization.
-TEST_F(HoldingSpaceTrayTest, PinnedFilesSection) {
-  MarkTimeOfFirstPin();
-  StartSession();
-
-  HoldingSpaceItem* item_1 = AddItem(HoldingSpaceItem::Type::kPinnedFile,
-                                     base::FilePath("/tmp/fake_1"));
-
-  test_api()->Show();
-  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-  std::vector<views::View*> pinned_files = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(1u, pinned_files.size());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
-
-  // Add a partially initialized item - verify it doesn't get shown in the UI
-  // yet.
-  HoldingSpaceItem* item_2 = AddPartiallyInitializedItem(
-      HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake_2"));
-
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-  pinned_files = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(1u, pinned_files.size());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
-
-  // Add more items to the section.
-  HoldingSpaceItem* item_3 = AddPartiallyInitializedItem(
-      HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake_3"));
-  HoldingSpaceItem* item_4 = AddItem(HoldingSpaceItem::Type::kPinnedFile,
-                                     base::FilePath("/tmp/fake_4"));
-
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-  pinned_files = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(2u, pinned_files.size());
-  EXPECT_EQ(item_4->id(),
-            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(pinned_files[1])->item()->id());
-
-  // Full initialize partially initialized item, and verify it gets shown.
-  model()->InitializeOrRemoveItem(item_2->id(), GURL("filesystem:fake_2"));
-
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-  pinned_files = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(3u, pinned_files.size());
-  EXPECT_EQ(item_4->id(),
-            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
-  EXPECT_EQ(item_2->id(),
-            HoldingSpaceItemView::Cast(pinned_files[1])->item()->id());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(pinned_files[2])->item()->id());
-
-  // Remove a partial item.
-  model()->RemoveItem(item_3->id());
-
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-  pinned_files = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(3u, pinned_files.size());
-  EXPECT_EQ(item_4->id(),
-            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
-  EXPECT_EQ(item_2->id(),
-            HoldingSpaceItemView::Cast(pinned_files[1])->item()->id());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(pinned_files[2])->item()->id());
-
-  // Remove the newest item, and verify the section gets updated.
-  model()->RemoveItem(item_4->id());
-
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-  pinned_files = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(2u, pinned_files.size());
-  EXPECT_EQ(item_2->id(),
-            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(pinned_files[1])->item()->id());
-
-  // Remove other items, and verify the files section gets hidden.
-  model()->RemoveItem(item_2->id());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-  pinned_files = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(1u, pinned_files.size());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
-
-  model()->RemoveItem(item_1->id());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
-}
-
-// Verifies the pinned files bubble is not shown if it only contains partially
-// initialized items.
-TEST_F(HoldingSpaceTrayTest,
-       PinnedFilesBubbleWithPartiallyInitializedItemsOnly) {
-  MarkTimeOfFirstPin();
-  StartSession();
-
-  // Add a download item to show the tray button.
-  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/download"));
-
-  AddPartiallyInitializedItem(HoldingSpaceItem::Type::kPinnedFile,
-                              base::FilePath("/tmp/fake_1"));
-
-  test_api()->Show();
-  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
-
-  // Add another partially initialized item.
-  HoldingSpaceItem* item_2 = AddPartiallyInitializedItem(
-      HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake_2"));
-  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
-
-  // Add a fully initialized item, and verify it gets shown.
-  HoldingSpaceItem* item_3 = AddItem(HoldingSpaceItem::Type::kPinnedFile,
-                                     base::FilePath("/tmp/fake_3"));
-  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
-
-  std::vector<views::View*> pinned_files = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(1u, pinned_files.size());
-  EXPECT_EQ(item_3->id(),
-            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
-  EXPECT_TRUE(HoldingSpaceItemView::Cast(pinned_files[0])->GetVisible());
-
-  // Fully initialize a partially initialized item with an empty URL - it should
-  // get removed.
-  model()->InitializeOrRemoveItem(item_2->id(), GURL());
-
-  pinned_files = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(1u, pinned_files.size());
-  EXPECT_EQ(item_3->id(),
-            HoldingSpaceItemView::Cast(pinned_files[0])->item()->id());
-}
-
-// Verifies the pinned items section is shown and orders items as expected when
-// the model contains a number of initialized items prior to showing UI.
-TEST_F(HoldingSpaceTrayTest, PinnedFilesSectionWithInitializedItemsOnly) {
-  MarkTimeOfFirstPin();
-  StartSession();
-
-  // Add a number of initialized pinned items.
-  std::deque<HoldingSpaceItem*> items;
-  for (int i = 0; i < 10; ++i) {
-    items.push_back(
-        AddItem(HoldingSpaceItem::Type::kPinnedFile,
-                base::FilePath("/tmp/fake_" + base::NumberToString(i))));
-  }
-
-  test_api()->Show();
-  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
-
-  std::vector<views::View*> pinned_files = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(items.size(), pinned_files.size());
-
-  while (!items.empty()) {
-    // View order is expected to be reverse of item order.
-    auto* pinned_file = HoldingSpaceItemView::Cast(pinned_files.back());
-    EXPECT_EQ(pinned_file->item()->id(), items.front()->id());
-
-    items.pop_front();
-    pinned_files.pop_back();
-  }
-  test_api()->Close();
-}
-
-// Right clicking the holding space tray should show a context menu if the
-// previews feature is enabled. Otherwise it should do nothing.
-TEST_F(HoldingSpaceTrayTest, ShouldMaybeShowContextMenuOnRightClick) {
-  StartSession();
-
-  views::View* tray = test_api()->GetTray();
-  ASSERT_TRUE(tray);
-
-  EXPECT_FALSE(views::MenuController::GetActiveInstance());
-
-  // Move the mouse to and perform a right click on `tray`.
-  auto* root_window = tray->GetWidget()->GetNativeWindow()->GetRootWindow();
-  ui::test::EventGenerator event_generator(root_window);
-  event_generator.MoveMouseTo(tray->GetBoundsInScreen().CenterPoint());
-  event_generator.ClickRightButton();
-
-  EXPECT_TRUE(views::MenuController::GetActiveInstance());
-}
-
-// Tests that as screen recording files are added to the model, they show in the
-// screen captures section.
-TEST_F(HoldingSpaceTrayTest, ScreenCapturesSectionWithScreenRecordingFiles) {
-  StartSession();
-
-  test_api()->Show();
-  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  ASSERT_TRUE(test_api()->GetScreenCaptureViews().empty());
-
-  // Add a screen recording item and verify recent files section gets shown.
-  HoldingSpaceItem* item_1 = AddItem(HoldingSpaceItem::Type::kScreenRecording,
-                                     base::FilePath("/tmp/fake_1"));
-  ASSERT_TRUE(item_1->IsInitialized());
-
-  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
-  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  ASSERT_EQ(1u, test_api()->GetScreenCaptureViews().size());
-
-  // Add a screenshot item, and verify it's also shown in the UI in the reverse
-  // order they were added.
-  HoldingSpaceItem* item_2 = AddItem(HoldingSpaceItem::Type::kScreenshot,
-                                     base::FilePath("/tmp/fake_2"));
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  std::vector<views::View*> screen_capture_chips =
-      test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(2u, screen_capture_chips.size());
-  EXPECT_EQ(item_2->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
-  EXPECT_EQ(item_1->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
-
-  // Remove the first item, and verify the section gets updated.
-  model()->RemoveItem(item_1->id());
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  screen_capture_chips = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(1u, screen_capture_chips.size());
-  EXPECT_EQ(item_2->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
-
-  test_api()->Close();
-}
-
-// Tests that a partially initialized screen recording item shows in the UI in
-// the reverse order from added time rather than initialization time.
-TEST_F(HoldingSpaceTrayTest,
-       PartialScreenRecordingItemWithExistingScreenshotItems) {
-  StartSession();
-  test_api()->Show();
-
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-  ASSERT_TRUE(test_api()->GetScreenCaptureViews().empty());
-
-  // Add partially initialized screen recording item - verify it doesn't get
-  // shown in the UI yet.
-  HoldingSpaceItem* screen_recording_item =
-      AddPartiallyInitializedItem(HoldingSpaceItem::Type::kScreenRecording,
-                                  base::FilePath("/tmp/screen_recording"));
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-
-  // Add three screenshot items to fill up the section.
-  HoldingSpaceItem* screenshot_item_1 = AddItem(
-      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/screenshot_1"));
-  HoldingSpaceItem* screenshot_item_2 = AddItem(
-      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/screenshot_2"));
-  HoldingSpaceItem* screenshot_item_3 = AddItem(
-      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/screenshot_3"));
-  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  std::vector<views::View*> screen_capture_chips =
-      test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_capture_chips.size());
-  EXPECT_EQ(screenshot_item_3->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
-  EXPECT_EQ(screenshot_item_2->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
-  EXPECT_EQ(screenshot_item_1->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
-
-  // Initialize the screen recording item and verify it is not shown.
-  model()->InitializeOrRemoveItem(screen_recording_item->id(),
-                                  GURL("filesystem:screen_recording"));
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  screen_capture_chips = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_capture_chips.size());
-  EXPECT_EQ(screenshot_item_3->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
-  EXPECT_EQ(screenshot_item_2->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
-  EXPECT_EQ(screenshot_item_1->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
-
-  // Remove one of the fully initialized items, and verify the screen recording
-  // item that was initialized late is shown.
-  model()->RemoveItem(screenshot_item_1->id());
-
-  screen_capture_chips = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_capture_chips.size());
-  EXPECT_EQ(screenshot_item_3->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
-  EXPECT_EQ(screenshot_item_2->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
-  EXPECT_EQ(screen_recording_item->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
-
-  // Add partially initialized screen recording item - verify it doesn't get
-  // shown in the UI yet.
-  HoldingSpaceItem* screen_recording_item_last =
-      AddPartiallyInitializedItem(HoldingSpaceItem::Type::kScreenRecording,
-                                  base::FilePath("/tmp/screen_recording_last"));
-  screen_capture_chips = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_capture_chips.size());
-  EXPECT_EQ(screenshot_item_3->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
-  EXPECT_EQ(screenshot_item_2->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
-  EXPECT_EQ(screen_recording_item->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
-
-  // Initialize the screen recording item and verify it is shown first.
-  model()->InitializeOrRemoveItem(screen_recording_item_last->id(),
-                                  GURL("filesystem:screen_recording"));
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  screen_capture_chips = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_capture_chips.size());
-  EXPECT_EQ(screen_recording_item_last->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
-  EXPECT_EQ(screenshot_item_3->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
-  EXPECT_EQ(screenshot_item_2->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
-
-  test_api()->Close();
-}
-
-// Tests that partially initialized screenshot item shows in the UI in the
-// reverse order from added time rather than initialization time.
-TEST_F(HoldingSpaceTrayTest,
-       PartialScreenshotItemWithExistingScreenRecordingItems) {
-  StartSession();
-  test_api()->Show();
-
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-  ASSERT_TRUE(test_api()->GetScreenCaptureViews().empty());
-
-  // Add partially initialized screenshot item - verify it doesn't get shown
-  // in the UI yet.
-  HoldingSpaceItem* screenshot_item = AddPartiallyInitializedItem(
-      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake_1"));
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-  EXPECT_TRUE(test_api()->GetScreenCaptureViews().empty());
-
-  // Add three screenshot recording items to fill up the section.
-  HoldingSpaceItem* screen_recording_item_1 = AddItem(
-      HoldingSpaceItem::Type::kScreenRecording, base::FilePath("/tmp/fake_2"));
-  HoldingSpaceItem* screen_recording_item_2 = AddItem(
-      HoldingSpaceItem::Type::kScreenRecording, base::FilePath("/tmp/fake_3"));
-  HoldingSpaceItem* screen_recording_item_3 = AddItem(
-      HoldingSpaceItem::Type::kScreenRecording, base::FilePath("/tmp/fake_4"));
-  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  std::vector<views::View*> screen_capture_chips =
-      test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_capture_chips.size());
-  EXPECT_EQ(screen_recording_item_3->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
-  EXPECT_EQ(screen_recording_item_2->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
-  EXPECT_EQ(screen_recording_item_1->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
-
-  // Initialize the screenshot item and verify it is not shown.
-  model()->InitializeOrRemoveItem(screenshot_item->id(),
-                                  GURL("filesystem:fake_1"));
-
-  EXPECT_TRUE(test_api()->GetPinnedFileChips().empty());
-  EXPECT_TRUE(test_api()->GetDownloadChips().empty());
-  screen_capture_chips = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_capture_chips.size());
-  EXPECT_EQ(screen_recording_item_3->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
-  EXPECT_EQ(screen_recording_item_2->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
-  EXPECT_EQ(screen_recording_item_1->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
-
-  // Remove one of the fully initialized items, and verify the partially
-  // initialized item is not shown.
-  model()->RemoveItem(screen_recording_item_1->id());
-
-  screen_capture_chips = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(3u, screen_capture_chips.size());
-  EXPECT_EQ(screen_recording_item_3->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
-  EXPECT_EQ(screen_recording_item_2->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
-  EXPECT_EQ(screenshot_item->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[2])->item()->id());
-
-  test_api()->Close();
-}
-
-// Screen recordings should have an overlaying play icon.
-TEST_F(HoldingSpaceTrayTest, PlayIconForScreenRecordings) {
-  StartSession();
-  test_api()->Show();
-
-  // Add one screenshot item and one screen recording item.
-  HoldingSpaceItem* screenshot_item = AddItem(
-      HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake_1"));
-  HoldingSpaceItem* screen_recording_item = AddItem(
-      HoldingSpaceItem::Type::kScreenRecording, base::FilePath("/tmp/fake_2"));
-  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
-
-  std::vector<views::View*> screen_capture_chips =
-      test_api()->GetScreenCaptureViews();
-
-  EXPECT_EQ(2u, screen_capture_chips.size());
-
-  EXPECT_EQ(screenshot_item->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[1])->item()->id());
-  EXPECT_FALSE(screen_capture_chips[1]->GetViewByID(
-      kHoldingSpaceScreenCapturePlayIconId));
-  EXPECT_EQ(screen_recording_item->id(),
-            HoldingSpaceItemView::Cast(screen_capture_chips[0])->item()->id());
-  EXPECT_TRUE(screen_capture_chips[0]->GetViewByID(
-      kHoldingSpaceScreenCapturePlayIconId));
-}
-
-// Until the user has pinned an item, a placeholder should exist in the pinned
-// files bubble which contains a chip to open the Files app.
-TEST_F(HoldingSpaceTrayTest, PlaceholderContainsFilesAppChip) {
-  StartSession(/*pre_mark_time_of_first_add=*/false);
-
-  // The tray button should *not* be shown for users that have never added
-  // anything to the holding space.
-  EXPECT_FALSE(test_api()->IsShowingInShelf());
-
-  // Add a download item. This should cause the tray button to show.
-  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake"));
-  MarkTimeOfFirstAdd();
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  // Show the bubble. Both the pinned files and recent files child bubbles
-  // should be shown.
-  test_api()->Show();
-  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
-  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
-
-  // A chip to open the Files app should exist in the pinned files bubble.
-  views::View* pinned_files_bubble = test_api()->GetPinnedFilesBubble();
-  ASSERT_TRUE(pinned_files_bubble);
-  views::View* files_app_chip =
-      pinned_files_bubble->GetViewByID(kHoldingSpaceFilesAppChipId);
-  ASSERT_TRUE(files_app_chip);
-
-  // Prior to being acted upon by the user, there should be no events logged to
-  // the Files app chip histogram.
-  base::HistogramTester histogram_tester;
-  histogram_tester.ExpectBucketCount(
-      "HoldingSpace.FilesAppChip.Action.All",
-      holding_space_metrics::FilesAppChipAction::kClick, 0);
-
-  // Click the chip and expect a call to open the Files app.
-  EXPECT_CALL(*client(), OpenMyFiles);
-  Click(files_app_chip);
-
-  // After having been acted upon by the user, there should be a single click
-  // event logged to the Files app chip histogram.
-  histogram_tester.ExpectBucketCount(
-      "HoldingSpace.FilesAppChip.Action.All",
-      holding_space_metrics::FilesAppChipAction::kClick, 1);
-
-  // Because the holding space model contains a download item, the holding space
-  // tray should still be shown. The recent files bubble should be shown but
-  // pinned files child bubble should have been hidden due to destruction of the
-  // pinned files section placeholder which is no longer relevant.
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
-  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
-}
-
-// The pinned files section of holding space UI contains a placeholder if the
-// user has never pinned a file. The placeholder contains a Files app chip to
-// take the user to the Files app to pin their first file. Once the user has
-// pressed the Files app chip, the pinned files section placeholder should be
-// permanently hidden.
-TEST_F(HoldingSpaceTrayTest, PlaceholderHiddenAfterFilesAppChipPressed) {
-  StartSession(/*pre_mark_time_of_first_add=*/true);
-
-  // The tray button should be shown because the user has previously added an
-  // item to their holding space.
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  // Show the bubble. Only the pinned files child bubble should be shown.
-  test_api()->Show();
-  EXPECT_TRUE(test_api()->PinnedFilesBubbleShown());
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-
-  // A chip to open the Files app should exist in the pinned files bubble.
-  views::View* pinned_files_bubble = test_api()->GetPinnedFilesBubble();
-  ASSERT_TRUE(pinned_files_bubble);
-  views::View* files_app_chip =
-      pinned_files_bubble->GetViewByID(kHoldingSpaceFilesAppChipId);
-  ASSERT_TRUE(files_app_chip);
-
-  // Click the chip and expect a call to open the Files app.
-  EXPECT_CALL(*client(), OpenMyFiles);
-  Click(files_app_chip);
-
-  // Because the holding space is completely empty, clicking the Files app chip
-  // should cause the holding space tray and all associated bubbles to hide.
-  EXPECT_FALSE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
-  EXPECT_FALSE(test_api()->RecentFilesBubbleShown());
-
-  // Add a download item. This should cause the tray button to show.
-  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake"));
-  MarkTimeOfFirstAdd();
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  // Show holding space UI. Because the Files app chip was previously pressed,
-  // the recent files bubble should be shown but the pinned files bubble should
-  // not.
-  test_api()->Show();
-  EXPECT_FALSE(test_api()->PinnedFilesBubbleShown());
-  EXPECT_TRUE(test_api()->RecentFilesBubbleShown());
-}
-
-// User should be able to open the Downloads folder in the Files app by pressing
-// the enter key on the Downloads section header.
-TEST_F(HoldingSpaceTrayTest, EnterKeyOpensDownloads) {
-  StartSession();
-
-  // Add a download item.
-  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake1"));
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  // Show the bubble.
-  test_api()->Show();
-  std::vector<views::View*> download_chips = test_api()->GetDownloadChips();
-  ASSERT_EQ(download_chips.size(), 1u);
-
-  // Select the download item. Previously there was a bug where if a holding
-  // space item view was selected, the enter key would *not* open Downloads.
-  Click(download_chips[0]);
-  EXPECT_TRUE(HoldingSpaceItemView::Cast(download_chips[0])->selected());
-
-  // Focus the downloads section header.
-  auto* downloads_section_header = test_api()->GetDownloadsSectionHeader();
-  ASSERT_TRUE(downloads_section_header);
-  EXPECT_TRUE(PressTabUntilFocused(downloads_section_header));
-
-  // Press ENTER and expect an attempt to open the Downloads folder in the Files
-  // app. There should be *no* attempts to open an holding space items.
-  EXPECT_CALL(*client(), OpenItems).Times(0);
-  EXPECT_CALL(*client(), OpenDownloads);
-  PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN);
-}
-
-// User should be able to launch selected holding space items by pressing the
-// enter key.
-TEST_F(HoldingSpaceTrayTest, EnterKeyOpensSelectedFiles) {
-  StartSession();
-
-  // Add three holding space items.
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake2"));
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake3"));
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  // Show the bubble.
-  test_api()->Show();
-  const std::vector<views::View*> pinned_file_chips =
-      test_api()->GetPinnedFileChips();
-  ASSERT_EQ(pinned_file_chips.size(), 3u);
-  const std::array<HoldingSpaceItemView*, 3> item_views = {
-      HoldingSpaceItemView::Cast(pinned_file_chips[0]),
-      HoldingSpaceItemView::Cast(pinned_file_chips[1]),
-      HoldingSpaceItemView::Cast(pinned_file_chips[2]),
-  };
-
-  // Press the enter key. The client should *not* attempt to open any items.
-  EXPECT_CALL(*client(), OpenItems).Times(0);
-  PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN);
-  testing::Mock::VerifyAndClearExpectations(client());
-
-  // Click an item. The view should be selected.
-  Click(item_views[0]);
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-  EXPECT_FALSE(item_views[2]->selected());
-
-  // Press the enter key. We expect the client to open the selected item.
-  EXPECT_CALL(*client(), OpenItems(testing::ElementsAre(item_views[0]->item()),
-                                   testing::_));
-  PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN);
-  testing::Mock::VerifyAndClearExpectations(client());
-
-  // Shift-click on the second item. Both views should be selected.
-  Click(item_views[1], ui::EF_SHIFT_DOWN);
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_TRUE(item_views[1]->selected());
-
-  // Press the enter key. We expect the client to open the selected items.
-  EXPECT_CALL(*client(), OpenItems(testing::ElementsAre(item_views[0]->item(),
-                                                        item_views[1]->item()),
-                                   testing::_));
-  PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN);
-  testing::Mock::VerifyAndClearExpectations(client());
-
-  // Tab traverse to the last item.
-  EXPECT_TRUE(PressTabUntilFocused(item_views[2]));
-
-  // Press the enter key. The client should open only the focused item since
-  // it was *not* selected prior to pressing the enter key.
-  EXPECT_CALL(*client(), OpenItems(testing::ElementsAre(item_views[2]->item()),
-                                   testing::_));
-  PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-  EXPECT_TRUE(item_views[2]->selected());
-}
-
-// Clicking on tote bubble background should deselect any selected items.
-TEST_F(HoldingSpaceTrayTest, ClickBackgroundToDeselectItems) {
-  StartSession();
-
-  // Add two items.
-  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake1"));
-  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake2"));
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  // Show the bubble and cache holding space item views.
-  test_api()->Show();
-  std::vector<views::View*> download_chips = test_api()->GetDownloadChips();
-  ASSERT_EQ(2u, download_chips.size());
-  std::array<HoldingSpaceItemView*, 2> item_views = {
-      HoldingSpaceItemView::Cast(download_chips[0]),
-      HoldingSpaceItemView::Cast(download_chips[1])};
-
-  // Click an item chip. The view should be selected.
-  Click(download_chips[0]);
-  ASSERT_TRUE(item_views[0]->selected());
-  ASSERT_FALSE(item_views[1]->selected());
-
-  // Clicking on the parent view should deselect item.
-  Click(download_chips[0]->parent());
-  ASSERT_FALSE(item_views[0]->selected());
-  ASSERT_FALSE(item_views[1]->selected());
-
-  // Click on both items to select them both.
-  Click(download_chips[0], ui::EF_SHIFT_DOWN);
-  Click(download_chips[1], ui::EF_SHIFT_DOWN);
-  ASSERT_TRUE(item_views[0]->selected());
-  ASSERT_TRUE(item_views[1]->selected());
-
-  // Clicking on the parent view should deselect both items.
-  Click(download_chips[0]->parent());
-  ASSERT_FALSE(item_views[0]->selected());
-  ASSERT_FALSE(item_views[1]->selected());
-}
-
-// It should be possible to select multiple items in clamshell mode.
-TEST_F(HoldingSpaceTrayTest, MultiselectInClamshellMode) {
-  StartSession();
-
-  // Add a few holding space items to populate each section.
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
-  AddItem(HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake2"));
-  AddItem(HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake3"));
-  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake4"));
-  AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake5"));
-
-  // Show the bubble and cache holding space item views.
-  test_api()->Show();
-  std::vector<views::View*> pinned_file_chips =
-      test_api()->GetPinnedFileChips();
-  ASSERT_EQ(pinned_file_chips.size(), 1u);
-  std::vector<views::View*> screen_capture_views =
-      test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(screen_capture_views.size(), 2u);
-  std::vector<views::View*> download_chips = test_api()->GetDownloadChips();
-  ASSERT_EQ(download_chips.size(), 2u);
-  std::vector<HoldingSpaceItemView*> item_views(
-      {HoldingSpaceItemView::Cast(pinned_file_chips[0]),
-       HoldingSpaceItemView::Cast(screen_capture_views[0]),
-       HoldingSpaceItemView::Cast(screen_capture_views[1]),
-       HoldingSpaceItemView::Cast(download_chips[0]),
-       HoldingSpaceItemView::Cast(download_chips[1])});
-
-  // Shift-click the middle view. It should become selected.
-  Click(item_views[2], ui::EF_SHIFT_DOWN);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-  EXPECT_TRUE(item_views[2]->selected());  // The clicked view.
-  EXPECT_FALSE(item_views[3]->selected());
-  EXPECT_FALSE(item_views[4]->selected());
-
-  // Click the middle view. It should *not* become unselected.
-  Click(item_views[2]);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-  EXPECT_TRUE(item_views[2]->selected());  // The clicked view.
-  EXPECT_FALSE(item_views[3]->selected());
-  EXPECT_FALSE(item_views[4]->selected());
-
-  // Shift-click the bottom view. We should now have selected a range.
-  Click(item_views[4], ui::EF_SHIFT_DOWN);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-  EXPECT_TRUE(item_views[2]->selected());  // The previously clicked view.
-  EXPECT_TRUE(item_views[3]->selected());
-  EXPECT_TRUE(item_views[4]->selected());  // The clicked view.
-
-  // Shift-click the top view. The previous range should be cleared and the
-  // new range selected.
-  Click(item_views[0], ui::EF_SHIFT_DOWN);
-  EXPECT_TRUE(item_views[0]->selected());  // The clicked view.
-  EXPECT_TRUE(item_views[1]->selected());
-  EXPECT_TRUE(item_views[2]->selected());  // The previously clicked view.
-  EXPECT_FALSE(item_views[3]->selected());
-  EXPECT_FALSE(item_views[4]->selected());
-
-  // Control-click the bottom view. The previous range should still be selected
-  // as well as the view that was just clicked.
-  Click(item_views[4], ui::EF_CONTROL_DOWN);
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_TRUE(item_views[1]->selected());
-  EXPECT_TRUE(item_views[2]->selected());
-  EXPECT_FALSE(item_views[3]->selected());
-  EXPECT_TRUE(item_views[4]->selected());  // The clicked view.
-
-  // Shift-click the second-from-the-bottom view. A new range should be selected
-  // from the bottom view to the view that was just clicked. The previous range
-  // that was selected should still be selected.
-  Click(item_views[3], ui::EF_SHIFT_DOWN);
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_TRUE(item_views[1]->selected());
-  EXPECT_TRUE(item_views[2]->selected());
-  EXPECT_TRUE(item_views[3]->selected());  // The clicked view.
-  EXPECT_TRUE(item_views[4]->selected());  // The previously clicked view.
-
-  // Control-click the second-from-the-top view. The view that was just clicked
-  // should now be unselected. No other views that were selected should change.
-  Click(item_views[1], ui::EF_CONTROL_DOWN);
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());  // The clicked view.
-  EXPECT_TRUE(item_views[2]->selected());
-  EXPECT_TRUE(item_views[3]->selected());
-  EXPECT_TRUE(item_views[4]->selected());
-
-  // Add another holding space item. This should cause views for existing
-  // holding space items to be destroyed and recreated.
-  AddItem(HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake6"));
-  pinned_file_chips = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(pinned_file_chips.size(), 1u);
-  screen_capture_views = test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(screen_capture_views.size(), 3u);
-  download_chips = test_api()->GetDownloadChips();
-  ASSERT_EQ(download_chips.size(), 2u);
-  item_views = {HoldingSpaceItemView::Cast(pinned_file_chips[0]),
-                HoldingSpaceItemView::Cast(screen_capture_views[0]),
-                HoldingSpaceItemView::Cast(screen_capture_views[1]),
-                HoldingSpaceItemView::Cast(screen_capture_views[2]),
-                HoldingSpaceItemView::Cast(download_chips[0]),
-                HoldingSpaceItemView::Cast(download_chips[1])};
-
-  // Views for items previously selected should have selection restored.
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());  // The view for the new item.
-  EXPECT_FALSE(item_views[2]->selected());  // The previously clicked view.
-  EXPECT_TRUE(item_views[3]->selected());
-  EXPECT_TRUE(item_views[4]->selected());
-  EXPECT_TRUE(item_views[5]->selected());
-
-  // Shift-click the second-from-the-bottom view. A new range should be selected
-  // from the previously clicked view to the view that was just clicked.
-  Click(item_views[4], ui::EF_SHIFT_DOWN);
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-  EXPECT_TRUE(item_views[2]->selected());  // The previously clicked view.
-  EXPECT_TRUE(item_views[3]->selected());
-  EXPECT_TRUE(item_views[4]->selected());  // The clicked view.
-  EXPECT_TRUE(item_views[5]->selected());
-
-  // Click the third-from-the-bottom view. Even though it was already selected
-  // it should now be the only view selected.
-  Click(item_views[3]);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-  EXPECT_FALSE(item_views[2]->selected());
-  EXPECT_TRUE(item_views[3]->selected());  // The clicked view.
-  EXPECT_FALSE(item_views[4]->selected());
-  EXPECT_FALSE(item_views[5]->selected());
-
-  // Control-click the third-from-the-bottom view. There should no longer be
-  // any views selected.
-  Click(item_views[3], ui::EF_CONTROL_DOWN);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-  EXPECT_FALSE(item_views[2]->selected());
-  EXPECT_FALSE(item_views[3]->selected());  // The clicked view.
-  EXPECT_FALSE(item_views[4]->selected());
-  EXPECT_FALSE(item_views[5]->selected());
-}
-
-// It should be possible to select multiple items in touch mode.
-TEST_F(HoldingSpaceTrayTest, MultiselectInTouchMode) {
-  StartSession();
-
-  // Add a few holding space items.
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake2"));
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake3"));
-
-  // Show the bubble and cache holding space item views.
-  test_api()->Show();
-  const std::vector<views::View*> pinned_file_chips =
-      test_api()->GetPinnedFileChips();
-  ASSERT_EQ(pinned_file_chips.size(), 3u);
-  std::array<HoldingSpaceItemView*, 3> item_views = {
-      HoldingSpaceItemView::Cast(pinned_file_chips[0]),
-      HoldingSpaceItemView::Cast(pinned_file_chips[1]),
-      HoldingSpaceItemView::Cast(pinned_file_chips[2])};
-
-  // Long press an item. The view should be selected and a context menu shown.
-  LongPress(item_views[0]);
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-  EXPECT_FALSE(item_views[2]->selected());
-  EXPECT_TRUE(views::MenuController::GetActiveInstance());
-
-  // Close the context menu. The view that was long pressed should still be
-  // selected.
-  PressAndReleaseKey(ui::KeyboardCode::VKEY_ESCAPE);
-  EXPECT_FALSE(views::MenuController::GetActiveInstance());
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-  EXPECT_FALSE(item_views[2]->selected());
-
-  // Long press another item. Both views that were long pressed should be
-  // selected and a context menu shown.
-  LongPress(item_views[1]);
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_TRUE(item_views[1]->selected());
-  EXPECT_FALSE(item_views[2]->selected());
-  EXPECT_TRUE(views::MenuController::GetActiveInstance());
-
-  // Close the context menu. Both views that were long pressed should still be
-  // selected.
-  PressAndReleaseKey(ui::KeyboardCode::VKEY_ESCAPE);
-  EXPECT_FALSE(views::MenuController::GetActiveInstance());
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_TRUE(item_views[1]->selected());
-  EXPECT_FALSE(item_views[2]->selected());
-
-  // Tap one of the selected views. It should no longer be selected.
-  GestureTap(item_views[0]);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_TRUE(item_views[1]->selected());
-  EXPECT_FALSE(item_views[2]->selected());
-
-  // Tap one of the unselected views. It should become selected.
-  GestureTap(item_views[2]);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_TRUE(item_views[1]->selected());
-  EXPECT_TRUE(item_views[2]->selected());
-
-  // Tap both selected views. No views should be selected.
-  GestureTap(item_views[1]);
-  GestureTap(item_views[2]);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-  EXPECT_FALSE(item_views[2]->selected());
-
-  // Tap an unselected view. This is the only way to open an item via touch.
-  // There must be *no* views currently selected when tapping a view.
-  EXPECT_CALL(*client(), OpenItems)
-      .WillOnce(
-          testing::Invoke([&](const std::vector<const HoldingSpaceItem*>& items,
-                              HoldingSpaceClient::SuccessCallback callback) {
-            ASSERT_EQ(items.size(), 1u);
-            EXPECT_EQ(items[0], item_views[2]->item());
-          }));
-  GestureTap(item_views[2]);
-  testing::Mock::VerifyAndClearExpectations(client());
-}
-
-// Verifies that selection UI is correctly represented depending on device state
-// and the number of selected holding space item views.
-TEST_F(HoldingSpaceTrayTest, SelectionUi) {
-  StartSession();
-
-  // Add both a chip-style and screen-capture-style holding space item.
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
-  AddItem(HoldingSpaceItem::Type::kScreenshot, base::FilePath("/tmp/fake2"));
-
-  // Show holding space UI.
-  test_api()->Show();
-  ASSERT_TRUE(test_api()->IsShowing());
-
-  // Cache holding space item views.
-  std::vector<views::View*> pinned_file_chips =
-      test_api()->GetPinnedFileChips();
-  ASSERT_EQ(pinned_file_chips.size(), 1u);
-  std::vector<views::View*> screen_capture_views =
-      test_api()->GetScreenCaptureViews();
-  ASSERT_EQ(screen_capture_views.size(), 1u);
-  std::vector<HoldingSpaceItemView*> item_views = {
-      HoldingSpaceItemView::Cast(pinned_file_chips[0]),
-      HoldingSpaceItemView::Cast(screen_capture_views[0])};
-
-  // Expects visibility of `view` to match `visible`.
-  auto expect_visible = [](views::View* view, bool visible) {
-    ASSERT_TRUE(view);
-    EXPECT_EQ(view->GetVisible(), visible);
-  };
-
-  // Expects visibility of `item_view`'s checkmark to match `visible`.
-  auto expect_checkmark_visible = [&](HoldingSpaceItemView* item_view,
-                                      bool visible) {
-    auto* checkmark = item_view->GetViewByID(kHoldingSpaceItemCheckmarkId);
-    expect_visible(checkmark, visible);
-  };
-
-  // Expects visibility of `item_view`'s image to match `visible`.
-  auto expect_image_visible = [&](HoldingSpaceItemView* item_view,
-                                  bool visible) {
-    auto* image = item_view->GetViewByID(kHoldingSpaceItemImageId);
-    expect_visible(image, visible);
-  };
-
-  // Initially no holding space item views are selected.
-  for (HoldingSpaceItemView* item_view : item_views) {
-    EXPECT_FALSE(item_view->selected());
-    expect_checkmark_visible(item_view, false);
-    expect_image_visible(item_view, true);
-  }
-
-  // Select the first holding space item view.
-  Click(item_views[0]);
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-
-  // Since the device is not in tablet mode and only a single holding space item
-  // view is selected, no checkmarks should be shown.
-  for (HoldingSpaceItemView* item_view : item_views) {
-    expect_checkmark_visible(item_view, false);
-    expect_image_visible(item_view, true);
-  }
-
-  // Add the second holding space item view to the selection.
-  Click(item_views[1], ui::EF_CONTROL_DOWN);
-
-  // Because there are multiple holding space item views selected, checkmarks
-  // should be shown. For chip-style holding space item views the checkmark
-  // replaces the image.
-  for (HoldingSpaceItemView* item_view : item_views) {
-    EXPECT_TRUE(item_view->selected());
-    expect_checkmark_visible(item_view, true);
-    expect_image_visible(item_view, item_view->item()->IsScreenCapture());
-  }
-
-  // Remove the second holding space item. Note that its view was selected.
-  HoldingSpaceController::Get()->model()->RemoveItem(item_views[1]->item_id());
-
-  // Re-cache holding space item views as they will have been destroyed and
-  // recreated when animating item view removal.
-  pinned_file_chips = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(pinned_file_chips.size(), 1u);
-  screen_capture_views = test_api()->GetScreenCaptureViews();
-  EXPECT_EQ(screen_capture_views.size(), 0u);
-  item_views = {HoldingSpaceItemView::Cast(pinned_file_chips[0])};
-
-  // The first (and only) holding space item view should still be selected
-  // although it should no longer show its checkmark since now only a single
-  // holding space item view is selected.
-  EXPECT_TRUE(item_views[0]->selected());
-  expect_checkmark_visible(item_views[0], false);
-  expect_image_visible(item_views[0], true);
-
-  // Switch to tablet mode. Note that this closes holding space UI.
-  ShellTestApi().SetTabletModeEnabledForTest(true);
-  EXPECT_FALSE(test_api()->IsShowing());
-
-  // Re-show holding space UI.
-  test_api()->Show();
-  ASSERT_TRUE(test_api()->IsShowing());
-
-  // Cache holding space item views.
-  pinned_file_chips = test_api()->GetPinnedFileChips();
-  ASSERT_EQ(pinned_file_chips.size(), 1u);
-  screen_capture_views = test_api()->GetScreenCaptureViews();
-  EXPECT_EQ(screen_capture_views.size(), 0u);
-  item_views = {HoldingSpaceItemView::Cast(pinned_file_chips[0])};
-
-  // Initially no holding space item views are selected.
-  EXPECT_FALSE(item_views[0]->selected());
-
-  // Select the first (and only) holding space item view.
-  Click(item_views[0]);
-
-  // In tablet mode, a selected holding space item view should always show its
-  // checkmark even if it is the only holding space item view selected.
-  EXPECT_TRUE(item_views[0]->selected());
-  expect_checkmark_visible(item_views[0], true);
-  expect_image_visible(item_views[0], false);
-
-  // Switch out of tablet mode. Note that this *doesn't* close holding space UI.
-  ShellTestApi().SetTabletModeEnabledForTest(false);
-  ASSERT_TRUE(test_api()->IsShowing());
-
-  // The first (and only) holding space item should still be selected but it
-  // should update checkmark/image visibility given that it is the only holding
-  // space item view selected.
-  EXPECT_TRUE(item_views[0]->selected());
-  expect_checkmark_visible(item_views[0], false);
-  expect_image_visible(item_views[0], true);
-}
-
-// Verifies selection state after pressing primary/secondary actions.
-TEST_F(HoldingSpaceTrayTest, SelectionWithPrimaryAndSecondaryActions) {
-  StartSession();
-
-  // Add multiple in-progress holding space items.
-  std::vector<HoldingSpaceItem*> items = {
-      AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake1"),
-              HoldingSpaceProgress(0, 100)),
-      AddItem(HoldingSpaceItem::Type::kDownload, base::FilePath("/tmp/fake2"),
-              HoldingSpaceProgress(0, 100))};
-
-  // In-progress download items typically support in-progress commands.
-  std::vector<const HoldingSpaceItem*> cancelled_items;
-  std::vector<const HoldingSpaceItem*> paused_items;
-  for (HoldingSpaceItem* item : items) {
-    EXPECT_TRUE(item->SetInProgressCommands(
-        {CreateInProgressCommand(
-             HoldingSpaceCommandId::kCancelItem,
-             IDS_ASH_HOLDING_SPACE_CONTEXT_MENU_CANCEL,
-             base::BindLambdaForTesting([&](const HoldingSpaceItem* item,
-                                            HoldingSpaceCommandId command_id) {
-               DCHECK_EQ(command_id, HoldingSpaceCommandId::kCancelItem);
-               cancelled_items.push_back(item);
-             })),
-         CreateInProgressCommand(
-             HoldingSpaceCommandId::kPauseItem,
-             IDS_ASH_HOLDING_SPACE_CONTEXT_MENU_PAUSE,
-             base::BindLambdaForTesting([&](const HoldingSpaceItem* item,
-                                            HoldingSpaceCommandId command_id) {
-               DCHECK_EQ(command_id, HoldingSpaceCommandId::kPauseItem);
-               paused_items.push_back(item);
-             }))}));
-  }
-
-  // Show UI.
-  test_api()->Show();
-  ASSERT_TRUE(test_api()->IsShowing());
-
-  // Cache views.
-  const std::vector<views::View*> views = test_api()->GetDownloadChips();
-  ASSERT_EQ(views.size(), 2u);
-  const std::vector<HoldingSpaceItemView*> item_views = {
-      HoldingSpaceItemView::Cast(views[0]),
-      HoldingSpaceItemView::Cast(views[1])};
-
-  // Verify initial selection state.
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-
-  // Move mouse to the 1st item.
-  MoveMouseTo(item_views[0]);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-
-  // Select the 1st item.
-  Click(item_views[0]);
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-
-  {
-    auto* primary_action =
-        item_views[0]->GetViewByID(kHoldingSpaceItemPrimaryActionContainerId);
-    ViewDrawnWaiter().Wait(primary_action);
-
-    // Click the 1st item's primary action. Selection state shouldn't change.
-    EXPECT_TRUE(cancelled_items.empty());
-    Click(primary_action);
-    EXPECT_THAT(cancelled_items, ElementsAre(item_views[0]->item()));
-    EXPECT_TRUE(item_views[0]->selected());
-    EXPECT_FALSE(item_views[1]->selected());
-
-    // Reset tracking.
-    cancelled_items.clear();
-  }
-
-  // Move mouse to the 2nd item.
-  MoveMouseTo(item_views[1]);
-  EXPECT_TRUE(item_views[0]->selected());
-  EXPECT_FALSE(item_views[1]->selected());
-
-  {
-    auto* primary_action =
-        item_views[1]->GetViewByID(kHoldingSpaceItemPrimaryActionContainerId);
-    ViewDrawnWaiter().Wait(primary_action);
-
-    // Click the 2nd item's primary action. Selection state should change.
-    EXPECT_TRUE(cancelled_items.empty());
-    Click(primary_action);
-    EXPECT_THAT(cancelled_items, ElementsAre(item_views[1]->item()));
-    EXPECT_FALSE(item_views[0]->selected());
-    EXPECT_FALSE(item_views[1]->selected());
-  }
-
-  // Select the 2nd item.
-  Click(item_views[1]);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_TRUE(item_views[1]->selected());
-
-  {
-    auto* secondary_action =
-        item_views[1]->GetViewByID(kHoldingSpaceItemSecondaryActionContainerId);
-    ViewDrawnWaiter().Wait(secondary_action);
-
-    // Click the 2nd item's secondary action. Selection state shouldn't change.
-    EXPECT_TRUE(paused_items.empty());
-    Click(secondary_action);
-    EXPECT_THAT(paused_items, ElementsAre(item_views[1]->item()));
-    EXPECT_FALSE(item_views[0]->selected());
-    EXPECT_TRUE(item_views[1]->selected());
-
-    // Reset tracking.
-    paused_items.clear();
-  }
-
-  // Move mouse to the 1st item.
-  MoveMouseTo(item_views[0]);
-  EXPECT_FALSE(item_views[0]->selected());
-  EXPECT_TRUE(item_views[1]->selected());
-
-  {
-    auto* secondary_action =
-        item_views[0]->GetViewByID(kHoldingSpaceItemSecondaryActionContainerId);
-    ViewDrawnWaiter().Wait(secondary_action);
-
-    // Click the 1st item's secondary action. Selection state should change.
-    EXPECT_TRUE(paused_items.empty());
-    Click(secondary_action);
-    EXPECT_THAT(paused_items, ElementsAre(item_views[0]->item()));
-    EXPECT_FALSE(item_views[0]->selected());
-    EXPECT_FALSE(item_views[1]->selected());
-  }
-}
-
-// Verifies that attempting to open holding space items via double click works
-// as expected with event modifiers.
-TEST_F(HoldingSpaceTrayTest, OpenItemsViaDoubleClickWithEventModifiers) {
-  StartSession();
-
-  // Add multiple holding space items.
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake2"));
-
-  const auto show_holding_space_and_cache_views =
-      [&](std::vector<HoldingSpaceItemView*>* item_views) {
-        // Show holding space UI.
-        test_api()->Show();
-        ASSERT_TRUE(test_api()->IsShowing());
-
-        // Cache holding space item views.
-        const std::vector<views::View*> views =
-            test_api()->GetPinnedFileChips();
-        ASSERT_EQ(views.size(), 2u);
-        *item_views = {HoldingSpaceItemView::Cast(views[0]),
-                       HoldingSpaceItemView::Cast(views[1])};
-      };
-
-  std::vector<HoldingSpaceItemView*> item_views;
-  show_holding_space_and_cache_views(&item_views);
-
-  // Double click an item with the control key down. Expect the clicked holding
-  // space item to be opened.
-  EXPECT_CALL(*client(), OpenItems(ElementsAre(item_views[0]->item()), _));
-  DoubleClick(item_views[0], ui::EF_CONTROL_DOWN);
-  testing::Mock::VerifyAndClearExpectations(client());
-
-  // Reset.
-  test_api()->Close();
-  show_holding_space_and_cache_views(&item_views);
-
-  // Double click an item with the shift key down. Expect the clicked holding
-  // space item to be opened.
-  EXPECT_CALL(*client(), OpenItems(ElementsAre(item_views[0]->item()), _));
-  DoubleClick(item_views[0], ui::EF_SHIFT_DOWN);
-  testing::Mock::VerifyAndClearExpectations(client());
-
-  // Reset.
-  test_api()->Close();
-  show_holding_space_and_cache_views(&item_views);
-
-  // Click a holding space item. Then double click the same item with the
-  // control key down. Expect the clicked holding space item to be opened.
-  EXPECT_CALL(*client(), OpenItems(ElementsAre(item_views[0]->item()), _));
-  Click(item_views[0]);
-  DoubleClick(item_views[0], ui::EF_CONTROL_DOWN);
-  testing::Mock::VerifyAndClearExpectations(client());
-
-  // Reset.
-  test_api()->Close();
-  show_holding_space_and_cache_views(&item_views);
-
-  // Click a holding space item. Then double click the same item with the
-  // shift key down. Expect the clicked holding space item to be opened.
-  EXPECT_CALL(*client(), OpenItems(ElementsAre(item_views[0]->item()), _));
-  Click(item_views[0]);
-  DoubleClick(item_views[0], ui::EF_SHIFT_DOWN);
-  testing::Mock::VerifyAndClearExpectations(client());
-
-  // Reset.
-  test_api()->Close();
-  show_holding_space_and_cache_views(&item_views);
-
-  // Click a holding space item. Then double click a different item with the
-  // control key down. Expect both holding space items to be opened.
-  EXPECT_CALL(
-      *client(),
-      OpenItems(ElementsAre(item_views[0]->item(), item_views[1]->item()), _));
-  Click(item_views[0]);
-  DoubleClick(item_views[1], ui::EF_CONTROL_DOWN);
-  testing::Mock::VerifyAndClearExpectations(client());
-
-  // Reset.
-  test_api()->Close();
-  show_holding_space_and_cache_views(&item_views);
-
-  // Click a holding space item. Then double click a different item with the
-  // shift key down. Expect both holding space items to be opened.
-  EXPECT_CALL(
-      *client(),
-      OpenItems(ElementsAre(item_views[0]->item(), item_views[1]->item()), _));
-  Click(item_views[0]);
-  DoubleClick(item_views[1], ui::EF_SHIFT_DOWN);
-  testing::Mock::VerifyAndClearExpectations(client());
-}
-
-// TODO(crbug.com/1208501): Fix flakes and re-enable.
-// Verifies that the holding space tray animates in and out as expected.
-TEST_F(HoldingSpaceTrayTest, DISABLED_EnterAndExitAnimations) {
-  // Prior to session start, the tray should not be showing.
-  EXPECT_FALSE(test_api()->IsShowingInShelf());
-
-  views::View* const tray = test_api()->GetTray();
-  ASSERT_TRUE(tray && tray->layer());
-
-  // Record transforms performed to the `tray` layer.
-  ScopedTransformRecordingLayerDelegate transform_recorder(tray->layer());
-
-  // Start the session. Because a holding space item was added in a previous
-  // session (according to prefs state), the tray should show up without
-  // animation.
-  StartSession();
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
-  EXPECT_TRUE(tray->layer()->transform().IsIdentity());
-  EXPECT_FALSE(transform_recorder.DidAnimate());
-  transform_recorder.Reset();
-
-  // Pin a holding space item. Because the tray was already showing there
-  // should be no change in tray visibility.
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake1"));
-  MarkTimeOfFirstPin();
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  // Because there was no change in visibility, there should be no transform.
-  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
-  EXPECT_TRUE(tray->layer()->transform().IsIdentity());
-  EXPECT_FALSE(transform_recorder.DidAnimate());
-  transform_recorder.Reset();
-
-  // Remove all holding space items. Because a holding space item was
-  // previously pinned, the tray should animate out.
-  RemoveAllItems();
-  ViewVisibilityChangedWaiter().Wait(tray);
-  EXPECT_FALSE(test_api()->IsShowingInShelf());
-
-  // The exit animation should be the default exit animation in which the tray
-  // scales down and pivots about its center point.
-  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
-  EXPECT_TRUE(transform_recorder.DidAnimate());
-  EXPECT_TRUE(transform_recorder.ScaledFrom({1.f, 1.f}, {0.5f, 0.5f}));
-  EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
-  EXPECT_TRUE(transform_recorder.TranslatedFrom({0.f, 0.f}, {11.f, 12.f}));
-  EXPECT_TRUE(transform_recorder.TranslatedInRange({0.f, 0.f}, {11.f, 12.f}));
-  transform_recorder.Reset();
-
-  // Pin a holding space item. The tray should animate in.
-  AddItem(HoldingSpaceItem::Type::kPinnedFile, base::FilePath("/tmp/fake2"));
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  // The entry animation should be the bounce in animation in which the tray
-  // translates in vertically with scaling (since it previously scaled out).
-  LayerAnimationStoppedWaiter().Wait(tray->layer());
-  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
-  EXPECT_TRUE(transform_recorder.DidAnimate());
-  EXPECT_TRUE(transform_recorder.ScaledFrom({0.5f, 0.5f}, {1.f, 1.f}));
-  EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
-  EXPECT_TRUE(transform_recorder.TranslatedFrom({11.f, 12.f}, {0.f, 0.f}));
-  EXPECT_TRUE(transform_recorder.TranslatedInRange({0.f, -16.f}, {11.f, 12.f}));
-  transform_recorder.Reset();
-
-  // Lock the screen. The tray should animate out.
-  auto* session_controller =
-      ash_test_helper()->test_session_controller_client();
-  session_controller->LockScreen();
-  ViewVisibilityChangedWaiter().Wait(tray);
-  EXPECT_FALSE(test_api()->IsShowingInShelf());
-
-  // The exit animation should be the default exit animation in which the tray
-  // scales down and pivots about its center point.
-  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
-  EXPECT_TRUE(transform_recorder.DidAnimate());
-  EXPECT_TRUE(transform_recorder.ScaledFrom({1.0f, 1.0f}, {0.5f, 0.5f}));
-  EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
-  EXPECT_TRUE(transform_recorder.TranslatedFrom({0.f, 0.f}, {11.f, 12.f}));
-  EXPECT_TRUE(transform_recorder.TranslatedInRange({0.f, 0.f}, {11.f, 12.f}));
-  transform_recorder.Reset();
-
-  // Unlock the screen. The tray should show up without animation.
-  session_controller->UnlockScreen();
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
-  EXPECT_TRUE(tray->layer()->transform().IsIdentity());
-  EXPECT_FALSE(transform_recorder.DidAnimate());
-  transform_recorder.Reset();
-
-  // Switch to another user with a populated model. The tray should show up
-  // without animation.
-  constexpr char kSecondaryUserId[] = "user@secondary";
-  HoldingSpaceModel secondary_holding_space_model;
-  AddItemToModel(&secondary_holding_space_model,
-                 HoldingSpaceItem::Type::kPinnedFile,
-                 base::FilePath("/tmp/fake3"));
-  SwitchToSecondaryUser(kSecondaryUserId, /*client=*/nullptr,
-                        &secondary_holding_space_model);
-  EXPECT_TRUE(test_api()->IsShowingInShelf());
-
-  // NOTE: When switching to the secondary user the tray will have briefly been
-  // hidden while the primary user's holding space model was detached until the
-  // secondary user's holding space model was attached. That said, the tray will
-  // have scaled out and must scale back in but should *not* bounce.
-  EXPECT_FALSE(tray->layer()->GetAnimator()->is_animating());
-  EXPECT_TRUE(transform_recorder.ScaledFrom({1.f, 1.f}, {1.f, 1.f}));
-  EXPECT_TRUE(transform_recorder.ScaledInRange({0.5f, 0.5f}, {1.f, 1.f}));
-  EXPECT_TRUE(transform_recorder.TranslatedFrom({0.f, 0.f}, {0.f, 0.f}));
-  EXPECT_TRUE(transform_recorder.TranslatedInRange({0.f, 0.f}, {11.f, 12.f}));
-  transform_recorder.Reset();
-
-  // Clean up.
-  UnregisterModelForUser(kSecondaryUserId);
-}
-
 // Base class for holding space tray tests which make assertions about primary
 // and secondary actions on holding space item views. Tests are parameterized by
 // holding space item type.
 class HoldingSpaceTrayPrimaryAndSecondaryActionsTest
-    : public HoldingSpaceTrayTest,
+    : public HoldingSpaceAshTestBase,
       public testing::WithParamInterface<HoldingSpaceItem::Type> {
  public:
   // Returns the parameterized holding space item type.
diff --git a/ash/system/ime_menu/ime_menu_tray.cc b/ash/system/ime_menu/ime_menu_tray.cc
index 6870523..b8c194e3 100644
--- a/ash/system/ime_menu/ime_menu_tray.cc
+++ b/ash/system/ime_menu/ime_menu_tray.cc
@@ -210,7 +210,6 @@
     const int kImeKeysetUmaBoundary = 4;
     UMA_HISTOGRAM_ENUMERATION("InputMethod.ImeMenu.EmojiHandwritingVoiceButton",
                               keyset, kImeKeysetUmaBoundary);
-
     // The |keyset| will be used for drawing input view keyset in IME
     // extensions. ImeMenuTray::ShowKeyboardWithKeyset() will deal with
     // the |keyset| string to generate the right input view url.
@@ -233,10 +232,8 @@
 
     if (show_emoji) {
       emoji_button_ = new SystemMenuButton(
-          base::BindRepeating(&ImeButtonsView::KeysetButtonPressed,
-                              base::Unretained(this),
-                              input_method::ImeKeyset::kEmoji),
-          kImeMenuEmoticonIcon, IDS_ASH_STATUS_TRAY_IME_EMOJI);
+          base::BindRepeating(&ui::ShowEmojiPanel), kImeMenuEmoticonIcon,
+          IDS_ASH_STATUS_TRAY_IME_EMOJI);
       emoji_button_->SetID(kEmojiButtonId);
       AddChildView(emoji_button_);
     }
@@ -399,16 +396,10 @@
 void ImeMenuTray::ShowKeyboardWithKeyset(input_method::ImeKeyset keyset) {
   CloseBubble();
 
-  // Show emoji in the same way as other means of opening and showing emoji
-  // for laptop and tablet mode.
-  if (keyset == input_method::ImeKeyset::kEmoji) {
-    ui::ShowEmojiPanel();
-  } else {
-    Shell::Get()
-        ->keyboard_controller()
-        ->virtual_keyboard_controller()
-        ->ForceShowKeyboardWithKeyset(keyset);
-  }
+  Shell::Get()
+      ->keyboard_controller()
+      ->virtual_keyboard_controller()
+      ->ForceShowKeyboardWithKeyset(keyset);
 }
 
 bool ImeMenuTray::ShouldShowBottomButtons() {
diff --git a/ash/system/ime_menu/ime_menu_tray_unittest.cc b/ash/system/ime_menu/ime_menu_tray_unittest.cc
index bdedc53b..bfccce6 100644
--- a/ash/system/ime_menu/ime_menu_tray_unittest.cc
+++ b/ash/system/ime_menu/ime_menu_tray_unittest.cc
@@ -381,9 +381,6 @@
   ASSERT_TRUE(emoji_button);
   emoji_button->OnGestureEvent(&tap);
 
-  // The menu should be hidden.
-  EXPECT_FALSE(IsBubbleShown());
-
   // The callback should have been called.
   EXPECT_EQ(callCount, 1);
 
diff --git a/ash/system/notification_center/notification_center_tray.cc b/ash/system/notification_center/notification_center_tray.cc
index 7a61cdc..4b8027b 100644
--- a/ash/system/notification_center/notification_center_tray.cc
+++ b/ash/system/notification_center/notification_center_tray.cc
@@ -11,6 +11,8 @@
 #include "ash/system/tray/tray_bubble_view.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/base/metadata/metadata_impl_macros.h"
+#include "ui/message_center/message_center.h"
+#include "ui/message_center/message_center_types.h"
 #include "ui/views/layout/flex_layout.h"
 
 namespace ash {
@@ -18,10 +20,18 @@
 NotificationCenterTray::NotificationCenterTray(Shelf* shelf)
     : TrayBackgroundView(shelf, RoundedCornerBehavior::kStartRounded) {
   SetLayoutManager(std::make_unique<views::FlexLayout>());
+  message_center_observation_.Observe(message_center::MessageCenter::Get());
+  set_use_bounce_in_animation(false);
 }
 
 NotificationCenterTray::~NotificationCenterTray() = default;
 
+void NotificationCenterTray::UpdateAfterSystemTrayVisibilityChanged(
+    bool system_tray_visible) {
+  system_tray_visibile_ = system_tray_visible;
+  UpdateVisibility();
+}
+
 std::u16string NotificationCenterTray::GetAccessibleNameForTray() {
   return std::u16string();
 }
@@ -39,7 +49,9 @@
 
 void NotificationCenterTray::ShowBubble() {}
 
-void NotificationCenterTray::UpdateAfterLoginStatusChange() {}
+void NotificationCenterTray::UpdateAfterLoginStatusChange() {
+  UpdateVisibility();
+}
 
 TrayBubbleView* NotificationCenterTray::GetBubbleView() {
   return nullptr;
@@ -49,6 +61,38 @@
   return nullptr;
 }
 
+void NotificationCenterTray::OnNotificationAdded(
+    const std::string& notification_id) {
+  UpdateVisibility();
+}
+
+void NotificationCenterTray::OnNotificationDisplayed(
+    const std::string& notification_id,
+    const message_center::DisplaySource source) {
+  UpdateVisibility();
+}
+
+void NotificationCenterTray::OnNotificationRemoved(
+    const std::string& notification_id,
+    bool by_user) {
+  UpdateVisibility();
+}
+
+void NotificationCenterTray::OnNotificationUpdated(
+    const std::string& notification_id) {
+  UpdateVisibility();
+}
+
+void NotificationCenterTray::UpdateVisibility() {
+  const bool new_visibility =
+      message_center::MessageCenter::Get()->NotificationCount() > 0 &&
+      system_tray_visibile_;
+  if (new_visibility == visible_preferred())
+    return;
+
+  SetVisiblePreferred(new_visibility);
+}
+
 BEGIN_METADATA(NotificationCenterTray, TrayBackgroundView)
 END_METADATA
 
diff --git a/ash/system/notification_center/notification_center_tray.h b/ash/system/notification_center/notification_center_tray.h
index 336cf6a69..777d9f4 100644
--- a/ash/system/notification_center/notification_center_tray.h
+++ b/ash/system/notification_center/notification_center_tray.h
@@ -5,10 +5,16 @@
 #ifndef ASH_SYSTEM_NOTIFICATION_CENTER_NOTIFICATION_CENTER_TRAY_H_
 #define ASH_SYSTEM_NOTIFICATION_CENTER_NOTIFICATION_CENTER_TRAY_H_
 
+#include <string>
+
 #include "ash/ash_export.h"
 #include "ash/system/tray/tray_background_view.h"
 #include "ash/system/unified/notification_icons_controller.h"
+#include "base/scoped_observation.h"
 #include "ui/base/metadata/metadata_header_macros.h"
+#include "ui/message_center/message_center.h"
+#include "ui/message_center/message_center_observer.h"
+#include "ui/message_center/message_center_types.h"
 
 namespace views {
 class Widget;
@@ -22,7 +28,9 @@
 // A button in the tray which displays the number of currently available
 // notifications along with icons for pinned notifications. Clicking this button
 // opens a bubble with a scrollable list of all current notifications.
-class ASH_EXPORT NotificationCenterTray : public TrayBackgroundView {
+class ASH_EXPORT NotificationCenterTray
+    : public TrayBackgroundView,
+      public message_center::MessageCenterObserver {
  public:
   METADATA_HEADER(NotificationCenterTray);
 
@@ -31,6 +39,8 @@
   NotificationCenterTray& operator=(const NotificationCenterTray&) = delete;
   ~NotificationCenterTray() override;
 
+  void UpdateAfterSystemTrayVisibilityChanged(bool system_tray_visible);
+
   // TrayBackgroundView:
   std::u16string GetAccessibleNameForTray() override;
   void HandleLocaleChange() override;
@@ -43,11 +53,34 @@
   views::Widget* GetBubbleWidget() const override;
 
  private:
+  // message_center::MessageCenterObserver:
+  void OnNotificationAdded(const std::string& notification_id) override;
+  void OnNotificationDisplayed(
+      const std::string& notification_id,
+      const message_center::DisplaySource source) override;
+  void OnNotificationRemoved(const std::string& notification_id,
+                             bool by_user) override;
+  void OnNotificationUpdated(const std::string& notification_id) override;
+
+  // Update the visibility of the tray button based on available notifications.
+  // If there are no notifications the tray button should be hidden and shown
+  // otherwise.
+  void UpdateVisibility();
+
   // Manages showing notification icons in the tray.
   const std::unique_ptr<NotificationIconsController>
       notification_icons_controller_;
 
   // TODO(1311738): Add NotificationCenterBubble.
+
+  // The notification center tray can only be shown along side the system and
+  // date tray. This flag keeps track of the system tray's visibility being set
+  // by the status area widget.
+  bool system_tray_visibile_ = true;
+
+  base::ScopedObservation<message_center::MessageCenter,
+                          class message_center::MessageCenterObserver>
+      message_center_observation_{this};
 };
 
 }  // namespace ash
diff --git a/ash/system/notification_center/notification_center_tray_unittest.cc b/ash/system/notification_center/notification_center_tray_unittest.cc
new file mode 100644
index 0000000..7d38bf92
--- /dev/null
+++ b/ash/system/notification_center/notification_center_tray_unittest.cc
@@ -0,0 +1,83 @@
+// 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/notification_center/notification_center_tray.h"
+
+#include "ash/constants/ash_features.h"
+#include "ash/system/status_area_widget.h"
+#include "ash/system/status_area_widget_test_helper.h"
+#include "ash/test/ash_test_base.h"
+#include "base/test/scoped_feature_list.h"
+#include "ui/message_center/message_center.h"
+#include "ui/message_center/public/cpp/notification.h"
+
+namespace ash {
+
+class NotificationCenterTrayTest : public AshTestBase {
+ public:
+  NotificationCenterTrayTest() = default;
+  NotificationCenterTrayTest(const NotificationCenterTrayTest&) = delete;
+  NotificationCenterTrayTest& operator=(const NotificationCenterTrayTest&) =
+      delete;
+  ~NotificationCenterTrayTest() override = default;
+
+  void SetUp() override {
+    // Enable quick settings revamp feature.
+    scoped_feature_list_.InitWithFeatures({ash::features::kQsRevamp}, {});
+
+    AshTestBase::SetUp();
+
+    notification_tray_ = StatusAreaWidgetTestHelper::GetStatusAreaWidget()
+                             ->notification_center_tray();
+  }
+
+  void TearDown() override {
+    notification_tray_ = nullptr;
+    AshTestBase::TearDown();
+  }
+
+  std::unique_ptr<message_center::Notification> CreateNotification(
+      const std::string& id,
+      const std::string& title = "test_title") {
+    return std::make_unique<message_center::Notification>(
+        message_center::NOTIFICATION_TYPE_SIMPLE, id, base::UTF8ToUTF16(title),
+        u"test message", ui::ImageModel(),
+        std::u16string() /* display_source */, GURL(),
+        message_center::NotifierId(), message_center::RichNotificationData(),
+        new message_center::NotificationDelegate());
+  }
+
+  std::string AddNotification() {
+    std::string id = base::NumberToString(id_++);
+    message_center::MessageCenter::Get()->AddNotification(
+        CreateNotification(id));
+    return id;
+  }
+
+  NotificationCenterTray* GetNotificationCenterTray() {
+    return notification_tray_;
+  }
+
+ private:
+  int id_ = 0;
+
+  base::test::ScopedFeatureList scoped_feature_list_;
+
+  // Owned by `StatusAreaWidget`.
+  NotificationCenterTray* notification_tray_ = nullptr;
+};
+
+// Test the initial state.
+TEST_F(NotificationCenterTrayTest, VisibilityBasedOnAvailableNotifications) {
+  EXPECT_FALSE(GetNotificationCenterTray()->GetVisible());
+
+  std::string id = AddNotification();
+  EXPECT_TRUE(GetNotificationCenterTray()->GetVisible());
+
+  message_center::MessageCenter::Get()->RemoveNotification(id, true);
+
+  EXPECT_FALSE(GetNotificationCenterTray()->GetVisible());
+}
+
+}  // namespace ash
diff --git a/ash/system/phonehub/multidevice_feature_opt_in_view.cc b/ash/system/phonehub/multidevice_feature_opt_in_view.cc
index 7af67bb..f54731db 100644
--- a/ash/system/phonehub/multidevice_feature_opt_in_view.cc
+++ b/ash/system/phonehub/multidevice_feature_opt_in_view.cc
@@ -135,9 +135,7 @@
   setup_mode_ = GetPermissionSetupMode(multidevice_feature_access_manager_);
   access_manager_observation_.Observe(multidevice_feature_access_manager_);
   // Checks and updates its visibility upon creation.
-  UpdateVisibility();
-
-  LogPermissionOnboardingPromoShown(setup_mode_);
+  UpdateVisibility(/*was_visible=*/false);
 }
 
 MultideviceFeatureOptInView::~MultideviceFeatureOptInView() = default;
@@ -164,14 +162,14 @@
 }
 
 void MultideviceFeatureOptInView::OnNotificationAccessChanged() {
-  UpdateVisibility();
+  UpdateVisibility(/*was_visible=*/GetVisible());
 }
 
 void MultideviceFeatureOptInView::OnCameraRollAccessChanged() {
-  UpdateVisibility();
+  UpdateVisibility(/*was_visible=*/GetVisible());
 }
 
-void MultideviceFeatureOptInView::UpdateVisibility() {
+void MultideviceFeatureOptInView::UpdateVisibility(bool was_visible) {
   DCHECK(multidevice_feature_access_manager_);
   // Refresh the permission status if changed
   phonehub::util::PermissionsOnboardingSetUpMode current_mode =
@@ -184,6 +182,9 @@
   SetVisible(setup_mode_ != PermissionsOnboardingSetUpMode::kNone &&
              !multidevice_feature_access_manager_
                   ->HasMultideviceFeatureSetupUiBeenDismissed());
+  if (!was_visible && GetVisible()) {
+    LogPermissionOnboardingPromoShown(setup_mode_);
+  }
   PreferredSizeChanged();
 }
 
diff --git a/ash/system/phonehub/multidevice_feature_opt_in_view.h b/ash/system/phonehub/multidevice_feature_opt_in_view.h
index 9f09af29..86d1874 100644
--- a/ash/system/phonehub/multidevice_feature_opt_in_view.h
+++ b/ash/system/phonehub/multidevice_feature_opt_in_view.h
@@ -42,7 +42,7 @@
 
   // Calculates whether this view should be visible and updates its visibility
   // accordingly.
-  void UpdateVisibility();
+  void UpdateVisibility(bool was_visible);
 
   phonehub::MultideviceFeatureAccessManager*
       multidevice_feature_access_manager_;
diff --git a/ash/system/screen_security/DIR_METADATA b/ash/system/privacy/DIR_METADATA
similarity index 100%
rename from ash/system/screen_security/DIR_METADATA
rename to ash/system/privacy/DIR_METADATA
diff --git a/ash/system/screen_security/screen_capture_observer.h b/ash/system/privacy/screen_capture_observer.h
similarity index 82%
rename from ash/system/screen_security/screen_capture_observer.h
rename to ash/system/privacy/screen_capture_observer.h
index cf510eff..4b39cc6 100644
--- a/ash/system/screen_security/screen_capture_observer.h
+++ b/ash/system/privacy/screen_capture_observer.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 ASH_SYSTEM_SCREEN_SECURITY_SCREEN_CAPTURE_OBSERVER_H_
-#define ASH_SYSTEM_SCREEN_SECURITY_SCREEN_CAPTURE_OBSERVER_H_
+#ifndef ASH_SYSTEM_PRIVACY_SCREEN_CAPTURE_OBSERVER_H_
+#define ASH_SYSTEM_PRIVACY_SCREEN_CAPTURE_OBSERVER_H_
 
 #include <string>
 
@@ -32,4 +32,4 @@
 
 }  // namespace ash
 
-#endif  // ASH_SYSTEM_SCREEN_SECURITY_SCREEN_CAPTURE_OBSERVER_H_
+#endif  // ASH_SYSTEM_PRIVACY_SCREEN_CAPTURE_OBSERVER_H_
diff --git a/ash/system/screen_security/screen_security_notification_controller.cc b/ash/system/privacy/screen_security_notification_controller.cc
similarity index 98%
rename from ash/system/screen_security/screen_security_notification_controller.cc
rename to ash/system/privacy/screen_security_notification_controller.cc
index 0518144..0ad31aa 100644
--- a/ash/system/screen_security/screen_security_notification_controller.cc
+++ b/ash/system/privacy/screen_security_notification_controller.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 "ash/system/screen_security/screen_security_notification_controller.h"
+#include "ash/system/privacy/screen_security_notification_controller.h"
 
 #include "ash/constants/notifier_catalogs.h"
 #include "ash/public/cpp/notification_utils.h"
diff --git a/ash/system/screen_security/screen_security_notification_controller.h b/ash/system/privacy/screen_security_notification_controller.h
similarity index 87%
rename from ash/system/screen_security/screen_security_notification_controller.h
rename to ash/system/privacy/screen_security_notification_controller.h
index c950676..7514d77 100644
--- a/ash/system/screen_security/screen_security_notification_controller.h
+++ b/ash/system/privacy/screen_security_notification_controller.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 ASH_SYSTEM_SCREEN_SECURITY_SCREEN_SECURITY_NOTIFICATION_CONTROLLER_H_
-#define ASH_SYSTEM_SCREEN_SECURITY_SCREEN_SECURITY_NOTIFICATION_CONTROLLER_H_
+#ifndef ASH_SYSTEM_PRIVACY_SCREEN_SECURITY_NOTIFICATION_CONTROLLER_H_
+#define ASH_SYSTEM_PRIVACY_SCREEN_SECURITY_NOTIFICATION_CONTROLLER_H_
 
 #include <string>
 #include <vector>
 
 #include "ash/shell_observer.h"
-#include "ash/system/screen_security/screen_capture_observer.h"
-#include "ash/system/screen_security/screen_share_observer.h"
+#include "ash/system/privacy/screen_capture_observer.h"
+#include "ash/system/privacy/screen_share_observer.h"
 #include "base/memory/weak_ptr.h"
 
 namespace ash {
@@ -75,4 +75,4 @@
 
 }  // namespace ash
 
-#endif  // ASH_SYSTEM_SCREEN_SECURITY_SCREEN_SECURITY_NOTIFICATION_CONTROLLER_H_
+#endif  // ASH_SYSTEM_PRIVACY_SCREEN_SECURITY_NOTIFICATION_CONTROLLER_H_
diff --git a/ash/system/screen_security/screen_security_notification_controller_unittest.cc b/ash/system/privacy/screen_security_notification_controller_unittest.cc
similarity index 95%
rename from ash/system/screen_security/screen_security_notification_controller_unittest.cc
rename to ash/system/privacy/screen_security_notification_controller_unittest.cc
index 6fb1b82..d43ded0 100644
--- a/ash/system/screen_security/screen_security_notification_controller_unittest.cc
+++ b/ash/system/privacy/screen_security_notification_controller_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 "ash/system/screen_security/screen_security_notification_controller.h"
+#include "ash/system/privacy/screen_security_notification_controller.h"
 
 #include "ash/shell.h"
 #include "ash/system/tray/system_tray_notifier.h"
diff --git a/ash/system/screen_security/screen_share_observer.h b/ash/system/privacy/screen_share_observer.h
similarity index 79%
rename from ash/system/screen_security/screen_share_observer.h
rename to ash/system/privacy/screen_share_observer.h
index 25b9884..ae2208a7 100644
--- a/ash/system/screen_security/screen_share_observer.h
+++ b/ash/system/privacy/screen_share_observer.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 ASH_SYSTEM_SCREEN_SECURITY_SCREEN_SHARE_OBSERVER_H_
-#define ASH_SYSTEM_SCREEN_SECURITY_SCREEN_SHARE_OBSERVER_H_
+#ifndef ASH_SYSTEM_PRIVACY_SCREEN_SHARE_OBSERVER_H_
+#define ASH_SYSTEM_PRIVACY_SCREEN_SHARE_OBSERVER_H_
 
 #include <string>
 
@@ -28,4 +28,4 @@
 
 }  // namespace ash
 
-#endif  // ASH_SYSTEM_SCREEN_SECURITY_SCREEN_SHARE_OBSERVER_H_
+#endif  // ASH_SYSTEM_PRIVACY_SCREEN_SHARE_OBSERVER_H_
diff --git a/ash/system/screen_security/screen_switch_check_controller.cc b/ash/system/privacy/screen_switch_check_controller.cc
similarity index 97%
rename from ash/system/screen_security/screen_switch_check_controller.cc
rename to ash/system/privacy/screen_switch_check_controller.cc
index 7d2916ad..70780d71 100644
--- a/ash/system/screen_security/screen_switch_check_controller.cc
+++ b/ash/system/privacy/screen_switch_check_controller.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 "ash/system/screen_security/screen_switch_check_controller.h"
+#include "ash/system/privacy/screen_switch_check_controller.h"
 
 #include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
diff --git a/ash/system/screen_security/screen_switch_check_controller.h b/ash/system/privacy/screen_switch_check_controller.h
similarity index 81%
rename from ash/system/screen_security/screen_switch_check_controller.h
rename to ash/system/privacy/screen_switch_check_controller.h
index d3b2547a..385d161 100644
--- a/ash/system/screen_security/screen_switch_check_controller.h
+++ b/ash/system/privacy/screen_switch_check_controller.h
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef ASH_SYSTEM_SCREEN_SECURITY_SCREEN_SWITCH_CHECK_CONTROLLER_H_
-#define ASH_SYSTEM_SCREEN_SECURITY_SCREEN_SWITCH_CHECK_CONTROLLER_H_
+#ifndef ASH_SYSTEM_PRIVACY_SCREEN_SWITCH_CHECK_CONTROLLER_H_
+#define ASH_SYSTEM_PRIVACY_SCREEN_SWITCH_CHECK_CONTROLLER_H_
 
-#include "ash/system/screen_security/screen_capture_observer.h"
-#include "ash/system/screen_security/screen_share_observer.h"
+#include "ash/system/privacy/screen_capture_observer.h"
+#include "ash/system/privacy/screen_share_observer.h"
 
 namespace ash {
 
@@ -47,4 +47,4 @@
 
 }  // namespace ash
 
-#endif  // ASH_SYSTEM_SCREEN_SECURITY_SCREEN_SWITCH_CHECK_CONTROLLER_H_
+#endif  // ASH_SYSTEM_PRIVACY_SCREEN_SWITCH_CHECK_CONTROLLER_H_
diff --git a/ash/system/status_area_widget.cc b/ash/system/status_area_widget.cc
index 45b9625..755777b 100644
--- a/ash/system/status_area_widget.cc
+++ b/ash/system/status_area_widget.cc
@@ -4,6 +4,9 @@
 
 #include "ash/system/status_area_widget.h"
 
+#include <memory>
+#include <string>
+
 #include "ash/capture_mode/stop_recording_button_tray.h"
 #include "ash/constants/ash_features.h"
 #include "ash/constants/ash_switches.h"
@@ -23,6 +26,7 @@
 #include "ash/system/media/media_tray.h"
 #include "ash/system/model/clock_model.h"
 #include "ash/system/model/system_tray_model.h"
+#include "ash/system/notification_center/notification_center_tray.h"
 #include "ash/system/overview/overview_button_tray.h"
 #include "ash/system/palette/palette_tray.h"
 #include "ash/system/phonehub/phone_hub_tray.h"
@@ -45,6 +49,8 @@
 #include "ui/compositor/layer.h"
 #include "ui/compositor/scoped_layer_animation_settings.h"
 #include "ui/display/display.h"
+#include "ui/message_center/message_center.h"
+#include "ui/message_center/message_center_types.h"
 
 namespace ash {
 
@@ -136,6 +142,12 @@
     phone_hub_tray_ = AddTrayButton(std::make_unique<PhoneHubTray>(shelf_));
   }
 
+  if (chromeos::features::IsQsRevampEnabled()) {
+    notification_center_tray_ =
+        AddTrayButton(std::make_unique<NotificationCenterTray>(shelf_));
+    notification_tray_view_observer_.Observe(notification_center_tray_);
+  }
+
   auto unified_system_tray = std::make_unique<UnifiedSystemTray>(shelf_);
   unified_system_tray_ = unified_system_tray.get();
   if (features::IsCalendarViewEnabled()) {
@@ -197,6 +209,9 @@
   tray->SetVisiblePreferred(visible);
   if (features::IsCalendarViewEnabled())
     date_tray_->SetVisiblePreferred(visible);
+
+  if (features::IsQsRevampEnabled() && notification_center_tray_)
+    notification_center_tray_->UpdateAfterSystemTrayVisibilityChanged(visible);
   if (visible) {
     Show();
   } else {
@@ -238,6 +253,7 @@
     if (tray_button == overflow_button_tray_ ||
         tray_button == overview_button_tray_ ||
         tray_button == unified_system_tray_ || tray_button == date_tray_ ||
+        tray_button == notification_center_tray_ ||
         !tray_button->GetVisible()) {
       continue;
     }
@@ -573,6 +589,14 @@
   return true;
 }
 
+void StatusAreaWidget::OnViewVisibilityChanged(views::View* observed_view,
+                                               views::View* starting_view) {
+  if (observed_view != notification_center_tray_)
+    return;
+
+  UpdateDateTrayRoundedCorners();
+}
+
 void StatusAreaWidget::OnMouseEvent(ui::MouseEvent* event) {
   if (event->IsMouseWheelEvent()) {
     ui::MouseWheelEvent* mouse_wheel_event = event->AsMouseWheelEvent();
@@ -648,6 +672,16 @@
           child_visibility_bitmask, should_animate};
 }
 
+void StatusAreaWidget::UpdateDateTrayRoundedCorners() {
+  if (!features::IsQsRevampEnabled() || !date_tray_)
+    return;
+
+  date_tray_->SetRoundedCornerBehavior(
+      notification_center_tray_->GetVisible()
+          ? TrayBackgroundView::RoundedCornerBehavior::kNotRounded
+          : TrayBackgroundView::RoundedCornerBehavior::kStartRounded);
+}
+
 int StatusAreaWidget::GetCollapseAvailableWidth(bool force_collapsible) const {
   const int shelf_width =
       shelf_->shelf_widget()->GetClientAreaBoundsInScreen().width();
diff --git a/ash/system/status_area_widget.h b/ash/system/status_area_widget.h
index 966c36e8..6fadb73 100644
--- a/ash/system/status_area_widget.h
+++ b/ash/system/status_area_widget.h
@@ -11,6 +11,10 @@
 #include "ash/public/cpp/shelf_types.h"
 #include "ash/shelf/shelf_component.h"
 #include "base/memory/weak_ptr.h"
+#include "base/scoped_observation.h"
+#include "ui/message_center/message_center.h"
+#include "ui/message_center/message_center_observer.h"
+#include "ui/views/view_observer.h"
 #include "ui/views/widget/widget.h"
 
 namespace aura {
@@ -24,6 +28,7 @@
 class ImeMenuTray;
 class LogoutButtonTray;
 class MediaTray;
+class NotificationCenterTray;
 class OverviewButtonTray;
 class PaletteTray;
 class PhoneHubTray;
@@ -44,6 +49,7 @@
 // on secondary monitors at the login screen).
 class ASH_EXPORT StatusAreaWidget : public SessionObserver,
                                     public ShelfComponent,
+                                    public views::ViewObserver,
                                     public views::Widget {
  public:
   // Whether the status area is collapsed or expanded. Currently, this is only
@@ -123,6 +129,9 @@
     return status_area_widget_delegate_;
   }
   UnifiedSystemTray* unified_system_tray() { return unified_system_tray_; }
+  NotificationCenterTray* notification_center_tray() {
+    return notification_center_tray_;
+  }
   DateTray* date_tray() { return date_tray_; }
   DictationButtonTray* dictation_button_tray() {
     return dictation_button_tray_;
@@ -214,6 +223,10 @@
   // changed.
   absl::optional<LayoutInputs> layout_inputs_;
 
+  // views::ViewObserver:
+  void OnViewVisibilityChanged(views::View* observed_view,
+                               views::View* starting_view) override;
+
   // views::Widget:
   void OnMouseEvent(ui::MouseEvent* event) override;
   void OnGestureEvent(ui::GestureEvent* event) override;
@@ -240,6 +253,10 @@
   // current conditions.
   CollapseState CalculateCollapseState() const;
 
+  // Update rounded corners for  the date tray. The corner behavior for date
+  // tray depends on the visibility of the notification center tray.
+  void UpdateDateTrayRoundedCorners();
+
   // Gets the collapse available width based on if the date tray is shown.
   // If `force_collapsible`, returns a fixed width which is not based on the
   // shelf width.
@@ -251,6 +268,7 @@
   OverviewButtonTray* overview_button_tray_ = nullptr;
   DictationButtonTray* dictation_button_tray_ = nullptr;
   MediaTray* media_tray_ = nullptr;
+  NotificationCenterTray* notification_center_tray_ = nullptr;
   DateTray* date_tray_ = nullptr;
   UnifiedSystemTray* unified_system_tray_ = nullptr;
   LogoutButtonTray* logout_button_tray_ = nullptr;
@@ -282,6 +300,9 @@
   // lives.
   int tray_bubble_count_ = 0;
 
+  base::ScopedObservation<views::View, views::ViewObserver>
+      notification_tray_view_observer_{this};
+
   base::WeakPtrFactory<StatusAreaWidget> weak_ptr_factory_{this};
 };
 
diff --git a/ash/system/status_area_widget_delegate.cc b/ash/system/status_area_widget_delegate.cc
index d0fd9e04..e9636db3 100644
--- a/ash/system/status_area_widget_delegate.cc
+++ b/ash/system/status_area_widget_delegate.cc
@@ -13,6 +13,7 @@
 #include "ash/shelf/shelf_layout_manager.h"
 #include "ash/shelf/shelf_widget.h"
 #include "ash/shell.h"
+#include "ash/system/notification_center/notification_center_tray.h"
 #include "ash/system/status_area_widget.h"
 #include "ash/system/tray/tray_constants.h"
 #include "ash/system/unified/date_tray.h"
@@ -33,7 +34,7 @@
 namespace {
 
 constexpr int kPaddingBetweenItems = 8;
-constexpr int kPaddingOffsetBetweenDateAndSystemTray = -4;
+constexpr int kSystemTraysRightPaddingOffset = -4;
 
 class StatusAreaWidgetDelegateAnimationSettings
     : public ui::ScopedLayerAnimationSettings {
@@ -260,11 +261,14 @@
   // is enabled).
   int right_edge = kPaddingBetweenItems;
 
-  // If this view is `DateTray`, apply the offset
-  // `kPaddingOffsetBetweenDateAndSystemTray` between it and
-  // `UnifiedSystemTray`.
-  if (child->GetClassName() == DateTray::kViewClassName) {
-    right_edge += kPaddingOffsetBetweenDateAndSystemTray;
+  // TODO(crbug/1354354): Refactor this hack to make it more efficient and less
+  // of a hack.
+  // If this view is `DateTray` or `NotificationCenterTray`, apply
+  // the offset `kSystemTraysRightPaddingOffset` between it and the tray on it's
+  // right.
+  if (child->GetClassName() == DateTray::kViewClassName ||
+      child->GetClassName() == NotificationCenterTray::kViewClassName) {
+    right_edge += kSystemTraysRightPaddingOffset;
   }
 
   if (is_child_on_edge) {
diff --git a/ash/system/status_area_widget_unittest.cc b/ash/system/status_area_widget_unittest.cc
index cc46cac..53c9f8e 100644
--- a/ash/system/status_area_widget_unittest.cc
+++ b/ash/system/status_area_widget_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 
+#include "ash/constants/ash_features.h"
 #include "ash/constants/ash_switches.h"
 #include "ash/focus_cycler.h"
 #include "ash/ime/ime_controller_impl.h"
@@ -23,17 +24,20 @@
 #include "ash/system/ime_menu/ime_menu_tray.h"
 #include "ash/system/model/system_tray_model.h"
 #include "ash/system/model/virtual_keyboard_model.h"
+#include "ash/system/notification_center/notification_center_tray.h"
 #include "ash/system/overview/overview_button_tray.h"
 #include "ash/system/palette/palette_tray.h"
 #include "ash/system/session/logout_button_tray.h"
 #include "ash/system/status_area_widget_test_helper.h"
 #include "ash/system/tray/status_area_overflow_button_tray.h"
 #include "ash/system/tray/system_tray_notifier.h"
+#include "ash/system/unified/date_tray.h"
 #include "ash/system/unified/unified_system_tray.h"
 #include "ash/system/virtual_keyboard/virtual_keyboard_tray.h"
 #include "ash/test/ash_test_base.h"
 #include "base/callback_helpers.h"
 #include "base/command_line.h"
+#include "base/test/scoped_feature_list.h"
 #include "chromeos/ash/components/network/cellular_metrics_logger.h"
 #include "chromeos/ash/components/network/network_handler.h"
 #include "chromeos/ash/components/network/network_handler_test_helper.h"
@@ -627,4 +631,45 @@
   EXPECT_FALSE(overflow_button_->GetVisible());
 }
 
+class StatusAreaWidgetQSRevampTest : public AshTestBase {
+ protected:
+  void SetUp() override {
+    scoped_feature_list_.InitWithFeatures({ash::features::kQsRevamp}, {});
+    AshTestBase::SetUp();
+  }
+
+  TrayBackgroundView::RoundedCornerBehavior GetTrayCornerBehavior(
+      TrayBackgroundView* tray) {
+    return tray->corner_behavior_;
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+// The corner radius of the date tray changes based on the visibility of the
+// `NotificationCenterTray`. The date tray should have rounded corners on the
+// left if the `NotificationCenterTray` is not visible and no rounded corners
+// otherwise.
+TEST_F(StatusAreaWidgetQSRevampTest, DateTrayRoundedCornerBehavior) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(features::kQsRevamp);
+
+  StatusAreaWidget* status_area =
+      StatusAreaWidgetTestHelper::GetStatusAreaWidget();
+  EXPECT_FALSE(status_area->notification_center_tray()->GetVisible());
+  EXPECT_EQ(GetTrayCornerBehavior(status_area->date_tray()),
+            TrayBackgroundView::RoundedCornerBehavior::kStartRounded);
+
+  status_area->notification_center_tray()->SetVisiblePreferred(true);
+
+  EXPECT_EQ(GetTrayCornerBehavior(status_area->date_tray()),
+            TrayBackgroundView::RoundedCornerBehavior::kNotRounded);
+
+  status_area->notification_center_tray()->SetVisiblePreferred(false);
+
+  EXPECT_EQ(GetTrayCornerBehavior(status_area->date_tray()),
+            TrayBackgroundView::RoundedCornerBehavior::kStartRounded);
+}
+
 }  // namespace ash
diff --git a/ash/system/system_notification_controller.cc b/ash/system/system_notification_controller.cc
index b7bdeb6..32584ba 100644
--- a/ash/system/system_notification_controller.cc
+++ b/ash/system/system_notification_controller.cc
@@ -14,7 +14,7 @@
 #include "ash/system/network/managed_sim_lock_notifier.h"
 #include "ash/system/network/wifi_toggle_notification_controller.h"
 #include "ash/system/power/power_notification_controller.h"
-#include "ash/system/screen_security/screen_security_notification_controller.h"
+#include "ash/system/privacy/screen_security_notification_controller.h"
 #include "ash/system/session/session_limit_notification_controller.h"
 #include "ash/system/tracing_notification_controller.h"
 #include "ash/system/update/update_notification_controller.h"
diff --git a/ash/system/time/calendar_model.h b/ash/system/time/calendar_model.h
index 97f2880..96aea8d 100644
--- a/ash/system/time/calendar_model.h
+++ b/ash/system/time/calendar_model.h
@@ -19,7 +19,6 @@
 #include "base/time/time.h"
 #include "google_apis/calendar/calendar_api_response_types.h"
 #include "google_apis/common/api_error_codes.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace ash {
 
@@ -126,6 +125,7 @@
   friend class CalendarMonthViewTest;
   friend class CalendarViewTest;
   friend class CalendarViewAnimationTest;
+  friend class GlanceablesTest;
 
   // Checks if the event has allowed statuses and is eligible for insertion.
   bool ShouldInsertEvent(
diff --git a/ash/system/tray/system_tray_notifier.cc b/ash/system/tray/system_tray_notifier.cc
index 80d21d8..3361cd91 100644
--- a/ash/system/tray/system_tray_notifier.cc
+++ b/ash/system/tray/system_tray_notifier.cc
@@ -7,8 +7,8 @@
 #include "ash/public/cpp/system_tray_observer.h"
 #include "ash/system/ime/ime_observer.h"
 #include "ash/system/network/network_observer.h"
-#include "ash/system/screen_security/screen_capture_observer.h"
-#include "ash/system/screen_security/screen_share_observer.h"
+#include "ash/system/privacy/screen_capture_observer.h"
+#include "ash/system/privacy/screen_share_observer.h"
 #include "ash/system/virtual_keyboard/virtual_keyboard_observer.h"
 
 namespace ash {
diff --git a/ash/system/tray/tray_background_view.h b/ash/system/tray/tray_background_view.h
index 4d0894f..38f54fa8 100644
--- a/ash/system/tray/tray_background_view.h
+++ b/ash/system/tray/tray_background_view.h
@@ -219,6 +219,7 @@
  private:
   class TrayWidgetObserver;
   class TrayBackgroundViewSessionChangeHandler;
+  friend class StatusAreaWidgetQSRevampTest;
 
   void StartVisibilityAnimation(bool visible);
 
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_bn.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_bn.xtb
index 87002308..fd15e81 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_bn.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_bn.xtb
@@ -160,6 +160,7 @@
 <translation id="8261506727792406068">মুছুন</translation>
 <translation id="8425673304802773841">নীচের দিকে টিল্ট করুন</translation>
 <translation id="8428213095426709021">সেটিংস</translation>
+<translation id="8629662593426079630">360p</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
 <translation id="8711011893539266636">মাইক্রোফোন মিউট করার স্ট্যাটাস টগল করুন। মিউট মোড এখন চালু আছে</translation>
 <translation id="8712637175834984815">বুঝেছি</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_en-GB.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_en-GB.xtb
index 288a14a9..d94d7d3 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_en-GB.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_en-GB.xtb
@@ -160,6 +160,7 @@
 <translation id="8261506727792406068">Delete</translation>
 <translation id="8425673304802773841">Tilt down</translation>
 <translation id="8428213095426709021">Settings</translation>
+<translation id="8629662593426079630">360p</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
 <translation id="8711011893539266636">Toggle microphone mute. Mute is on</translation>
 <translation id="8712637175834984815">Got it</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_kn.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_kn.xtb
index dad5c12a..4b9e6fb7 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_kn.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_kn.xtb
@@ -160,6 +160,7 @@
 <translation id="8261506727792406068">ಅಳಿಸಿ</translation>
 <translation id="8425673304802773841">ಕೆಳಗೆ ಟಿಲ್ಟ್ ಮಾಡಿ</translation>
 <translation id="8428213095426709021">ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
+<translation id="8629662593426079630">360p</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
 <translation id="8711011893539266636">ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ಮ್ಯೂಟ್ ಮಾಡಲು ಟಾಗಲ್ ಸ್ವಿಚ್ ಬಳಸಿ. ಮ್ಯೂಟ್ ಆನ್ ಆಗಿದೆ</translation>
 <translation id="8712637175834984815">ಅರ್ಥವಾಯಿತು</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_mk.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_mk.xtb
index 364da88..6253463c 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_mk.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_mk.xtb
@@ -160,6 +160,7 @@
 <translation id="8261506727792406068">Избриши</translation>
 <translation id="8425673304802773841">Навалете надолу</translation>
 <translation id="8428213095426709021">Поставки</translation>
+<translation id="8629662593426079630">360p</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" /> пиксели (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
 <translation id="8711011893539266636">Исклучете го звукот на микрофонот. Копчето за исклучување звук е вклучено</translation>
 <translation id="8712637175834984815">Сфатив</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_mr.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_mr.xtb
index 7e805c88..c96afc3d 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_mr.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_mr.xtb
@@ -160,6 +160,7 @@
 <translation id="8261506727792406068">हटवा</translation>
 <translation id="8425673304802773841">खाली टिल्ट करा</translation>
 <translation id="8428213095426709021">सेटिंग्ज</translation>
+<translation id="8629662593426079630">360p</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
 <translation id="8711011893539266636">मायक्रोफोन म्यूट टॉगल करा. म्यूट सुरू आहे</translation>
 <translation id="8712637175834984815">समजले</translation>
diff --git a/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-PT.xtb b/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-PT.xtb
index 9c89aa2..bb3119a 100644
--- a/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-PT.xtb
+++ b/ash/webui/camera_app_ui/resources/strings/camera_strings_pt-PT.xtb
@@ -160,6 +160,7 @@
 <translation id="8261506727792406068">Eliminar</translation>
 <translation id="8425673304802773841">Inclinar para baixo</translation>
 <translation id="8428213095426709021">Definições</translation>
+<translation id="8629662593426079630">360p</translation>
 <translation id="8687491812650032292">HD <ph name="HEIGHT" />p (<ph name="WIDTH" />:<ph name="HEIGHT" />)</translation>
 <translation id="8711011893539266636">Ative/desative o som do microfone. O botão Desativar som está ativado</translation>
 <translation id="8712637175834984815">Entendido</translation>
diff --git a/ash/webui/diagnostics_ui/backend/system_data_provider.cc b/ash/webui/diagnostics_ui/backend/system_data_provider.cc
index d2bd19d..bd1a271 100644
--- a/ash/webui/diagnostics_ui/backend/system_data_provider.cc
+++ b/ash/webui/diagnostics_ui/backend/system_data_provider.cc
@@ -511,9 +511,13 @@
 
   if (!DoesDeviceHaveBattery(*info_ptr) ||
       !DoesDeviceHaveBattery(*power_supply_properties)) {
-    DCHECK_EQ(DoesDeviceHaveBattery(*info_ptr),
-              DoesDeviceHaveBattery(*power_supply_properties))
-        << "Sources should not disagree about whether there is a battery.";
+    if (DoesDeviceHaveBattery(*info_ptr) !=
+        DoesDeviceHaveBattery(*power_supply_properties)) {
+      LOG(ERROR)
+          << "Sources should not disagree about whether there is a battery.";
+      // TODO(wenyu): Add metrics to track the occurrence of battery info
+      // inconsistency.
+    }
     NotifyBatteryChargeStatusObservers(battery_charge_status);
     return;
   }
diff --git a/ash/webui/os_feedback_ui/resources/help_content.js b/ash/webui/os_feedback_ui/resources/help_content.js
index 0123d58..779f731 100644
--- a/ash/webui/os_feedback_ui/resources/help_content.js
+++ b/ash/webui/os_feedback_ui/resources/help_content.js
@@ -9,7 +9,7 @@
 import '//resources/cr_elements/cr_icons_css.m.js';
 import '//resources/cr_elements/hidden_style_css.m.js';
 import '//resources/cr_elements/icons.m.js';
-import '//resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import '//resources/cr_elements/policy/cr_tooltip_icon.js';
 import '//resources/cr_elements/shared_vars_css.m.js';
 
 import {mojoString16ToString} from '//resources/ash/common/mojo_utils.js';
diff --git a/ash/webui/os_feedback_ui/resources/share_data_page.js b/ash/webui/os_feedback_ui/resources/share_data_page.js
index 51ba9dde..fee9ca4 100644
--- a/ash/webui/os_feedback_ui/resources/share_data_page.js
+++ b/ash/webui/os_feedback_ui/resources/share_data_page.js
@@ -7,7 +7,7 @@
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
 import 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js';
-import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js';
 import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
diff --git a/ash/webui/print_management/resources/BUILD.gn b/ash/webui/print_management/resources/BUILD.gn
index 733b6bc..c2683902 100644
--- a/ash/webui/print_management/resources/BUILD.gn
+++ b/ash/webui/print_management/resources/BUILD.gn
@@ -52,7 +52,7 @@
     ":print_job_entry",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/cr_elements/cr_button:cr_button",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:load_time_data.m",
   ]
diff --git a/ash/webui/print_management/resources/print_management.js b/ash/webui/print_management/resources/print_management.js
index 2e5c3e9..1bf8ee3 100644
--- a/ash/webui/print_management/resources/print_management.js
+++ b/ash/webui/print_management/resources/print_management.js
@@ -4,7 +4,7 @@
 
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/polymer/v3_0/iron-list/iron-list.js';
 import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
@@ -384,4 +384,4 @@
   }
 }
 
-customElements.define(PrintManagementElement.is, PrintManagementElement);
\ No newline at end of file
+customElements.define(PrintManagementElement.is, PrintManagementElement);
diff --git a/ash/webui/shimless_rma/resources/calibration_component_chip.html b/ash/webui/shimless_rma/resources/calibration_component_chip.html
index 25aba21..ad0f5ce 100644
--- a/ash/webui/shimless_rma/resources/calibration_component_chip.html
+++ b/ash/webui/shimless_rma/resources/calibration_component_chip.html
@@ -1,6 +1,6 @@
 <style include="cr-shared-style shimless-rma-shared shimless-fonts">
   :host {
-    padding: 1px;
+    padding: 2px;
   }
 
   :host([checked]) #componentButton {
diff --git a/ash/webui/shimless_rma/resources/onboarding_choose_destination_page.html b/ash/webui/shimless_rma/resources/onboarding_choose_destination_page.html
index ac0be0f..a42ccfb 100644
--- a/ash/webui/shimless_rma/resources/onboarding_choose_destination_page.html
+++ b/ash/webui/shimless_rma/resources/onboarding_choose_destination_page.html
@@ -10,10 +10,10 @@
         disabled="[[allButtonsDisabled]]">
       <cr-radio-button name="newOwner" id="destinationNewOwner"
           label="[[i18n('newOwnerText')]]">
+        <div class="indented-description" aria-hidden="true">
+          [[i18n('newOwnerDescriptionText')]]
+        </div>
       </cr-radio-button>
-      <div class="indented-description" aria-hidden="true">
-        [[i18n('newOwnerDescriptionText')]]
-      </div>
       <cr-radio-button name="originalOwner" id="destinationOriginalOwner"
           label="[[i18n('sameOwnerText')]]">
       </cr-radio-button>
diff --git a/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.html b/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.html
index b532ae7c..0a236ff1 100644
--- a/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.html
+++ b/ash/webui/shimless_rma/resources/onboarding_choose_wipe_device_page.html
@@ -8,10 +8,10 @@
         on-selected-changed="onOptionChanged_">
       <cr-radio-button name="[[wipeDeviceOption_.WIPE_DEVICE]]"
           label="[[i18n('wipeDeviceRemoveDataLabel')]]">
+        <div class="indented-description" aria-hidden="true">
+          [[i18n('wipeDeviceRemoveDataDescription')]]
+        </div>
       </cr-radio-button>
-      <div class="indented-description" aria-hidden="true">
-        [[i18n('wipeDeviceRemoveDataDescription')]]
-      </div>
       <cr-radio-button name="[[wipeDeviceOption_.PRESERVE_DATA]]"
           label="[[i18n('wipeDevicePreserveDataLabel')]]">
       </cr-radio-button>
diff --git a/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.html b/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.html
index c374b28..4b3c9cd 100644
--- a/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.html
+++ b/ash/webui/shimless_rma/resources/onboarding_choose_wp_disable_method_page.html
@@ -11,18 +11,18 @@
           name="hwwpDisableMethodManual"
           id="hwwpDisableMethodManual"
           label="[[i18n('manualWpDisableMethodOptionText')]]">
+        <div class="indented-description" aria-hidden="true">
+          [[i18n('manualWpDisableMethodDescriptionText')]]
+        </div>
       </cr-radio-button>
-      <div class="indented-description" aria-hidden="true">
-        [[i18n('manualWpDisableMethodDescriptionText')]]
-      </div>
       <cr-radio-button
           name="hwwpDisableMethodRsu"
           id="hwwpDisableMethodRsu"
           label="[[i18n('rsuWpDisableMethodOptionText')]]">
+        <div class="indented-description" aria-hidden>
+          [[i18n('rsuWpDisableMethodDescriptionText')]]
+        </div>
       </cr-radio-button>
-      <div class="indented-description" aria-hidden>
-        [[i18n('rsuWpDisableMethodDescriptionText')]]
-      </div>
     </cr-radio-group>
   </div>
 </base-page>
diff --git a/ash/webui/shimless_rma/resources/repair_component_chip.html b/ash/webui/shimless_rma/resources/repair_component_chip.html
index 6208eae..8e12966 100644
--- a/ash/webui/shimless_rma/resources/repair_component_chip.html
+++ b/ash/webui/shimless_rma/resources/repair_component_chip.html
@@ -1,6 +1,6 @@
 <style include="cr-shared-style shimless-rma-shared shimless-fonts">
   :host {
-    padding: 1px;
+    padding: 2px;
   }
 
   :host([checked]) #componentButton {
diff --git a/ash/webui/shimless_rma/resources/shimless_rma_shared_css.html b/ash/webui/shimless_rma/resources/shimless_rma_shared_css.html
index 5674521..5f11ccf 100644
--- a/ash/webui/shimless_rma/resources/shimless_rma_shared_css.html
+++ b/ash/webui/shimless_rma/resources/shimless_rma_shared_css.html
@@ -15,8 +15,8 @@
 
     .indented-description {
       color: var(--shimless-instructions-text-color);
+      margin-top: 8px;
       padding: 0; /* specify all to override */
-      padding-inline-start: 60px;
       width: 512px;
     }
 
@@ -117,7 +117,10 @@
 
     cr-radio-button {
       --cr-radio-button-size: 20px;
-      padding-bottom: 8px;
+      align-items: start;
+      font-size: var(--shimless-instructions-font-size);
+      line-height: 20px;
+      padding-bottom: 0;
       padding-inline-start: 20px;
       padding-top: var(--radio-button-top-padding);
     }
diff --git a/ash/wm/desks/templates/save_desk_template_button_container.cc b/ash/wm/desks/templates/save_desk_template_button_container.cc
index 99f7db5..595d9bf 100644
--- a/ash/wm/desks/templates/save_desk_template_button_container.cc
+++ b/ash/wm/desks/templates/save_desk_template_button_container.cc
@@ -6,12 +6,17 @@
 
 #include <array>
 
+#include "ash/accessibility/accessibility_controller_impl.h"
+#include "ash/accessibility/accessibility_observer.h"
 #include "ash/resources/vector_icons/vector_icons.h"
+#include "ash/shell.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/wm/desks/templates/saved_desk_util.h"
 #include "base/check.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/vector_icon_types.h"
+#include "ui/views/widget/widget.h"
+#include "ui/views/widget/widget_delegate.h"
 
 namespace ash {
 
@@ -99,6 +104,39 @@
 
 }  // namespace
 
+class SaveDeskTemplateButtonContainer::
+    SaveDeskTemplateButtonContainerAccessibilityObserver
+    : public AccessibilityObserver {
+ public:
+  explicit SaveDeskTemplateButtonContainerAccessibilityObserver(
+      const base::RepeatingClosure& accessibility_state_changed_callback)
+      : accessibility_state_changed_callback_(
+            accessibility_state_changed_callback) {
+    observation_.Observe(Shell::Get()->accessibility_controller());
+  }
+
+  SaveDeskTemplateButtonContainerAccessibilityObserver(
+      const SaveDeskTemplateButtonContainerAccessibilityObserver& other) =
+      delete;
+  SaveDeskTemplateButtonContainerAccessibilityObserver& operator=(
+      const SaveDeskTemplateButtonContainerAccessibilityObserver& other) =
+      delete;
+
+  ~SaveDeskTemplateButtonContainerAccessibilityObserver() override = default;
+
+  // AccessibilityObserver:
+  void OnAccessibilityStatusChanged() override {
+    accessibility_state_changed_callback_.Run();
+  }
+  void OnAccessibilityControllerShutdown() override { observation_.Reset(); }
+
+ private:
+  base::RepeatingClosure accessibility_state_changed_callback_;
+
+  base::ScopedObservation<AccessibilityControllerImpl, AccessibilityObserver>
+      observation_{this};
+};
+
 SaveDeskTemplateButtonContainer::SaveDeskTemplateButtonContainer(
     base::RepeatingClosure save_as_template_callback,
     base::RepeatingClosure save_for_later_callback) {
@@ -126,8 +164,16 @@
             SaveDeskTemplateButton::Type::kSaveForLater,
             &kSaveDeskForLaterIcon));
   }
+
+  accessibility_observer_ =
+      std::make_unique<SaveDeskTemplateButtonContainerAccessibilityObserver>(
+          base::BindRepeating(&SaveDeskTemplateButtonContainer::
+                                  UpdateButtonContainerForAccessibilityState,
+                              base::Unretained(this)));
 }
 
+SaveDeskTemplateButtonContainer::~SaveDeskTemplateButtonContainer() = default;
+
 void SaveDeskTemplateButtonContainer::UpdateButtonEnableStateAndTooltip(
     SaveDeskTemplateButton::Type type,
     int current_entry_count,
@@ -147,6 +193,14 @@
       l10n_util::GetStringUTF16(enable_state_and_tooltip_ID.second));
 }
 
+void SaveDeskTemplateButtonContainer::
+    UpdateButtonContainerForAccessibilityState() {
+  // If Chromevox is turned on or off during the life span of this widget,
+  // adjust to activatable or non-activatable accordingly.
+  GetWidget()->widget_delegate()->SetCanActivate(
+      Shell::Get()->accessibility_controller()->spoken_feedback().enabled());
+}
+
 SaveDeskTemplateButton* SaveDeskTemplateButtonContainer::GetButtonFromType(
     SaveDeskTemplateButton::Type type) {
   switch (type) {
diff --git a/ash/wm/desks/templates/save_desk_template_button_container.h b/ash/wm/desks/templates/save_desk_template_button_container.h
index ea69ec9..1e17fc2 100644
--- a/ash/wm/desks/templates/save_desk_template_button_container.h
+++ b/ash/wm/desks/templates/save_desk_template_button_container.h
@@ -21,6 +21,8 @@
   SaveDeskTemplateButtonContainer& operator=(
       const SaveDeskTemplateButtonContainer&) = delete;
 
+  ~SaveDeskTemplateButtonContainer() override;
+
   SaveDeskTemplateButton* save_desk_as_template_button() {
     return save_desk_as_template_button_;
   }
@@ -37,11 +39,19 @@
       int unsupported_window_count,
       int window_count);
 
+  void UpdateButtonContainerForAccessibilityState();
+
  private:
+  class SaveDeskTemplateButtonContainerAccessibilityObserver;
+
   SaveDeskTemplateButton* GetButtonFromType(SaveDeskTemplateButton::Type type);
 
   SaveDeskTemplateButton* save_desk_as_template_button_ = nullptr;
   SaveDeskTemplateButton* save_desk_for_later_button_ = nullptr;
+
+  // Object responsible for observing accessibility setting changes.
+  std::unique_ptr<SaveDeskTemplateButtonContainerAccessibilityObserver>
+      accessibility_observer_;
 };
 
 }  // namespace ash
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc
index 23414809..3e58dcc 100644
--- a/ash/wm/overview/overview_grid.cc
+++ b/ash/wm/overview/overview_grid.cc
@@ -290,8 +290,6 @@
   views::Widget::InitParams params;
   params.type = views::Widget::InitParams::TYPE_POPUP;
   // If Chromevox is on, let the widget be activatable.
-  // TODO(crbug.com/1354295): Fix focus ring when turning on Chromevox during
-  // overview.
   const bool spoken_feedback_enabled =
       Shell::Get()->accessibility_controller()->spoken_feedback().enabled();
   if (spoken_feedback_enabled)
diff --git a/ash/wm/tablet_mode/tablet_mode_multitask_menu.cc b/ash/wm/tablet_mode/tablet_mode_multitask_menu.cc
index 2c0a988..296680d3 100644
--- a/ash/wm/tablet_mode/tablet_mode_multitask_menu.cc
+++ b/ash/wm/tablet_mode/tablet_mode_multitask_menu.cc
@@ -4,6 +4,7 @@
 
 #include "ash/wm/tablet_mode/tablet_mode_multitask_menu.h"
 
+#include "ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler.h"
 #include "base/bind.h"
 #include "base/callback_forward.h"
 #include "chromeos/ui/frame/multitask_menu/multitask_menu_view.h"
@@ -56,28 +57,42 @@
 BEGIN_METADATA(TabletModeMultitaskMenuView, View)
 END_METADATA
 
-TabletModeMultitaskMenu::TabletModeMultitaskMenu(aura::Window* window)
-    : window_(window) {
-  DCHECK(window_);
-  const gfx::Rect widget_bounds(
-      window_->bounds().CenterPoint().x() - kMultitaskMenuWidth / 2,
-      kMultitaskMenuVerticalPadding, kMultitaskMenuWidth, kMultitaskMenuHeight);
+TabletModeMultitaskMenu::TabletModeMultitaskMenu(
+    TabletModeMultitaskMenuEventHandler* event_handler,
+    aura::Window* window)
+    : event_handler_(event_handler), window_(window) {
+  // Start observing the window.
+  DCHECK(window);
+  observed_window_.Observe(window);
 
   views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP);
   params.opacity = views::Widget::InitParams::WindowOpacity::kTranslucent;
   params.parent = window->parent();
-  params.bounds = widget_bounds;
+  params.bounds = gfx::Rect(
+      window->bounds().CenterPoint().x() - kMultitaskMenuWidth / 2,
+      kMultitaskMenuVerticalPadding, kMultitaskMenuWidth, kMultitaskMenuHeight);
   params.name = "TabletModeMultitaskMenuWidget";
+  // TODO(crbug.com/1355572): Set widget as activatable and hide in overview.
 
   multitask_menu_widget_->Init(std::move(params));
   multitask_menu_widget_->SetContentsView(
       std::make_unique<TabletModeMultitaskMenuView>(
-          window, base::BindRepeating(&TabletModeMultitaskMenu::Hide,
-                                      base::Unretained(this))));
+          window_, base::BindRepeating(&TabletModeMultitaskMenu::Hide,
+                                       base::Unretained(this))));
 }
 
 TabletModeMultitaskMenu::~TabletModeMultitaskMenu() = default;
 
+void TabletModeMultitaskMenu::OnWindowDestroying(aura::Window* window) {
+  DCHECK(observed_window_.IsObservingSource(window));
+
+  observed_window_.Reset();
+  window_ = nullptr;
+
+  // Destroys `this`.
+  event_handler_->CloseMultitaskMenu();
+}
+
 void TabletModeMultitaskMenu::Show() {
   DCHECK(multitask_menu_widget_);
   auto* multitask_menu_window = multitask_menu_widget_->GetNativeWindow();
diff --git a/ash/wm/tablet_mode/tablet_mode_multitask_menu.h b/ash/wm/tablet_mode/tablet_mode_multitask_menu.h
index b163bbda..830c425 100644
--- a/ash/wm/tablet_mode/tablet_mode_multitask_menu.h
+++ b/ash/wm/tablet_mode/tablet_mode_multitask_menu.h
@@ -6,20 +6,29 @@
 #define ASH_WM_TABLET_MODE_TABLET_MODE_MULTITASK_MENU_H_
 
 #include "ash/ash_export.h"
+#include "ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler.h"
+#include "base/scoped_observation.h"
+#include "ui/aura/window.h"
 #include "ui/views/widget/unique_widget_ptr.h"
 
 namespace ash {
 
+class TabletModeMultitaskMenuEventHandler;
+
 // The container of the multitask menu. Creates and owns the multitask menu
 // widget.
-class ASH_EXPORT TabletModeMultitaskMenu {
+class ASH_EXPORT TabletModeMultitaskMenu : aura::WindowObserver {
  public:
-  explicit TabletModeMultitaskMenu(aura::Window* window);
+  TabletModeMultitaskMenu(TabletModeMultitaskMenuEventHandler* event_handler,
+                          aura::Window* window);
 
   TabletModeMultitaskMenu(const TabletModeMultitaskMenu&) = delete;
   TabletModeMultitaskMenu& operator=(const TabletModeMultitaskMenu&) = delete;
 
-  ~TabletModeMultitaskMenu();
+  ~TabletModeMultitaskMenu() override;
+
+  // aura::WindowObserver:
+  void OnWindowDestroying(aura::Window* window) override;
 
   void Show();
   void Hide();
@@ -31,8 +40,16 @@
   }
 
  private:
+  // The event handler that created this multitask menu. Guaranteed to outlive
+  // `this`.
+  TabletModeMultitaskMenuEventHandler* event_handler_;
+
   // The window associated with this multitask menu.
-  aura::Window* const window_;
+  aura::Window* window_ = nullptr;
+
+  // Window observer for `window_`.
+  base::ScopedObservation<aura::Window, aura::WindowObserver> observed_window_{
+      this};
 
   views::UniqueWidgetPtr multitask_menu_widget_ =
       std::make_unique<views::Widget>();
diff --git a/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler.cc b/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler.cc
index 39e6bab..99644d6 100644
--- a/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler.cc
+++ b/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler.cc
@@ -42,8 +42,6 @@
 
 TabletModeMultitaskMenuEventHandler::~TabletModeMultitaskMenuEventHandler() {
   Shell::Get()->RemovePreTargetHandler(this);
-  if (multitask_menu_)
-    multitask_menu_->window()->RemoveObserver(this);
 }
 
 void TabletModeMultitaskMenuEventHandler::OnGestureEvent(
@@ -103,28 +101,19 @@
   // outside the menu bounds.
 }
 
-void TabletModeMultitaskMenuEventHandler::OnWindowDestroying(
-    aura::Window* window) {
-  HideMultitaskMenu();
-  if (multitask_menu_) {
-    DCHECK_EQ(window, multitask_menu_->window());
-    multitask_menu_->window()->RemoveObserver(this);
-    multitask_menu_ = nullptr;
-  }
-}
-
 void TabletModeMultitaskMenuEventHandler::ShowMultitaskMenu(
     aura::Window* active_window) {
-  // TODO(sophiewen): Check that `active_window` is still active.
-  if (!multitask_menu_) {
-    multitask_menu_ = std::make_unique<TabletModeMultitaskMenu>(active_window);
-    // TODO(crbug.com/1351464): Move WindowObserver to TabletModeMultitaskMenu.
-    active_window->AddObserver(this);
-  }
+  multitask_menu_ =
+      std::make_unique<TabletModeMultitaskMenu>(this, active_window);
   multitask_menu_->Show();
 }
 
+void TabletModeMultitaskMenuEventHandler::CloseMultitaskMenu() {
+  multitask_menu_.reset();
+}
+
 void TabletModeMultitaskMenuEventHandler::HideMultitaskMenu() {
+  // TODO(sophiewen): Replace with CloseMultitaskMenu.
   if (multitask_menu_)
     multitask_menu_->Hide();
 }
diff --git a/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler.h b/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler.h
index 3c76148d..6663724 100644
--- a/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler.h
+++ b/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler.h
@@ -14,8 +14,7 @@
 
 // TabletModeMultitaskMenuEventHandler handles gestures in tablet mode that may
 // show or hide the multitask menu.
-class TabletModeMultitaskMenuEventHandler : public ui::EventHandler,
-                                            public aura::WindowObserver {
+class TabletModeMultitaskMenuEventHandler : public ui::EventHandler {
  public:
   TabletModeMultitaskMenuEventHandler();
   TabletModeMultitaskMenuEventHandler(
@@ -27,8 +26,7 @@
   // ui::EventHandler:
   void OnGestureEvent(ui::GestureEvent* event) override;
 
-  // aura::WindowObserver:
-  void OnWindowDestroying(aura::Window* window) override;
+  void CloseMultitaskMenu();
 
   TabletModeMultitaskMenu* multitask_menu_for_testing() {
     return multitask_menu_.get();
diff --git a/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler_unittest.cc b/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler_unittest.cc
index 52b9cd37..d0a8c20 100644
--- a/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler_unittest.cc
+++ b/ash/wm/tablet_mode/tablet_mode_multitask_menu_event_handler_unittest.cc
@@ -33,20 +33,24 @@
     TabletModeControllerTestApi().EnterTabletMode();
   }
 
+  void ShowMultitaskMenu(aura::Window* window) {
+    // Swipe down from the top center of the window.
+    const int point_x = window->bounds().CenterPoint().x();
+    GetEventGenerator()->GestureScrollSequence(gfx::Point(point_x, 1),
+                                               gfx::Point(point_x, 10),
+                                               base::Milliseconds(100), 3);
+  }
+
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 // Verify that a swipe down gesture from the top center activates the multitask
 // menu.
-TEST_F(TabletModeMultitaskMenuEventHandlerTest, SwipeDown) {
+TEST_F(TabletModeMultitaskMenuEventHandlerTest, ShowMultitaskMenu) {
   auto window = CreateTestWindow();
 
-  // Start the swipe from the top center of the window.
-  const int point_x = window->bounds().CenterPoint().x();
-  GetEventGenerator()->GestureScrollSequence(gfx::Point(point_x, 1),
-                                             gfx::Point(point_x, 10),
-                                             base::Milliseconds(100), 3);
+  ShowMultitaskMenu(window.get());
 
   TabletModeWindowManager* manager =
       TabletModeControllerTestApi().tablet_mode_window_manager();
@@ -63,4 +67,25 @@
                   ->GetVisible());
 }
 
+// Verify that the menu is closed when the window is closed or destroyed.
+TEST_F(TabletModeMultitaskMenuEventHandlerTest, OnWindowDestroying) {
+  auto window = CreateTestWindow();
+
+  ShowMultitaskMenu(window.get());
+
+  auto* event_handler =
+      TabletModeControllerTestApi()
+          .tablet_mode_window_manager()
+          ->tablet_mode_multitask_menu_event_handler_for_testing();
+  auto* multitask_menu = event_handler->multitask_menu_for_testing();
+  ASSERT_TRUE(multitask_menu);
+  ASSERT_TRUE(multitask_menu->multitask_menu_widget_for_testing()
+                  ->GetContentsView()
+                  ->GetVisible());
+
+  // Close the window.
+  window.reset();
+  EXPECT_FALSE(event_handler->multitask_menu_for_testing());
+}
+
 }  // namespace ash
\ No newline at end of file
diff --git a/base/big_endian.h b/base/big_endian.h
index a904ced7..e4de6da 100644
--- a/base/big_endian.h
+++ b/base/big_endian.h
@@ -138,8 +138,8 @@
   bool Write(T v);
 
   // TODO(crbug.com/1298696): Breaks net_unittests.
-  raw_ptr<char, DanglingUntriagedDegradeToNoOpWhenMTE> ptr_;
-  raw_ptr<char, DanglingUntriagedDegradeToNoOpWhenMTE> end_;
+  raw_ptr<char, DegradeToNoOpWhenMTE> ptr_;
+  raw_ptr<char, DegradeToNoOpWhenMTE> end_;
 };
 
 }  // namespace base
diff --git a/base/memory/README.md b/base/memory/README.md
new file mode 100644
index 0000000..fe8f50e
--- /dev/null
+++ b/base/memory/README.md
@@ -0,0 +1,67 @@
+# //base/memory Types
+
+## Overview
+This directory contains a variety of pointer-like objects (aka smart pointers).
+This is a brief overview of what they are and how they should be used. Refer to
+individual header files for details. C++ is not memory safe, so use these types
+to help guard against potential memory bugs.
+There are other pointer-like object types implemented elsewhere that may be
+right for a given use case, such as `absl::optional<T>` and
+`std::unique_ptr<T>`. More on all types in video form
+[here](https://youtu.be/MpwbWSEDfjM?t=582s) and in a doc
+[here](https://docs.google.com/document/d/1VRevv8JhlP4I8fIlvf87IrW2IRjE0PbkSfIcI6-UbJo/edit?usp=sharing).
+
+## `raw_ptr<T>`
+Use for class fields/members that would otherwise be a native pointer.
+
+This is a weakly refcounted wrapper for a native pointer (also called a raw
+pointer). When the object is deleted, the allocator will "poison" the memory
+that object occupied and keep the memory around so it’s not reused. This reduces
+the risk and impact of a use-after-free bug.
+
+Depending on the use case, it's possible a smart pointer with additional
+features would be more appropriate, but if none of those are applicable or
+necesssary, `raw_ptr<T>` is much safer than a native pointer.
+
+## `base::WeakPtr<T>`
+Use when a reference to an object might outlive the object itself.
+
+These are useful for asynchronous work, which is common in Chrome. If an async
+task references other objects or state, and it's possible for that state to be
+destroyed before the task runs, those references should be held in a
+`WeakPtr<T>`. Each `WeakPtr<T>` is associated with a `WeakPtrFactory<T>`. When
+the associated factory (usually owned by T) is destroyed, all `WeakPtr<T>` are
+invalidated (becomes null) rather than becoming use-after-frees. If such
+references should never outlive the object, consider using SafeRef instead.
+
+## `base::SafeRef<T>`
+Use to express that a reference to an object must not outlive the object.
+
+An example is if you have a class member that you want to guarantee outlives the
+class itself. SafeRef automatically enforces the lifetime assumptions and
+eliminates the need for validity checks.
+
+If the assumption that the object is valid is broken, then the process
+terminates safely and generates a crash report. Though not ideal, it's
+preferable to a potentially undiscovered security bug.
+
+This type is built on top of WeakPtr, so if you want a `SafeRef<T>`, T needs a
+WeakPtrFactory as a member. It works like `WeakPtr`, but doesn't allow for a
+null state. There's also overlap with `raw_ptr`, though this was implemented
+first.
+
+## `base::scoped_refptr<T>`
+Use when you want manually managed strong refcounting. Use carefully!
+
+It’s an owning smart pointer, so it owns a pointer to something allocated in the
+heap and gives shared ownership of the underlying object, since it can be
+copied. When all `scoped_refptr`s pointing to the same object are gone, that
+object gets destroyed.
+
+This is Chrome's answer to `std::shared_ptr<T>`. It additionally requires T to
+inherit from `RefCounted` or `RefCountedThreadSafe`, since the ref counting
+happens in the object itself, unlike `shared_ptr<T>`. When possible, use
+`RefCountedThreadSafe`, especially if there are `scoped_refptr`s to the same
+object on different threads, since they can race. It's also important to know
+which thread has the last reference to the object, or you can end up with
+flakiness.
\ No newline at end of file
diff --git a/base/threading/thread_collision_warner.h b/base/threading/thread_collision_warner.h
index 3fa197ea..54d7b9a 100644
--- a/base/threading/thread_collision_warner.h
+++ b/base/threading/thread_collision_warner.h
@@ -157,9 +157,7 @@
   ThreadCollisionWarner(const ThreadCollisionWarner&) = delete;
   ThreadCollisionWarner& operator=(const ThreadCollisionWarner&) = delete;
 
-  ~ThreadCollisionWarner() {
-    delete asserter_;
-  }
+  ~ThreadCollisionWarner() { asserter_.ClearAndDelete(); }
 
   // This class is meant to be used through the macro
   // DFAKE_SCOPED_LOCK_THREAD_LOCKED
diff --git a/base/trace_event/builtin_categories.h b/base/trace_event/builtin_categories.h
index be71261..784fb029 100644
--- a/base/trace_event/builtin_categories.h
+++ b/base/trace_event/builtin_categories.h
@@ -192,6 +192,7 @@
   X(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage"))                    \
   X(TRACE_DISABLED_BY_DEFAULT("blink.image_decoding"))                   \
   X(TRACE_DISABLED_BY_DEFAULT("blink.invalidation"))                     \
+  X(TRACE_DISABLED_BY_DEFAULT("identifiability"))                        \
   X(TRACE_DISABLED_BY_DEFAULT("cc"))                                     \
   X(TRACE_DISABLED_BY_DEFAULT("cc.debug"))                               \
   X(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"))                      \
diff --git a/build/config/nacl/host_toolchain.gni b/build/config/nacl/host_toolchain.gni
new file mode 100644
index 0000000..2c6c9a6
--- /dev/null
+++ b/build/config/nacl/host_toolchain.gni
@@ -0,0 +1,17 @@
+# 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 compiler for the trusted nacl_helper_bootstrap binary.
+nacl_bootstrap_compiler = "g++"
+if (is_chromeos && target_cpu == "arm64" && current_cpu == "arm") {
+  import("//build/toolchain/cros_toolchain.gni")
+  nacl_bootstrap_compiler = cros_nacl_helper_arm32_cxx
+} else if (default_toolchain == "//build/toolchain/cros:target") {
+  import("//build/toolchain/cros_toolchain.gni")
+  nacl_bootstrap_compiler = cros_target_cxx
+} else if (current_cpu == "arm" && !is_android) {
+  nacl_bootstrap_compiler = "arm-linux-gnueabihf-g++"
+} else if (current_cpu == "mipsel" && !is_android) {
+  nacl_bootstrap_compiler = "mipsel-linux-gnu-g++"
+}
diff --git a/build/fuchsia/binary_size_differ.py b/build/fuchsia/binary_size_differ.py
index f16c10e8..200b572 100755
--- a/build/fuchsia/binary_size_differ.py
+++ b/build/fuchsia/binary_size_differ.py
@@ -35,8 +35,12 @@
 _ALWAYS_FAIL_DELTA_BYTES = 100 * 1024  # 100 KiB
 _TRYBOT_DOC = 'https://chromium.googlesource.com/chromium/src/+/main/docs/speed/binary_size/fuchsia_binary_size_trybot.md'
 
+SIZE_FAILURE = 1
+ROLLER_SIZE_WARNING = 2
+SUCCESS = 0
 
-def ComputePackageDiffs(before_sizes_file, after_sizes_file):
+
+def ComputePackageDiffs(before_sizes_file, after_sizes_file, author=None):
   '''Computes difference between after and before diff, for each package.'''
   before_sizes = ReadPackageSizesJson(before_sizes_file)
   after_sizes = ReadPackageSizesJson(after_sizes_file)
@@ -47,7 +51,7 @@
       '{} vs {}'.format(before_sizes.keys(), after_sizes.keys()))
 
   growth = {'compressed': {}, 'uncompressed': {}}
-  status_code = 0
+  status_code = SUCCESS
   summary = ''
   for package_name in before_sizes:
     growth['compressed'][package_name] = (after_sizes[package_name].compressed -
@@ -63,12 +67,19 @@
       if not summary:
         summary = ('Size check failed! The following package(s) are affected:'
                    '<br>')
-      status_code = 1
+      status_code = SIZE_FAILURE
       summary += (('- {} (compressed) grew by {} bytes (uncompressed growth:'
                    ' {} bytes).<br>').format(
                        package_name, growth['compressed'][package_name],
                        growth['uncompressed'][package_name]))
 
+  # Allow rollers to pass even with size increases. See crbug.com/1355914.
+  if author and '-autoroll' in author and status_code == SIZE_FAILURE:
+    summary = summary.replace('Size check failed! ', '')
+    summary = (
+        'The following growth by an autoroller will be ignored:<br><br>' +
+        summary)
+    status_code = ROLLER_SIZE_WARNING
   growth['status_code'] = status_code
   summary += ('<br>See the following document for more information about'
               ' this trybot:<br>{}'.format(_TRYBOT_DOC))
@@ -94,6 +105,7 @@
       required=True,
       help='Location of the build with the patch',
   )
+  parser.add_argument('--author', help='Author of change')
   parser.add_argument(
       '--results-path',
       type=os.path.realpath,
@@ -133,7 +145,9 @@
 
   test_completed = False
   try:
-    growth = ComputePackageDiffs(before_sizes_file, after_sizes_file)
+    growth = ComputePackageDiffs(before_sizes_file,
+                                 after_sizes_file,
+                                 author=args.author)
     test_completed = True
     with open(args.results_path, 'wt') as results_file:
       json.dump(growth, results_file)
diff --git a/build/fuchsia/binary_size_differ_test.py b/build/fuchsia/binary_size_differ_test.py
index b22872d..897f580 100755
--- a/build/fuchsia/binary_size_differ_test.py
+++ b/build/fuchsia/binary_size_differ_test.py
@@ -70,6 +70,10 @@
     # NamedTemporaryFile by name.
     if os.name == 'nt':
       return
+
+    SUCCESS = 0
+    FAILURE = 1
+    ROLLER_SIZE_WARNING = 2
     with tempfile.NamedTemporaryFile(mode='w') as before_file:
       before_file.write(_EXAMPLE_BLOBS_BEFORE)
       before_file.flush()
@@ -80,7 +84,7 @@
       # No change.
       growth = binary_size_differ.ComputePackageDiffs(before_file.name,
                                                       before_file.name)
-      self.assertEqual(growth['status_code'], 0)
+      self.assertEqual(growth['status_code'], SUCCESS)
       self.assertEqual(growth['compressed']['web_engine'], 0)
 
       after_file = tempfile.NamedTemporaryFile(mode='w', delete=True)
@@ -93,7 +97,7 @@
 
         growth = binary_size_differ.ComputePackageDiffs(before_file.name,
                                                         after_file.name)
-        self.assertEqual(growth['status_code'], 0)
+        self.assertEqual(growth['status_code'], SUCCESS)
         self.assertEqual(growth['compressed']['web_engine'], 8 * 1024)
 
         # Increase beyond the limit (adds another 8k)
@@ -101,8 +105,11 @@
         binary_sizes.WritePackageSizesJson(after_file.name, other_sizes)
         growth = binary_size_differ.ComputePackageDiffs(before_file.name,
                                                         after_file.name)
-        self.assertEqual(growth['status_code'], 1)
+        self.assertEqual(growth['status_code'], FAILURE)
         self.assertEqual(growth['compressed']['web_engine'], 16 * 1024 + 1)
+        self.assertIn('check failed', growth['summary'])
+        self.assertIn(f'web_engine (compressed) grew by {16 * 1024 + 1} bytes',
+                      growth['summary'])
 
         # Increase beyond the limit, but compressed does not increase.
         binary_sizes.WritePackageSizesJson(before_file.name, other_sizes)
@@ -113,8 +120,8 @@
         binary_sizes.WritePackageSizesJson(after_file.name, other_sizes)
         growth = binary_size_differ.ComputePackageDiffs(before_file.name,
                                                         after_file.name)
-        self.assertEqual(growth['uncompressed']['web_engine'], 0)
-        self.assertEqual(growth['status_code'], 0)
+        self.assertEqual(growth['uncompressed']['web_engine'], SUCCESS)
+        self.assertEqual(growth['status_code'], SUCCESS)
         self.assertEqual(growth['compressed']['web_engine'], 16 * 1024 + 1)
 
         # Increase beyond the limit, but compressed goes down.
@@ -126,7 +133,7 @@
         binary_sizes.WritePackageSizesJson(after_file.name, other_sizes)
         growth = binary_size_differ.ComputePackageDiffs(before_file.name,
                                                         after_file.name)
-        self.assertEqual(growth['status_code'], 0)
+        self.assertEqual(growth['status_code'], SUCCESS)
         self.assertEqual(growth['compressed']['web_engine'], 16 * 1024 + 1)
 
         # Increase beyond the second limit. Fails, regardless of uncompressed.
@@ -138,8 +145,26 @@
         binary_sizes.WritePackageSizesJson(after_file.name, other_sizes)
         growth = binary_size_differ.ComputePackageDiffs(before_file.name,
                                                         after_file.name)
-        self.assertEqual(growth['status_code'], 1)
+        self.assertEqual(growth['status_code'], FAILURE)
         self.assertEqual(growth['compressed']['web_engine'], 100 * 1024 + 1)
+
+        # Increase beyond the second limit, but roller authored CL.
+        binary_sizes.WritePackageSizesJson(before_file.name, other_sizes)
+        self.ChangePackageSize(other_sizes,
+                               'web_engine',
+                               100 * 1024 + 1,
+                               uncompressed_increase=-4 * 1024)
+        binary_sizes.WritePackageSizesJson(after_file.name, other_sizes)
+        growth = binary_size_differ.ComputePackageDiffs(before_file.name,
+                                                        after_file.name,
+                                                        author='big-autoroller')
+        self.assertEqual(growth['status_code'], ROLLER_SIZE_WARNING)
+        self.assertEqual(growth['compressed']['web_engine'], 100 * 1024 + 1)
+        self.assertNotIn('check failed', growth['summary'])
+        self.assertIn('growth by an autoroller will be ignored',
+                      growth['summary'])
+        self.assertIn(f'web_engine (compressed) grew by {100 * 1024 + 1} bytes',
+                      growth['summary'])
       finally:
         os.remove(after_file.name)
 
diff --git a/build/rust/rs_bindings_from_cc.gni b/build/rust/rs_bindings_from_cc.gni
index a4e052b..e6cd6e50 100644
--- a/build/rust/rs_bindings_from_cc.gni
+++ b/build/rust/rs_bindings_from_cc.gni
@@ -20,13 +20,18 @@
 #
 # Parameters:
 #
+#   bindings_target:
+#     The C++ target (e.g. a `source_set`) that Rust bindings should be
+#     generated for.
+#
 #   public_headers:
 #     The .h files to generate bindings for.
 #
-#     Implementation note: This doesn't just take *all* the headers of the C++
-#     target, because typically only a *subset* of headers provides the
-#     *public* API that bindings are needed for.
-#     TODO(crbug.com/1329611): Internal headers still need to be included in
+#     Implementation note: This doesn't just take *all* the headers of the
+#     `bindings_target`, because typically only a *subset* of headers provides
+#     the *public* API that bindings are needed for.
+#
+#     TODO(crbug.com/1329611): Internal headers should still to be included in
 #     the targets_and_headers metadata...
 #
 #   deps:
@@ -37,9 +42,10 @@
 #     bindings for the `TeleportGoat` provided by `teleport_rs_api` depend on
 #     `goat_rs_api`).
 #
-#     Oftentimes `deps` can be a copy of the `public_deps` of the bindings
-#     target, but depending on targets with the suffix "_rs_api".  Still, there
-#     are scenarios where `deps` don't parallel *all* entries from `public_deps`:
+#     Oftentimes `deps` can be a copy of the `public_deps` of the
+#     `bindings_target`, but depending on targets with the suffix "_rs_api".
+#     Still, there are scenarios where `deps` don't parallel *all* entries from
+#     `public_deps`:
 #       * `public_deps` that don't expose Rust APIs (i.e. there are no
 #         "..._rs_api" targets to depend on).
 #       * `public_deps` that Crubit bindings don't depend on (dependencies that
@@ -61,7 +67,8 @@
 #       # This will generate "teleport_rs_api" target that provides Rust
 #       # bindings for the "teleport.h" header from the ":teleport" source
 #       # set.
-#       rs_bindings_from_cc("teleport") {
+#       rs_bindings_from_cc("teleport_rs_api") {
+#         bindings_target = ":teleport"
 #         public_headers = ["teleport.h"]
 #         deps = [ ":goat_rs_api" ]  # Parallel's `public_deps` of ":teleport".
 #       }
@@ -71,7 +78,8 @@
 #         public_deps = [ ":goat" ]
 #       }
 #
-#       rs_bindings_from_cc("goat") {
+#       rs_bindings_from_cc("goat_rs_api") {
+#         bindings_target = ":goat"
 #         public_headers = ["goat.h"]
 #       }
 #       source_set("goat") {
@@ -99,6 +107,17 @@
 #   `rs_bindings_from_cc`).
 #
 template("rs_bindings_from_cc") {
+  # Mandatory parameter: bindings_target.
+  assert(defined(invoker.bindings_target),
+         "Must specify the C target to make bindings for.")
+  _bindings_target = invoker.bindings_target
+
+  # Mandatory/unavoidable parameter: target_name
+  _lib_target_name = target_name
+  _base_target_name = get_label_info(_bindings_target, "name")
+  assert(_lib_target_name == "${_base_target_name}_rs_api",
+         "The convention is that bindings for `foo` are named `foo_rs_api`")
+
   # Mandatory parameter: public_headers.
   assert(defined(invoker.public_headers),
          "Must specify the public C headers to make bindings for.")
@@ -129,14 +148,8 @@
     _deps = invoker.deps
   }
 
-  # TODO(crbug.com/1329611): Should `_bindings_target` or `_lib_target_name` be
-  # provided explicitly?
-  _bindings_target = ":${target_name}"
-
   # Various names and paths that are shared across multiple targets defined
   # in the template here.
-  _base_target_name = get_label_info(_bindings_target, "name")
-  _lib_target_name = "${_base_target_name}_rs_api"
   _gen_bindings_target_name = "${_lib_target_name}_gen_bindings"
   _gen_metadata_target_name = "${_lib_target_name}_gen_metadata"
   _metadata_target_name = "${_lib_target_name}_metadata"
diff --git a/build/rust/tests/test_rs_bindings_from_cc/BUILD.gn b/build/rust/tests/test_rs_bindings_from_cc/BUILD.gn
index 527578a..960f4e91 100644
--- a/build/rust/tests/test_rs_bindings_from_cc/BUILD.gn
+++ b/build/rust/tests/test_rs_bindings_from_cc/BUILD.gn
@@ -16,7 +16,10 @@
   build_native_rust_unit_tests = true
 }
 
-rs_bindings_from_cc("self_contained_target") {
+rs_bindings_from_cc("self_contained_target_rs_api") {
+  # This is the target that the bindings are for / call into.
+  bindings_target = ":self_contained_target"
+
   # Lists public headers from `sources` of `self_contained_target`.
   public_headers = [
     "self_contained_target_header1.h",
@@ -32,7 +35,10 @@
   ]
 }
 
-rs_bindings_from_cc("target_depending_on_another") {
+rs_bindings_from_cc("target_depending_on_another_rs_api") {
+  # This is the target that the bindings are for / call into.
+  bindings_target = ":target_depending_on_another"
+
   # Lists public headers from `sources` of `target_depending_on_another`.
   #
   # TODO(crbug.com/1297592): Is there something we can do (a convention?) to
diff --git a/build/toolchain/apple/toolchain.gni b/build/toolchain/apple/toolchain.gni
index edbad45..caf1e15 100644
--- a/build/toolchain/apple/toolchain.gni
+++ b/build/toolchain/apple/toolchain.gni
@@ -32,9 +32,10 @@
 }
 
 if (swift_toolchain_path == "" && build_with_chromium) {
-  # Version of the hermetic compiler. Needs to be updated when a new version
-  # of the compiler is rolled to ensure that all outputs are regenerated.
-  swiftc_version = "llvm:d5f117e38620783-swift:3a67c1adc57fc80"
+  # Version of the hermetic compiler. Needs to be updated when a new version of
+  # the compiler is rolled to ensure that all outputs are regenerated. It must
+  # be kept in sync with the value in //third_party/swift-toolchain/3pp/3pp.pb.
+  swiftc_version = "swift-5.7-20220717"
 
   # Use the hermetic swift toolchain.
   swift_toolchain_path =
diff --git a/build/toolchain/cros/BUILD.gn b/build/toolchain/cros/BUILD.gn
index 0ebb06af..5d779722 100644
--- a/build/toolchain/cros/BUILD.gn
+++ b/build/toolchain/cros/BUILD.gn
@@ -97,7 +97,11 @@
 # use_sysroot off, and allows the user to set different sets of extra flags.
 cros_toolchain("nacl_bootstrap") {
   toolchain_args = {
-    current_cpu = target_cpu
+    if (target_cpu == "arm64") {
+      current_cpu = "arm"
+    } else {
+      current_cpu = target_cpu
+    }
     current_os = "chromeos"
     use_debug_fission = false
     use_gold = false
@@ -123,6 +127,14 @@
 
     toolchain_args.needs_gomacc_path_arg = true
   }
+
+  # We build for ARM32, even when the rest of the build targets ARM64.
+  if (target_cpu == "arm64") {
+    ar = cros_nacl_helper_arm32_ar
+    cc = cros_nacl_helper_arm32_cc
+    cxx = cros_nacl_helper_arm32_cxx
+    ld = cros_nacl_helper_arm32_ld
+  }
 }
 
 # This is a special toolchain needed just for the nacl_helper target for
diff --git a/cc/resources/ui_resource_bitmap.cc b/cc/resources/ui_resource_bitmap.cc
index ca32943d..b917278 100644
--- a/cc/resources/ui_resource_bitmap.cc
+++ b/cc/resources/ui_resource_bitmap.cc
@@ -79,7 +79,11 @@
   SkBitmap copy;
   if (features::IsDrDcEnabled()) {
     // TODO(vikassoni): Forcing everything to N32 while android backing cannot
-    // support some other formats.
+    // support some other formats. Note that DrDc is disabled on some gl
+    // renderers and hence gpus via gpu driver bug workaround. That workaround
+    // is not applied here and so on those disable gpus, everything will still
+    // be forced to N32 even though drdc is disabled. This should be fine for
+    // now and would be fixed later. crbug.com/1354201.
     if (skbitmap.colorType() != kN32_SkColorType) {
       SkImageInfo new_info = skbitmap.info().makeColorType(kN32_SkColorType);
       copy.allocPixels(new_info, new_info.minRowBytes());
diff --git a/chrome/VERSION b/chrome/VERSION
index a974ea03..425ce5e 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=107
 MINOR=0
-BUILD=5261
+BUILD=5262
 PATCH=0
diff --git a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb
index 2d5c507..6a5b0707 100644
--- a/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb
+++ b/chrome/android/features/tab_ui/java/strings/translations/android_chrome_tab_ui_strings_de.xtb
@@ -58,6 +58,7 @@
 <translation id="575494663145460764">Benachrichtigungen bei Preisnachlässen erhalten?</translation>
 <translation id="58326064309361797">Tabs zum Gruppieren ziehen</translation>
 <translation id="5846292395804797011">Tabgruppe "<ph name="TITLE_OF_GROUP" />" mit <ph name="NUMBER_OF_TABS" /> Tabs schließen</translation>
+<translation id="5972844218283131174">Auswahl für alle aufheben</translation>
 <translation id="6040143037577758943">Schließen</translation>
 <translation id="6054741997831917303">Der Preis dieses Artikels ist kürzlich von <ph name="PREVIOUS_PRICE" /> auf <ph name="NEW_PRICE" /> gefallen</translation>
 <translation id="6193448654517602979">Tabs auswählen</translation>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
index 7a1bf2d..1cad15b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/flags/ChromeCachedFlags.java
@@ -24,6 +24,7 @@
 import org.chromium.chrome.browser.page_annotations.PageAnnotationsServiceConfig;
 import org.chromium.chrome.browser.paint_preview.StartupPaintPreviewHelper;
 import org.chromium.chrome.browser.paint_preview.services.PaintPreviewTabService;
+import org.chromium.chrome.browser.tab.state.FilePersistedTabDataStorage;
 import org.chromium.chrome.browser.tabmodel.TabPersistentStore;
 import org.chromium.chrome.browser.tasks.ConditionalTabStripUtils;
 import org.chromium.chrome.browser.tasks.ReturnToChromeUtil;
@@ -143,6 +144,7 @@
                         add(ConditionalTabStripUtils.CONDITIONAL_TAB_STRIP_INFOBAR_PERIOD);
                         add(ConditionalTabStripUtils.CONDITIONAL_TAB_STRIP_SESSION_TIME_MS);
                         add(FeedPlaceholderLayout.ENABLE_INSTANT_START_ANIMATION);
+                        add(FilePersistedTabDataStorage.DELAY_SAVES_UNTIL_DEFERRED_STARTUP_PARAM);
                         add(OptimizationGuidePushNotificationManager.MAX_CACHE_SIZE);
                         add(OmniboxFeatures.ENABLE_MODERNIZE_VISUAL_UPDATE_ON_TABLET);
                         add(PageAnnotationsServiceConfig.PAGE_ANNOTATIONS_BASE_URL);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
index 5f1113a..c6909c4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ProcessInitializationHandler.java
@@ -82,6 +82,7 @@
 import org.chromium.chrome.browser.rlz.RevenueStats;
 import org.chromium.chrome.browser.searchwidget.SearchWidgetProvider;
 import org.chromium.chrome.browser.signin.SigninCheckerProvider;
+import org.chromium.chrome.browser.tab.state.PersistedTabData;
 import org.chromium.chrome.browser.tab.state.ShoppingPersistedTabData;
 import org.chromium.chrome.browser.ui.searchactivityutils.SearchActivityPreferencesManager;
 import org.chromium.chrome.browser.usb.UsbNotificationManager;
@@ -457,6 +458,7 @@
             new OptimizationGuideBridgeFactory(registeredTypesAllowList)
                     .create()
                     .onDeferredStartup();
+            // TODO(crbug.com/1355893) Move to PersistedTabData.onDeferredStartup
             if (PriceTrackingFeatures.isPriceTrackingEligible()
                     && ShoppingPersistedTabData.isPriceTrackingWithOptimizationGuideEnabled()) {
                 ShoppingPersistedTabData.onDeferredStartup();
@@ -468,6 +470,7 @@
                         Profile.getLastUsedRegularProfile());
             }
         });
+        deferredStartupHandler.addDeferredTask(() -> { PersistedTabData.onDeferredStartup(); });
     }
 
     private void initChannelsAsync() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteController.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteController.java
index aafa3917..0ee608f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoAboutThisSiteController.java
@@ -139,8 +139,7 @@
         rowParams.subtitle = subtitle;
         rowParams.singleLineSubTitle = true;
         rowParams.visible = true;
-        rowParams.iconResId =
-                more_info_enabled ? R.drawable.ic_globe_24dp : R.drawable.ic_info_outline_grey_24dp;
+        rowParams.iconResId = R.drawable.ic_info_outline_grey_24dp;
         rowParams.decreaseIconSize = true;
         rowParams.clickCallback = this::onAboutThisSiteRowClicked;
         mRowView.setParams(rowParams);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java
index 20e9cad6..bd7eca1a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImpl.java
@@ -8,22 +8,20 @@
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.CollectionUtil;
-import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.NativeMethods;
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tab.WebContentsState;
-import org.chromium.chrome.browser.tab.WebContentsStateBridge;
 import org.chromium.chrome.browser.tab.state.CriticalPersistedTabData;
 import org.chromium.chrome.browser.tabmodel.TabModel;
 import org.chromium.components.embedder_support.util.UrlConstants;
-import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.common.ContentUrlConstants;
 import org.chromium.url.GURL;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -89,18 +87,29 @@
         // Titles corresponding to each element in groupIds.
         List<String> groupTitles = new ArrayList<>();
 
+        // Byte buffer associated with WebContentsState per tab by index.
+        List<ByteBuffer> byteBuffers = new ArrayList<>();
+        // Saved state version of WebContentsState per tab by index.
+        List<Integer> savedStateVersions = new ArrayList<>();
+
         for (HistoricalEntry entry : validEntries) {
             if (entry.isSingleTab()) {
+                WebContentsState tabWebContentsState = getWebContentsState(entry.getTabs().get(0));
                 allTabs.add(entry.getTabs().get(0));
                 perTabGroupId.add(Tab.INVALID_TAB_ID);
+                byteBuffers.add(tabWebContentsState.buffer());
+                savedStateVersions.add(tabWebContentsState.version());
                 continue;
             }
 
             groupIds.add(entry.getGroupId());
             groupTitles.add(entry.getGroupTitle() == null ? "" : entry.getGroupTitle());
             for (Tab tab : entry.getTabs()) {
+                WebContentsState tabWebContentsState = getWebContentsState(tab);
                 allTabs.add(tab);
                 perTabGroupId.add(entry.getGroupId());
+                byteBuffers.add(tabWebContentsState.buffer());
+                savedStateVersions.add(tabWebContentsState.version());
             }
         }
 
@@ -115,8 +124,9 @@
             RecordHistogram.recordEnumeratedHistogram(
                     "Tabs.RecentlyClosed.HistoricalSaverCloseType", HistoricalSaverCloseType.GROUP,
                     HistoricalSaverCloseType.COUNT);
-            HistoricalTabSaverImplJni.get().createHistoricalGroup(
-                    mTabModel, groupTitles.get(0), allTabs.toArray(new Tab[0]));
+            HistoricalTabSaverImplJni.get().createHistoricalGroup(mTabModel, groupTitles.get(0),
+                    allTabs.toArray(new Tab[0]), byteBuffers.toArray(new ByteBuffer[0]),
+                    CollectionUtil.integerListToIntArray(savedStateVersions));
             return;
         }
 
@@ -125,13 +135,16 @@
                 HistoricalSaverCloseType.BULK, HistoricalSaverCloseType.COUNT);
         HistoricalTabSaverImplJni.get().createHistoricalBulkClosure(mTabModel,
                 CollectionUtil.integerListToIntArray(groupIds), groupTitles.toArray(new String[0]),
-                CollectionUtil.integerListToIntArray(perTabGroupId), allTabs.toArray(new Tab[0]));
+                CollectionUtil.integerListToIntArray(perTabGroupId), allTabs.toArray(new Tab[0]),
+                byteBuffers.toArray(new ByteBuffer[0]),
+                CollectionUtil.integerListToIntArray(savedStateVersions));
     }
 
     private void createHistoricalTabInternal(Tab tab) {
         RecordHistogram.recordEnumeratedHistogram("Tabs.RecentlyClosed.HistoricalSaverCloseType",
                 HistoricalSaverCloseType.TAB, HistoricalSaverCloseType.COUNT);
-        HistoricalTabSaverImplJni.get().createHistoricalTab(tab);
+        HistoricalTabSaverImplJni.get().createHistoricalTab(
+                tab, getWebContentsState(tab).buffer(), getWebContentsState(tab).version());
     }
 
     /**
@@ -148,6 +161,8 @@
         if (tab.getWebContents() != null) {
             committedUrlOrFrozenUrl = tab.getWebContents().getLastCommittedUrl();
         } else {
+            if (CriticalPersistedTabData.from(tab).getWebContentsState() == null) return false;
+
             committedUrlOrFrozenUrl = tab.getUrl();
         }
 
@@ -192,22 +207,15 @@
         return validatedEntries;
     }
 
-    @CalledByNative
-    private static WebContents createTemporaryWebContents(Tab tab) {
-        assert tab.isFrozen();
-        assert tab.getWebContents() == null;
+    private static WebContentsState getWebContentsState(Tab tab) {
+        WebContentsState tempState = WebContentsState.getTempWebContentsState();
+        // If WebContents exists, on the native side during frozen tab restoration the same check
+        // will be made and return the contents immediately, skipping the logic that requires
+        // restoring from the WebContentsState. This tempState acts as an empty object placeholder.
+        if (tab.getWebContents() != null) return tempState;
+
         WebContentsState state = CriticalPersistedTabData.from(tab).getWebContentsState();
-        if (state == null) return null;
-
-        return WebContentsStateBridge.restoreContentsFromByteBuffer(
-                state, /*isHidden=*/true, /*noRenderer=*/true);
-    }
-
-    @CalledByNative
-    private static void destroyTemporaryWebContents(WebContents webContents) {
-        if (webContents == null) return;
-
-        webContents.destroy();
+        return (state == null) ? tempState : state;
     }
 
     @VisibleForTesting
@@ -217,9 +225,11 @@
 
     @NativeMethods
     interface Natives {
-        void createHistoricalTab(Tab tab);
-        void createHistoricalGroup(TabModel model, String title, Tab[] tabs);
-        void createHistoricalBulkClosure(
-                TabModel model, int[] groupIds, String[] titles, int[] perTabGroupId, Tab[] tabs);
+        void createHistoricalTab(Tab tab, ByteBuffer state, int savedStateVersion);
+        void createHistoricalGroup(TabModel model, String title, Tab[] tabs,
+                ByteBuffer[] byteBuffers, int[] savedStationsVersions);
+        void createHistoricalBulkClosure(TabModel model, int[] groupIds, String[] titles,
+                int[] perTabGroupId, Tab[] tabs, ByteBuffer[] byteBuffers,
+                int[] savedStateVersions);
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java
index a3790ac..3a23130 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/firstrun/FirstRunActivitySigninAndSyncTest.java
@@ -7,8 +7,11 @@
 import static androidx.test.espresso.Espresso.onView;
 import static androidx.test.espresso.assertion.ViewAssertions.matches;
 import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static androidx.test.espresso.matcher.ViewMatchers.isEnabled;
+import static androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility;
 import static androidx.test.espresso.matcher.ViewMatchers.withId;
 
+import static org.hamcrest.Matchers.allOf;
 import static org.hamcrest.Matchers.not;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -29,6 +32,7 @@
 import androidx.annotation.IdRes;
 import androidx.test.espresso.UiController;
 import androidx.test.espresso.ViewAction;
+import androidx.test.espresso.matcher.ViewMatchers.Visibility;
 import androidx.test.filters.LargeTest;
 import androidx.test.filters.MediumTest;
 
@@ -390,7 +394,55 @@
         SyncTestUtil.waitForCanSyncFeatureStart();
     }
 
+    @Test
+    @MediumTest
+    // ChildAccountStatusSupplier uses AppRestrictions to quickly detect non-supervised cases,
+    // adding at least one policy via AppRestrictions prevents that.
+    @Policies.Add(@Policies.Item(key = "ForceSafeSearch", string = "true"))
+    @EnableFeatures({ChromeFeatureList.ALLOW_SYNC_OFF_FOR_CHILD_ACCOUNTS})
+    public void
+    acceptingSyncForChildAccountEndsFreAndEnablesSyncIfAllowSyncOffForChildAccountsFeatureEnabled() {
+        when(mExternalAuthUtilsMock.canUseGooglePlayServices(any())).thenReturn(true);
+        mAccountManagerTestRule.addAccount(CHILD_EMAIL);
+        launchFirstRunActivityAndWaitForNativeInitialization();
+        waitUntilCurrentPageIs(SigninFirstRunFragment.class);
+        onView(withId(R.id.signin_fre_selected_account)).check(matches(isDisplayed()));
+        clickButton(R.id.signin_fre_continue_button);
+        waitUntilCurrentPageIs(SyncConsentFirstRunFragment.class);
+
+        clickButton(R.id.positive_button);
+
+        ApplicationTestUtils.waitForActivityState(mFirstRunActivity, Stage.DESTROYED);
+        SyncTestUtil.waitForSyncFeatureEnabled();
+    }
+
+    @Test
+    @MediumTest
+    // ChildAccountStatusSupplier uses AppRestrictions to quickly detect non-supervised cases,
+    // adding at least one policy via AppRestrictions prevents that.
+    @Policies.Add(@Policies.Item(key = "ForceSafeSearch", string = "true"))
+    @EnableFeatures({ChromeFeatureList.ALLOW_SYNC_OFF_FOR_CHILD_ACCOUNTS})
+    public void
+    refusingSyncForChildAccountEndsFreAndDoesNotEnableSyncIfAllowSyncOffForChildAccountsFeatureEnabled() {
+        when(mExternalAuthUtilsMock.canUseGooglePlayServices(any())).thenReturn(true);
+        mAccountManagerTestRule.addAccount(CHILD_EMAIL);
+        launchFirstRunActivityAndWaitForNativeInitialization();
+        waitUntilCurrentPageIs(SigninFirstRunFragment.class);
+        onView(withId(R.id.signin_fre_selected_account)).check(matches(isDisplayed()));
+        clickButton(R.id.signin_fre_continue_button);
+        waitUntilCurrentPageIs(SyncConsentFirstRunFragment.class);
+
+        clickButton(R.id.negative_button);
+
+        ApplicationTestUtils.waitForActivityState(mFirstRunActivity, Stage.DESTROYED);
+
+        assertFalse(SyncTestUtil.canSyncFeatureStart());
+    }
+
     private void clickButton(@IdRes int buttonId) {
+        // Ensure that the button isn't hidden, and is enabled.
+        onView(allOf(withId(buttonId), withEffectiveVisibility(Visibility.VISIBLE)))
+                .check(matches(isEnabled()));
         // This helps to reduce flakiness on some marshmallow bots in comparison with
         // espresso click.
         TestThreadUtils.runOnUiThreadBlocking(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java
index 2393cfc..21aac5f0 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/SyncConsentFragmentTest.java
@@ -69,6 +69,7 @@
 import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
 import org.chromium.chrome.browser.signin.services.SigninMetricsUtils.State;
 import org.chromium.chrome.browser.sync.SyncService;
+import org.chromium.chrome.browser.ui.signin.SyncConsentFragmentBase.SyncDataRowClicked;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
 import org.chromium.chrome.test.util.ActivityTestUtils;
@@ -864,6 +865,109 @@
         assertEquals(4, mHistogramTestRule.getHistogramTotalCount("Signin.AddAccountState"));
     }
 
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.TANGIBLE_SYNC})
+    public void testTangibleSyncConsentFragmentBookmarkRowClicked() {
+        mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
+        mSyncConsentActivity = ActivityTestUtils.waitForActivity(
+                InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> {
+                    SyncConsentActivityLauncherImpl.get().launchActivityForPromoDefaultFlow(
+                            mChromeActivityTestRule.getActivity(),
+                            SigninAccessPoint.BOOKMARK_MANAGER,
+                            AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
+                });
+
+        onView(withId(R.id.bookmarks_row)).perform(click());
+
+        assertEquals(1,
+                mHistogramTestRule.getHistogramValueCount(
+                        "Signin.SyncConsentScreen.DataRowClicked", SyncDataRowClicked.BOOKMARKS));
+        assertEquals(1,
+                mHistogramTestRule.getHistogramTotalCount(
+                        "Signin.SyncConsentScreen.DataRowClicked"));
+    }
+
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.TANGIBLE_SYNC})
+    public void testTangibleSyncConsentFragmentAutofillRowClicked() {
+        mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
+        mSyncConsentActivity = ActivityTestUtils.waitForActivity(
+                InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> {
+                    SyncConsentActivityLauncherImpl.get().launchActivityForPromoDefaultFlow(
+                            mChromeActivityTestRule.getActivity(),
+                            SigninAccessPoint.BOOKMARK_MANAGER,
+                            AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
+                });
+
+        onView(withId(R.id.autofill_row)).perform(click());
+
+        assertEquals(1,
+                mHistogramTestRule.getHistogramValueCount(
+                        "Signin.SyncConsentScreen.DataRowClicked", SyncDataRowClicked.AUTOFILL));
+        assertEquals(1,
+                mHistogramTestRule.getHistogramTotalCount(
+                        "Signin.SyncConsentScreen.DataRowClicked"));
+    }
+
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.TANGIBLE_SYNC})
+    public void testTangibleSyncConsentFragmentHistoryRowClicked() {
+        mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
+        mSyncConsentActivity = ActivityTestUtils.waitForActivity(
+                InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> {
+                    SyncConsentActivityLauncherImpl.get().launchActivityForPromoDefaultFlow(
+                            mChromeActivityTestRule.getActivity(),
+                            SigninAccessPoint.BOOKMARK_MANAGER,
+                            AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
+                });
+
+        onView(withId(R.id.history_row)).perform(click());
+
+        assertEquals(1,
+                mHistogramTestRule.getHistogramValueCount(
+                        "Signin.SyncConsentScreen.DataRowClicked", SyncDataRowClicked.HISTORY));
+        assertEquals(1,
+                mHistogramTestRule.getHistogramTotalCount(
+                        "Signin.SyncConsentScreen.DataRowClicked"));
+    }
+
+    @Test
+    @MediumTest
+    @EnableFeatures({ChromeFeatureList.TANGIBLE_SYNC})
+    public void testTangibleSyncConsentFragmentSyncRowClickOnlyRecordedOnce() {
+        mSigninTestRule.addAccount(AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
+        mSyncConsentActivity = ActivityTestUtils.waitForActivity(
+                InstrumentationRegistry.getInstrumentation(), SyncConsentActivity.class, () -> {
+                    SyncConsentActivityLauncherImpl.get().launchActivityForPromoDefaultFlow(
+                            mChromeActivityTestRule.getActivity(),
+                            SigninAccessPoint.BOOKMARK_MANAGER,
+                            AccountManagerTestRule.TEST_ACCOUNT_EMAIL);
+                });
+
+        onView(withId(R.id.bookmarks_row)).perform(click());
+        onView(withId(R.id.bookmarks_row)).perform(click());
+        onView(withId(R.id.autofill_row)).perform(click());
+        onView(withId(R.id.autofill_row)).perform(click());
+        onView(withId(R.id.history_row)).perform(click());
+        onView(withId(R.id.history_row)).perform(click());
+
+        assertEquals(1,
+                mHistogramTestRule.getHistogramValueCount(
+                        "Signin.SyncConsentScreen.DataRowClicked", SyncDataRowClicked.BOOKMARKS));
+        assertEquals(1,
+                mHistogramTestRule.getHistogramValueCount(
+                        "Signin.SyncConsentScreen.DataRowClicked", SyncDataRowClicked.AUTOFILL));
+        assertEquals(1,
+                mHistogramTestRule.getHistogramValueCount(
+                        "Signin.SyncConsentScreen.DataRowClicked", SyncDataRowClicked.HISTORY));
+        assertEquals(3,
+                mHistogramTestRule.getHistogramTotalCount(
+                        "Signin.SyncConsentScreen.DataRowClicked"));
+    }
+
     private ViewAction clickOnClickableSpan() {
         return new ViewAction() {
             @Override
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorageTest.java
index ef14585..2ed4d5a 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorageTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorageTest.java
@@ -8,25 +8,37 @@
 
 import org.junit.Assert;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TestRule;
 import org.junit.runner.RunWith;
 import org.mockito.MockitoAnnotations;
 
 import org.chromium.base.ThreadUtils;
 import org.chromium.base.test.BaseJUnit4ClassRunner;
 import org.chromium.base.test.util.Batch;
+import org.chromium.base.test.util.CallbackHelper;
+import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.chrome.browser.crypto.CipherFactory;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.flags.ChromeSwitches;
 import org.chromium.chrome.test.util.ByteBufferTestUtils;
+import org.chromium.chrome.test.util.browser.Features;
+import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
 
 import java.io.File;
 import java.nio.ByteBuffer;
 import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeoutException;
 
 /**
  * Tests relating to  {@link FilePersistedTabDataStorage}
  */
 @RunWith(BaseJUnit4ClassRunner.class)
 @Batch(Batch.PER_CLASS)
+@EnableFeatures({ChromeFeatureList.CRITICAL_PERSISTED_TAB_DATA + "<Study"})
+@CommandLineFlags.
+Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, "force-fieldtrials=Study/Group"})
 public class FilePersistedTabDataStorageTest {
     private static final int TAB_ID_1 = 1;
     private static final String DATA_ID_1 = "DataId1";
@@ -36,6 +48,9 @@
     private static final byte[] DATA_A = {13, 14};
     private static final byte[] DATA_B = {9, 10};
 
+    @Rule
+    public TestRule mProcessor = new Features.InstrumentationProcessor();
+
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
@@ -144,4 +159,54 @@
         semaphore.acquire();
         Assert.assertFalse(file.exists());
     }
+
+    @Test
+    @SmallTest
+    @CommandLineFlags.
+    Add({"force-fieldtrial-params=Study.Group:delay_saves_until_deferred_startup/true"})
+    public void testDeferredStartup() throws TimeoutException, InterruptedException {
+        FilePersistedTabDataStorage storage =
+                PersistedTabDataConfiguration.getFilePersistedTabDataStorage();
+        CallbackHelper onSavesCompleteCallbackHelper = new CallbackHelper();
+        CallbackHelper savesCallbackHelper = new CallbackHelper();
+        ThreadUtils.runOnUiThreadBlocking(() -> {
+            storage.save(TAB_ID_1, DATA_ID_1, () -> { return ByteBuffer.wrap(DATA_A); });
+            storage.save(TAB_ID_2, DATA_ID_2,
+                    ()
+                            -> { return ByteBuffer.wrap(DATA_B); },
+                    (res) -> { onSavesCompleteCallbackHelper.notifyCalled(); });
+            savesCallbackHelper.notifyCalled();
+        });
+        savesCallbackHelper.waitForCallback(0);
+        Assert.assertEquals(2, storage.getDelayedSaveRequestsForTesting().size());
+        PersistedTabData.onDeferredStartup();
+        Assert.assertEquals(0, storage.getDelayedSaveRequestsForTesting().size());
+        onSavesCompleteCallbackHelper.waitForCallback(0);
+        Assert.assertTrue(FilePersistedTabDataStorage.getFile(TAB_ID_1, DATA_ID_1).exists());
+        Assert.assertTrue(FilePersistedTabDataStorage.getFile(TAB_ID_2, DATA_ID_2).exists());
+
+        CallbackHelper saveAfterDeferredStartupHelper = new CallbackHelper();
+        ThreadUtils.runOnUiThreadBlocking(() -> {
+            storage.save(TAB_ID_1, DATA_ID_1,
+                    ()
+                            -> { return ByteBuffer.wrap(DATA_A); },
+                    (res) -> { saveAfterDeferredStartupHelper.notifyCalled(); });
+        });
+        saveAfterDeferredStartupHelper.waitForCallback(0);
+        Assert.assertEquals(0, storage.getDelayedSaveRequestsForTesting().size());
+    }
+
+    @Test
+    @SmallTest
+    @CommandLineFlags.
+    Add({"force-fieldtrial-params=Study.Group:delay_saves_until_deferred_startup/true"})
+    public void testDeferredStartupOverwritePendingTab()
+            throws TimeoutException, InterruptedException {
+        FilePersistedTabDataStorage storage =
+                PersistedTabDataConfiguration.getFilePersistedTabDataStorage();
+        storage.save(TAB_ID_1, DATA_ID_1, () -> { return ByteBuffer.wrap(DATA_A); });
+        storage.save(TAB_ID_1, DATA_ID_1, () -> { return ByteBuffer.wrap(DATA_B); });
+        // Second save for Tab 1 should overwrite previous Tab 1 save in delayed save queue
+        Assert.assertEquals(1, storage.getDelayedSaveRequestsForTesting().size());
+    }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImplTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImplTest.java
index c5a65a35..3ed06e3d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImplTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImplTest.java
@@ -23,6 +23,7 @@
 import org.chromium.chrome.browser.ntp.RecentlyClosedGroup;
 import org.chromium.chrome.browser.ntp.RecentlyClosedTab;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabSelectionType;
 import org.chromium.chrome.browser.tab.TabState;
 import org.chromium.chrome.browser.tab.TabStateExtractor;
 import org.chromium.chrome.browser.tab.state.CriticalPersistedTabData;
@@ -163,6 +164,65 @@
     }
 
     /**
+     * Tests saving a single frozen group. Needs native to test recovery of a frozen group when
+     * saving to TabRestoreService in native.
+     */
+    @Test
+    @MediumTest
+    public void testCreateHistoricalGroup_Frozen_HistoricalGroupCreated() {
+        final Tab tab0 =
+                sActivityTestRule.loadUrlInNewTab(getUrl(TEST_PAGE_1), /*incognito=*/false);
+        final Tab tab1 =
+                sActivityTestRule.loadUrlInNewTab(getUrl(TEST_PAGE_2), /*incognito=*/false);
+
+        selectFirstTab();
+        final Tab frozenTab0 = freezeTab(tab0);
+        final Tab frozenTab1 = freezeTab(tab1);
+
+        // Clear the entry created by freezing the tab.
+        TabRestoreServiceUtils.clearEntries(mTabModelSelector);
+
+        HistoricalEntry group =
+                new HistoricalEntry(0, "Foo", Arrays.asList(new Tab[] {frozenTab0, frozenTab1}));
+        TabRestoreServiceUtils.createTabOrGroupEntry(mTabModel, group);
+
+        ArrayList<HistoricalEntry> expectedEntries = new ArrayList<>();
+        expectedEntries.add(group);
+        assertEntriesAre(Collections.singletonList(expectedEntries));
+    }
+
+    /**
+     * Tests saving a single frozen group that cannot be restored. Needs native to test handling of
+     * a frozen group that cannot be restored.
+     */
+    @Test
+    @MediumTest
+    public void testCreateHistoricalGroup_Frozen_CannotRestore() {
+        final Tab tab0 =
+                sActivityTestRule.loadUrlInNewTab(getUrl(TEST_PAGE_1), /*incognito=*/false);
+        final Tab tab1 =
+                sActivityTestRule.loadUrlInNewTab(getUrl(TEST_PAGE_2), /*incognito=*/false);
+
+        selectFirstTab();
+        final Tab frozenTab0 = freezeTab(tab0);
+        final Tab frozenTab1 = freezeTab(tab1);
+
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> { CriticalPersistedTabData.from(frozenTab0).setWebContentsState(null); });
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> { CriticalPersistedTabData.from(frozenTab1).setWebContentsState(null); });
+        // Clear the entry created by freezing the tab.
+        TabRestoreServiceUtils.clearEntries(mTabModelSelector);
+
+        HistoricalEntry group =
+                new HistoricalEntry(0, "Foo", Arrays.asList(new Tab[] {frozenTab0, frozenTab1}));
+        TabRestoreServiceUtils.createTabOrGroupEntry(mTabModel, group);
+
+        List<List<HistoricalEntry>> empty = new ArrayList<List<HistoricalEntry>>();
+        assertEntriesAre(empty);
+    }
+
+    /**
      * Tests saving a single group with no title (default title == null). Needs native to test empty
      * title handling across the JNI boundary.
      */
@@ -208,6 +268,65 @@
     }
 
     /**
+     * Tests saving a frozen bulk. Needs native to test recovery of a frozen bulk when saving
+     * to TabRestoreService in native.
+     */
+    @Test
+    @MediumTest
+    public void testCreateHistoricalBulk_Frozen_HistoricalBulkCreated() {
+        final Tab tab0 =
+                sActivityTestRule.loadUrlInNewTab(getUrl(TEST_PAGE_1), /*incognito=*/false);
+        final Tab tab1 =
+                sActivityTestRule.loadUrlInNewTab(getUrl(TEST_PAGE_2), /*incognito=*/false);
+
+        selectFirstTab();
+        final Tab frozenTab0 = freezeTab(tab0);
+        final Tab frozenTab1 = freezeTab(tab1);
+
+        // Clear the entry created by freezing the tab.
+        TabRestoreServiceUtils.clearEntries(mTabModelSelector);
+
+        ArrayList<HistoricalEntry> expectedEntries = new ArrayList<>();
+        expectedEntries.add(new HistoricalEntry(frozenTab0));
+        expectedEntries.add(new HistoricalEntry(frozenTab1));
+        TabRestoreServiceUtils.createWindowEntry(mTabModel, expectedEntries);
+
+        assertEntriesAre(Collections.singletonList(expectedEntries));
+    }
+
+    /**
+     * Tests saving a frozen bulk that cannot be restored. Needs native to test handling of a
+     * frozen bulk that cannot be restored.
+     */
+    @Test
+    @MediumTest
+    public void testCreateHistoricalBulk_Frozen_CannotRestore() {
+        final Tab tab0 =
+                sActivityTestRule.loadUrlInNewTab(getUrl(TEST_PAGE_1), /*incognito=*/false);
+        final Tab tab1 =
+                sActivityTestRule.loadUrlInNewTab(getUrl(TEST_PAGE_2), /*incognito=*/false);
+
+        selectFirstTab();
+        final Tab frozenTab0 = freezeTab(tab0);
+        final Tab frozenTab1 = freezeTab(tab1);
+
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> { CriticalPersistedTabData.from(frozenTab0).setWebContentsState(null); });
+        TestThreadUtils.runOnUiThreadBlocking(
+                () -> { CriticalPersistedTabData.from(frozenTab1).setWebContentsState(null); });
+        // Clear the entry created by freezing the tab.
+        TabRestoreServiceUtils.clearEntries(mTabModelSelector);
+
+        ArrayList<HistoricalEntry> expectedEntries = new ArrayList<>();
+        expectedEntries.add(new HistoricalEntry(frozenTab0));
+        expectedEntries.add(new HistoricalEntry(frozenTab1));
+        TabRestoreServiceUtils.createWindowEntry(mTabModel, expectedEntries);
+
+        List<List<HistoricalEntry>> empty = new ArrayList<List<HistoricalEntry>>();
+        assertEntriesAre(empty);
+    }
+
+    /**
      * Tests saving a mix of entries in sequence. Requires native as a full end-to-end test.
      */
     @Test
@@ -390,4 +509,10 @@
     private String getUrl(String relativeUrl) {
         return sActivityTestRule.getTestServer().getURL(relativeUrl);
     }
+
+    private void selectFirstTab() {
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mTabModelSelector.getCurrentModel().setIndex(0, TabSelectionType.FROM_USER, false);
+        });
+    }
 }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImplUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImplUnitTest.java
index 8343575..fe84e083 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImplUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/tab/tab_restore/HistoricalTabSaverImplUnitTest.java
@@ -21,8 +21,11 @@
 import org.chromium.base.test.util.JniMocker;
 import org.chromium.chrome.browser.tab.MockTab;
 import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.WebContentsState;
+import org.chromium.chrome.browser.tab.state.CriticalPersistedTabData;
 import org.chromium.chrome.browser.tabmodel.TabModel;
 
+import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -95,7 +98,31 @@
         HistoricalEntry group = new HistoricalEntry(0, "Foo", Arrays.asList(new Tab[] {tab}));
         mHistoricalTabSaver.createHistoricalTabOrGroup(group);
 
-        verify(mHistoricalTabSaverJni, times(1)).createHistoricalTab(tab);
+        byte[] bytes = new byte[0];
+        ByteBuffer buf = ByteBuffer.wrap(bytes);
+        verify(mHistoricalTabSaverJni, times(1)).createHistoricalTab(tab, buf, -1);
+    }
+
+    /**
+     * Tests collapsing a group with a single tab into a single tab entry with non null web contents
+     * state buffer.
+     */
+    @Test
+    public void testCreateHistoricalTab_FromGroup_NonNullBuffer() {
+        byte[] bytes = new byte[3];
+        ByteBuffer buf = ByteBuffer.wrap(bytes);
+        WebContentsState tempState = new WebContentsState(buf);
+        tempState.setVersion(1);
+
+        MockTab tab = new MockTab(0, false);
+        CriticalPersistedTabData tempData = new CriticalPersistedTabData(tab);
+        tempData.setWebContentsState(tempState);
+        tab = (MockTab) MockTab.initializeWithCriticalPersistedTabData(tab, tempData);
+
+        HistoricalEntry group = new HistoricalEntry(0, "Foo", Arrays.asList(new Tab[] {tab}));
+        mHistoricalTabSaver.createHistoricalTabOrGroup(group);
+
+        verify(mHistoricalTabSaverJni, times(1)).createHistoricalTab(tab, buf, 1);
     }
 
     /**
@@ -108,7 +135,31 @@
         mHistoricalTabSaver.createHistoricalBulkClosure(
                 Collections.singletonList(new HistoricalEntry(tab)));
 
-        verify(mHistoricalTabSaverJni, times(1)).createHistoricalTab(tab);
+        byte[] bytes = new byte[0];
+        ByteBuffer buf = ByteBuffer.wrap(bytes);
+        verify(mHistoricalTabSaverJni, times(1)).createHistoricalTab(tab, buf, -1);
+    }
+
+    /**
+     * Tests collapsing a bulk closure with a single tab into a single tab entry with non null web
+     * contents state buffer.
+     */
+    @Test
+    public void testCreateHistoricalTab_FromBulk_NonNullBuffer() {
+        byte[] bytes = new byte[3];
+        ByteBuffer buf = ByteBuffer.wrap(bytes);
+        WebContentsState tempState = new WebContentsState(buf);
+        tempState.setVersion(1);
+
+        MockTab tab = new MockTab(0, false);
+        CriticalPersistedTabData tempData = new CriticalPersistedTabData(tab);
+        tempData.setWebContentsState(tempState);
+        tab = (MockTab) MockTab.initializeWithCriticalPersistedTabData(tab, tempData);
+
+        mHistoricalTabSaver.createHistoricalBulkClosure(
+                Collections.singletonList(new HistoricalEntry(tab)));
+
+        verify(mHistoricalTabSaverJni, times(1)).createHistoricalTab(tab, buf, 1);
     }
 
     /**
@@ -124,8 +175,13 @@
         HistoricalEntry group = new HistoricalEntry(0, "Foo", Arrays.asList(tabList));
         mHistoricalTabSaver.createHistoricalBulkClosure(Collections.singletonList(group));
 
+        byte[] bytes = new byte[0];
+        ByteBuffer buf = ByteBuffer.wrap(bytes);
+        ByteBuffer[] buffers = new ByteBuffer[] {buf, buf};
+        int[] versions = new int[] {-1, -1};
         verify(mHistoricalTabSaverJni, times(1))
-                .createHistoricalGroup(eq(mTabModel), eq("Foo"), eq(tabList));
+                .createHistoricalGroup(
+                        eq(mTabModel), eq("Foo"), eq(tabList), eq(buffers), eq(versions));
     }
 
     /**
@@ -141,7 +197,9 @@
         HistoricalEntry group = new HistoricalEntry(0, "Foo", Arrays.asList(tabList));
         mHistoricalTabSaver.createHistoricalTabOrGroup(group);
 
-        verify(mHistoricalTabSaverJni, times(1)).createHistoricalTab(tab0);
+        byte[] bytes = new byte[0];
+        ByteBuffer buf = ByteBuffer.wrap(bytes);
+        verify(mHistoricalTabSaverJni, times(1)).createHistoricalTab(tab0, buf, -1);
     }
 
     /**
@@ -158,8 +216,13 @@
         HistoricalEntry group = new HistoricalEntry(0, "Foo", Arrays.asList(tabList));
         mHistoricalTabSaver.createHistoricalTabOrGroup(group);
 
+        byte[] bytes = new byte[0];
+        ByteBuffer buf = ByteBuffer.wrap(bytes);
+        ByteBuffer[] buffers = new ByteBuffer[] {buf, buf};
+        int[] versions = new int[] {-1, -1};
         verify(mHistoricalTabSaverJni, times(1))
-                .createHistoricalGroup(eq(mTabModel), eq("Foo"), eq(new Tab[] {tab0, tab2}));
+                .createHistoricalGroup(eq(mTabModel), eq("Foo"), eq(new Tab[] {tab0, tab2}),
+                        eq(buffers), eq(versions));
     }
 
     /**
@@ -174,8 +237,13 @@
         HistoricalEntry group = new HistoricalEntry(0, "Foo", Arrays.asList(tabList));
         mHistoricalTabSaver.createHistoricalTabOrGroup(group);
 
+        byte[] bytes = new byte[0];
+        ByteBuffer buf = ByteBuffer.wrap(bytes);
+        ByteBuffer[] buffers = new ByteBuffer[] {buf, buf, buf};
+        int[] versions = new int[] {-1, -1, -1};
         verify(mHistoricalTabSaverJni, times(1))
-                .createHistoricalGroup(eq(mTabModel), eq("Foo"), eq(tabList));
+                .createHistoricalGroup(
+                        eq(mTabModel), eq("Foo"), eq(tabList), eq(buffers), eq(versions));
     }
 
     /**
@@ -195,10 +263,14 @@
         entries.add(new HistoricalEntry(tab2));
         mHistoricalTabSaver.createHistoricalBulkClosure(entries);
 
+        byte[] bytes = new byte[0];
+        ByteBuffer buf = ByteBuffer.wrap(bytes);
+        ByteBuffer[] buffers = new ByteBuffer[] {buf, buf, buf};
+        int[] versions = new int[] {-1, -1, -1};
         verify(mHistoricalTabSaverJni, times(1))
                 .createHistoricalBulkClosure(eq(mTabModel), eq(new int[0]), eq(new String[0]),
                         eq(new int[] {Tab.INVALID_TAB_ID, Tab.INVALID_TAB_ID, Tab.INVALID_TAB_ID}),
-                        eq(new Tab[] {tab1, tab2, tab2}));
+                        eq(new Tab[] {tab1, tab2, tab2}), eq(buffers), eq(versions));
     }
 
     /**
@@ -242,8 +314,13 @@
         int[] perTabGroupIds =
                 new int[] {Tab.INVALID_TAB_ID, 1, 1, Tab.INVALID_TAB_ID, Tab.INVALID_TAB_ID, 3, 3};
         Tab[] tabs = new Tab[] {tab0, tab4, tab6, tab7, tab8, tab10, tab11};
+
+        byte[] bytes = new byte[0];
+        ByteBuffer buf = ByteBuffer.wrap(bytes);
+        ByteBuffer[] buffers = new ByteBuffer[] {buf, buf, buf, buf, buf, buf, buf};
+        int[] versions = new int[] {-1, -1, -1, -1, -1, -1, -1};
         verify(mHistoricalTabSaverJni, times(1))
-                .createHistoricalBulkClosure(
-                        eq(mTabModel), eq(groupIds), eq(groupTitles), eq(perTabGroupIds), eq(tabs));
+                .createHistoricalBulkClosure(eq(mTabModel), eq(groupIds), eq(groupTitles),
+                        eq(perTabGroupIds), eq(tabs), eq(buffers), eq(versions));
     }
 }
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb
index b4bca99..b89190fd 100644
--- a/chrome/app/resources/generated_resources_af.xtb
+++ b/chrome/app/resources/generated_resources_af.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">Ontkoppel tans …</translation>
 <translation id="1537254971476575106">Volskermvergrootglas</translation>
 <translation id="15373452373711364">Groot muismerker</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> versoek tans om <ph name="ORIGIN" /> te lees en te verander</translation>
 <translation id="1540605929960647700">Aktiveer demonstrasiemodus</translation>
 <translation id="1541346352678737112">Geen netwerk gekry nie</translation>
 <translation id="1542137295869176367">Jou aanmelddata kon nie opgedateer word nie</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">Eiebewysbesonderhede vir <ph name="USERNAME" /> op <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Kan nie <ph name="EXTENSION_TYPE_PARAMETER" /> byvoeg nie</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> oor</translation>
-<translation id="1678794218766467608">Sluit in slaapmodus of wanneer deksel toe is</translation>
 <translation id="1679068421605151609">Ontwikkelaarsnutsgoed</translation>
 <translation id="1679810534535368772">Is jy seker jy wil uitgaan?</translation>
 <translation id="167983332380191032">Bestuurdiens het HTTP-fout gestuur.</translation>
@@ -861,7 +859,6 @@
 <translation id="1794051631868188691">Moet nooit <ph name="MERCHANT" /> wys nie</translation>
 <translation id="1794791083288629568">Stuur terugvoer om ons te help om hierdie probleem op te los.</translation>
 <translation id="1795214765651529549">Gebruik Klassiek</translation>
-<translation id="1796105431091975902">Kies ’n Ansible-strategiegids om by te voeg</translation>
 <translation id="1796588414813960292">Kenmerke wat klank nodig het, sal nie werk nie</translation>
 <translation id="1797117170091578105">Gebruik jou Chromebook-sleutelbord om te speel Jy kan sleutels pasmaak vir spesifieke handelinge.</translation>
 <translation id="1800502858278951817">Geen uitbreidings het versoek om <ph name="SITE_NAME" /> te lees en te verander nie</translation>
@@ -926,6 +923,7 @@
 <translation id="1842766183094193446">Is jy seker jy wil demonstrasiemodus aktiveer?</translation>
 <translation id="1845727111305721124">Mag klank speel</translation>
 <translation id="1846308012215045257">Control-klik om <ph name="PLUGIN_NAME" /> te laat loop</translation>
+<translation id="1848219224579402567">Meld af wanneer deksel toegemaak word</translation>
 <translation id="184862733444771842">Kenmerkversoek</translation>
 <translation id="1849016657376805933">Enige HID-toestel</translation>
 <translation id="1849186935225320012">Hierdie bladsy het volle beheer oor MIDI-toestelle.</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">Weergawe: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Wys sleutelafbeelding</translation>
 <translation id="1942128823046546853">Lees en verander al jou data op alle webwerwe</translation>
-<translation id="1942600407708803723">Skakel af wanneer omhulsel toe is</translation>
 <translation id="1944528062465413897">Bluetooth-saambindkode:</translation>
 <translation id="1944921356641260203">Opdatering gevind</translation>
 <translation id="1947136734041527201">Stel jou in staat om by webwerwe aan te meld met die rekening wat jy by ’n identiteitsdiens het</translation>
@@ -1726,6 +1723,7 @@
 <translation id="2568774940984945469">Inligtingbalkhouer</translation>
 <translation id="2571655996835834626">Verander jou instellings wat webwerwe se toegang tot kenmerke soos webkoekies, JavaScript, inproppe, geoligging, mikrofoon, kamera, ensovoorts beheer.</translation>
 <translation id="2572032849266859634">Leesalleen-toegang tot <ph name="VOLUME_NAME" /> is toegestaan.</translation>
+<translation id="2573276323521243649">Terug vanaf avatarkeusebladsy</translation>
 <translation id="2573417407488272418">Rugsteun programme en lêers na Lêers &gt; My lêers voor die opgradering.</translation>
 <translation id="2573831315551295105">Wys skakelaar toe vir “<ph name="ACTION" />”</translation>
 <translation id="2575247648642144396">Hierdie ikoon sal sigbaar wees wanneer die uitbreiding op die huidige bladsy kan reageer. Gebruik hierdie uitbreiding deur op die ikoon te klik of deur <ph name="EXTENSION_SHORTCUT" /> te druk.</translation>
@@ -3100,7 +3098,6 @@
 <translation id="389901847090970821">Kies sleutelbord</translation>
 <translation id="3900966090527141178">Voer wagwoorde uit</translation>
 <translation id="3903187154317825986">Ingeboude sleutelbord</translation>
-<translation id="3903191712482985591">Voeg strategiegids by</translation>
 <translation id="3904326018476041253">Liggingdienste</translation>
 <translation id="3904849010307028014">Gegrond op jou interaksie met ’n werf, soos om gereeld by ’n rekening aan te meld, kan daardie werf ’n vertrouenstoken aan jou blaaier uitreik. Later, as ander werwe wat jy besoek vertrouenstekens soek en vind, sal hulle jou meer waarskynlik as 'n persoon hanteer, en nie as 'n bot nie.</translation>
 <translation id="3905761538810670789">Herstel program</translation>
@@ -5047,7 +5044,6 @@
 <translation id="5827733057563115968">Voorspelling van volgende woord</translation>
 <translation id="5828545842856466741">Voeg profiel by …</translation>
 <translation id="5828633471261496623">Druk tans uit …</translation>
-<translation id="5828797982387013521">Kies strategiegids</translation>
 <translation id="5830205393314753525">Kan nie <ph name="APP_NAME" /> oopmaak nie</translation>
 <translation id="5830720307094128296">Stoor bladsy as …</translation>
 <translation id="5832813618714645810">Profiele</translation>
@@ -5939,7 +5935,6 @@
 <translation id="6686665106869989887">Oortjie is na regs geskuif</translation>
 <translation id="6686817083349815241">Stoor jou wagwoord</translation>
 <translation id="6687079240787935001">Versteek <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Versoek tans om <ph name="ORIGIN" /> te lees en te verander:</translation>
 <translation id="6689714331348768690">Vra <ph name="SUPERVISED_USER_NAME" /> om na die rekenaar toe te kom. Jou kind sal 'n paar frases op hierdie skerm lees om hul stemmodel te skep.
     <ph name="BR" />
     As <ph name="SUPERVISED_USER_NAME" /> hulp nodig het om te lees, laat jou kind agter jou aan sê. Fluister weg van die mikrofoon af sodat die Assistent jou kind se stem en nie joune leer nie.</translation>
@@ -6421,6 +6416,7 @@
 <translation id="7138678301420049075">Ander</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> gebruik tans jou mikrofoon</translation>
 <translation id="7141105143012495934">Kon nie aanmeld nie omdat jou rekeningbesonderhede nie gehaal kon word nie. Kontak jou administrateur of probeer weer.</translation>
+<translation id="7141844554192012199">Kontrole</translation>
 <translation id="7144878232160441200">Probeer weer</translation>
 <translation id="7149839598364933473">Skakel hierdie toestel om in 'n <ph name="DEVICE_OS" />-toestel.</translation>
 <translation id="7149893636342594995">Afgelope 24 uur</translation>
@@ -7198,7 +7194,6 @@
 <translation id="7898725031477653577">Vertaal altyd</translation>
 <translation id="7901405293566323524">Foonspil</translation>
 <translation id="7903290522161827520">Soek jy na blaaierkomponente? Besoek</translation>
-<translation id="7903345046358933331">Die bladsy het ophou reageer. Jy kan wag tot dit reageer of dit toemaak.</translation>
 <translation id="7903429136755645827">Klik om jou speletjiekontroles te pasmaak</translation>
 <translation id="7903742244674067440">Jy het sertifikate op lêer wat hierdie sertifikaatoutoriteite identifiseer</translation>
 <translation id="7903925330883316394">Nutsding: <ph name="UTILITY_TYPE" /></translation>
@@ -8112,6 +8107,7 @@
 <translation id="8780123805589053431">Kry prentbeskrywings van Google af</translation>
 <translation id="8780443667474968681">Stemsoektog is afgeskakel.</translation>
 <translation id="8781834595282316166">Nuwe oortjie in groep</translation>
+<translation id="8781980678064919987">Skakel af wanneer die deksel toegemaak word</translation>
 <translation id="8782565991310229362">Kioskprogram se begin is gekanselleer.</translation>
 <translation id="8783834180813871000">Voer die saambindkode in en druk dan Return of Enter.</translation>
 <translation id="8784626084144195648">Geklasseerde gemiddeld</translation>
@@ -8176,7 +8172,6 @@
 <translation id="8846132060409673887">Lees die vervaardiger en model van hierdie rekenaar</translation>
 <translation id="8846163936679269230">Stel e-SIM-profiele terug</translation>
 <translation id="8846239054091760429">Monoklank, begin, Intydse Onderskrifte, en meer</translation>
-<translation id="8847523528195140327">Meld af wanneer omhulsel toe is</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Versteek</translation>
 <translation id="8849219423513870962">Kanselleer verwydering van e-SIM-profiel genaamd <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index c75ebbf..933192d 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -561,7 +561,6 @@
 <translation id="1536754031901697553">ግንኙነት በማቋረጥ ላይ...</translation>
 <translation id="1537254971476575106">የሙሉ ማያ ገጽ ማጉያ</translation>
 <translation id="15373452373711364">ትልቅ የመዳፊት ጠቋሚ</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> <ph name="ORIGIN" />ን ለማንበብ እና ለመቀየር ፈቃድ እየጠየቀ ነው</translation>
 <translation id="1540605929960647700">የማሳያ ሁነታውን ያንቁ</translation>
 <translation id="1541346352678737112">ምንም አውታረ መረብ አልተገኘም</translation>
 <translation id="1542137295869176367">የመለያ መግቢያ ውሂብዎ ሊዘመን አልቻለም</translation>
@@ -723,7 +722,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> ላይ የ<ph name="USERNAME" /> የመግቢያ ማስረጃ ዝርዝሮች</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" />ን ማከል አይቻልም</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ቀርቷል</translation>
-<translation id="1678794218766467608">በእንቅልፍ ሁነታ ውስጥ ወይም ሽፋን ዝግ በሆነ ጊዜ ቆልፍ</translation>
 <translation id="1679068421605151609">የአዘጋጅ መሳሪያዎች</translation>
 <translation id="1679810534535368772">እርግጠኛ ነዎት መውጣት ይፈልጋሉ?</translation>
 <translation id="167983332380191032">የአስተዳደር አገልግሎት የኤችቲቲፒ ስህተትን ልኳል።</translation>
@@ -858,7 +856,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" />ን በጭራሽ አታሳይ</translation>
 <translation id="1794791083288629568">እኛ ይህን ችግር እንድንፈታው ለማገዝ ግብረመልስ ይላኩ።</translation>
 <translation id="1795214765651529549">የታወቀ ገጽታን ተጠቀም</translation>
-<translation id="1796105431091975902">የሚያክሉትን የAnsible መመሪያ ደብተር ይምረጡ</translation>
 <translation id="1796588414813960292">ድምጽ የሚያስፈልጋቸው ባህሪዎች አይሰሩም</translation>
 <translation id="1797117170091578105">የእርስዎን የChromebook ቁልፍ ሰሌዳ በመጠቀም ይጫወቱ። ቁልፎችን ለተወሰኑ እርምጃዎች ማበጀት ይችላሉ።</translation>
 <translation id="1800502858278951817"><ph name="SITE_NAME" />ን ለማንበብ እና ለመለወጥ ምንም ቅጥያዎች አልጠየቁም</translation>
@@ -923,6 +920,7 @@
 <translation id="1842766183094193446">እርግጠኛ ነዎት የቅንጭብ ማሳያ ሁነታን ማንቃት ይፈልጋሉ?</translation>
 <translation id="1845727111305721124">ድምጽ ለማጫወት ተፈቅዷል</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" />ን ለማሄድ Control-ጠቅ ያድርጉ</translation>
+<translation id="1848219224579402567">ክዳኑ ሲዘጋ ዘግተህ ውጣ</translation>
 <translation id="184862733444771842">የባህሪ ጥያቄ</translation>
 <translation id="1849016657376805933">ማንኛውም የኤችአይዲ መሣሪያ</translation>
 <translation id="1849186935225320012">ይህ ገጽ የMIDI መሳሪያዎች ሙሉ ቁጥጥር አለው።</translation>
@@ -1030,7 +1028,6 @@
 <translation id="1941553344801134989">ስሪት፦ <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">የቁልፍ ማዛመድን አሳይ</translation>
 <translation id="1942128823046546853">በሁሉም ድር ጣቢያዎች ላይ ሁሉንም ውሂብዎን ያንብቡ እና ይቀይሩ</translation>
-<translation id="1942600407708803723">ክዳኑ ሲዘጋ አጥፋ</translation>
 <translation id="1944528062465413897">የብሉቱዝ ማጣመሪያ ኮድ፦</translation>
 <translation id="1944921356641260203">ዝማኔ ተገኝቷል</translation>
 <translation id="1947136734041527201">በማንነት አገልግሎት ያለዎትን መለያ ተጠቅመው ወደ ድር ጣቢያዎች እንዲገቡ ያስችልዎታል</translation>
@@ -3094,7 +3091,6 @@
 <translation id="389901847090970821">የቁልፍ ሰሌዳን ይምረጡ</translation>
 <translation id="3900966090527141178">የይለፍ ቃላትን ወደ ውጭ ይላኩ</translation>
 <translation id="3903187154317825986">አብሮገነብ ቁልፍሰሌዳ</translation>
-<translation id="3903191712482985591">የመመሪያ ደብተር ያክሉ</translation>
 <translation id="3904326018476041253">የአካባቢ አገልግሎቶች</translation>
 <translation id="3904849010307028014">ከጣቢያው ጋር ባለዎት መስተጋብር ላይ በመመስረት እንደ በመደበኛነት ወደ መለያ መግባት ያለ ያ ጣቢያ ለአሳሽዎ የእምነት ማስመሰያ ሊሰጥ ይችላል። በኋላ ላይ እርስዎ የሚጎበኟቸው ሌሎች ጣቢያዎች ካረጋገጡ እና ትክክለኛ የእምነት ማስመሰያ ካገኙ እርስዎን እንደ ቦት ሳይሆን እንደ ሰው ሊያስቡዎት ይችላሉ።</translation>
 <translation id="3905761538810670789">መተግበሪያ ይጠግኑ</translation>
@@ -5037,7 +5033,6 @@
 <translation id="5827733057563115968">የቀጣይ ቃል ግምት</translation>
 <translation id="5828545842856466741">መገለጫ አክል...</translation>
 <translation id="5828633471261496623">በማተም ላይ...</translation>
-<translation id="5828797982387013521">የመመሪያ ደብተርን ምረጥ</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" />ን መክፈት አልተቻለም</translation>
 <translation id="5830720307094128296">ገጽ አስቀምጥ &amp;እንደ…</translation>
 <translation id="5832813618714645810">መገለጫዎች</translation>
@@ -5931,7 +5926,6 @@
 <translation id="6686665106869989887">ትር ወደ ቀኝ ተወስዷል</translation>
 <translation id="6686817083349815241">የይለፍ ቃልዎን ያስቀምጡ</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> ደብቅ</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> የማንበብ እና የመቀየር ፈቃድን በመጠየቅ ላይ፦</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> ወደ ኮምፒዩተሩ እንዲመጡ ይጠይቁ። የልጅዎን የድምጽ ሞዴል ለመፍጠር ልጅዎ በዚህ ማያ ገጽ ላይ ጥቂት ሐረጎችን ያነብባሉ።
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" /> በንባብ ላይ እገዛ ከፈለጉ ልጅዎ ከእርስዎ በኋላ እንዲደግሙት ያድርጉ። ረዳቱ ከእርስዎ ይልቅ የልጅዎን ድምፅ እንዲማር ከማይክሮፎኑ ራቅ ብለው ያንሾካሹኩ።</translation>
@@ -7190,7 +7184,6 @@
 <translation id="7898725031477653577">ሁል ጊዜ ተርጉም</translation>
 <translation id="7901405293566323524">የስልክ መገናኛ</translation>
 <translation id="7903290522161827520">የአሳሽ ክፍሎችን እየፈለጉ ነው? ይጎብኙ</translation>
-<translation id="7903345046358933331">ገጹ ምላሽ የማይሰጥ ሆኗል። ምላሽ እስከሚሰጥ ሊጠብቁት ወይም ሊዘጉት ይችላሉ።</translation>
 <translation id="7903429136755645827">የእርስዎ የጨዋታ መቆጣጠሪያዎችን ለማበጀት ጠቅ ያድርጉ</translation>
 <translation id="7903742244674067440">የእነዚህን ዕውቅና ማረጋገጫ ባለሥልጣናት የሚለዩ የዕውቅና ማረጋገጫዎች በፋይሉ ላይ አለዎት</translation>
 <translation id="7903925330883316394">ፍጆታ፦ <ph name="UTILITY_TYPE" /></translation>
@@ -8111,6 +8104,7 @@
 <translation id="8780123805589053431">የምስል ዝርዝሮችን ከGoogle ያግኙ</translation>
 <translation id="8780443667474968681">የድምጽ ፍለጋ ጠፍቷል።</translation>
 <translation id="8781834595282316166">በቡድን ውስጥ አዲስ ትር</translation>
+<translation id="8781980678064919987">ክዳኑ ሲዘጋ አጥፋ</translation>
 <translation id="8782565991310229362">የኪዮስክ መተግበሪያ ማስጀመር ተሰርዟል።</translation>
 <translation id="8783834180813871000">የብሉቱዝ ማጣመሪያ ኮድ ይተይቡና ከዚያም Return ወይም Enter የሚለውን ይጫኑ።</translation>
 <translation id="8784626084144195648">የቢን አማካኝ</translation>
@@ -8175,7 +8169,6 @@
 <translation id="8846132060409673887">የዚህ ኮምፒውተር አምራችና ሞዴል ማንበብ</translation>
 <translation id="8846163936679269230">የኢሲም መገለጫዎችን ዳግም ያስጀምሩ</translation>
 <translation id="8846239054091760429">ሞኖ ኦዲዮ፣ ጀማሪ ድርጅት፣ የቀጥታ መግለጫ ጽሁፍ እና ተጨማሪ</translation>
-<translation id="8847523528195140327">ክዳኑ ሲዘጋ ዘግተህ ውጣ</translation>
 <translation id="8847988622838149491">ዩ ኤስ ቢ</translation>
 <translation id="8849001918648564819">ተደብቋል</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> የተባለ የኢሲም መገለጫ ማስወገድን ሰርዝ</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 7961452..2faf3e68c 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">جارٍ قطع الاتصال…</translation>
 <translation id="1537254971476575106">مكبّر بملء الشاشة</translation>
 <translation id="15373452373711364">مؤشر الماوس الكبير</translation>
-<translation id="1539630663098418038">الإضافة <ph name="EXTENSIONS_REQUESTING_ACCESS" /> تطلب إذن الاطّلاع على محتوى <ph name="ORIGIN" /> وتعديله.</translation>
 <translation id="1540605929960647700">تفعيل الوضع التجريبي</translation>
 <translation id="1541346352678737112">لم يتم العثور على شبكة</translation>
 <translation id="1542137295869176367">تعذّر تعديل بيانات تسجيل الدخول.</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">تفاصيل بيانات اعتماد المستخدم <ph name="USERNAME" /> على النطاق <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">يتعذّر تثبيت <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">الوقت المتبقي <ph name="TIME" /></translation>
-<translation id="1678794218766467608">قفل الشاشة في وضع السكون أو عند إغلاق الغطاء</translation>
 <translation id="1679068421605151609">أدوات مطوّري البرامج</translation>
 <translation id="1679810534535368772">هل تريد فعلاً الخروج؟</translation>
 <translation id="167983332380191032">‏أرسلت خدمة الإدارة خطأ HTTP.</translation>
@@ -853,7 +851,6 @@
 <translation id="1794051631868188691">عدم عرض <ph name="MERCHANT" /> مرة أخرى</translation>
 <translation id="1794791083288629568">يمكنك إرسال تعليقات لمساعدتنا في إصلاح هذه المشكلة.</translation>
 <translation id="1795214765651529549">استخدام المظهر الكلاسيكي</translation>
-<translation id="1796105431091975902">‏اختيار دليل Ansible إرشادي لإضافته</translation>
 <translation id="1796588414813960292">لن تعمل الميزات التي تحتاج إلى استخدام الصوت.</translation>
 <translation id="1797117170091578105">‏يمكنك اللعب باستخدام لوحة مفاتيح Chromebook. ويمكنك تخصيص مفاتيح لتنفيذ إجراءات محدَّدة.</translation>
 <translation id="1800502858278951817">لم تطلب أي إضافات قراءة اسم الموقع الإلكتروني <ph name="SITE_NAME" /> وتغييره</translation>
@@ -918,6 +915,7 @@
 <translation id="1842766183094193446">هل تريد حقًا تفعيل الوضع التجريبي؟</translation>
 <translation id="1845727111305721124">المواقع الإلكترونية التي يُسمح لها بتشغيل الصوت</translation>
 <translation id="1846308012215045257">‏انقر بالماوس مع الضغط على مفتاح Ctrl لتشغيل <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">تسجيل الخروج عند إغلاق الغطاء</translation>
 <translation id="184862733444771842">طلب ميزة</translation>
 <translation id="1849016657376805933">‏كل أجهزة HID</translation>
 <translation id="1849186935225320012">‏تتضمن هذه الصفحة إمكانية تحكم شامل في أجهزة MIDI.</translation>
@@ -1025,7 +1023,6 @@
 <translation id="1941553344801134989">الإصدار: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">عرض خريطة المفاتيح</translation>
 <translation id="1942128823046546853">الاطّلاع على جميع بياناتك وتغييرها على جميع المواقع الإلكترونية</translation>
-<translation id="1942600407708803723">إيقاف التشغيل عند غلق الغلاف</translation>
 <translation id="1944528062465413897">رمز إقران البلوتوث:</translation>
 <translation id="1944921356641260203">تم العثور على التحديث</translation>
 <translation id="1947136734041527201">بإمكانك تسجيل الدخول إلى المواقع الإلكترونية باستخدام حسابك من خلال خدمة تقديم الهويات.</translation>
@@ -1714,6 +1711,7 @@
 <translation id="2568774940984945469">حاوية شريط المعلومات</translation>
 <translation id="2571655996835834626">يمكنك تغيير الإعدادات التي تتحكَّم في وصول المواقع الإلكترونية إلى ميزات مثل ملفات تعريف الارتباط وجافا سكريبت والمكوّنات الإضافية والمواقع الجغرافية والميكروفون والكاميرا وغيرها.</translation>
 <translation id="2572032849266859634">تم منح إذن دخول للقراءة فقط إلى <ph name="VOLUME_NAME" />.</translation>
+<translation id="2573276323521243649">الرجوع من صفحة اختيار الصورة الرمزية</translation>
 <translation id="2573417407488272418">احتفظ بنسخة احتياطية من التطبيقات والملفات في الملفات &gt; ملفاتي قبل الترقية.</translation>
 <translation id="2573831315551295105">تخصيص مفتاح تحكّم للإجراء "<ph name="ACTION" />"</translation>
 <translation id="2575247648642144396">سيكون هذا الرمز مرئيًا عندما تتمكن الإضافة من تنفيذ الإجراءات على الصفحة الحالية. يمكنك استخدام هذه الإضافة بالنقر على الرمز أو بالضغط على <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -2556,6 +2554,7 @@
 <translation id="3406290648907941085">المواقع الإلكترونية التي يُسمح لها باستخدام أجهزة الواقع الافتراضي وبياناتها</translation>
 <translation id="3406396172897554194">البحث حسب اللغة أو اسم أسلوب الإدخال</translation>
 <translation id="3406605057700382950">&amp;عرض شريط الإشارات</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{‏تم استيراد كلمة مرور واحدة إلى "مدير كلمات المرور في Google" للحساب <ph name="USER_EMAIL" />.}zero{‏تم استيراد {NUM_PASSWORDS} كلمة مرور إلى "مدير كلمات المرور في Google" للحساب <ph name="USER_EMAIL" />.}two{‏تم استيراد كلمتَي مرور ({NUM_PASSWORDS}) إلى "مدير كلمات المرور في Google" للحساب <ph name="USER_EMAIL" />.}few{‏تم استيراد {NUM_PASSWORDS} كلمات مرور إلى "مدير كلمات المرور في Google" للحساب <ph name="USER_EMAIL" />.}many{‏تم استيراد {NUM_PASSWORDS} كلمة مرور إلى "مدير كلمات المرور في Google" للحساب <ph name="USER_EMAIL" />.}other{‏تم استيراد {NUM_PASSWORDS} كلمة مرور إلى "مدير كلمات المرور في Google" للحساب <ph name="USER_EMAIL" />.}}</translation>
 <translation id="3409785640040772790">‏خرائط Google</translation>
 <translation id="3412265149091626468">انتقال سريع إلى التحديد</translation>
 <translation id="3413122095806433232">‏جهات إصدار المرجع المصدق (CA): <ph name="LOCATION" /></translation>
@@ -3090,7 +3089,6 @@
 <translation id="389901847090970821">تحديد لوحة مفاتيح</translation>
 <translation id="3900966090527141178">تصدير كلمات المرور</translation>
 <translation id="3903187154317825986">لوحة المفاتيح المضمّنة</translation>
-<translation id="3903191712482985591">إضافة دليل إرشادي</translation>
 <translation id="3904326018476041253">خدمات الموقع الجغرافي</translation>
 <translation id="3904849010307028014">‏بناءً على تفاعلك مع موقع إلكتروني معيَّن، مثل تسجيل الدخول بانتظام إلى حساب معيَّن، يمكن لهذا الموقع الإلكتروني إصدار رمز Trust Token لمتصفّحك. وبعد ذلك، إذا كانت المواقع الإلكترونية الأخرى التي تزورها تتحقّق من توفّر رمز مميّز صالح للثقة وتبحث عنه، من المرجّح أن تُعاملك بصفتك شخصًا وليس برنامج تتبُّع.</translation>
 <translation id="3905761538810670789">إصلاح التطبيق</translation>
@@ -3738,6 +3736,7 @@
 <translation id="4541123282641193691">‏تعذّر التحقق من حسابك. يُرجى المحاولة مرة أخرى أو إعادة تشغيل Chromebook.</translation>
 <translation id="4541662893742891060">تعذّر الربط بهذا الملف الشخصي. للحصول على الدعم الفني، يُرجى التواصل مع مشغّل شبكة الجوّال.</translation>
 <translation id="4541706525461326392">جارٍ إزالة الملف الشخصي. قد تستغرق هذه العملية بضع دقائق.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{‏تم استيراد كلمة مرور واحدة إلى "مدير كلمات المرور في Google" على هذا الجهاز.}zero{‏تم استيراد {NUM_PASSWORDS} كلمة مرور إلى "مدير كلمات المرور في Google" على هذا الجهاز.}two{‏تم استيراد كلمتَي مرور ({NUM_PASSWORDS}) إلى "مدير كلمات المرور في Google" على هذا الجهاز.}few{‏تم استيراد {NUM_PASSWORDS} كلمات مرور إلى "مدير كلمات المرور في Google" على هذا الجهاز.}many{‏تم استيراد {NUM_PASSWORDS} كلمة مرور إلى "مدير كلمات المرور في Google" على هذا الجهاز.}other{‏تم استيراد {NUM_PASSWORDS} كلمة مرور إلى "مدير كلمات المرور في Google" على هذا الجهاز.}}</translation>
 <translation id="4542520061254486227">قراءة بياناتك على <ph name="WEBSITE_1" /> و<ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">إدارة الشهادات</translation>
 <translation id="4544174279960331769">الصورة الرمزية التلقائية الزرقاء</translation>
@@ -5031,7 +5030,6 @@
 <translation id="5827733057563115968">توقُّع الكلمة التالية</translation>
 <translation id="5828545842856466741">إضافة ملف شخصي...</translation>
 <translation id="5828633471261496623">الطباعة جارية...</translation>
-<translation id="5828797982387013521">اختيار دليل إرشادي</translation>
 <translation id="5830205393314753525">يتعذّر فتح <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">حفظ &amp;صفحة باسم...</translation>
 <translation id="5832813618714645810">الملفات الشخصية</translation>
@@ -5931,7 +5929,6 @@
 <translation id="6686665106869989887">تم نقل علامة التبويب إلى اليمين.</translation>
 <translation id="6686817083349815241">حفظ كلمة المرور</translation>
 <translation id="6687079240787935001">إخفاء <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">الإضافات التي تطلب إذن الاطّلاع على محتوى <ph name="ORIGIN" /> وتعديله:</translation>
 <translation id="6689714331348768690">‏اطلب من <ph name="SUPERVISED_USER_NAME" /> الجلوس أمام جهاز الكمبيوتر. وسيقرأ طفلك بعض العبارات على هذه الشاشة لإنشاء نموذج صوتي له.
     <ph name="BR" />
     في حال احتياج <ph name="SUPERVISED_USER_NAME" /> إلى المساعدة في عملية القراءة، يمكنك أن تقرأ بنفسك وتجعل طفلك يكرّر بصوته ما تقرأه. احرِص على أن تهمس لطفلك بعيدًا عن الميكروفون حتى تتعرّف خدمة "مساعد Google" على صوت طفلك وليس صوتك.</translation>
@@ -6233,6 +6230,7 @@
 <translation id="6968288415730398122">أدخل كلمة المرور لإعداد قفل الشاشة</translation>
 <translation id="6969047215179982698">إيقاف ميزة "المشاركة عن قرب"</translation>
 <translation id="6970480684834282392">نوع التشغيل</translation>
+<translation id="6970543303783413625">يتعذّر استيراد كلمات المرور. يمكنك استيراد ما يصل إلى <ph name="COUNT" /> كلمة مرور فقط في كل مرة.</translation>
 <translation id="6970856801391541997">طباعة صفحات محددة</translation>
 <translation id="6970861306198150268">احرص على حفظ كلمة المرور الحالية لهذا الموقع الإلكتروني.</translation>
 <translation id="6972180789171089114">صوت/فيديو</translation>
@@ -6413,6 +6411,7 @@
 <translation id="7138678301420049075">أخرى</translation>
 <translation id="7139627972753429585">يستخدم تطبيق <ph name="APP_NAME" /> الميكروفون.</translation>
 <translation id="7141105143012495934">فشل تسجيل الدخول، نظرًا لعدم القدرة على استرداد تفاصيل حسابك، يُرجى الاتصال بالمسؤول أو إعادة المحاولة.</translation>
+<translation id="7141844554192012199">عمليات التحقّق من كلمات المرور</translation>
 <translation id="7144878232160441200">إعادة المحاولة</translation>
 <translation id="7149839598364933473">تحويل هذا الجهاز إلى جهاز متوافق مع نظام التشغيل <ph name="DEVICE_OS" /></translation>
 <translation id="7149893636342594995">آخر 24 ساعة</translation>
@@ -6465,6 +6464,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{الخروج من الصفجة}zero{الخروج من صفحة}two{الخروج من الصفحتين}few{الخروج من صفحات}many{الخروج من صفحة}other{الخروج من صفحة}}</translation>
 <translation id="7207457272187520234">‏يمكنك إرسال بيانات الاستخدام والتشخيص. ويُرسل هذا الجهاز حاليًا بيانات استخدام التطبيق وبيانات التشخيص وبيانات الجهاز تلقائيًا إلى Google. وسيساعد ذلك في تعزيز استقرار النظام والتطبيقات وإجراء المزيد من التحسينات. وسيستفيد أيضًا مطوّرو التطبيقات والشركاء في Google، مثل مطوّري البرامج المتوافقة مع Android، من بعض البيانات المجمّعة. ويفرض المالك هذا الإعداد. في حال تفعيل إعداد "النشاط الإضافي على الويب وفي التطبيقات"، قد يتم حفظ هذه البيانات في حسابك على Google.</translation>
 <translation id="7207631048330366454">البحث في التطبيقات</translation>
+<translation id="7210471695184432500">‏لاستيراد كلمات المرور إلى "مدير كلمات المرور في Google" على هذا الجهاز، يُرجى اختيار ملف CSV.</translation>
 <translation id="7210499381659830293">طابعات مُوصّلة</translation>
 <translation id="7211783048245131419">لم يتم تخصيص مفتاح تبديل بعد</translation>
 <translation id="7212097698621322584">يُرجى إدخال رقم التعريف الشخصي الحالي لتغييره. في حال كنت لا تعرف رقم التعريف الشخصي، عليك إعادة ضبط مفتاح الأمان، ثم إنشاء رقم تعريف شخصي جديد.</translation>
@@ -7189,7 +7189,6 @@
 <translation id="7898725031477653577">ترجمة اللغة دومًا</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">هل تبحث عن مكوِّنات المتصفِّح؟ انتقِل إلى</translation>
-<translation id="7903345046358933331">أصبحت الصفحة غير مستجيبة. يمكنك الانتظار حتى تصبح مستجيبة أو إغلاقها.</translation>
 <translation id="7903429136755645827">انقر هنا لتخصيص عناصر التحكُّم في الألعاب.</translation>
 <translation id="7903742244674067440">لديك شهادات في الملف تحدد صلاحيات الشهادة هذه</translation>
 <translation id="7903925330883316394">الأداة: <ph name="UTILITY_TYPE" /></translation>
@@ -7526,6 +7525,7 @@
 <translation id="8206859287963243715">خلوي</translation>
 <translation id="8208216423136871611">عدم الحفظ</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{إشعار واحد جديد}zero{# إشعار جديد}two{إشعاران جديدان}few{# إشعارات جديدة}many{# إشعارًا جديدًا}other{# إشعار جديد}}</translation>
+<translation id="821119981794423735">‏لاستيراد كلمات المرور إلى "مدير كلمات المرور في Google" للحساب <ph name="USER_EMAIL" />، يُرجى اختيار ملف CSV.</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{جارٍ تنزيل عنصر واحد}zero{جارٍ تنزيل عدّة عناصر}two{جارِ تنزيل عنصرين}few{جارٍ تنزيل عدّة عناصر}many{جارٍ تنزيل عدّة عناصر}other{جارٍ تنزيل عدّة عناصر}}</translation>
 <translation id="8213449224684199188">تم الدخول إلى وضع الصور</translation>
 <translation id="8214489666383623925">فتح ملف...</translation>
@@ -8108,6 +8108,7 @@
 <translation id="8780123805589053431">‏الحصول على أوصاف الصور من Google</translation>
 <translation id="8780443667474968681">تم إيقاف ميزة البحث الصوتي.</translation>
 <translation id="8781834595282316166">علامة تبويب جديدة في مجموعة</translation>
+<translation id="8781980678064919987">إيقاف التشغيل عند إغلاق الغطاء</translation>
 <translation id="8782565991310229362">‏تم إلغاء تشغيل تطبيق Kiosk.</translation>
 <translation id="8783834180813871000">اكتب رمز إقران البلوتوث، ثم اضغط على "رجوع" أو "إدخال".</translation>
 <translation id="8784626084144195648">تم تثبيت المعدل</translation>
@@ -8172,7 +8173,6 @@
 <translation id="8846132060409673887">قراءة نموذج هذا الكمبيوتر والشركة المصنِّعة</translation>
 <translation id="8846163936679269230">‏إعادة ضبط الملفات الشخصية لبطاقة eSIM</translation>
 <translation id="8846239054091760429">ميزة "الصوت الأحادي" وأصوات بدء التشغيل وميزة "النسخ النصي التلقائي" وغيرها</translation>
-<translation id="8847523528195140327">تسجيل الخروج عند غلق الغلاف</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">مخفي</translation>
 <translation id="8849219423513870962">‏إلغاء عملية إزالة الملف التعريفي لشريحة eSIM التي تحمل الاسم <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 11eee68c..2d1e0c8 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -561,7 +561,6 @@
 <translation id="1536754031901697553">সংযোগ বিচ্ছিন্ন কৰি থকা হৈছে…</translation>
 <translation id="1537254971476575106">সম্পূর্ণ স্ক্ৰীণৰ বিৱৰ্ধক</translation>
 <translation id="15373452373711364">মাউছৰ ডাঙৰ কাৰ্ছৰ</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" />এ <ph name="ORIGIN" /> পঢ়িবলৈ আৰু সলনি কৰিবলৈ অনুৰোধ কৰি আছে</translation>
 <translation id="1540605929960647700">ডেম’ ম’ড সক্ষম কৰক</translation>
 <translation id="1541346352678737112">কোনো নেটৱৰ্ক পোৱা নগ’ল</translation>
 <translation id="1542137295869176367">আপোনাৰ ছাইন ইন ডেটা আপডে’ট কৰিব পৰা নগ’ল</translation>
@@ -723,7 +722,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" />ত <ph name="USERNAME" />ৰ ক্ৰেডেনশ্বিয়েলৰ সবিশেষ</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" />ক যোগ দিব নোৱাৰি</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> বাকী</translation>
-<translation id="1678794218766467608">সুপ্ত ম’ডত অথবা ঢাকনীখন বন্ধ কৰা থাকিলে লক কৰক</translation>
 <translation id="1679068421605151609">বিকাশকৰ্তাৰ সঁজুলি</translation>
 <translation id="1679810534535368772">আপুনি বাহিৰ হ’বলৈ বিচৰাটো নিশ্চিতনে?</translation>
 <translation id="167983332380191032">পৰিচালনা সেৱাই HTTP আসোঁৱাহ পঠিয়াইছে।</translation>
@@ -859,7 +857,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" />ক কেতিয়াও নেদেখুৱাব</translation>
 <translation id="1794791083288629568">আমাক এই সমস্যা সামাধান কৰাত সহায় কৰিবলৈ মতামত পঠিয়াওক।</translation>
 <translation id="1795214765651529549">ক্লাছিক থীম ব্যৱহাৰ কৰক</translation>
-<translation id="1796105431091975902">যোগ দিবলৈ এখন Ansible প্লে’বুক বাছনি কৰক</translation>
 <translation id="1796588414813960292">ধ্বনিৰ আৱশ্যক হোৱা সুবিধাসমূহে কাম নকৰিব</translation>
 <translation id="1797117170091578105">আপোনাৰ Chromebook কীব’ৰ্ড ব্যৱহাৰ কৰি খেলক। নিৰ্দিষ্ট কাৰ্যৰ বাবে আপুনি কী কাষ্টমাইজ কৰিব পাৰে।</translation>
 <translation id="1800502858278951817">কোনো এক্সটেনশ্বনে <ph name="SITE_NAME" /> পঢ়িবলৈ আৰু সলনি কৰিবলৈ অনুৰোধ কৰা নাই</translation>
@@ -924,6 +921,7 @@
 <translation id="1842766183094193446">ডেম’ ম’ড সক্ষম কৰিবলৈ আপুনি নিশ্চিতনে?</translation>
 <translation id="1845727111305721124">ধ্বনি প্লে’ কৰাৰ অনুমতি আছে</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" />ক চলাবলৈ Control টিপি থাকি ক্লিক কৰক</translation>
+<translation id="1848219224579402567">লীডখন বন্ধ কৰিলে ছাইন আউট কৰক</translation>
 <translation id="184862733444771842">সুবিধাৰ অনুৰোধ</translation>
 <translation id="1849016657376805933">যিকোনো HID ডিভাইচ</translation>
 <translation id="1849186935225320012">এই পৃষ্ঠাটোৰ MIDI ডিভাইচসমূহৰ সম্পূৰ্ণ নিয়ন্ত্ৰণ আছে।</translation>
@@ -1032,7 +1030,6 @@
 <translation id="1941553344801134989">সংস্কৰণ: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">কী মেপ কৰা দেখুৱাওক</translation>
 <translation id="1942128823046546853">আটাইবোৰ ৱেবছাইটত আপোনাৰ ডেটা পঢ়িব আৰু সলনি কৰিব পাৰে</translation>
-<translation id="1942600407708803723">ক’ভাৰটো বন্ধ কৰিলে অফ কৰক</translation>
 <translation id="1944528062465413897">ব্লুটুথ পেয়াৰিং ক’ড:</translation>
 <translation id="1944921356641260203">আপডে'ট পোৱা গৈছে</translation>
 <translation id="1947136734041527201">কোনো পৰিচয় সেৱাৰ সৈতে থকা আপোনাৰ একাউণ্টটো ব্যৱহাৰ কৰি আপোনাক ৱেবছাইটসমূহত ছাইন ইন কৰিবলৈ দিয়ে</translation>
@@ -1724,6 +1721,7 @@
 <translation id="2568774940984945469">ইনফ’বাৰ কণ্টেইনাৰ</translation>
 <translation id="2571655996835834626">ৱেবছাইটসমূহে কুকি, JavaScript, প্লাগইন, ভৌগলিক অৱস্থান, মাইক্ৰফ’ন, কেমেৰা ইত্যাদিলৈ এক্সেছ কৰা সুবিধাটো নিয়ন্ত্ৰণ কৰা আপোনাৰ ছেটিংসমূহ সলনি কৰক।</translation>
 <translation id="2572032849266859634"><ph name="VOLUME_NAME" />লৈ কেৱল পঢ়াৰ এক্সেছ দিয়া হৈছে।</translation>
+<translation id="2573276323521243649">অৱতাৰ বাছনি কৰা পৃষ্ঠাৰ পৰা উভতি যাওক</translation>
 <translation id="2573417407488272418">আপগ্ৰে’ড কৰাৰ পূৰ্বে এপ্ আৰু ফাইলসমূহ ফাইল &gt; মোৰ ফাইলত বেক আপ লওক।</translation>
 <translation id="2573831315551295105">“<ph name="ACTION" />”ৰ বাবে ছুইচ আবণ্টন কৰক</translation>
 <translation id="2575247648642144396">এক্সটেনশ্বনটোৱে বর্তমানৰ পৃষ্ঠাটোত কার্য কৰিব পাৰিলে এই আইকনটো দেখা পোৱা যাব। আইকনটোত ক্লিক কৰি বা <ph name="EXTENSION_SHORTCUT" />ত টিপি এই এক্সটেনশ্বনটো ব্যৱহাৰ কৰক।</translation>
@@ -2564,6 +2562,7 @@
 <translation id="3406290648907941085">ভাৰ্ছুৱেল ৰিয়েলিটি ডিভাইচ আৰু ডেটা ব্যৱহাৰ কৰাৰ অনুমতি আছে</translation>
 <translation id="3406396172897554194">ভাষা অথবা ইনপুটৰ নাম অনুসৰি সন্ধান কৰক</translation>
 <translation id="3406605057700382950">বুকমার্ক বাৰ &amp;দেখুৱাওক</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{<ph name="USER_EMAIL" />ৰ বাবে Google Password Managerলৈ ১ টা পাছৱৰ্ড আমদানি কৰা হৈছে}one{<ph name="USER_EMAIL" />ৰ বাবে Google Password Managerলৈ {NUM_PASSWORDS} টা পাছৱৰ্ড আমদানি কৰা হৈছে}other{<ph name="USER_EMAIL" />ৰ বাবে Google Password Managerলৈ {NUM_PASSWORDS} টা পাছৱৰ্ড আমদানি কৰা হৈছে}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">বাছনিলৈ যাওক</translation>
 <translation id="3413122095806433232">চিএ ব্যৱহাৰকাৰী: <ph name="LOCATION" /></translation>
@@ -3097,7 +3096,6 @@
 <translation id="389901847090970821">কীব’ৰ্ড বাছনি কৰক</translation>
 <translation id="3900966090527141178">পাছৱর্ডসমূহ ৰপ্তানি কৰক</translation>
 <translation id="3903187154317825986">বিল্ট-ইন কীব’ৰ্ড</translation>
-<translation id="3903191712482985591">প্লে’বুক যোগ দিয়ক</translation>
 <translation id="3904326018476041253">অৱস্থান সেৱাসমূহ</translation>
 <translation id="3904849010307028014">ছাইট এটাৰ সৈতে আপোনাৰ ভাব-বিনিময়ৰ ভিত্তিত, যেনে নিয়মিতভাৱে একাউণ্ট এটাত ছাইন ইন কৰা ইত্যাদি, ছাইটটোৱে আপোনাৰ ব্ৰাউজাৰত এটা বিশ্বস্ত ট’কেন প্ৰদান কৰিব পাৰে। পাছত, আপুনি চোৱা অন্য ছাইটে যদি পৰীক্ষা কৰি এনে বিশ্বস্ত ট’কেন দেখা পায়, তেন্তে সেইবিলাকে আপোনাক ব’টৰ সলনি ব্যক্তি হিচাপে গণ্য কৰাৰ অধিক সম্ভাৱনা থাকে।</translation>
 <translation id="3905761538810670789">এপ্ মেৰামতি কৰক</translation>
@@ -3748,6 +3746,7 @@
 <translation id="4541123282641193691">আপোনাৰ একাউণ্টটো সত্যাপন কৰিব পৰা নগ’ল। অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক অথবা আপোনাৰ Chromebook ৰিষ্টাৰ্ট কৰক।</translation>
 <translation id="4541662893742891060">এই প্ৰ'ফাইলটোৰ সৈতে সংযোগ কৰিবলৈ সক্ষম নহ'ল। কাৰিকৰী সহায়ৰ বাবে অনুগ্ৰহ কৰি আপোনাৰ বাহকৰ সৈতে যোগাযোগ কৰক।</translation>
 <translation id="4541706525461326392">প্ৰ’ফাইল আঁতৰাই থকা হৈছে। এই কামত কেইমিনিটমান সময় লাগিব পাৰে।</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{এই ডিভাইচটোত Google Password Managerলৈ ১ টা পাছৱৰ্ড আমদানি কৰা হৈছে}one{এই ডিভাইচটোত Google Password Managerলৈ {NUM_PASSWORDS} টা পাছৱৰ্ড আমদানি কৰা হৈছে}other{এই ডিভাইচটোত Google Password Managerলৈ {NUM_PASSWORDS} টা পাছৱৰ্ড আমদানি কৰা হৈছে}}</translation>
 <translation id="4542520061254486227">আপোনাৰ ডেটা <ph name="WEBSITE_1" /> আৰু <ph name="WEBSITE_2" />ত পঢ়ক</translation>
 <translation id="4543778593405494224">প্ৰমাণপত্ৰৰ পৰিচালক</translation>
 <translation id="4544174279960331769">ডিফ’ল্ট নীলা অৱতাৰ</translation>
@@ -5041,7 +5040,6 @@
 <translation id="5827733057563115968">পৰৱৰ্তী শব্দ পূৰ্বানুমান</translation>
 <translation id="5828545842856466741">প্ৰ’ফাইল যোগ কৰক...</translation>
 <translation id="5828633471261496623">প্ৰিণ্ট কৰি থকা হৈছে...</translation>
-<translation id="5828797982387013521">প্লে’বুক বাছনি কৰক</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> খুলিব নোৱাৰি</translation>
 <translation id="5830720307094128296">&amp;ইয়াৰ এটা ধৰণত পৃষ্ঠাটো ছেভ কৰক...</translation>
 <translation id="5832813618714645810">প্ৰ’ফাইল</translation>
@@ -5935,7 +5933,6 @@
 <translation id="6686665106869989887">টেবটো সোঁফালে নিয়া হ'ল</translation>
 <translation id="6686817083349815241">আপোনাৰ পাছৱৰ্ড ছেভ কৰক</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> লুকুৱাওক</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> পঢ়িবলৈ আৰু সলনি কৰিবলৈ অনুৰোধ কৰি থকা হৈছে:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" />ক কম্পিউটাৰ ব্যৱহাৰ কৰিবলৈ কওক। আপোনাৰ শিশুটিৰ কণ্ঠধ্বনিৰ মডেল সৃষ্টি কৰিবলৈ এই স্ক্ৰীনখনত তেওঁ কেইটামান বাক্যাংশ পঢ়িব।
     <ph name="BR" />
     যদি <ph name="SUPERVISED_USER_NAME" />ক পঢ়াৰ ক্ষেত্ৰ সহায় লাগে, আপোনাৰ শিশুটিক আপুনি পঢ়ি যোৱাৰ লগে লগে কৈ যাবলৈ দিয়ক। মাইকটোৰ পৰা আঁতৰি সৰুকৈ কওক যাতে Assistantএ আপোনাৰ সলনি আপোনাৰ শিশুৰ কণ্ঠধ্বনি জানিব পাৰে।</translation>
@@ -6237,6 +6234,7 @@
 <translation id="6968288415730398122">স্ক্ৰীণ লক কনফিগাৰ কৰিবলৈ নিজৰ পাছৱৰ্ড দিয়ক</translation>
 <translation id="6969047215179982698">Nearby Share সুবিধাটো অফ কৰক</translation>
 <translation id="6970480684834282392">ষ্টার্ট আপৰ প্ৰকাৰ</translation>
+<translation id="6970543303783413625">পাছৱৰ্ড আমদানি কৰিব নোৱাৰি। আপুনি এবাৰত মাত্ৰ <ph name="COUNT" /> টালৈকে পাছৱৰ্ড আমদানি কৰিব পাৰে।</translation>
 <translation id="6970856801391541997">নির্দিষ্ট পৃষ্ঠা প্ৰিণ্ট কৰক</translation>
 <translation id="6970861306198150268">আপুনি এই ছাইটটোৰ বাবে নিজৰ বৰ্তমানৰ পাছৱৰ্ডটো ছেভ কৰাটো নিশ্চিত কৰক</translation>
 <translation id="6972180789171089114">অডিঅ’/ভিডিঅ’</translation>
@@ -6416,6 +6414,7 @@
 <translation id="7138678301420049075">অন্য</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" />এ আপোনাৰ মাইক্ৰ’ফ’ন ব্যৱহাৰ কৰি আছে</translation>
 <translation id="7141105143012495934">আপোনাৰ একাউণ্টৰ সবিশেষ পুনৰুদ্ধাৰ কৰিব নোৱাৰাৰ বাবে ছাইন ইন কৰিব পৰা নগ’ল। অনুগ্ৰহ কৰি আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক বা আকৌ চেষ্টা কৰক।</translation>
+<translation id="7141844554192012199">চেকআপ</translation>
 <translation id="7144878232160441200">পুনৰ চেষ্টা কৰক</translation>
 <translation id="7149839598364933473">এই ডিভাইচটো এটা <ph name="DEVICE_OS" /> ডিভাইচলৈ ৰূপান্তৰ কৰক।</translation>
 <translation id="7149893636342594995">যোৱা ২৪ ঘণ্টাত</translation>
@@ -6468,6 +6467,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{পৃষ্ঠাৰ বাহিৰ হওক}one{পৃষ্ঠাসমূহৰ বাহিৰ হওক}other{পৃষ্ঠাসমূহৰ বাহিৰ হওক}}</translation>
 <translation id="7207457272187520234">ব্যৱহাৰ আৰু ডায়গনষ্টিক ডেটা পঠিয়াওক। এই ডিভাইচটোৱে বর্তমান স্বয়ংক্ৰিয়ভাৱে Googleলৈ ডায়গন’ষ্টিক, ডিভাইচ আৰু এপ্ ব্যৱহাৰৰ ডেটা পঠিয়াই আছে। এই কার্যটোৱে ছিষ্টেম আৰু এপৰ স্থিৰতা আৰু অন্য উন্নয়নত সহায় কৰিব। কিছুমান একত্ৰিত ডেটাই Google এপ্‌ আৰু Android বিকাশকৰ্তাৰ দৰে অংশীদাৰকো সহায় কৰিব। এই ছেটিংটো গৰাকীয়ে বলৱৎ কৰিছে। যদি আপোনাৰ অতিৰিক্ত ৱেব আৰু এপৰ কার্যকলাপৰ ছেটিংটো অন কৰা হয় তেন্তে এই ডেটাখিনি আপোনাৰ Google একাউণ্টত ছেভ কৰা হ’ব পাৰে।</translation>
 <translation id="7207631048330366454">এপসমূহ সন্ধান কৰক</translation>
+<translation id="7210471695184432500">এই ডিভাইচটোত Google Password Managerলৈ পাছৱৰ্ড আমদানি কৰিবলৈ, এটা CSV ফাইল বাছনি কৰক</translation>
 <translation id="7210499381659830293">এক্সটেনশ্বন প্ৰিণ্টাৰ</translation>
 <translation id="7211783048245131419">এই পৰ্যন্ত কোনো ছুইচ আবণ্টন কৰা হোৱা নাই</translation>
 <translation id="7212097698621322584">আপোনাৰ বৰ্তমানৰ পিনটো সলনি কৰিবলৈ সেইটো দিয়ক। আপুনি যদি নিজৰ পিনটো নাজানে, আপুনি সুৰক্ষা চাবিটো ৰিছেট কৰি এটা নতুন পিন সৃষ্টি কৰিব লাগিব।</translation>
@@ -7191,7 +7191,6 @@
 <translation id="7898725031477653577">সদায় অনুবাদ কৰক</translation>
 <translation id="7901405293566323524">ফ’ন হাব</translation>
 <translation id="7903290522161827520">ব্ৰাউজাৰৰ উপাদানসমূহ চাব বিচাৰিছে নেকি? ইয়ালৈ যাওক</translation>
-<translation id="7903345046358933331">পৃষ্ঠাটোৱে সঁহাৰি জনোৱা নাই। আপুনি পৃষ্ঠাটোৱে সঁহাৰি জনোৱালৈ অপেক্ষা কৰিব বা ইয়াক বন্ধ কৰিব পাৰে।</translation>
 <translation id="7903429136755645827">আপোনাৰ গে’মৰ নিয়ন্ত্ৰণসমূহ কাষ্টমাইজ কৰিবলৈ ক্লিক কৰক</translation>
 <translation id="7903742244674067440">সেই কর্তৃপক্ষক চিনাক্ত কৰা প্ৰমাণপত্ৰ আপোনাৰ ফাইলত আছে</translation>
 <translation id="7903925330883316394">ইউটিলিটি: <ph name="UTILITY_TYPE" /></translation>
@@ -7526,6 +7525,7 @@
 <translation id="8206859287963243715">চেলুলাৰ</translation>
 <translation id="8208216423136871611">ছেভ নকৰিব</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{নতুন জাননী}one{# টা নতুন জাননী}other{# টা নতুন জাননী}}</translation>
+<translation id="821119981794423735"><ph name="USER_EMAIL" />ৰ বাবে Google Password Managerলৈ পাছৱৰ্ড আমদানি কৰিবলৈ, এটা CSV ফাইল বাছনি কৰক</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ডাউনল’ড হৈ আছে}one{ডাউনল’ড হৈ আছে}other{ডাউনল’ড হৈ আছে}}</translation>
 <translation id="8213449224684199188">ফট’ ম’ডত ৰখা হৈছে</translation>
 <translation id="8214489666383623925">ফাইল খোলক...</translation>
@@ -8105,6 +8105,7 @@
 <translation id="8780123805589053431">Googleৰ পৰা প্ৰতিচ্ছবিৰ বিৱৰণ পাওক</translation>
 <translation id="8780443667474968681">কণ্ঠস্বৰৰ দ্বাৰা সন্ধান অফ কৰা হৈছে।</translation>
 <translation id="8781834595282316166">গোটটোত নতুন টেব</translation>
+<translation id="8781980678064919987">লিডখন বন্ধ কৰিলে বন্ধ কৰক</translation>
 <translation id="8782565991310229362">কিয়’স্ক এপ্লিকেশ্বনৰ লঞ্চ বাতিল কৰা হৈছে।</translation>
 <translation id="8783834180813871000">ব্লুটুথ পেয়াৰিং ক’ডটো টাইপ কৰক আৰু তাৰ পাছত ৰিটাৰ্ন অথবা এণ্টাৰ হেঁচক।</translation>
 <translation id="8784626084144195648">বিন কৰা গড়</translation>
@@ -8169,7 +8170,6 @@
 <translation id="8846132060409673887">এই কম্পিউটাৰটোৰ নিৰ্মাণকাৰী আৰু ম'ডেলৰ তথ্য পঢ়ক</translation>
 <translation id="8846163936679269230">ই-ছিমৰ প্ৰ'ফাইল ৰিছেট কৰক</translation>
 <translation id="8846239054091760429">ম’ন’ অডিঅ’, ষ্টাৰ্টআপ, লাইভ কেপশ্বন আৰু অধিক</translation>
-<translation id="8847523528195140327">ক’ভাৰটো বন্ধ কৰিলে ছাইন আউট কৰক</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">লুকুওৱা হৈছে</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> নামৰ ই-ছিম প্ৰ'ফাইল আঁতৰোৱাটো বাতিল কৰক</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb
index acf0bbff..b00ccc1 100644
--- a/chrome/app/resources/generated_resources_az.xtb
+++ b/chrome/app/resources/generated_resources_az.xtb
@@ -558,7 +558,6 @@
 <translation id="1536754031901697553">Ayrılır...</translation>
 <translation id="1537254971476575106">Tam ekran miqyası</translation>
 <translation id="15373452373711364">Böyük maus kursoru</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> <ph name="ORIGIN" /> saytını oxumaq və ya dəyişməyi tələb edir</translation>
 <translation id="1540605929960647700">Demo rejimini aktiv edin</translation>
 <translation id="1541346352678737112">Şəbəkə tapılmadı</translation>
 <translation id="1542137295869176367">Giriş datanız silinmədi</translation>
@@ -718,7 +717,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> domenindəki <ph name="USERNAME" /> üçün giriş məlumatı detalları</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> artırmasını əlavə etmək mümkün deyil</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> qaldı</translation>
-<translation id="1678794218766467608">Yuxu rejimində və ya qapaq bağlı olduqda kilidləyin</translation>
 <translation id="1679068421605151609">Gəlişdirici Alətləri</translation>
 <translation id="1679810534535368772">Çıxmaq istədiyinizə əminsiniz?</translation>
 <translation id="167983332380191032">İdarəetmə xidməti HTTP xətası göndərdi.</translation>
@@ -846,7 +844,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> heç vaxt göstərilməsin</translation>
 <translation id="1794791083288629568">Problemin həllində köməklik üçün əks əlaqə göndərin.</translation>
 <translation id="1795214765651529549">Klassiki istifadə edin</translation>
-<translation id="1796105431091975902">Əlavə etmək üçün Ansible Təlimat Kitabçası seçin</translation>
 <translation id="1796588414813960292">Səs tələb edən funksiyalar işləməyəcək</translation>
 <translation id="1797117170091578105">Chromebook klaviaturanızdan istifadə edərək oynayın. Xüsusi hərəkətlər üçün düymələri fərdiləşdirə bilərsiniz.</translation>
 <translation id="1800502858278951817">Heç bir artırma <ph name="SITE_NAME" /> saytını oxumaq və ya dəyişmək üçün icazə istəməyib</translation>
@@ -911,6 +908,7 @@
 <translation id="1842766183094193446">Demo rejimini aktiv etmək istədiyinizə əminsiniz?</translation>
 <translation id="1845727111305721124">Səs oxutmaq icazəsi verilib</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> çalışdırmaq üçün Control düyməsi ilə birlikdə klikləyin</translation>
+<translation id="1848219224579402567">Qapaq bağlı olan zaman hesabdan çıxın</translation>
 <translation id="184862733444771842">Funksiya Sorğusu</translation>
 <translation id="1849016657376805933">İStənilən HID cihazı</translation>
 <translation id="1849186935225320012">Bu səhifənin MIDI cihazlar üzərində tam nəzarəti var.</translation>
@@ -1018,7 +1016,6 @@
 <translation id="1941553344801134989">Versiya: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Düymə xəritəsini göstərin</translation>
 <translation id="1942128823046546853">Bütün veb saytlarda bütün datanızı oxumaq və dəyişdirmək</translation>
-<translation id="1942600407708803723">Qapaq bağlandıqda söndürülsün</translation>
 <translation id="1944528062465413897">Bluetooth birləşdirmə kodu:</translation>
 <translation id="1944921356641260203">Güncəllənmə tapıldı</translation>
 <translation id="1947136734041527201">Kimlik xidməti ilə sahib olduğunuz hesabdan istifadə edərək vebsaytlara daxil olmağa imkan verir</translation>
@@ -3085,7 +3082,6 @@
 <translation id="389901847090970821">Klaviatura seçin</translation>
 <translation id="3900966090527141178">Parolları eskport edin</translation>
 <translation id="3903187154317825986">Quraşdırılmış klaviatura</translation>
-<translation id="3903191712482985591">Təlimat kitabçası əlavə edin</translation>
 <translation id="3904326018476041253">Məkan Xidmətləri</translation>
 <translation id="3904849010307028014">Müntəzəm olaraq hesaba daxil olmaq kimi saytla qarşılıqlı əlaqəniz əsasında həmin sayt brauzerinizə güvən nişanı verə bilər. Daha sonra ziyarət etdiyiniz digər saytlar keçərli güvən nişanını yoxlayıb tapsalar, onlar sizə bot deyil, insan kimi yanaşacaqlar.</translation>
 <translation id="3905761538810670789">Tətbiqi bərpa edin</translation>
@@ -5028,7 +5024,6 @@
 <translation id="5827733057563115968">Növbəti söz proqnozu</translation>
 <translation id="5828545842856466741">Profil əlavə edin...</translation>
 <translation id="5828633471261496623">Çap edilir...</translation>
-<translation id="5828797982387013521">Təlimat kitabçası seçin</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> tətbiqini açmaq olmur</translation>
 <translation id="5830720307094128296">Səhifənin saxlanma formatı:</translation>
 <translation id="5832813618714645810">Profillər</translation>
@@ -5918,7 +5913,6 @@
 <translation id="6686665106869989887">Tab sağa köçürüldü</translation>
 <translation id="6686817083349815241">Parolunuzu yadda saxlayın</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> modulunu gizlədin</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> saytını oxumaq və dəyişmək tələb edilir:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> adlı istifadəçidən kompüterə keçməsini xahiş edin. Övladınız öz səs modelini yaratmaq üçün bu ekranda bir neçə cümlə səsləndirəcək.
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" /> adlı istifadəçinin oxumaqla bağlı köməyə ehtiyacı olsa, övladınızdan cümlələri sizdən sonra təkrar etməsini xahiş edin. Mikrofondan uzaqda pıçıltı ilə danışın ki, Assistent övladınızın əvəzinə sizin səsinizi öyrənməsin.</translation>
@@ -7177,7 +7171,6 @@
 <translation id="7898725031477653577">Həmişə tərcümə edin</translation>
 <translation id="7901405293566323524">Telefon Habı</translation>
 <translation id="7903290522161827520">Brauzer komponentləri axtarırsınız? Ziyarət edin</translation>
-<translation id="7903345046358933331">Səhifə cavab vermir. Səhifə cavab verənə kimi gözləyə və ya bağlaya bilərsiniz.</translation>
 <translation id="7903429136755645827">Oyun nəzarətlərinizi fərdiləşdirmək üçün klikləyin</translation>
 <translation id="7903742244674067440">Bu sertifikat təşkilatlarını müəyyən edən sertifikatlarınız var</translation>
 <translation id="7903925330883316394">Utilit: <ph name="UTILITY_TYPE" /></translation>
@@ -8089,6 +8082,7 @@
 <translation id="8780123805589053431">Google'dan şəkil təsvirlərini əldə edin</translation>
 <translation id="8780443667474968681">Səsli axtarış deaktiv edilib.</translation>
 <translation id="8781834595282316166">Qrupa Yeni Tab</translation>
+<translation id="8781980678064919987">Qapaq bağlı olan zaman söndürün</translation>
 <translation id="8782565991310229362">Kiosk tətbiqinin başladılması ləğv edildi.</translation>
 <translation id="8783834180813871000">Bluetooth birləşdirmə kodunu yazın, sonra Qayıdın və ya Enter düyməsini basın.</translation>
 <translation id="8784626084144195648">Səbətə atılmış ortalama</translation>
@@ -8153,7 +8147,6 @@
 <translation id="8846132060409673887">Bu kompüterin istehsalçı və modelini oxuyun</translation>
 <translation id="8846163936679269230">eSIM profillərini sıfırlayın</translation>
 <translation id="8846239054091760429">Mono audio, başlanğıc, Canlı Altyazı və s</translation>
-<translation id="8847523528195140327">Qapaq bağlandıqda hesabdan çıxsın</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Gizli</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> adlı eSIM profilinin silinməsini ləğv edin</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb
index 12bc494..18b74d6 100644
--- a/chrome/app/resources/generated_resources_be.xtb
+++ b/chrome/app/resources/generated_resources_be.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">Адключэнне...</translation>
 <translation id="1537254971476575106">Лупа для поўнаэкраннага рэжыму</translation>
 <translation id="15373452373711364">Вялікі курсор мышы</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> запытвае дазвол чытаць і змяняць сайт <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Уключыць дэманстрацыйны рэжым</translation>
 <translation id="1541346352678737112">Сетак не знойдзена</translation>
 <translation id="1542137295869176367">Не ўдалося абнавіць даныя для ўваходу</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">Звесткі пра ўліковыя даныя карыстальніка <ph name="USERNAME" /> (дамен: <ph name="DOMAIN" />)</translation>
 <translation id="1677306805708094828">Не ўдаецца дадаць наступны элемент: <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Засталося <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Блакіраваць у рэжыме сну і пры закрытым вечку</translation>
 <translation id="1679068421605151609">Інструменты распрацоўшчыка</translation>
 <translation id="1679810534535368772">Сапраўды хочаце выйсці?</translation>
 <translation id="167983332380191032">Сэрвіс кіравання адправіў памылку HTTP.</translation>
@@ -853,7 +851,6 @@
 <translation id="1794051631868188691">Ніколі не паказваць: <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Адправіць водгук, каб дапамагчы нам вырашыць гэту праблему.</translation>
 <translation id="1795214765651529549">Выкарыстоўваць класічную тэму</translation>
-<translation id="1796105431091975902">Выберыце дапаможнік Ansible, які трэба дадаць</translation>
 <translation id="1796588414813960292">Функцыі, для якіх патрэбны гук, не будуць працаваць</translation>
 <translation id="1797117170091578105">Гуляйце, выкарыстоўваючы клавіятуру Chromebook. Клавішы можна наладзіць такім чынам, каб яны выконвалі канкрэтныя дзеянні.</translation>
 <translation id="1800502858278951817">Ні адно пашырэнне не запытвала дазвол чытаць і змяняць сайт <ph name="SITE_NAME" /></translation>
@@ -918,6 +915,7 @@
 <translation id="1842766183094193446">Сапраўды ўключыць дэманстрацыйны рэжым?</translation>
 <translation id="1845727111305721124">Дазволена прайграваць гук</translation>
 <translation id="1846308012215045257">Каб запусціць <ph name="PLUGIN_NAME" />, націсніце камбінацыю Ctrl + Левая клавіша мышы</translation>
+<translation id="1848219224579402567">Выходзіць з сістэмы, калі вечка закрываецца</translation>
 <translation id="184862733444771842">Запыт функцыі</translation>
 <translation id="1849016657376805933">Усе прылады HID</translation>
 <translation id="1849186935225320012">Гэта старонка мае поўны кантроль над прыладамі MIDI.</translation>
@@ -1025,7 +1023,6 @@
 <translation id="1941553344801134989">Версія: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Паказаць вызначэнне клавіш</translation>
 <translation id="1942128823046546853">Праглядаць і змяняць усе вашы даныя на ўсіх вэб-сайтах</translation>
-<translation id="1942600407708803723">Пры закрыцці вечка выключаць прыладу</translation>
 <translation id="1944528062465413897">Код спалучэння па Bluetooth</translation>
 <translation id="1944921356641260203">Знойдзена абнаўленне</translation>
 <translation id="1947136734041527201">Дазваляе ўваходзіць на вэб-сайты праз уліковы запіс сэрвісу ідэнтыфікацыі</translation>
@@ -3089,7 +3086,6 @@
 <translation id="389901847090970821">Выбар клавіятуры</translation>
 <translation id="3900966090527141178">Экспарт пароляў</translation>
 <translation id="3903187154317825986">Убудаваная клавіятура</translation>
-<translation id="3903191712482985591">Дадайце дапаможнік Ansible</translation>
 <translation id="3904326018476041253">Службы геалакацыі</translation>
 <translation id="3904849010307028014">У залежнасці ад характару вашага ўзаемадзеяння з сайтам (напрыклад, пры рэгулярным уваходзе ва ўліковы запіс), ён можа выдаць вашаму браўзеру токен даверу. Пазней, калі іншыя сайты, якія вы наведваеце, будуць знаходзіць сапраўдны токен даверу, яны з большай імавернасцю распазнаюць вас як чалавека, а не бота.</translation>
 <translation id="3905761538810670789">Выправіць праграму</translation>
@@ -5034,7 +5030,6 @@
 <translation id="5827733057563115968">Прагназаванне наступнага слова</translation>
 <translation id="5828545842856466741">Дадаць профіль...</translation>
 <translation id="5828633471261496623">Ідзе друк...</translation>
-<translation id="5828797982387013521">Выбраць дапаможнік</translation>
 <translation id="5830205393314753525">Не ўдалося адкрыць праграму "<ph name="APP_NAME" />"</translation>
 <translation id="5830720307094128296">Захаваць старонку &amp;як...</translation>
 <translation id="5832813618714645810">Профілі</translation>
@@ -5932,7 +5927,6 @@
 <translation id="6686665106869989887">Укладка перамешчана ўправа</translation>
 <translation id="6686817083349815241">Захаваць пароль</translation>
 <translation id="6687079240787935001">Схаваць: <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Адпраўляецца запыт на чытанне і змяненне сайта <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Папрасіце карыстальніка <ph name="SUPERVISED_USER_NAME" /> падысці да камп'ютара. Ваша дзіця павінна прачытаць некалькі фраз на экране, каб стварыць узор голасу.
     <ph name="BR" />
 Калі <ph name="SUPERVISED_USER_NAME" /> не ўмее чытаць, няхай паўторыць за вамі. Прашапчыце фразы дзіцяці аддаліўшыся ад мікрафона, каб Памочнік запомніў голас вашага дзіцяці, а не ваш.</translation>
@@ -7191,7 +7185,6 @@
 <translation id="7898725031477653577">Заўсёды перакладаць</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Шукаеце кампаненты браўзера? Наведайце старонку</translation>
-<translation id="7903345046358933331">Старонка перастала адказваць на запыты. Можна пачакаць, пакуль яна пачне адказваць, або закрыць яе.</translation>
 <translation id="7903429136755645827">Націсніце, каб наладзіць кіраванне гульнёй</translation>
 <translation id="7903742244674067440">У вас захоўваюцца сертыфікаты, якія ідэнтыфікуюць гэтыя цэнтры сертыфікацыі</translation>
 <translation id="7903925330883316394">Утыліта: <ph name="UTILITY_TYPE" /></translation>
@@ -8108,6 +8101,7 @@
 <translation id="8780123805589053431">Атрымліваць апісанні відарысаў ад Google</translation>
 <translation id="8780443667474968681">Галасавы пошук выключаны.</translation>
 <translation id="8781834595282316166">Стварыць у групе новую ўкладку</translation>
+<translation id="8781980678064919987">Выключаць прыладу, калі вечка закрываецца</translation>
 <translation id="8782565991310229362">Запуск праграмы-кіёска скасаваны.</translation>
 <translation id="8783834180813871000">Увядзіце код спалучэння Bluetooth, затым націсніце "Назад" або "Увод".</translation>
 <translation id="8784626084144195648">Сярэдняе па аб'яднаных даных</translation>
@@ -8172,7 +8166,6 @@
 <translation id="8846132060409673887">Чытаць даныя пра вытворцу і мадэль гэтага камп'ютара</translation>
 <translation id="8846163936679269230">Скід профіляў eSIM-карты</translation>
 <translation id="8846239054091760429">Монафанічны гук, запуск, функцыя "Імгненныя субцітры" і не толькі</translation>
-<translation id="8847523528195140327">Пры закрыцці вечка выходзіць з сістэмы</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Схавана</translation>
 <translation id="8849219423513870962">Скасаваць выдаленне профілю eSIM-карты "<ph name="PROFILE_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index f3aee96a..d13e8ffc 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">Връзката се прекратява...</translation>
 <translation id="1537254971476575106">Лупа за увеличаване на целия екран</translation>
 <translation id="15373452373711364">Голям курсор на мишката</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> иска да чете и променя <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Активиране на демонстрационния режим</translation>
 <translation id="1541346352678737112">Няма намерена мрежа</translation>
 <translation id="1542137295869176367">Данните ви за вход не бяха актуализирани</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022">Подробности за идентификационните данни за <ph name="USERNAME" /> в домейна <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Не може да се добави <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Оставащо време: <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Заключване в спящ режим или при затваряне на капака</translation>
 <translation id="1679068421605151609">Инструменти за програмисти</translation>
 <translation id="1679810534535368772">Наистина ли искате да излезете?</translation>
 <translation id="167983332380191032">Услугата за управление изпрати HTTP грешка.</translation>
@@ -857,7 +855,6 @@
 <translation id="1794051631868188691">Без показване на <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Изпращане на отзиви, за да ни помогнете да отстраним този проблем.</translation>
 <translation id="1795214765651529549">Използване на класическата тема</translation>
-<translation id="1796105431091975902">Изберете наръчник за Ansible, който да добавите</translation>
 <translation id="1796588414813960292">Функциите, за които е нужен звук, няма да работят</translation>
 <translation id="1797117170091578105">Играйте с клавиатурата на своя Chromebook. Можете да персонализирате клавишите за конкретни действия.</translation>
 <translation id="1800502858278951817">Нито едно разширение не е поискало да чете и променя <ph name="SITE_NAME" /></translation>
@@ -922,6 +919,7 @@
 <translation id="1842766183094193446">Наистина ли искате да активирате демонстрационния режим?</translation>
 <translation id="1845727111305721124">Сайтове с разрешение за възпроизвеждане на звук</translation>
 <translation id="1846308012215045257">Задръжте „Ctrl“ и кликнете, за да стартирате <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Излизане от профила при затваряне на капака</translation>
 <translation id="184862733444771842">Заявка за функция</translation>
 <translation id="1849016657376805933">Всякакви HID устройства</translation>
 <translation id="1849186935225320012">Тази страница има пълен контрол над MIDI устройствата.</translation>
@@ -1030,7 +1028,6 @@
 <translation id="1941553344801134989">Версия: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Показване на съпоставянето на клавишите</translation>
 <translation id="1942128823046546853">да чете и променя всичките ви данни в уебсайтовете</translation>
-<translation id="1942600407708803723">Изключване при затваряне на капака</translation>
 <translation id="1944528062465413897">Код за сдвояване през Bluetooth:</translation>
 <translation id="1944921356641260203">Намерена е актуализация</translation>
 <translation id="1947136734041527201">Позволява ви да влизате в уебсайтове посредством профила си в услуга за идентифициране</translation>
@@ -1722,6 +1719,7 @@
 <translation id="2568774940984945469">Контейнер на инфолента</translation>
 <translation id="2571655996835834626">Промяна на настройките, които контролират достъпа на уебсайтовете до функции като „бисквитки“, JavaScript, приставки, геолокация, микрофон, камера и др.</translation>
 <translation id="2572032849266859634">Предоставен е достъп само за четене до „<ph name="VOLUME_NAME" />“.</translation>
+<translation id="2573276323521243649">Връщане от страницата за избор на аватар</translation>
 <translation id="2573417407488272418">Преди надстройването създайте резервно копие на приложенията и файловете във „Файлове &gt; Моите файлове“.</translation>
 <translation id="2573831315551295105">Задаване на превключвател за „<ph name="ACTION" />“</translation>
 <translation id="2575247648642144396">Тази икона ще бъде видима, когато разширението може да изпълнява действия върху текущата страница. Използвайте го, като кликнете върху иконата или натиснете „<ph name="EXTENSION_SHORTCUT" />“.</translation>
@@ -3097,7 +3095,6 @@
 <translation id="389901847090970821">Изберете клавиатура</translation>
 <translation id="3900966090527141178">Експортиране на паролите</translation>
 <translation id="3903187154317825986">Вградена клавиатура</translation>
-<translation id="3903191712482985591">Добавяне на наръчник</translation>
 <translation id="3904326018476041253">Услуги за местоположение</translation>
 <translation id="3904849010307028014">Въз основа на взаимодействието ви с даден сайт, като например редовно влизане в профил, той може да изпрати означение за доверие до браузъра ви. Ако след време други посещавани от вас сайтове потърсят и открият валидно означение за доверие, има по-голяма вероятност да ви третират като човек, а не като робот.</translation>
 <translation id="3905761538810670789">Поправяне на приложението</translation>
@@ -5044,7 +5041,6 @@
 <translation id="5827733057563115968">Предвиждане на следващата дума</translation>
 <translation id="5828545842856466741">Добавяне на потребителски профил...</translation>
 <translation id="5828633471261496623">Отпечатва се...</translation>
-<translation id="5828797982387013521">Избиране на наръчник</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> не може да се отвори</translation>
 <translation id="5830720307094128296">Запазване на страницата &amp;като...</translation>
 <translation id="5832813618714645810">Потребителски профили</translation>
@@ -5936,7 +5932,6 @@
 <translation id="6686665106869989887">Разделът бе преместен надясно</translation>
 <translation id="6686817083349815241">Запазване на паролата ви</translation>
 <translation id="6687079240787935001">Скриване на <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Заявява се четене и промяна на <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Помолете <ph name="SUPERVISED_USER_NAME" /> да дойде до компютъра. Детето ви ще прочете няколко фрази на този екран, за да бъде създаден гласовият му модел.
     <ph name="BR" />
     Ако <ph name="SUPERVISED_USER_NAME" /> се нуждае от помощ с четенето, може да повтаря след вас. Шепнете далеч от микрофона, така че Асистент да научи гласа на детето ви вместо вашия.</translation>
@@ -6418,6 +6413,7 @@
 <translation id="7138678301420049075">Друго</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> използва микрофона ви</translation>
 <translation id="7141105143012495934">Влизането не бе успешно, тъй като данните за профила ви не можаха да се извлекат. Моля, свържете се с администратора си или опитайте отново.</translation>
+<translation id="7141844554192012199">Проверка</translation>
 <translation id="7144878232160441200">Повторен опит</translation>
 <translation id="7149839598364933473">Преобразуване на това устройство в такова с <ph name="DEVICE_OS" />.</translation>
 <translation id="7149893636342594995">Последните 24 часа</translation>
@@ -7195,7 +7191,6 @@
 <translation id="7898725031477653577">Винаги да се превежда</translation>
 <translation id="7901405293566323524">Център за телефоните</translation>
 <translation id="7903290522161827520">Търсите компонентите на браузъра? Посетете</translation>
-<translation id="7903345046358933331">Страницата е блокирала. Можете да изчакате да се възстанови или да я затворите.</translation>
 <translation id="7903429136755645827">Кликнете, за да персонализирате контролите си за игри</translation>
 <translation id="7903742244674067440">Разполагате със сертификати, които идентифицират тези сертифициращи органи</translation>
 <translation id="7903925330883316394">Помощен процес: <ph name="UTILITY_TYPE" /></translation>
@@ -8110,6 +8105,7 @@
 <translation id="8780123805589053431">Изтегляне от Google на описания за изображенията</translation>
 <translation id="8780443667474968681">Функцията за гласово търсене е изключена.</translation>
 <translation id="8781834595282316166">Нов раздел в групата</translation>
+<translation id="8781980678064919987">Изключване при затваряне на капака</translation>
 <translation id="8782565991310229362">Стартирането на павилионното приложение е анулирано.</translation>
 <translation id="8783834180813871000">Въведете кода за сдвояване през Bluetooth, след което натиснете Return или Enter.</translation>
 <translation id="8784626084144195648">Средна стойност при групирани данни</translation>
@@ -8174,7 +8170,6 @@
 <translation id="8846132060409673887">Четене на производителя и модела на този компютър</translation>
 <translation id="8846163936679269230">Нулиране на потребителските профили на електронната SIM карта</translation>
 <translation id="8846239054091760429">Монозвук, стартиране, „Надписи на живо“ и др.</translation>
-<translation id="8847523528195140327">Излизане от профила при затваряне на капака</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Скрито</translation>
 <translation id="8849219423513870962">Анулиране на премахването на потребителския профил (<ph name="PROFILE_NAME" />) на електронната SIM карта</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index d376ab12..13923b0 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -278,6 +278,7 @@
 <translation id="125220115284141797">ডিফল্ট</translation>
 <translation id="1252987234827889034">প্রোফাইল ত্রুটি ঘটেছে</translation>
 <translation id="1254593899333212300">সরাসরি ইন্টারনেট সংযোগ</translation>
+<translation id="1257336506558170607">বেছে নেওয়া সার্টিফিকেট এক্সপোর্ট করুন</translation>
 <translation id="1258491128795710625">নতুন কী আছে</translation>
 <translation id="1259152067760398571">গতকাল নিরাপত্তা সংক্রান্ত পরীক্ষা চালানো হয়েছে</translation>
 <translation id="1260451001046713751"><ph name="HOST" /> থেকে সবসময় পপ-আপ এবং রিডাইরেক্টের অনুমতি দিন</translation>
@@ -564,7 +565,6 @@
 <translation id="1536754031901697553">ডিসকানেক্ট করা হচ্ছে...</translation>
 <translation id="1537254971476575106">ফুলস্ক্রিন ম্যাগনিফায়ার</translation>
 <translation id="15373452373711364">বড় মাউস কার্সার</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> <ph name="ORIGIN" /> পড়ার এবং পরিবর্তন করার অনুরোধ করছে</translation>
 <translation id="1540605929960647700">ডেমো মোড চালু করুন</translation>
 <translation id="1541346352678737112">কোনও নেটওয়ার্ক পাওয়া যায়নি</translation>
 <translation id="1542137295869176367">আপনার সাইন-ইন ডেটা আপডেট করা যায়নি</translation>
@@ -726,7 +726,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" />-এ <ph name="USERNAME" />-এর জন্য ক্রেডেনশিয়াল সংক্রান্ত বিবরণ</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> যোগ করা যায়নি</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> বাকি আছে</translation>
-<translation id="1678794218766467608">স্লিপ মোডে বা কভার বন্ধ হয়ে গেলে লক করুন</translation>
 <translation id="1679068421605151609">ডেভেলপার টুল</translation>
 <translation id="1679810534535368772">আপনি কি বেরিয়ে আসতে চান?</translation>
 <translation id="167983332380191032">ম্যানেজমেন্ট পরিষেবা HTTP সমস্যা পাঠিয়েছে।</translation>
@@ -862,7 +861,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> কখনও দেখতে চাই না</translation>
 <translation id="1794791083288629568">এই সমস্যা সমাধানে আমাদের সাহায্য করতে প্রতিবার্তা পাঠান।</translation>
 <translation id="1795214765651529549">ক্লাসিক ব্যবহার করুন</translation>
-<translation id="1796105431091975902">যোগ করার জন্য কোনও একটি Ansible প্লেবুক বেছে নিন</translation>
 <translation id="1796588414813960292">যেসব ফিচার ব্যবহার করার জন্য সাউন্ড প্রয়োজন সেগুলি কাজ করবে না</translation>
 <translation id="1797117170091578105">আপনার Chromebook কীবোর্ডের সাহায্যে খেলুন। নির্দিষ্ট অ্যাকশনের জন্য আপনি 'কী' কাস্টমাইজ করতে পারবেন।</translation>
 <translation id="1800502858278951817">কোনও এক্সটেনশন পড়ার এবং <ph name="SITE_NAME" />-এ পরিবর্তন করার অনুরোধ করা হয়নি</translation>
@@ -927,6 +925,7 @@
 <translation id="1842766183094193446">আপনি কি ডেমো মোড চালু করতে চান?</translation>
 <translation id="1845727111305721124">সাউন্ড চালানোর অনুমতি দেওয়া হয়েছে</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> চালানোর জন্য Control-ক্লিক করুন</translation>
+<translation id="1848219224579402567">লিড বন্ধ থাকা আবস্থায় সাইন-আউট করুন</translation>
 <translation id="184862733444771842">ফিচারের জন্য অনুরোধ</translation>
 <translation id="1849016657376805933">যেকোনও HID ডিভাইস</translation>
 <translation id="1849186935225320012">এই পৃষ্ঠাটির MIDI ডিভাইসগুলির উপর সম্পূর্ণ নিয়ন্ত্রণ আছে৷</translation>
@@ -1035,7 +1034,6 @@
 <translation id="1941553344801134989">ভার্সন: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">'কী ম্যাপিং' দেখান</translation>
 <translation id="1942128823046546853">সমস্ত ওয়েবসাইটে আপনার ডেটা পড়তে ও পরিবর্তন করতে পারে</translation>
-<translation id="1942600407708803723">ডিভাইসের কভার বন্ধ করলে শাট ডাউন হয়ে যাবে</translation>
 <translation id="1944528062465413897">ব্লুটুথের সাথে পেয়ার করার জন্য কোড:</translation>
 <translation id="1944921356641260203">আপডেট পাওয়া গেছে</translation>
 <translation id="1947136734041527201">কোনও পরিচিতি পরিষেবার সাথে যুক্ত আপনারই কোনও অ্য়াকাউন্ট ব্যবহার করে আপনাকে ওয়েবসাইটগুলিতে সাইন-ইন করতে দেয়</translation>
@@ -3102,7 +3100,6 @@
 <translation id="389901847090970821">কীবোর্ড বেছে নিন</translation>
 <translation id="3900966090527141178">পাসওয়ার্ড এক্সপোর্ট করুন</translation>
 <translation id="3903187154317825986">আগে থেকেই তৈরি করা কীবোর্ড</translation>
-<translation id="3903191712482985591">প্লেবুক যোগ করুন</translation>
 <translation id="3904326018476041253">লোকেশন ভিত্তিক পরিষেবা</translation>
 <translation id="3904849010307028014">একটি সাইটের সাথে আপনার ইন্টার‌্যাকশনের উপর ভিত্তি করে, যেমন একটি অ্যাকাউন্টে নিয়মিত সাইন-ইন করা ইত্যাদি, সেই সাইটটি আপনার ব্রাউজারে একটি ট্রাস্ট টোকেন ইস্যু করতে পারে। পরবর্তীকালে আপনার ভিজিট করা অন্য়ান্য সাইট কোনও ট্রাস্ট টোকেন খুঁজে পেলে, তারা আপনাকে মানুষই ভাববে, কোনও বট নয়।</translation>
 <translation id="3905761538810670789">অ্যাপ্লিকেশান মেরামত করুন</translation>
@@ -5050,7 +5047,6 @@
 <translation id="5827733057563115968">পরবর্তী শব্দ সনাক্তকরণ</translation>
 <translation id="5828545842856466741">প্রোফাইল যোগ করুন...</translation>
 <translation id="5828633471261496623">মুদ্রন হচ্ছে...</translation>
-<translation id="5828797982387013521">প্লেবুক বেছে নিন</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> খোলা যাচ্ছে না</translation>
 <translation id="5830720307094128296">&amp;পৃষ্ঠা সেভ করুন...</translation>
 <translation id="5832813618714645810">প্রোফাইল</translation>
@@ -5945,7 +5941,6 @@
 <translation id="6686665106869989887">ট্যাব ডানদিকে সরে গেছে</translation>
 <translation id="6686817083349815241">আপনার পাসওয়ার্ড সেভ করুন</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> লুকান</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> পড়ার এবং পরিবর্তন করার জন্য অনুরোধ করা হচ্ছে:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" />-কে কম্পিউটারের কাছে আসতে বলুন। ভয়েস মডেল তৈরি করতে আপনার সন্তান স্ক্রিনে দেখতে পাওয়া কয়েকটি বাক্যাংশ পড়বে।
     <ph name="BR" />
     পড়ার সময় <ph name="SUPERVISED_USER_NAME" />-এর সাহায্যের প্রয়োজন হলে, আপনি প্রথমে রিডিং পড়ুন এবং সেটি শুনে তারপর তাকে বলতে বলুন। আপনি মাইকের সামনে পড়বেন না, যাতে Assistant আপনার সন্তানের ভয়েস শুনে সেভ করে রাখতে পারে, আপনারটা নয়।</translation>
@@ -7204,7 +7199,6 @@
 <translation id="7898725031477653577">সর্বদা অনুবাদ করুন</translation>
 <translation id="7901405293566323524">ফোন হাব</translation>
 <translation id="7903290522161827520">ব্রাউজার কম্পোনেন্ট খুঁজছেন? দেখুন</translation>
-<translation id="7903345046358933331">পৃষ্ঠাটি প্রতিক্রিয়াবিহীন হয়েছে। আপনি এটি প্রতিক্রিয়াযুক্ত হওয়ার জন্য অপেক্ষা করতে পারেন বা এটি বন্ধ করতে পারেন।</translation>
 <translation id="7903429136755645827">গেমের কন্ট্রোল কাস্টমাইজ করতে ক্লিক করুন</translation>
 <translation id="7903742244674067440">এই সার্টিফিকেটের কর্তৃপক্ষদের শনাক্ত করে এমন ফাইলের সার্টিফিকেটগুলি আপনার কাছে রয়েছে</translation>
 <translation id="7903925330883316394">উপযোগিতা: <ph name="UTILITY_TYPE" /></translation>
@@ -8120,6 +8114,7 @@
 <translation id="8780123805589053431">Google থেকে ছবির বিবরণ পান</translation>
 <translation id="8780443667474968681">ভয়েস সার্চ বন্ধ করা হয়েছে।</translation>
 <translation id="8781834595282316166">গ্রুপে নতুন ট্যাব যোগ করুন</translation>
+<translation id="8781980678064919987">যখন ঢাকনাটি বন্ধ থাকবে তখন বন্ধ করুন</translation>
 <translation id="8782565991310229362">Kiosk অ্যাপ্লিকেশন লঞ্চ বাতিল হয়েছে৷</translation>
 <translation id="8783834180813871000">ব্লুটুথ পেয়ার করার কোড টাইপ করুন, তারপরে 'ফিরে আসুন' বা 'এন্টার করুন' বোতামে প্রেস করুন।</translation>
 <translation id="8784626084144195648">হাজার প্রতি গড়</translation>
@@ -8184,7 +8179,6 @@
 <translation id="8846132060409673887">এই কম্পিউটারের প্রস্তুতকারক এবং মডেলটি পড়ুন</translation>
 <translation id="8846163936679269230">eSIM প্রোফাইল রিসেট করুন</translation>
 <translation id="8846239054091760429">মোনো অডিও, স্টার্টআপ, 'লাইভ ক্যাপশন' ও আরও অনেক কিছু</translation>
-<translation id="8847523528195140327">ডিভাইসের কভার বন্ধ করলে সাইন-আউট হয়ে যাবে</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">লুকানো আছে</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> নামের ই-সিম প্রোফাইল সরানোর কাজটি বাতিল করুন</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 62f1080e..704d3df 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -565,7 +565,6 @@
 <translation id="1536754031901697553">Prekidanje veze…</translation>
 <translation id="1537254971476575106">Povećalo za cijeli ekran</translation>
 <translation id="15373452373711364">Veliki kursor miša</translation>
-<translation id="1539630663098418038">Ekstenzija <ph name="EXTENSIONS_REQUESTING_ACCESS" /> zahtijeva čitanje i izmjenu za: <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Omogućite demo-način</translation>
 <translation id="1541346352678737112">Nije pronađena nijedna mreža</translation>
 <translation id="1542137295869176367">Ažuriranje vaših podataka za prijavu nije uspjelo</translation>
@@ -727,7 +726,6 @@
 <translation id="1676902103953506022">Detalji o akreditivima za korisnika <ph name="USERNAME" /> na domeni <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Nije moguće dodati stavku <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Još <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Zaključaj u načinu rada mirovanja ili kada je poklopac zatvoren</translation>
 <translation id="1679068421605151609">Programerski alati</translation>
 <translation id="1679810534535368772">Jeste li sigurni da želite izaći?</translation>
 <translation id="167983332380191032">Usluga upravljanja je poslala HTTP grešku.</translation>
@@ -860,7 +858,6 @@
 <translation id="1794051631868188691">Nikad ne prikazuj <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Šaljite nam povratne informacije kako bismo riješili ovaj problem.</translation>
 <translation id="1795214765651529549">Koristi klasičnu</translation>
-<translation id="1796105431091975902">Odaberite vodič Ansible da dodate</translation>
 <translation id="1796588414813960292">Funkcije za koje je potreban zvuk neće funkcionirati</translation>
 <translation id="1797117170091578105">Igrajte pomoću Chromebookove tastature. Tipke možete prilagoditi određenim radnjama.</translation>
 <translation id="1800502858278951817">Nijedna ekstenzija nije zatražila da čita i mijenja <ph name="SITE_NAME" /></translation>
@@ -925,6 +922,7 @@
 <translation id="1842766183094193446">Jeste li sigurni da želite omogućiti demo-način?</translation>
 <translation id="1845727111305721124">Dozvoljeno je reproduciranje zvuka</translation>
 <translation id="1846308012215045257">Ctrl + klik da pokrenete dodatak <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Odjavi me kada se poklopac zatvori</translation>
 <translation id="184862733444771842">Zahtjev za funkcijom</translation>
 <translation id="1849016657376805933">Bilo koji HID uređaj</translation>
 <translation id="1849186935225320012">Ova stranica ima punu kontrolu nad MIDI uređajima.</translation>
@@ -1033,7 +1031,6 @@
 <translation id="1941553344801134989">Verzija: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Prikaži mapiranje tipki</translation>
 <translation id="1942128823046546853">čitati i promijeniti sve vaše podatke na svim web lokacijama</translation>
-<translation id="1942600407708803723">Isključi kada se zatvori poklopac</translation>
 <translation id="1944528062465413897">Kôd za uparivanje putem Bluetootha:</translation>
 <translation id="1944921356641260203">Ažuriranje je dostupno.</translation>
 <translation id="1947136734041527201">Omogućava vam prijavu na web lokacije pomoću računa koji imate na usluzi za potvrdu identiteta</translation>
@@ -1725,7 +1722,7 @@
 <translation id="2568774940984945469">Spremnik trake s informacijama</translation>
 <translation id="2571655996835834626">Mijenja postavke koje upravljaju pristupom web-lokacija značajkama kao što su kolačići, JavaScript, priključci, geolokacija, mikrofon, fotoaparat itd.</translation>
 <translation id="2572032849266859634">Jedinici <ph name="VOLUME_NAME" /> je dodijeljen pristup samo za čitanje.</translation>
-<translation id="2573276323521243649">Natrag sa stranice za odabir avatara</translation>
+<translation id="2573276323521243649">Nazad sa stranice za odabir avatara</translation>
 <translation id="2573417407488272418">Prije ove nadogradnje napravite sigurnosnu kopiju u Fajlovima &gt; Moji fajlovi.</translation>
 <translation id="2573831315551295105">Dodijelite prekidač za radnju "<ph name="ACTION" />"</translation>
 <translation id="2575247648642144396">Ikona će se vidjeti kada ekstenzija može djelovati na trenutnoj stranici. Da koristite ovu ekstenziju kliknite na ikonu ili pritisnite tipke prečice <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3100,7 +3097,6 @@
 <translation id="389901847090970821">Odaberite tastaturu</translation>
 <translation id="3900966090527141178">Izvezite lozinke</translation>
 <translation id="3903187154317825986">Ugrađena tastatura</translation>
-<translation id="3903191712482985591">Dodajte vodič</translation>
 <translation id="3904326018476041253">Usluge lokacije</translation>
 <translation id="3904849010307028014">Na osnovu vaše interakcije s web lokacijom, kao što je redovna prijava na račun, ta web lokacija može izdati token povjerenja vašem pregledniku. Kasnije, ako druga web lokacija koju ste posjetili provjeri i pronađe važeći token povjerenja, veća je vjerovatnoća da će vas tretirati kao stvarnu osobu, a ne kao bota.</translation>
 <translation id="3905761538810670789">Popravi aplikaciju</translation>
@@ -5046,7 +5042,6 @@
 <translation id="5827733057563115968">Predviđanje sljedeće riječi</translation>
 <translation id="5828545842856466741">Dodaj profil…</translation>
 <translation id="5828633471261496623">Štampanje...</translation>
-<translation id="5828797982387013521">Odaberite vodič</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> se ne može otvoriti</translation>
 <translation id="5830720307094128296">Sačuvaj stranicu &amp;kao...</translation>
 <translation id="5832813618714645810">Profili</translation>
@@ -5942,7 +5937,6 @@
 <translation id="6686665106869989887">Kartica je pomjerena udesno</translation>
 <translation id="6686817083349815241">Sačuvajte svoju lozinku</translation>
 <translation id="6687079240787935001">Sakrij: <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Zahtijevanje čitanja i promjene web lokacije <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Zamolite dijete (<ph name="SUPERVISED_USER_NAME" />) da dođe do računara. Dijete će pročitati nekoliko fraza s ovog ekrana da kreira svoj model glasa.
     <ph name="BR" />
     Ako <ph name="SUPERVISED_USER_NAME" /> treba pomoć s čitanjem, neka ponavlja tekst za vama. Šapćite tekst dalje od mikrofona tako da Asistent uči glas vašeg djeteta, a ne vaš.</translation>
@@ -7202,7 +7196,6 @@
 <translation id="7898725031477653577">Uvijek prevodi</translation>
 <translation id="7901405293566323524">Hub telefona</translation>
 <translation id="7903290522161827520">Tražite komponente preglednika? Posjetite</translation>
-<translation id="7903345046358933331">Stranica ne reagira. Možete sačekati da počne reagirati ili je zatvoriti.</translation>
 <translation id="7903429136755645827">Kliknite za prilagodbu kontrola igre</translation>
 <translation id="7903742244674067440">Imate potvrde o fajlu kojim se utvrđuje identitet ovih tijela za izdavanje potvrda</translation>
 <translation id="7903925330883316394">Uslužni proces: <ph name="UTILITY_TYPE" /></translation>
@@ -8119,6 +8112,7 @@
 <translation id="8780123805589053431">Preuzimanje opisa slika s Googlea</translation>
 <translation id="8780443667474968681">Glasovno pretraživanje je isključeno.</translation>
 <translation id="8781834595282316166">Nova kartica u grupi</translation>
+<translation id="8781980678064919987">Isključi računalo kada se zatvori poklopac</translation>
 <translation id="8782565991310229362">Pokretanje aplikacije za kiosk je otkazano.</translation>
 <translation id="8783834180813871000">Upišite kôd za uparivanje putem Bluetootha, a zatim pritisnite Return ili Enter.</translation>
 <translation id="8784626084144195648">Zbirni prosjek</translation>
@@ -8183,7 +8177,6 @@
 <translation id="8846132060409673887">Čitanje proizvođača i modela računara</translation>
 <translation id="8846163936679269230">Vrati eSIM profile na zadano</translation>
 <translation id="8846239054091760429">Mono zvuk, pokretanje, Automatski titlovi i još mnogo toga</translation>
-<translation id="8847523528195140327">Odjavi se kada se poklopac zatvori</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Skriveno</translation>
 <translation id="8849219423513870962">Otkazivanje uklanjanja profila eSIM-a pod nazivom <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 9583a4326..a713775 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">S'està desconnectant...</translation>
 <translation id="1537254971476575106">Lupa de pantalla completa</translation>
 <translation id="15373452373711364">Cursor del ratolí gran</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> està sol·licitant llegir i canviar <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Activa el mode de demostració</translation>
 <translation id="1541346352678737112">No s'ha trobat cap xarxa</translation>
 <translation id="1542137295869176367">Les dades d'inici de sessió no s'han pogut actualitzar</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022">Detalls de les credencials per a <ph name="USERNAME" /> a <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">No es pot afegir l'<ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Temps restant: <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Bloqueja en mode de repòs o quan es tanqui la tapa</translation>
 <translation id="1679068421605151609">Eines per a desenvolupadors</translation>
 <translation id="1679810534535368772">Confirmes que vols sortir?</translation>
 <translation id="167983332380191032">El servei de gestió ha enviat un error d'HTTP.</translation>
@@ -850,7 +848,6 @@
 <translation id="1794051631868188691">No mostris mai <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Envia suggeriments per ajudar-nos a solucionar el problema.</translation>
 <translation id="1795214765651529549">Utilitza el tema clàssic</translation>
-<translation id="1796105431091975902">Selecciona un manual d'estratègia d'Ansible per afegir</translation>
 <translation id="1796588414813960292">Les funcions que necessitin so no funcionaran</translation>
 <translation id="1797117170091578105">Juga utilitzant el teclat del Chromebook. Pots personalitzar les tecles perquè facin accions específiques.</translation>
 <translation id="1800502858278951817">No s'ha sol·licitat cap extensió per llegir i canviar <ph name="SITE_NAME" /></translation>
@@ -915,6 +912,7 @@
 <translation id="1842766183094193446">Confirmes que vols activar el mode de demostració?</translation>
 <translation id="1845727111305721124">Amb permís per reproduir so</translation>
 <translation id="1846308012215045257">Prem Ctrl+clic per executar <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Tanca la sessió quan es tanqui la tapa</translation>
 <translation id="184862733444771842">Sol·licitud de funció</translation>
 <translation id="1849016657376805933">Qualsevol dispositiu d'interfície humana</translation>
 <translation id="1849186935225320012">Aquesta pàgina té un control total dels dispositius MIDI.</translation>
@@ -1022,7 +1020,6 @@
 <translation id="1941553344801134989">Versió: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Mostra el mapatge de teclat</translation>
 <translation id="1942128823046546853">Llegir i canviar totes les dades en tots els llocs web</translation>
-<translation id="1942600407708803723">Apaga quan es tanqui la tapa</translation>
 <translation id="1944528062465413897">Codi de vinculació per Bluetooth:</translation>
 <translation id="1944921356641260203">S'ha trobat una actualització.</translation>
 <translation id="1947136734041527201">Et permet iniciar la sessió en llocs web amb un servei d'identitats utilitzant el compte que ja tens</translation>
@@ -1711,6 +1708,7 @@
 <translation id="2568774940984945469">Contenidor de la barra d'informació</translation>
 <translation id="2571655996835834626">Modifica la configuració que controla l'accés dels llocs web a elements com les galetes, JavaScript, els connectors, la geolocalització, el micròfon, la càmera, etc.</translation>
 <translation id="2572032849266859634">S'ha concedit accés només de lectura a <ph name="VOLUME_NAME" />.</translation>
+<translation id="2573276323521243649">Enrere des de la pàgina de selecció d'avatar</translation>
 <translation id="2573417407488272418">Abans de l'actualització, crea una còpia de seguretat de les aplicacions i dels fitxers a Fitxers &gt; Els meus fitxers.</translation>
 <translation id="2573831315551295105">Assigna l'interruptor a <ph name="ACTION" /></translation>
 <translation id="2575247648642144396">Aquesta icona serà visible quan les extensions puguin actuar a la pàgina actual. Per fer servir aquesta extensió, feu clic a la icona o premeu <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3085,7 +3083,6 @@
 <translation id="389901847090970821">Selecciona el teclat</translation>
 <translation id="3900966090527141178">Exporta les contrasenyes</translation>
 <translation id="3903187154317825986">Teclat integrat</translation>
-<translation id="3903191712482985591">Afegeix un manual d'estratègia</translation>
 <translation id="3904326018476041253">Serveis d'ubicació</translation>
 <translation id="3904849010307028014">Un lloc web, en funció de com hi interaccionis (per exemple, si hi inicies la sessió habitualment en un compte), pot emetre un testimoni de confiança al teu navegador. Després, si altres llocs web que visitis cerquen i troben un testimoni de confiança vàlid, és més possible que et tractin com una persona i no com un bot.</translation>
 <translation id="3905761538810670789">Repara l'aplicació</translation>
@@ -5029,7 +5026,6 @@
 <translation id="5827733057563115968">Predicció de paraula següent</translation>
 <translation id="5828545842856466741">Afegeix un perfil...</translation>
 <translation id="5828633471261496623">S'està imprimint...</translation>
-<translation id="5828797982387013521">Selecciona el manual d'estratègia</translation>
 <translation id="5830205393314753525">No es pot obrir <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Anomena i desa la pà&amp;gina...</translation>
 <translation id="5832813618714645810">Perfils</translation>
@@ -5920,7 +5916,6 @@
 <translation id="6686665106869989887">La pestanya s'ha mogut cap a la dreta</translation>
 <translation id="6686817083349815241">Desa la contrasenya</translation>
 <translation id="6687079240787935001">Amaga <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">S'està sol·licitant llegir i canviar <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Demana a <ph name="SUPERVISED_USER_NAME" /> que vingui a l'ordinador. El teu fill haurà de llegir unes quantes frases en aquesta pantalla per crear el seu model de veu.
     <ph name="BR" />
     Si <ph name="SUPERVISED_USER_NAME" /> necessita ajuda per llegir les frases, digues-li que les repeteixi després de tu. Parla baix i lluny del micròfon perquè l'Assistent no aprengui la teva veu, sinó la del teu fill.</translation>
@@ -6402,6 +6397,7 @@
 <translation id="7138678301420049075">Altres</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> està utilitzant el micròfon</translation>
 <translation id="7141105143012495934">S'ha produït un problema en iniciar la sessió perquè no s'ha pogut recuperar la informació del compte. Contacteu amb l'administrador o torneu a provar-ho.</translation>
+<translation id="7141844554192012199">Comprova</translation>
 <translation id="7144878232160441200">Torna-ho a provar</translation>
 <translation id="7149839598364933473">Converteix aquest dispositiu en un dispositiu <ph name="DEVICE_OS" />.</translation>
 <translation id="7149893636342594995">24 darreres hores</translation>
@@ -7179,7 +7175,6 @@
 <translation id="7898725031477653577">Tradueix sempre</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Busques els components del navegador? Ves a</translation>
-<translation id="7903345046358933331">La pàgina no respon. Podeu esperar que respongui o tancar-la.</translation>
 <translation id="7903429136755645827">Fes clic per personalitzar els controls de joc</translation>
 <translation id="7903742244674067440">Tens certificats arxivats que identifiquen aquestes entitats emissores de certificats</translation>
 <translation id="7903925330883316394">Utilitat: <ph name="UTILITY_TYPE" /></translation>
@@ -8095,6 +8090,7 @@
 <translation id="8780123805589053431">Obtén descripcions d'imatges de Google</translation>
 <translation id="8780443667474968681">La cerca per veu s'ha desactivat.</translation>
 <translation id="8781834595282316166">Pestanya nova al grup</translation>
+<translation id="8781980678064919987">Apaga quan es tanqui la tapa</translation>
 <translation id="8782565991310229362">S'ha cancel·lat l'inici de l'aplicació de quiosc.</translation>
 <translation id="8783834180813871000">Escriu el codi de vinculació per Bluetooth i, a continuació, prem Retorn.</translation>
 <translation id="8784626084144195648">Mitjana descartada</translation>
@@ -8159,7 +8155,6 @@
 <translation id="8846132060409673887">Consultar el fabricant i el model d'aquest ordinador</translation>
 <translation id="8846163936679269230">Restableix els perfils eSIM</translation>
 <translation id="8846239054091760429">Àudio mono, inici, subtítols instantanis, etc.</translation>
-<translation id="8847523528195140327">Tanca la sessió quan es tanqui la tapa</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Amagat</translation>
 <translation id="8849219423513870962">Cancel·la la supressió del perfil d'eSIM anomenat <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 7ebd15a..b562e25 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -562,7 +562,6 @@
 <translation id="1536754031901697553">Odpojování...</translation>
 <translation id="1537254971476575106">Zvětšení obrazovky</translation>
 <translation id="15373452373711364">Velký kurzor myši</translation>
-<translation id="1539630663098418038">Rozšíření <ph name="EXTENSIONS_REQUESTING_ACCESS" /> žádá o oprávnění ke čtení a provádění změn pro web <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Zapnout ukázkový režim</translation>
 <translation id="1541346352678737112">Nebyla nalezena žádná síť</translation>
 <translation id="1542137295869176367">Vaše přihlašovací údaje nebylo možné aktualizovat</translation>
@@ -724,7 +723,6 @@
 <translation id="1676902103953506022">Identifikační údaje uživatele <ph name="USERNAME" /> v doméně <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Rozšíření <ph name="EXTENSION_TYPE_PARAMETER" /> nelze přidat</translation>
 <translation id="1677472565718498478">zbývající čas: <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Uzamknout v režimu spánku nebo při zavření krytu</translation>
 <translation id="1679068421605151609">Nástroje pro vývojáře</translation>
 <translation id="1679810534535368772">Opravdu chcete skončit?</translation>
 <translation id="167983332380191032">Služba správy odeslala chybu protokolu HTTP.</translation>
@@ -852,7 +850,6 @@
 <translation id="1794051631868188691">Nikdy nezobrazovat <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Odeslat zpětnou vazbu, která nám pomůže při řešení tohoto problému</translation>
 <translation id="1795214765651529549">Použít klasický motiv</translation>
-<translation id="1796105431091975902">Vyberte Ansible Playbook, který chcete přidat</translation>
 <translation id="1796588414813960292">Funkce vyžadující zvuk nebudou k dispozici</translation>
 <translation id="1797117170091578105">Hrajte na klávesnici Chromebooku. Můžete si nastavit klávesy pro konkrétní akce.</translation>
 <translation id="1800502858278951817">Žádná rozšíření nepožádala o čtení a provádění změn na webu <ph name="SITE_NAME" /></translation>
@@ -917,6 +914,7 @@
 <translation id="1842766183094193446">Opravdu chcete zapnout ukázkový režim?</translation>
 <translation id="1845727111305721124">Povolení přehrávat zvuk</translation>
 <translation id="1846308012215045257">Plugin <ph name="PLUGIN_NAME" /> spustíte kliknutím se stisknutou klávesou CTRL</translation>
+<translation id="1848219224579402567">Při zavření víka se odhlásit</translation>
 <translation id="184862733444771842">Žádost o funkci</translation>
 <translation id="1849016657376805933">Libovolné zařízení HID</translation>
 <translation id="1849186935225320012">Tato stránka má úplnou kontrolu nad zařízeními MIDI.</translation>
@@ -1024,7 +1022,6 @@
 <translation id="1941553344801134989">Verze: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Zobrazit mapování kláves</translation>
 <translation id="1942128823046546853">Číst a měnit veškerá vaše data na všech webech</translation>
-<translation id="1942600407708803723">Při zavření víka vypnout</translation>
 <translation id="1944528062465413897">Párovací kód Bluetooth:</translation>
 <translation id="1944921356641260203">Byla nalezena aktualizace</translation>
 <translation id="1947136734041527201">Umožňuje vám přihlašovat se na weby pomocí účtu služby ověření identity</translation>
@@ -2554,6 +2551,7 @@
 <translation id="3406290648907941085">Povolení používat zařízení a data pro virtuální realitu</translation>
 <translation id="3406396172897554194">Vyhledávat podle jazyka nebo názvu metody zadávání</translation>
 <translation id="3406605057700382950">&amp;Zobrazit lištu záložek</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{Do Správce hesel Google pro účet <ph name="USER_EMAIL" /> bylo importováno 1 heslo}few{Do Správce hesel Google pro účet <ph name="USER_EMAIL" /> byla importována {NUM_PASSWORDS} hesla}many{Do Správce hesel Google pro účet <ph name="USER_EMAIL" /> bylo importováno {NUM_PASSWORDS} hesla}other{Do Správce hesel Google pro účet <ph name="USER_EMAIL" /> bylo importováno {NUM_PASSWORDS} hesel}}</translation>
 <translation id="3409785640040772790">Mapy</translation>
 <translation id="3412265149091626468">Přejít na výběr</translation>
 <translation id="3413122095806433232">Vydavatelé CA: <ph name="LOCATION" /></translation>
@@ -3087,7 +3085,6 @@
 <translation id="389901847090970821">Vybrat klávesnici</translation>
 <translation id="3900966090527141178">Export hesel</translation>
 <translation id="3903187154317825986">Vestavěná klávesnice</translation>
-<translation id="3903191712482985591">Přidat playbook</translation>
 <translation id="3904326018476041253">Služby určování polohy</translation>
 <translation id="3904849010307028014">Web může na základě vaší interakce, např. pravidelné přihlašování k účtu, vystavit vašemu prohlížeči token důvěry. Když potom ostatní weby, které navštívíte, najdou platný token důvěry, s větší pravděpodobností s vámi budou nakládat jako s člověkem a ne jako s robotem.</translation>
 <translation id="3905761538810670789">Opravit aplikaci</translation>
@@ -3737,6 +3734,7 @@
 <translation id="4541123282641193691">Účet se nepodařilo ověřit. Zkuste to znovu nebo Chromebook restartujte.</translation>
 <translation id="4541662893742891060">Propojení s tímto profilem se nezdařilo. Se žádostmi o technickou podporu se obracejte na svého operátora.</translation>
 <translation id="4541706525461326392">Odstraňování profilu. Může to trvat několik minut.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{Do Správce hesel Google na tomto zařízení bylo importováno 1 heslo}few{Do Správce hesel Google na tomto zařízení byla importována {NUM_PASSWORDS} hesla}many{Do Správce hesel Google na tomto zařízení bylo importováno {NUM_PASSWORDS} hesla}other{Do Správce hesel Google na tomto zařízení bylo importováno {NUM_PASSWORDS} hesel}}</translation>
 <translation id="4542520061254486227">Čtení vašich dat na webech <ph name="WEBSITE_1" /> a <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Správce certifikátů</translation>
 <translation id="4544174279960331769">Výchozí modrý avatar</translation>
@@ -5028,7 +5026,6 @@
 <translation id="5827733057563115968">Předvídání následujícího slova</translation>
 <translation id="5828545842856466741">Přidat profil…</translation>
 <translation id="5828633471261496623">Tisk...</translation>
-<translation id="5828797982387013521">Vyberte playbook</translation>
 <translation id="5830205393314753525">Aplikaci <ph name="APP_NAME" /> nelze otevřít</translation>
 <translation id="5830720307094128296">Uložit stránku j&amp;ako...</translation>
 <translation id="5832813618714645810">Profily</translation>
@@ -5923,7 +5920,6 @@
 <translation id="6686665106869989887">Karta byla přesunuta doprava</translation>
 <translation id="6686817083349815241">Uložte si heslo</translation>
 <translation id="6687079240787935001">Skrýt <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Žádost o oprávnění ke čtení a provádění změn pro <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Požádejte uživatele <ph name="SUPERVISED_USER_NAME" />, aby přišel k počítači. Dítě si vytvoří hlasový model přečtením několika vět z obrazovky.
     <ph name="BR" />
     Pokud uživatel <ph name="SUPERVISED_USER_NAME" /> potřebuje se čtením pomoct, ať věty opakuje po vás. Šeptejte je dál od mikrofonu, aby Asistent zaznamenal hlas dítěte a ne váš.</translation>
@@ -6225,6 +6221,7 @@
 <translation id="6968288415730398122">Chcete-li nakonfigurovat zámek obrazovky, zadejte heslo</translation>
 <translation id="6969047215179982698">Vypnout sdílení nablízko</translation>
 <translation id="6970480684834282392">Typ spouštění</translation>
+<translation id="6970543303783413625">Hesla se nepodařilo importovat. Najednou lze importovat maximálně <ph name="COUNT" /> hesel.</translation>
 <translation id="6970856801391541997">Tisknout konkrétní stránky</translation>
 <translation id="6970861306198150268">Dejte pozor, abyste uložili aktuální heslo pro tento web</translation>
 <translation id="6972180789171089114">Zvuk/video</translation>
@@ -6457,6 +6454,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Opustit stránku}few{Opustit stránky}many{Opustit stránky}other{Opustit stránky}}</translation>
 <translation id="7207457272187520234">Odesílat údaje o využití a diagnostice. Toto zařízení aktuálně automaticky odesílá do Googlu diagnostické údaje a údaje o zařízení a aplikacích a jejich využití. Tyto údaje nám pomohou se zvyšováním stability systému a aplikací a dalšími vylepšeními. Některá souhrnná data budou moci využít také naši partneři, např. vývojáři aplikací pro Android. Toto nastavení je vyžadováno vlastníkem. Pokud je zapnuto dodatečné nastavení Aktivita na webu a v aplikacích, mohou se tato data ukládat do vašeho účtu Google.</translation>
 <translation id="7207631048330366454">Hledat v aplikacích</translation>
+<translation id="7210471695184432500">Pokud chcete importovat hesla do Správce hesel Google na tomto zařízení, vyberte soubor CSV</translation>
 <translation id="7210499381659830293">Rozšíření pro tiskárny</translation>
 <translation id="7211783048245131419">Zatím nebyl přiřazen žádný přepínač</translation>
 <translation id="7212097698621322584">Chcete-li změnit PIN, zadejte aktuální PIN. Pokud svůj PIN neznáte, budete bezpečnostní klíč muset resetovat a poté vytvořit nový PIN.</translation>
@@ -7180,7 +7178,6 @@
 <translation id="7898725031477653577">Vždy překládat</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Hledáte součásti prohlížeče? Přejděte na stránku</translation>
-<translation id="7903345046358933331">Stránka přestala reagovat. Můžete počkat, až začne reagovat, nebo ji ukončit.</translation>
 <translation id="7903429136755645827">Kliknutím upravíte ovládací prvky hry</translation>
 <translation id="7903742244674067440">Máte založené certifikáty, které identifikují tyto certifikační autority</translation>
 <translation id="7903925330883316394">Nástroj: <ph name="UTILITY_TYPE" /></translation>
@@ -7516,6 +7513,7 @@
 <translation id="8206859287963243715">Mobil</translation>
 <translation id="8208216423136871611">Neukládat</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nové oznámení}few{# nová oznámení}many{# nového oznámení}other{# nových oznámení}}</translation>
+<translation id="821119981794423735">Pokud chcete importovat hesla do Správce hesel Google pro účet <ph name="USER_EMAIL" />, vyberte soubor CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Probíhá stahování}few{Probíhají stahování}many{Probíhají stahování}other{Probíhají stahování}}</translation>
 <translation id="8213449224684199188">Přešli jste do režimu fotek</translation>
 <translation id="8214489666383623925">Otevřít soubor...</translation>
@@ -8096,6 +8094,7 @@
 <translation id="8780123805589053431">Získat popisy obrázků z Googlu</translation>
 <translation id="8780443667474968681">Hlasové vyhledávání bylo vypnuto.</translation>
 <translation id="8781834595282316166">Nová karta ve skupině</translation>
+<translation id="8781980678064919987">Při zavření víka vypnout</translation>
 <translation id="8782565991310229362">Spouštění aplikací pro režim veřejného terminálu bylo zrušeno.</translation>
 <translation id="8783834180813871000">Zadejte párovací kód Bluetooth a poté stiskněte Return nebo Enter.</translation>
 <translation id="8784626084144195648">Vyhlazený průměr</translation>
@@ -8160,7 +8159,6 @@
 <translation id="8846132060409673887">Zjistit výrobce a model počítače</translation>
 <translation id="8846163936679269230">Resetovat profily eSIM karet</translation>
 <translation id="8846239054091760429">Zvuk mono, spuštění, živý přepis a další</translation>
-<translation id="8847523528195140327">Při zavření víka se odhlásit</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Skryté</translation>
 <translation id="8849219423513870962">Zrušit odstraňování profilu eSIM karty s názvem <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb
index 0a58e10..b2c1d89 100644
--- a/chrome/app/resources/generated_resources_cy.xtb
+++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -566,7 +566,6 @@
 <translation id="1536754031901697553">Wrthi'n datgysylltu...</translation>
 <translation id="1537254971476575106">Chwyddwr sgrîn lawn</translation>
 <translation id="15373452373711364">Cyrchwr llygoden mawr</translation>
-<translation id="1539630663098418038">Mae <ph name="EXTENSIONS_REQUESTING_ACCESS" /> yn gofyn i ddarllen a newid <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Galluogi'r modd demo</translation>
 <translation id="1541346352678737112">Heb ganfod rhwydwaith</translation>
 <translation id="1542137295869176367">Ni ellid diweddaru eich data mewngofnodi</translation>
@@ -728,7 +727,6 @@
 <translation id="1676902103953506022">Manylion adnabod ar gyfer <ph name="USERNAME" /> ar <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Methu ag ychwanegu <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ar ôl</translation>
-<translation id="1678794218766467608">Cloi yn y modd cysgu neu pan fydd y gorchudd ar gau</translation>
 <translation id="1679068421605151609">Offer Datblygwyr</translation>
 <translation id="1679810534535368772">Ydych yn siŵr eich bod am adael?</translation>
 <translation id="167983332380191032">Gwnaeth y gwasanaeth rheoli anfon gwall HTTP.</translation>
@@ -864,7 +862,6 @@
 <translation id="1794051631868188691">Peidio byth â dangos <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Anfonwch adborth i'n helpu i ddatrys y broblem hon.</translation>
 <translation id="1795214765651529549">Defnyddio Clasurol</translation>
-<translation id="1796105431091975902">Dewis Llyfr strategaethau Ansible i'w ychwanegu</translation>
 <translation id="1796588414813960292">Ni fydd nodweddion sy'n gofyn am sain yn gweithio</translation>
 <translation id="1797117170091578105">Chwarae gan ddefnyddio'ch bysellfwrdd Chromebook. Gallwch personoleiddio bysellau i gamau gweithredu penodol.</translation>
 <translation id="1800502858278951817">Nid oes unrhyw estyniad wedi gofyn i ddarllen a newid <ph name="SITE_NAME" /></translation>
@@ -1037,7 +1034,6 @@
 <translation id="1941553344801134989">Fersiwn: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Dangos mapio bysellau</translation>
 <translation id="1942128823046546853">Darllen a newid eich holl ddata ar bob gwefan</translation>
-<translation id="1942600407708803723">Diffodd pan fydd y gorchudd ar gau</translation>
 <translation id="1944528062465413897">Cod paru Bluetooth:</translation>
 <translation id="1944921356641260203">Mae diweddariad wedi'i ganfod</translation>
 <translation id="1947136734041527201">Yn gadael i chi fewngofnodi i wefannau gan ddefnyddio'r cyfrif sydd gennych gyda gwasanaeth hunaniaeth</translation>
@@ -1729,6 +1725,7 @@
 <translation id="2568774940984945469">Cynhwysydd bar gwybodaeth</translation>
 <translation id="2571655996835834626">Newidiwch eich gosodiadau sy'n rheoli mynediad gwefannau at nodweddion megis cwcis, JavaScript, ategion, lleoliad daearyddol, meicroffon, camera, ac ati.</translation>
 <translation id="2572032849266859634">Mae mynediad darllen yn unig wedi'i roi i <ph name="VOLUME_NAME" />.</translation>
+<translation id="2573276323521243649">Yn ôl o dudalen dewis rhithffurf</translation>
 <translation id="2573417407488272418">Gwneud copi wrth gefn o apiau a ffeiliau yn Ffeiliau &gt; Fy ffeiliau cyn yr uwchraddiad.</translation>
 <translation id="2573831315551295105">Aseinio switsh ar gyfer "<ph name="ACTION" />"</translation>
 <translation id="2575247648642144396">Bydd yr eicon hwn yn weladwy pan fydd yr estyniad yn gallu gweithredu ar y dudalen bresennol. Defnyddiwch yr estyniad hwn drwy glicio ar yr eicon neu drwy bwyso <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3103,7 +3100,6 @@
 <translation id="389901847090970821">Dewis bysellfwrdd</translation>
 <translation id="3900966090527141178">Allforio cyfrineiriau</translation>
 <translation id="3903187154317825986">Bysellfwrdd Integredig</translation>
-<translation id="3903191712482985591">Ychwanegu llyfr strategaethau</translation>
 <translation id="3904326018476041253">Gwasanaethau Lleoliad</translation>
 <translation id="3904849010307028014">Yn seiliedig ar eich rhyngweithiad gyda gwefan, megis mewngofnodi i gyfrif yn rheolaidd, gall y wefan honno roi tocyn ymddiriedaeth i'ch porwr. Yn nes ymlaen, os bydd gwefannau eraill rydych yn ymweld â nhw yn dod o hyd i docyn ymddiriedaeth dilys, maent yn fwy tebygol o'ch trin fel person ac nid bot.</translation>
 <translation id="3905761538810670789">Trwsio'r ap</translation>
@@ -5049,7 +5045,6 @@
 <translation id="5827733057563115968">Rhagfynegi'r gair nesaf</translation>
 <translation id="5828545842856466741">Ychwanegu proffil...</translation>
 <translation id="5828633471261496623">Wrthi'n argraffu...</translation>
-<translation id="5828797982387013521">Dewis llyfr strategaethau</translation>
 <translation id="5830205393314753525">Methu ag agor <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Cadw'r Dudalen &amp;Fel...</translation>
 <translation id="5832813618714645810">Proffiliau</translation>
@@ -5949,7 +5944,6 @@
 <translation id="6686665106869989887">Mae tab wedi'i symud i'r dde</translation>
 <translation id="6686817083349815241">Cadw eich cyfrinair</translation>
 <translation id="6687079240787935001">Cuddio <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Wrthi'n gofyn i ddarllen a newid <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Gofynnwch i <ph name="SUPERVISED_USER_NAME" /> ddod i'r cyfrifiadur. Bydd eich plentyn yn darllen ychydig o frawddegau ar y sgrîn i greu ei fodel llais.
     <ph name="BR" />
     Os mae angen help ar <ph name="SUPERVISED_USER_NAME" /> i ddarllen, gofynnwch i'ch plentyn ailadrodd ar eich ôl. Sibrydwch i ffwrdd o'r meic fel bod Assistant yn dysgu llais eich plentyn yn lle'ch llais chi.</translation>
@@ -6431,6 +6425,7 @@
 <translation id="7138678301420049075">Arall</translation>
 <translation id="7139627972753429585">Mae <ph name="APP_NAME" /> yn defnyddio eich meicroffon</translation>
 <translation id="7141105143012495934">Wedi methu â mewngofnodi oherwydd na ellid adfer manylion eich cyfrif. Cysylltwch â'ch gweinyddwr neu rhowch gynnig arall arni.</translation>
+<translation id="7141844554192012199">Gwirio</translation>
 <translation id="7144878232160441200">Ceisio eto</translation>
 <translation id="7149839598364933473">Trosi'r ddyfais hon i ddyfais <ph name="DEVICE_OS" />.</translation>
 <translation id="7149893636342594995">24 awr ddiwethaf</translation>
@@ -7208,7 +7203,6 @@
 <translation id="7898725031477653577">Cyfieithu Bob Amser</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Chwilio am gydrannau porwr? Ewch i</translation>
-<translation id="7903345046358933331">Mae'r dudalen wedi dod yn anymatebol. Gallwch aros iddi ddod yn ymatebol neu ei chau.</translation>
 <translation id="7903429136755645827">Cliciwch i addasu eich rheolyddion gêm</translation>
 <translation id="7903742244674067440">Mae gennych dystysgrifau a gofnodwyd sy'n nodi'r awdurdodau tystysgrifau hyn</translation>
 <translation id="7903925330883316394">Cyfleustod: <ph name="UTILITY_TYPE" /></translation>
@@ -8190,7 +8184,6 @@
 <translation id="8846132060409673887">Darllen gwneuthurwr a model y cyfrifiadur hwn</translation>
 <translation id="8846163936679269230">Ailosod proffiliau eSIM</translation>
 <translation id="8846239054091760429">Sain mono, cychwyn, Capsiynau Byw a rhagor</translation>
-<translation id="8847523528195140327">Allgofnodi pan fydd y gorchudd ar gau</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Wedi'i chuddio</translation>
 <translation id="8849219423513870962">Canslo tynnu'r proffil eSIM o'r enw <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index 8f4ae5e..c5b40b4 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -564,7 +564,6 @@
 <translation id="1536754031901697553">Afbryder forbindelsen...</translation>
 <translation id="1537254971476575106">Forstørrelse af fuld skærm</translation>
 <translation id="15373452373711364">Stor musemarkør</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> anmoder om tilladelse til at læse og ændre <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Aktivér demotilstand</translation>
 <translation id="1541346352678737112">Der blev ikke fundet nogen netværk</translation>
 <translation id="1542137295869176367">Dine logindata kunne ikke opdateres</translation>
@@ -726,7 +725,6 @@
 <translation id="1676902103953506022">Loginoplysninger til <ph name="USERNAME" /> på <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Denne <ph name="EXTENSION_TYPE_PARAMETER" /> kan ikke tilføjes</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> tilbage</translation>
-<translation id="1678794218766467608">Lås i dvaletilstand, eller når coveret er lukket</translation>
 <translation id="1679068421605151609">Udviklerværktøjer</translation>
 <translation id="1679810534535368772">Er du sikker på, at du vil afslutte?</translation>
 <translation id="167983332380191032">Administrationstjenesten sendte en HTTP-fejl.</translation>
@@ -862,7 +860,6 @@
 <translation id="1794051631868188691">Vis aldrig <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Send feedback for at hjælpe os med at løse problemet.</translation>
 <translation id="1795214765651529549">Brug Klassisk</translation>
-<translation id="1796105431091975902">Vælg en Ansible-playbook, som skal tilføjes</translation>
 <translation id="1796588414813960292">Funktioner, der skal bruge lyd, fungerer ikke</translation>
 <translation id="1797117170091578105">Spil ved hjælp af dit Chromebook-tastatur. Du kan tilpasse taster, så de tildeles bestemte handlinger.</translation>
 <translation id="1800502858278951817">Ingen udvidelser har anmodet om tilladelse til at læse og ændre <ph name="SITE_NAME" /></translation>
@@ -927,6 +924,7 @@
 <translation id="1842766183094193446">Er du sikker på, at du vil aktivere demotilstand?</translation>
 <translation id="1845727111305721124">Har tilladelse til at afspille lyd</translation>
 <translation id="1846308012215045257">Hold ctrl-tasten nede, og klik for at køre <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Log ud, når låget er lukket</translation>
 <translation id="184862733444771842">Forslag til ny funktion</translation>
 <translation id="1849016657376805933">Alle HID-enheder</translation>
 <translation id="1849186935225320012">Denne side har fuld kontrol over MIDI-enheder.</translation>
@@ -1035,7 +1033,6 @@
 <translation id="1941553344801134989">Version: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Vis tastaturtilknytning</translation>
 <translation id="1942128823046546853">Læse og redigere alle dine data på alle websites</translation>
-<translation id="1942600407708803723">Luk ned, når etuiet er lukket</translation>
 <translation id="1944528062465413897">Bluetooth-parringskode:</translation>
 <translation id="1944921356641260203">En opdatering er fundet</translation>
 <translation id="1947136734041527201">Tillader, at du logger ind på websites med den konto, du har hos en identitetstjeneste</translation>
@@ -1727,6 +1724,7 @@
 <translation id="2568774940984945469">Container til oplysningsbjælke</translation>
 <translation id="2571655996835834626">Skift de indstillinger, der styrer websites' adgang til funktioner som f.eks. cookies, JavaScript, plugins, geoplacering, mikrofon og kamera.</translation>
 <translation id="2572032849266859634">Skrivebeskyttet adgang til <ph name="VOLUME_NAME" /> er blevet tildelt.</translation>
+<translation id="2573276323521243649">Gå tilbage fra siden med valg af avatar</translation>
 <translation id="2573417407488272418">Sikkerhedskopiér apps og filer til Filer &gt; Mine filer, inden opgraderingen gennemføres.</translation>
 <translation id="2573831315551295105">Tildel kontakt for handlingen "<ph name="ACTION" />"</translation>
 <translation id="2575247648642144396">Dette ikon vil være synligt, når udvidelsen fungerer på den aktuelle side. Brug denne udvidelse ved at klikke på ikonet eller ved at trykke på <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3101,7 +3099,6 @@
 <translation id="389901847090970821">Vælg tastatur</translation>
 <translation id="3900966090527141178">Eksportér adgangskoder</translation>
 <translation id="3903187154317825986">Indbygget tastatur</translation>
-<translation id="3903191712482985591">Tilføj en playbook</translation>
 <translation id="3904326018476041253">Lokationstjenester</translation>
 <translation id="3904849010307028014">Ud fra din interaktion med et website, f.eks. regelmæssige logins på en konto, kan det pågældende website tildele din browser et trust token. Derefter vil der være større sandsynlighed for, at websites, du besøger, og som søger efter og finder et gyldigt trust token, vil anse dig for at være et menneske og ikke en bot.</translation>
 <translation id="3905761538810670789">Reparer appen</translation>
@@ -5047,7 +5044,6 @@
 <translation id="5827733057563115968">Forudsigelse af næste ord</translation>
 <translation id="5828545842856466741">Tilføj profil...</translation>
 <translation id="5828633471261496623">Udskriver...</translation>
-<translation id="5828797982387013521">Vælg håndbog</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> kan ikke åbnes</translation>
 <translation id="5830720307094128296">Gem side &amp;som...</translation>
 <translation id="5832813618714645810">Profiler</translation>
@@ -5941,7 +5937,6 @@
 <translation id="6686665106869989887">Fanen blev flyttet til højre</translation>
 <translation id="6686817083349815241">Gem din adgangskode</translation>
 <translation id="6687079240787935001">Skjul <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Der anmodes om tilladelse til at læse og ændre <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Bed <ph name="SUPERVISED_USER_NAME" /> om at komme hen til computeren. Dit barn skal læse et par sætninger på skærmen højt for at oprette sin stemmemodel.
     <ph name="BR" />
     Hvis <ph name="SUPERVISED_USER_NAME" /> har brug for hjælp til at læse sætningerne, kan du bede dit barn om at gentage det, du siger. Hvisk sætningerne et stykke væk fra mikrofonen, så Google Assistent lærer dit barns stemme og ikke din.</translation>
@@ -6423,6 +6418,7 @@
 <translation id="7138678301420049075">Andet</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> bruger din mikrofon</translation>
 <translation id="7141105143012495934">Login mislykkedes, da dine kontooplysninger ikke kunne hentes. Kontakt din administrator, eller prøv igen.</translation>
+<translation id="7141844554192012199">Adgangskodetjek</translation>
 <translation id="7144878232160441200">Prøv igen</translation>
 <translation id="7149839598364933473">Konverter denne enhed til en <ph name="DEVICE_OS" />-enhed.</translation>
 <translation id="7149893636342594995">De seneste 24 timer</translation>
@@ -7199,7 +7195,6 @@
 <translation id="7898725031477653577">Oversæt altid</translation>
 <translation id="7901405293566323524">Telefonstyring</translation>
 <translation id="7903290522161827520">Leder du efter browserkomponenter? Gå til</translation>
-<translation id="7903345046358933331">Siden svarer ikke. Du kan vente på, at den svarer, eller lukke den.</translation>
 <translation id="7903429136755645827">Klik for at tilpasse dine spilindstillinger</translation>
 <translation id="7903742244674067440">Du har lagrede certifikater, som identificerer disse certifikatautoriteter</translation>
 <translation id="7903925330883316394">Værktøj: <ph name="UTILITY_TYPE" /></translation>
@@ -8116,6 +8111,7 @@
 <translation id="8780123805589053431">Hent billedbeskrivelser fra Google</translation>
 <translation id="8780443667474968681">Talesøgning er deaktiveret.</translation>
 <translation id="8781834595282316166">Ny fane i gruppe</translation>
+<translation id="8781980678064919987">Luk ned, når låget er lukket</translation>
 <translation id="8782565991310229362">Start af kioskapplikationen blev annulleret.</translation>
 <translation id="8783834180813871000">Angiv Bluetooth-parringskoden, og tryk derefter på Enter.</translation>
 <translation id="8784626084144195648">Kasseret gennemsnit</translation>
@@ -8180,7 +8176,6 @@
 <translation id="8846132060409673887">Læs computerens producent og model</translation>
 <translation id="8846163936679269230">Nulstil eSIM-profiler</translation>
 <translation id="8846239054091760429">Monolyd, opstart, Livetekstning m.m.</translation>
-<translation id="8847523528195140327">Log ud, når etuiet er lukket</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Skjult</translation>
 <translation id="8849219423513870962">Annuller fjernelse af eSIM-profilen ved navn <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 278a28c1..2a3a728a 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -557,7 +557,6 @@
 <translation id="1536754031901697553">Verbindung wird getrennt…</translation>
 <translation id="1537254971476575106">Vollbildlupe</translation>
 <translation id="15373452373711364">Großer Cursor</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> fordert die Berechtigung an, <ph name="ORIGIN" /> aufzurufen und Änderungen vorzunehmen</translation>
 <translation id="1540605929960647700">Demomodus aktivieren</translation>
 <translation id="1541346352678737112">Kein Netzwerk gefunden</translation>
 <translation id="1542137295869176367">Deine Anmeldedaten konnten nicht aktualisiert werden</translation>
@@ -719,7 +718,6 @@
 <translation id="1676902103953506022">Anmeldedaten von <ph name="USERNAME" /> auf <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> kann nicht hinzugefügt werden</translation>
 <translation id="1677472565718498478">Noch <ph name="TIME" /> h</translation>
-<translation id="1678794218766467608">Im Ruhemodus oder beim Zuklappen sperren</translation>
 <translation id="1679068421605151609">Entwicklertools</translation>
 <translation id="1679810534535368772">Möchtest du den Bildschirm wirklich schließen?</translation>
 <translation id="167983332380191032">Der Verwaltungsdienst hat einen HTTP-Fehler gemeldet.</translation>
@@ -847,7 +845,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> nie anzeigen</translation>
 <translation id="1794791083288629568">Hilf uns, dieses Problem zu beheben, indem du uns Feedback sendest.</translation>
 <translation id="1795214765651529549">Klassisches Design verwenden</translation>
-<translation id="1796105431091975902">Ansible-Playbook zum Hinzufügen auswählen</translation>
 <translation id="1796588414813960292">Funktionen, die Ton erfordern, funktionieren dann nicht</translation>
 <translation id="1797117170091578105">Du kannst zum Spielen deine Chromebook-Tastatur verwenden und Tasten bestimmte Aktionen zuweisen.</translation>
 <translation id="1800502858278951817">Keine Erweiterungen haben angefragt, Daten auf <ph name="SITE_NAME" /> abzurufen und zu ändern</translation>
@@ -912,6 +909,7 @@
 <translation id="1842766183094193446">Möchtest du den Demomodus wirklich aktivieren?</translation>
 <translation id="1845727111305721124">Dürfen Ton abspielen</translation>
 <translation id="1846308012215045257">Zum Ausführen von <ph name="PLUGIN_NAME" /> die Strg-Taste drücken und mit der Maus klicken</translation>
+<translation id="1848219224579402567">Beim Zuklappen abmelden</translation>
 <translation id="184862733444771842">Funktionsanfrage</translation>
 <translation id="1849016657376805933">Alle HID-Geräte</translation>
 <translation id="1849186935225320012">Diese Seite hat vollständige Kontrolle über MIDI-Geräte.</translation>
@@ -1019,7 +1017,6 @@
 <translation id="1941553344801134989">Version: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Tastenbelegung anzeigen</translation>
 <translation id="1942128823046546853">Alle deine Daten auf allen Websites lesen und ändern</translation>
-<translation id="1942600407708803723">Beim Zuklappen herunterfahren</translation>
 <translation id="1944528062465413897">Bluetooth-Kopplungscode:</translation>
 <translation id="1944921356641260203">Update gefunden</translation>
 <translation id="1947136734041527201">Du kannst dich mit einem Konto, das du bei einem Identitätsdienst hast, auf Websites anmelden</translation>
@@ -2548,6 +2545,7 @@
 <translation id="3406290648907941085">Dürfen Virtual-Reality-Geräte und ‑Daten verwenden</translation>
 <translation id="3406396172897554194">Anhand einer Sprache oder Eingabemethode suchen</translation>
 <translation id="3406605057700382950">&amp;Lesezeichenleiste anzeigen</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 Passwort wurde in den Google Passwortmanager für <ph name="USER_EMAIL" /> importiert}other{{NUM_PASSWORDS} Passwörter wurden in den Google Passwortmanager für <ph name="USER_EMAIL" /> importiert}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">Auswahl anzeigen</translation>
 <translation id="3413122095806433232">Aussteller von Zertifizierungsstellen: <ph name="LOCATION" /></translation>
@@ -3081,7 +3079,6 @@
 <translation id="389901847090970821">Tastatur auswählen</translation>
 <translation id="3900966090527141178">Passwörter exportieren</translation>
 <translation id="3903187154317825986">Integrierte Tastatur</translation>
-<translation id="3903191712482985591">Playbook hinzufügen</translation>
 <translation id="3904326018476041253">Standortdienste</translation>
 <translation id="3904849010307028014">Basierend auf deiner Interaktion mit einer Website, z. B. regelmäßige Anmeldungen in einem Konto, kann diese Website ein Trust Token für deinen Browser ausstellen. Wenn andere von dir besuchte Websites später dann ein gültiges Trust Token finden, ist die Wahrscheinlichkeit höher, dass du als Person und nicht als Bot eingestuft wirst.</translation>
 <translation id="3905761538810670789">App reparieren</translation>
@@ -3732,6 +3729,7 @@
 <translation id="4541123282641193691">Dein Konto konnte nicht bestätigt werden. Bitte versuche es noch einmal oder starte dein Chromebook neu.</translation>
 <translation id="4541662893742891060">Es kann keine Verbindung zu diesem Profil hergestellt werden. Wende dich für technischen Support an deinen Mobilfunkanbieter.</translation>
 <translation id="4541706525461326392">Profil wird entfernt. Das kann einige Minuten dauern.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 Passwort wurde in den Google Passwortmanager auf diesem Gerät importiert}other{{NUM_PASSWORDS} Passwörter wurden in den Google Passwortmanager auf diesem Gerät importiert}}</translation>
 <translation id="4542520061254486227">Deine Daten auf <ph name="WEBSITE_1" /> und <ph name="WEBSITE_2" /> lesen</translation>
 <translation id="4543778593405494224">Zertifikat-Manager</translation>
 <translation id="4544174279960331769">Blauer Standardavatar</translation>
@@ -5023,7 +5021,6 @@
 <translation id="5827733057563115968">Vervollständigung des nächsten Wortes</translation>
 <translation id="5828545842856466741">Profil hinzufügen…</translation>
 <translation id="5828633471261496623">Wird gedruckt...</translation>
-<translation id="5828797982387013521">Playbook auswählen</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> kann nicht geöffnet werden</translation>
 <translation id="5830720307094128296">Seite speichern &amp;unter...</translation>
 <translation id="5832813618714645810">Profile</translation>
@@ -5277,6 +5274,7 @@
 <translation id="6065289257230303064">Verzeichnisattribute des Zertifikatsinhabers</translation>
 <translation id="6066794465984119824">Image-Hash ist nicht festgelegt</translation>
 <translation id="6069464830445383022">Verwende dein Google-Konto, um dich auf deinem Chromebook anzumelden</translation>
+<translation id="6070311415473175157">Wähle einen Bildbereich für die Suche aus</translation>
 <translation id="6071181508177083058">Passwort bestätigen</translation>
 <translation id="6071576563962215370">Das System konnte die Attributsperre für die Geräteinstallationszeit nicht vornehmen.</translation>
 <translation id="6072442788591997866"><ph name="APP_NAME" /> ist auf diesem Gerät nicht zulässig. Wende dich an deinen Administrator. Fehlercode: <ph name="ERROR_CODE" />.</translation>
@@ -5913,7 +5911,6 @@
 <translation id="6686665106869989887">Tab wurde nach rechts verschoben</translation>
 <translation id="6686817083349815241">Passwort speichern</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> ausblenden</translation>
-<translation id="6688391094668641513">Anfordern, <ph name="ORIGIN" /> aufzurufen und Änderungen vorzunehmen:</translation>
 <translation id="6689714331348768690">Bitte <ph name="SUPERVISED_USER_NAME" />, an den Computer zu kommen. Dein Kind muss einige Sätze auf diesem Bildschirm vorlesen, damit sein Sprachmodell erstellt werden kann.
     <ph name="BR" />
     Falls <ph name="SUPERVISED_USER_NAME" /> Hilfe beim Lesen braucht, lies vor und lasse dein Kind den Text wiederholen. Flüstere dabei und sprich nicht in Richtung des Mikrofons, damit Assistant die Stimme deines Kindes lernt und nicht deine.</translation>
@@ -6215,6 +6212,7 @@
 <translation id="6968288415730398122">Gib dein Passwort ein, um die Displaysperre zu konfigurieren</translation>
 <translation id="6969047215179982698">Nearby Share deaktivieren</translation>
 <translation id="6970480684834282392">Starttyp</translation>
+<translation id="6970543303783413625">Import der Passwörter nicht möglich. Du kannst nur maximal <ph name="COUNT" /> Passwörter gleichzeitig importieren.</translation>
 <translation id="6970856801391541997">Bestimmte Seiten drucken</translation>
 <translation id="6970861306198150268">Speichere dein aktuelles Passwort für diese Website</translation>
 <translation id="6972180789171089114">Audio/Video</translation>
@@ -6446,6 +6444,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Seite verlassen}other{Seiten verlassen}}</translation>
 <translation id="7207457272187520234">Du hast die Möglichkeit, Nutzungsdaten &amp; Fehlerberichte zu senden. Dieses Gerät sendet momentan automatisch Diagnose- und Gerätedaten sowie App-Nutzungsdaten an Google. Die Daten helfen unter anderem dabei, die Stabilität des Systems und der Apps zu verbessern. Einige aggregierte Daten sind auch für Apps und Partner von Google nützlich, beispielsweise Android-Entwickler. Diese Einstellung wird vom Inhaber erzwungen. Wenn die Einstellung "Zusätzliche Web- &amp; App-Aktivitäten" aktiviert ist, werden diese Daten möglicherweise in deinem Google-Konto gespeichert.</translation>
 <translation id="7207631048330366454">Apps finden</translation>
+<translation id="7210471695184432500">Wenn du Passwörter in den Google Passwortmanager auf diesem Gerät importieren möchtest, wähle eine CSV-Datei aus</translation>
 <translation id="7210499381659830293">Erweiterungsdrucker</translation>
 <translation id="7211783048245131419">Es wurde noch keine Schaltertaste zugewiesen</translation>
 <translation id="7212097698621322584">Gib deine aktuelle PIN ein, um sie zu ändern. Falls du deine PIN nicht kennst, musst du den Sicherheitsschlüssel zurücksetzen und dann eine neue PIN erstellen.</translation>
@@ -7107,6 +7106,7 @@
 <translation id="7842692330619197998">Rufe g.co/ChromeEnterpriseAccount auf, wenn du ein neues Konto erstellen musst.</translation>
 <translation id="78427265591841839">Mit <ph name="VISUAL_SEARCH_PROVIDER" /> auf einem beliebigen Teil der Seite suchen</translation>
 <translation id="784273751836026224">Linux deinstallieren</translation>
+<translation id="7842851769217535639">Wähle einen beliebigen Teil der Seite für die Suche aus</translation>
 <translation id="7843786652787044762">In <ph name="WEB_DRIVE" /> anmelden</translation>
 <translation id="7844992432319478437">DIFF-Datei wird aktualisiert.</translation>
 <translation id="7846634333498149051">Tastatur</translation>
@@ -7162,12 +7162,12 @@
 <translation id="7893008570150657497">Auf Fotos, Musik und andere Medien auf deinem Computer zugreifen</translation>
 <translation id="7893153962594818789">Bluetooth ist auf diesem <ph name="DEVICE_TYPE" /> deaktiviert. Gib dein Passwort ein und aktiviere Bluetooth.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (Standard)</translation>
+<translation id="7896292361319775586"><ph name="FILE" /> speichern?</translation>
 <translation id="789722939441020330">Websites dürfen nicht automatisch mehrere Dateien herunterladen</translation>
 <translation id="7897900149154324287">Wirf dein externes Gerät in Zukunft über die Dateien-App aus, bevor du die Verbindung trennst. Sonst könnte es zu einem Datenverlust kommen.</translation>
 <translation id="7898725031477653577">Immer übersetzen</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Suchst du die Browser-Komponenten? Gehe zu</translation>
-<translation id="7903345046358933331">Die Seite reagiert nicht mehr. Du kannst warten, bis sie wieder reagiert, oder sie schließen.</translation>
 <translation id="7903429136755645827">Zum Anpassen der Spielsteuerung klicken</translation>
 <translation id="7903742244674067440">Deine gespeicherten Zertifikate identifizieren diese Zertifizierungsstellen</translation>
 <translation id="7903925330883316394">Dienstprogramm: <ph name="UTILITY_TYPE" /></translation>
@@ -7503,6 +7503,7 @@
 <translation id="8206859287963243715">Mobil</translation>
 <translation id="8208216423136871611">Nicht speichern</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Neue Benachrichtigung}other{# neue Benachrichtigungen}}</translation>
+<translation id="821119981794423735">Wenn du Passwörter in den Google Passwortmanager für <ph name="USER_EMAIL" /> importieren möchtest, wähle eine CSV-Datei aus</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Download wird ausgeführt}other{Downloads werden ausgeführt}}</translation>
 <translation id="8213449224684199188">Fotomodus aktiviert</translation>
 <translation id="8214489666383623925">Datei öffnen...</translation>
@@ -8081,6 +8082,7 @@
 <translation id="8780123805589053431">Bildbeschreibungen von Google verwenden</translation>
 <translation id="8780443667474968681">Die Sprachsuche wurde deaktiviert.</translation>
 <translation id="8781834595282316166">Neuer Tab in Gruppe</translation>
+<translation id="8781980678064919987">Beim Zuklappen herunterfahren</translation>
 <translation id="8782565991310229362">Start der Kiosk-App abgebrochen</translation>
 <translation id="8783834180813871000">Gib den Kopplungscode ein und tippe dann auf die Eingabetaste.</translation>
 <translation id="8784626084144195648">Gruppendurchschnitt</translation>
@@ -8145,7 +8147,6 @@
 <translation id="8846132060409673887">Hersteller und Modell dieses Computers auslesen</translation>
 <translation id="8846163936679269230">eSIM-Profile zurücksetzen</translation>
 <translation id="8846239054091760429">Mono-Audio, Starten, automatische Untertitel und weitere Einstellungen</translation>
-<translation id="8847523528195140327">Beim Zuklappen abmelden</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Verborgen</translation>
 <translation id="8849219423513870962">Entfernen des eSIM-Profils „<ph name="PROFILE_NAME" />“ abbrechen</translation>
@@ -8300,6 +8301,7 @@
 <translation id="899403249577094719">Basis-URL für Netscape-Zertifikate</translation>
 <translation id="899657321862108550">Dein persönlicher Chrome-Browser – auf allen Geräten</translation>
 <translation id="899676909165543803">Der Fingerabdrucksensor ist die Taste rechts unten auf der Tastatur. Berühre ihn leicht mit dem Finger.</translation>
+<translation id="8998078711690114234">Dieser Dateityp kann gefährlich sein. Speichere diese Datei nur, wenn du dieser Website vertraust: <ph name="ORIGIN" /></translation>
 <translation id="8999560016882908256">Syntaxfehler in Abschnitt: <ph name="ERROR_LINE" /></translation>
 <translation id="9003185744423389627">Fehler bei Verbindung zum Geräteverwaltungsserver mit dem Status „<ph name="STATUS_TEXT" />“ am <ph name="FAILURE_TIME" /></translation>
 <translation id="9003647077635673607">Auf allen Websites zulassen</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index a45182fa..4ded168b 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">Γίνεται αποσύνδεση…</translation>
 <translation id="1537254971476575106">Μεγεθυντικός φακός πλήρους οθόνης</translation>
 <translation id="15373452373711364">Μεγάλος δείκτης ποντικιού</translation>
-<translation id="1539630663098418038">Το <ph name="EXTENSIONS_REQUESTING_ACCESS" /> ζητά να διαβάσει και να αλλάξει το <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Ενεργοποίηση λειτουργίας επίδειξης</translation>
 <translation id="1541346352678737112">Δεν βρέθηκε δίκτυο</translation>
 <translation id="1542137295869176367">Δεν ήταν δυνατή η ενημέρωση των δεδομένων σύνδεσης.</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">Λεπτομέρειες διαπιστευτηρίων για το όνομα χρήστη <ph name="USERNAME" /> στον τομέα <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Δεν είναι δυνατή η προσθήκη του στοιχείου <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Απομένουν <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Κλείδωμα σε κατάσταση αδράνειας ή όταν το κάλυμμα είναι κλειστό</translation>
 <translation id="1679068421605151609">Εργαλεία για Προγραμματιστές</translation>
 <translation id="1679810534535368772">Είστε βέβαιοι ότι θέλετε να βγείτε;</translation>
 <translation id="167983332380191032">Η υπηρεσία διαχείρισης έστειλε σφάλμα HTTP.</translation>
@@ -861,7 +859,6 @@
 <translation id="1794051631868188691">Να μην εμφανίζεται ποτέ περιεχόμενο σχετικά με <ph name="MERCHANT" />.</translation>
 <translation id="1794791083288629568">Στείλτε τα σχόλιά σας για να μας βοηθήσετε να επιλύσουμε αυτό το πρόβλημα.</translation>
 <translation id="1795214765651529549">Χρήση κλασικού</translation>
-<translation id="1796105431091975902">Επιλέξτε ένα Ansible Playbook για προσθήκη</translation>
 <translation id="1796588414813960292">Οι λειτουργίες που απαιτούν ήχο δεν θα είναι διαθέσιμες</translation>
 <translation id="1797117170091578105">Παίξτε χρησιμοποιώντας το πληκτρολόγιο του Chromebook. Μπορείτε να προσαρμόσετε τα πλήκτρα για συγκεκριμένες ενέργειες.</translation>
 <translation id="1800502858278951817">Καμία επέκταση δεν ζήτησε να γίνει ανάγνωση και αλλαγή του ιστοτόπου <ph name="SITE_NAME" /></translation>
@@ -926,6 +923,7 @@
 <translation id="1842766183094193446">Είστε βέβαιοι ότι θέλετε να ενεργοποιήσετε τη λειτουργία επίδειξης;</translation>
 <translation id="1845727111305721124">Επιτρέπεται να αναπαράγουν ήχο</translation>
 <translation id="1846308012215045257">Κάντε κλικ για εκτέλεση της προσθήκης <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Αποσύνδεση όταν το καπάκι είναι κλειστό</translation>
 <translation id="184862733444771842">Αίτημα λειτουργίας</translation>
 <translation id="1849016657376805933">Οποιαδήποτε συσκευή HID</translation>
 <translation id="1849186935225320012">Αυτή η σελίδα έχει τον πλήρη έλεγχο των συσκευών MIDI.</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">Έκδοση: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Εμφάνιση αντιστοίχισης πλήκτρων</translation>
 <translation id="1942128823046546853">Ανάγνωση και αλλαγή όλων των δεδομένων σας σε όλους τους ιστοτόπους</translation>
-<translation id="1942600407708803723">Απενεργοποίηση όταν το κάλυμμα είναι κλειστό</translation>
 <translation id="1944528062465413897">Κωδικός σύζευξης Bluetooth:</translation>
 <translation id="1944921356641260203">Βρέθηκε ενημέρωση</translation>
 <translation id="1947136734041527201">Σας επιτρέπει να συνδέεστε σε ιστοτόπους χρησιμοποιώντας τον λογαριασμό που έχετε με μια υπηρεσία ταυτότητας</translation>
@@ -3101,7 +3098,6 @@
 <translation id="389901847090970821">Επιλογή πληκτρολογίου</translation>
 <translation id="3900966090527141178">Εξαγωγή κωδικών πρόσβασης</translation>
 <translation id="3903187154317825986">Ενσωματωμένο πληκτρολόγιο</translation>
-<translation id="3903191712482985591">Προσθήκη playbook</translation>
 <translation id="3904326018476041253">Υπηρεσίες τοποθεσίας</translation>
 <translation id="3904849010307028014">Με βάση την αλληλεπίδρασή σας με έναν ιστότοπο, όπως η τακτική σύνδεση σε έναν λογαριασμό, αυτός ο ιστότοπος μπορεί να εκδώσει ένα διακριτικό αξιοπιστίας στο πρόγραμμα περιήγησής σας. Αργότερα, εάν άλλοι ιστότοποι που επισκέπτεστε ελέγξουν και βρουν ένα έγκυρο διακριτικό αξιοπιστίας, είναι πιο πιθανό να σας συμπεριφέρονται όπως σε έναν πραγματικό χρήστη και όχι όπως σε ένα bot.</translation>
 <translation id="3905761538810670789">Επισκευή εφαρμογής</translation>
@@ -5048,7 +5044,6 @@
 <translation id="5827733057563115968">Πρόβλεψη επόμενης λέξης</translation>
 <translation id="5828545842856466741">Προσθήκη προφίλ…</translation>
 <translation id="5828633471261496623">Εκτύπωση...</translation>
-<translation id="5828797982387013521">Επιλογή εγχειριδίου</translation>
 <translation id="5830205393314753525">Δεν είναι δυνατό το άνοιγμα της εφαρμογής <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Αποθήκευση Σελίδας &amp;Ως...</translation>
 <translation id="5832813618714645810">Προφίλ</translation>
@@ -5940,7 +5935,6 @@
 <translation id="6686665106869989887">Η καρτέλα μεταφέρθηκε δεξιά</translation>
 <translation id="6686817083349815241">Αποθηκεύστε τον κωδικό πρόσβασής σας</translation>
 <translation id="6687079240787935001">Απόκρυψη <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Αίτημα για ανάγνωση και αλλαγή του <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Ζητήστε από το παιδί <ph name="SUPERVISED_USER_NAME" /> να έρθει στον υπολογιστή. Το παιδί σας θα διαβάζει ορισμένες φράσεις σε αυτήν την οθόνη για τη δημιουργία του φωνητικού του μοντέλου.
     <ph name="BR" />
     Εάν το παιδί σας <ph name="SUPERVISED_USER_NAME" /> χρειάζεται βοήθεια με την ανάγνωση, ζητήστε του να επαναλαμβάνει μετά από εσάς. Ψιθυρίζετε μακριά από το μικρόφωνο, έτσι ώστε ο Βοηθός να μάθει τη φωνή του παιδιού σας αντί για τη δική σας.</translation>
@@ -7200,7 +7194,6 @@
 <translation id="7898725031477653577">Να μεταφράζονται πάντα</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Αναζητάτε στοιχεία του προγράμματος περιήγησης; Επισκεφτείτε τη σελίδα</translation>
-<translation id="7903345046358933331">Η σελίδα δεν ανταποκρίνεται. Μπορείτε να περιμένετε μέχρι να ανταποκριθεί ή να την τερματίσετε.</translation>
 <translation id="7903429136755645827">Κάντε κλικ για να προσαρμόσετε τα στοιχεία ελέγχου του παιχνιδιού</translation>
 <translation id="7903742244674067440">Έχετε καταχωρίσει πιστοποιητικά που προσδιορίζουν αυτές τις αρχές έκδοσης πιστοποιητικών</translation>
 <translation id="7903925330883316394">Βοηθητικό πρόγραμμα: <ph name="UTILITY_TYPE" /></translation>
@@ -8113,6 +8106,7 @@
 <translation id="8780123805589053431">Λήψη περιγραφών εικόνων από την Google</translation>
 <translation id="8780443667474968681">Η Φωνητική αναζήτηση απενεργοποιήθηκε.</translation>
 <translation id="8781834595282316166">Νέα καρτέλα στην ομάδα</translation>
+<translation id="8781980678064919987">Τερματισμός λειτουργίας όταν το καπάκι είναι κλειστό</translation>
 <translation id="8782565991310229362">Η εκκίνηση της εφαρμογής kiosk ακυρώθηκε.</translation>
 <translation id="8783834180813871000">Πληκτρολογήστε τον κωδικό σύζευξης του Bluetooth και, στη συνέχεια, πιέστε το πλήκτρο Return ή το Enter.</translation>
 <translation id="8784626084144195648">Μέσος όρος στον Κάδο απορριμάτων</translation>
@@ -8177,7 +8171,6 @@
 <translation id="8846132060409673887">Διαβάστε τις πληροφορίες κατασκευαστή και μοντέλου αυτού του υπολογιστή</translation>
 <translation id="8846163936679269230">Επαναφορά προφίλ eSIM</translation>
 <translation id="8846239054091760429">Μονοφωνικός ήχος, εκκίνηση, Ζωντανοί υπότιτλοι και άλλα</translation>
-<translation id="8847523528195140327">Αποσύνδεση όταν το κάλυμμα είναι κλειστό</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Κρυφή</translation>
 <translation id="8849219423513870962">Ακύρωση της κατάργησης του προφίλ eSIM <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index b4aaf6a..4da4285 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -277,6 +277,7 @@
 <translation id="125220115284141797">Default</translation>
 <translation id="1252987234827889034">Profile error occurred</translation>
 <translation id="1254593899333212300">Direct Internet connection</translation>
+<translation id="1257336506558170607">Export selected certificate</translation>
 <translation id="1258491128795710625">What’s new</translation>
 <translation id="1259152067760398571">Safety check ran yesterday</translation>
 <translation id="1260451001046713751">Always allow pop-ups and redirects from <ph name="HOST" /></translation>
@@ -326,6 +327,7 @@
 <translation id="1307165550267142340">Your PIN was created</translation>
 <translation id="1307431692088049276">Don't ask me again</translation>
 <translation id="1307559529304613120">Oops!  The system failed to store the long-term API access token for this device.</translation>
+<translation id="1312811472299082263">Create from an Ansible playbook or a Crostini backup file</translation>
 <translation id="1313405956111467313">Automatic proxy configuration</translation>
 <translation id="131364520783682672">Caps Lock</translation>
 <translation id="1313660246522271310">You'll be signed out of all sites, including in open tabs</translation>
@@ -563,7 +565,6 @@
 <translation id="1536754031901697553">Disconnecting...</translation>
 <translation id="1537254971476575106">Full-screen magnifier</translation>
 <translation id="15373452373711364">Large mouse cursor</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> is requesting to read and change <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Enable demo mode</translation>
 <translation id="1541346352678737112">No network found</translation>
 <translation id="1542137295869176367">Your sign-in data couldn't be updated</translation>
@@ -725,7 +726,6 @@
 <translation id="1676902103953506022">Credential details for <ph name="USERNAME" /> on <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Can't add <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> left</translation>
-<translation id="1678794218766467608">Lock in sleep mode or when cover is closed</translation>
 <translation id="1679068421605151609">Developer Tools</translation>
 <translation id="1679810534535368772">Are you sure that you want to exit?</translation>
 <translation id="167983332380191032">Management service sent HTTP error.</translation>
@@ -861,7 +861,6 @@
 <translation id="1794051631868188691">Never show <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Send feedback to help us fix this issue.</translation>
 <translation id="1795214765651529549">Use Classic</translation>
-<translation id="1796105431091975902">Select an Ansible playbook to add</translation>
 <translation id="1796588414813960292">Features that need sound won't work</translation>
 <translation id="1797117170091578105">Play using your Chromebook keyboard. You can customise keys to specific actions.</translation>
 <translation id="1800502858278951817">No extensions have requested to read and change <ph name="SITE_NAME" /></translation>
@@ -899,6 +898,7 @@
 <translation id="1822140782238030981">Already a Chrome user? Sign in</translation>
 <translation id="1823098433522728610">This document has sensitive content.</translation>
 <translation id="18245044880483936">Backup data will not count toward your child's Drive storage quota.</translation>
+<translation id="1825320185978744007">Lock when sleeping or when lid is closed</translation>
 <translation id="1825565032302550710">Port must be between 1024 and 65535</translation>
 <translation id="182577151972096764">recently viewed recipes</translation>
 <translation id="18260074040409954">You can use saved passwords on any device. They're saved to <ph name="GOOGLE_PASSWORD_MANAGER" /> for <ph name="EMAIL" />.</translation>
@@ -926,6 +926,7 @@
 <translation id="1842766183094193446">Are you sure that you want to enable demo mode?</translation>
 <translation id="1845727111305721124">Allowed to play sound</translation>
 <translation id="1846308012215045257">Control-click to run <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Sign out when lid is closed</translation>
 <translation id="184862733444771842">Feature request</translation>
 <translation id="1849016657376805933">Any HID device</translation>
 <translation id="1849186935225320012">This page has full control of MIDI devices.</translation>
@@ -1034,7 +1035,6 @@
 <translation id="1941553344801134989">Version: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Show key mapping</translation>
 <translation id="1942128823046546853">Read and change all your data on all websites</translation>
-<translation id="1942600407708803723">Shut down when cover is closed</translation>
 <translation id="1944528062465413897">Bluetooth pairing code</translation>
 <translation id="1944921356641260203">Update found</translation>
 <translation id="1947136734041527201">Lets you sign in to websites using the account that you have with an identity service</translation>
@@ -1112,6 +1112,7 @@
 <translation id="2028449514182362831">Features that need motion sensors won't work</translation>
 <translation id="202918510990975568">Enter your password to configure security and sign-in</translation>
 <translation id="2030455719695904263">Trackpad</translation>
+<translation id="2031385797619033640">Click to allow <ph name="EXTENSIONS_REQUESTING_ACCESS" /> to read and change <ph name="ORIGIN" />:</translation>
 <translation id="2031639749079821948">Your password is saved in your Google Account</translation>
 <translation id="2031914984822377766">Add your preferred <ph name="LINK_BEGIN" />website languages<ph name="LINK_END" />. The top language from the list will be used for translations.</translation>
 <translation id="2033758234986231162">Can't maintain a connection with your phone. Make sure that your phone is close by, unlocked and Bluetooth and Wi-Fi are turned on.</translation>
@@ -1471,6 +1472,7 @@
 <translation id="2328561734797404498">Please restart your device to use <ph name="APP_NAME" />.</translation>
 <translation id="2328636661627946415">When you’re in Incognito mode, sites can only use cookies to see your browsing activity on their own site. Cookies are deleted at the end of the Incognito session.</translation>
 <translation id="2329597144923131178">Sign in to get your bookmarks, history, passwords and other settings on all your devices</translation>
+<translation id="2332115969598251205">Can’t load devices saved to <ph name="PRIMARY_EMAIL" />. Check your Internet connection and try again.</translation>
 <translation id="2332131598580221120">View in store</translation>
 <translation id="2332192922827071008">Open preferences</translation>
 <translation id="2332515770639153015">Enhanced Safe Browsing is on</translation>
@@ -1914,6 +1916,7 @@
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Check Grammar With Spelling</translation>
 <translation id="2753677631968972007">Manually control site permissions.</translation>
+<translation id="2754226775788136540">Looking for Fast Pair devices saved to <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="2754825024506485820">Find the apps that you need, from productivity to entertainment, on the Google Play Store. You can install apps anytime.</translation>
 <translation id="2755349111255270002">Reset this <ph name="DEVICE_TYPE" /></translation>
 <translation id="2755367719610958252">Manage accessibility features</translation>
@@ -2129,6 +2132,7 @@
 <translation id="2942279350258725020">Android messages</translation>
 <translation id="2942560570858569904">Waiting...</translation>
 <translation id="2942581856830209953">Customise this page</translation>
+<translation id="2943268899142471972">Select an Ansible playbook or Crostini backup file</translation>
 <translation id="2944060181911631861">Send usage and diagnostic data. Help improve your Android experience by automatically sending diagnostic, device and app usage data to Google. This will help system and app stability and other improvements. Some aggregate data will also help Google apps and partners, such as Android developers. If your additional Web &amp; App Activity setting is turned on, this data may be saved to your Google Account. <ph name="BEGIN_LINK1" />Find out more<ph name="END_LINK1" /></translation>
 <translation id="2946054015403765210">Go to files</translation>
 <translation id="2946119680249604491">Add connection</translation>
@@ -2969,6 +2973,7 @@
 <translation id="3784472333786002075">Cookies are files created by websites. There are two types of cookies: first-party cookies are created by the site that you visit. The site is shown on the address bar. Third-party cookies are created by other sites. These sites own some of the content, like ads or images, that you see on the website that you visit.</translation>
 <translation id="3785308913036335955">Show Apps Shortcut</translation>
 <translation id="3785727820640310185">Saved passwords for this site</translation>
+<translation id="3787434344076711519">Waiting for translation</translation>
 <translation id="3788301286821743879">The kiosk application could not be launched.</translation>
 <translation id="3788331399335602504">these files</translation>
 <translation id="3788401245189148511">It could:</translation>
@@ -3101,7 +3106,6 @@
 <translation id="389901847090970821">Select keyboard</translation>
 <translation id="3900966090527141178">Export passwords</translation>
 <translation id="3903187154317825986">Built-in keyboard</translation>
-<translation id="3903191712482985591">Add playbook</translation>
 <translation id="3904326018476041253">Location Services</translation>
 <translation id="3904849010307028014">Based on your interaction with a site, like regularly signing in to an account, that site can issue a trust token to your browser. Later, if other sites that you visit check for and find a valid trust token, they're more likely to treat you like a person and not a bot.</translation>
 <translation id="3905761538810670789">Repair app</translation>
@@ -3252,6 +3256,7 @@
 <translation id="4036778507053569103">The policy downloaded from the server is invalid.</translation>
 <translation id="4037084878352560732">Horse</translation>
 <translation id="403725336528835653">Try it first</translation>
+<translation id="4040041015953651705">Language to translate from</translation>
 <translation id="4040105702484676956">Clear site data and permissions for <ph name="SITE_NAME" /> and its installed app?</translation>
 <translation id="4042863763121826131">{NUM_PAGES,plural, =1{Exit Page}other{Exit Pages}}</translation>
 <translation id="4043267180218562935">Cursor size</translation>
@@ -4058,6 +4063,7 @@
 <translation id="4838170306476614339">View your phone's photos, media and notifications</translation>
 <translation id="4838836835474292213">Clipboard read access allowed</translation>
 <translation id="4838907349371614303">Password updated</translation>
+<translation id="4838958829619609362">Selection is not in <ph name="LANGUAGE" /></translation>
 <translation id="4839303808932127586">Sa&amp;ve video as...</translation>
 <translation id="4840096453115567876">Exit Incognito mode anyway?</translation>
 <translation id="4841741146571978176">A required virtual machine does not exist. Please try setting up <ph name="VM_TYPE" /> to continue</translation>
@@ -4826,6 +4832,7 @@
 <translation id="558918721941304263">Loading apps...</translation>
 <translation id="5590418976913374224">Play sound on device start-up</translation>
 <translation id="5592595402373377407">Not enough data available yet.</translation>
+<translation id="5594899180331219722">Select file</translation>
 <translation id="5595307023264033512">Total storage used by sites: <ph name="TOTAL_USAGE" /></translation>
 <translation id="5595485650161345191">Edit address</translation>
 <translation id="5596627076506792578">More options</translation>
@@ -5047,7 +5054,6 @@
 <translation id="5827733057563115968">Next word prediction</translation>
 <translation id="5828545842856466741">Add profile…</translation>
 <translation id="5828633471261496623">Printing...</translation>
-<translation id="5828797982387013521">Select playbook</translation>
 <translation id="5830205393314753525">Can't open <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Save Page &amp;As...</translation>
 <translation id="5832813618714645810">Profiles</translation>
@@ -5059,6 +5065,7 @@
 <translation id="5834581999798853053">About <ph name="TIME" /> minutes left</translation>
 <translation id="5835486486592033703"><ph name="WINDOW_TITLE" /> – Camera or microphone recording</translation>
 <translation id="583673505367439042">Sites can ask to edit files and folders on your device</translation>
+<translation id="5836999627049108525">Language to translate from</translation>
 <translation id="583756221537636748">Case</translation>
 <translation id="5840658767386246331">Search with Google</translation>
 <translation id="5840680448799937675">Files will always be shared offline</translation>
@@ -5567,6 +5574,7 @@
 <translation id="6318944945640833942">Couldn't detect a printer. Please enter printer address again.</translation>
 <translation id="6322370287306604163">Unlock faster with fingerprint</translation>
 <translation id="6322559670748154781">This file is not commonly downloaded and has been blocked by Advanced Protection</translation>
+<translation id="6324083483652497048">Click to allow these extensions to read and change <ph name="ORIGIN" />:</translation>
 <translation id="6324916366299863871">Edit shortcut</translation>
 <translation id="6325191661371220117">Disable auto-launch</translation>
 <translation id="6326175484149238433">Remove from Chrome</translation>
@@ -5939,7 +5947,6 @@
 <translation id="6686665106869989887">Tab moved right</translation>
 <translation id="6686817083349815241">Save your password</translation>
 <translation id="6687079240787935001">Hide <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Requesting to read and change <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Ask <ph name="SUPERVISED_USER_NAME" /> to come to the computer. Your child will be reading a few phrases on this screen to create their voice model.
     <ph name="BR" />
     If <ph name="SUPERVISED_USER_NAME" /> needs help with reading, have your child repeat after you. Whisper away from the mic so that the Assistant learns your child’s voice instead of yours.</translation>
@@ -6598,6 +6605,7 @@
 <translation id="7343372807593926528">Please describe the problem before sending feedback.</translation>
 <translation id="7344585835349671209">Manage HTTPS/SSL certificates on your device</translation>
 <translation id="7345706641791090287">Confirm your password</translation>
+<translation id="7345919885156673810">Selection is not in <ph name="LANGUAGE" /></translation>
 <translation id="7346909386216857016">OK, got it</translation>
 <translation id="7347452120014970266">This will clear all data and cookies stored by <ph name="ORIGIN_NAME" /> and its installed apps</translation>
 <translation id="7347751611463936647">To use this extension, type "<ph name="EXTENSION_KEYWORD" />", then TAB, then your command or search.</translation>
@@ -7199,7 +7207,6 @@
 <translation id="7898725031477653577">Always translate</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Looking for browser components? Visit</translation>
-<translation id="7903345046358933331">The page has become unresponsive. You can wait for it to become responsive or close it.</translation>
 <translation id="7903429136755645827">Click to customise your game controls</translation>
 <translation id="7903742244674067440">You have certificates on file that identify these certificate authorities</translation>
 <translation id="7903925330883316394">Utility: <ph name="UTILITY_TYPE" /></translation>
@@ -8114,6 +8121,7 @@
 <translation id="8780123805589053431">Get image descriptions from Google</translation>
 <translation id="8780443667474968681">Voice search has been turned off.</translation>
 <translation id="8781834595282316166">New Tab in Group</translation>
+<translation id="8781980678064919987">Shut down when lid is closed</translation>
 <translation id="8782565991310229362">Kiosk application launch cancelled.</translation>
 <translation id="8783834180813871000">Type the pairing code then press Return or Enter</translation>
 <translation id="8784626084144195648">Binned Average</translation>
@@ -8178,7 +8186,6 @@
 <translation id="8846132060409673887">Read the manufacturer and model of this computer</translation>
 <translation id="8846163936679269230">Reset eSIM profiles</translation>
 <translation id="8846239054091760429">Mono audio, startup, Live Caption and more</translation>
-<translation id="8847523528195140327">Sign out when cover is closed</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Hidden</translation>
 <translation id="8849219423513870962">Cancel removal of eSIM profile named <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 34444e4..0578584 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -557,7 +557,6 @@
 <translation id="1536754031901697553">Desconectando…</translation>
 <translation id="1537254971476575106">Lupa de pantalla completa</translation>
 <translation id="15373452373711364">Cursor del mouse grande</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> solicita acceso para leer y modificar <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Activar el modo de demostración</translation>
 <translation id="1541346352678737112">No se encontraron redes</translation>
 <translation id="1542137295869176367">No se pudieron actualizar tus datos de acceso.</translation>
@@ -719,7 +718,6 @@
 <translation id="1676902103953506022">Los detalles de las credenciales de <ph name="USERNAME" /> en <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">No se puede agregar la <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Tiempo restante <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Bloquear en modo de suspensión o cuando se cierra la tapa</translation>
 <translation id="1679068421605151609">Herramientas para desarrolladores</translation>
 <translation id="1679810534535368772">¿Confirmas que quieres salir?</translation>
 <translation id="167983332380191032">El servicio de administración envió un error de HTTP.</translation>
@@ -847,7 +845,6 @@
 <translation id="1794051631868188691">No mostrar <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Enviar comentarios para ayudarnos a solucionar este problema</translation>
 <translation id="1795214765651529549">Usar el tema clásico</translation>
-<translation id="1796105431091975902">Elige un playbook de Ansible para agregar</translation>
 <translation id="1796588414813960292">No se habilitarán las funciones que necesitan sonido.</translation>
 <translation id="1797117170091578105">Juega con el teclado de la Chromebook. Puedes personalizar las teclas para que realicen acciones específicas.</translation>
 <translation id="1800502858278951817">Ninguna extensión solicitó leer y modificar <ph name="SITE_NAME" /></translation>
@@ -912,6 +909,7 @@
 <translation id="1842766183094193446">¿Realmente quieres habilitar el modo de demostración?</translation>
 <translation id="1845727111305721124">Puede reproducir sonido</translation>
 <translation id="1846308012215045257">Presionar Ctrl+clic para ejecutar <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Salir cuando se cierra la tapa</translation>
 <translation id="184862733444771842">Solicitud de función</translation>
 <translation id="1849016657376805933">Cualquier dispositivo HID</translation>
 <translation id="1849186935225320012">Esta página tiene el control total de los dispositivos MIDI.</translation>
@@ -1019,7 +1017,6 @@
 <translation id="1941553344801134989">Versión: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Mostrar la asignación de teclas</translation>
 <translation id="1942128823046546853">Leer y cambiar todos tus datos en todos los sitios web</translation>
-<translation id="1942600407708803723">Apagar cuando se cierra la tapa</translation>
 <translation id="1944528062465413897">Código de vinculación Bluetooth:</translation>
 <translation id="1944921356641260203">Actualización encontrada</translation>
 <translation id="1947136734041527201">Te permite acceder a sitios web a través de una cuenta con servicio de identidad</translation>
@@ -2548,6 +2545,7 @@
 <translation id="3406290648907941085">Puede usar datos y dispositivos de realidad virtual</translation>
 <translation id="3406396172897554194">Buscar por idioma o nombre de método de entrada</translation>
 <translation id="3406605057700382950">Mo&amp;strar la barra de favoritos</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{Se importó 1 contraseña al Administrador de contraseñas de Google para <ph name="USER_EMAIL" />}other{Se importaron {NUM_PASSWORDS} contraseñas al Administrador de contraseñas de Google para <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">Saltar a selección</translation>
 <translation id="3413122095806433232">Emisores de certificados: <ph name="LOCATION" /></translation>
@@ -3081,7 +3079,6 @@
 <translation id="389901847090970821">Seleccionar teclado</translation>
 <translation id="3900966090527141178">Exportar contraseñas</translation>
 <translation id="3903187154317825986">Teclado integrado</translation>
-<translation id="3903191712482985591">Agregar playbook</translation>
 <translation id="3904326018476041253">Servicios de ubicación</translation>
 <translation id="3904849010307028014">Un sitio puede emitir un token de confianza para tu navegador en función de tu interacción con ese sitio, por ejemplo, si accedes de manera regular a una cuenta. Más adelante, si otros sitios que visitas buscan y encuentran un token de confianza, es más probable que te traten como una persona y no como un bot.</translation>
 <translation id="3905761538810670789">Reparar aplicación</translation>
@@ -3732,6 +3729,7 @@
 <translation id="4541123282641193691">No se pudo verificar la cuenta. Vuelve a intentarlo o reinicia la Chromebook.</translation>
 <translation id="4541662893742891060">No se pudo conectar a este perfil. Para obtener asistencia técnica, comunícate con tu proveedor.</translation>
 <translation id="4541706525461326392">Se está quitando el perfil. Es posible que este proceso demore unos minutos.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{Se importó 1 contraseña al Administrador de contraseñas de Google en este dispositivo}other{Se importaron {NUM_PASSWORDS} contraseñas al Administrador de contraseñas de Google en este dispositivo}}</translation>
 <translation id="4542520061254486227">Leer los datos en <ph name="WEBSITE_1" /> y <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Administrador de certificados</translation>
 <translation id="4544174279960331769">Avatar azul predeterminado</translation>
@@ -5025,7 +5023,6 @@
 <translation id="5827733057563115968">Predicción de la palabra siguiente</translation>
 <translation id="5828545842856466741">Agregar perfil…</translation>
 <translation id="5828633471261496623">Impresión...</translation>
-<translation id="5828797982387013521">Seleccionar playbook</translation>
 <translation id="5830205393314753525">No se puede abrir <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Guardar p&amp;ágina como...</translation>
 <translation id="5832813618714645810">Perfiles</translation>
@@ -5917,7 +5914,6 @@
 <translation id="6686665106869989887">Se movió la pestaña hacia la derecha</translation>
 <translation id="6686817083349815241">Guardar la contraseña</translation>
 <translation id="6687079240787935001">Ocultar <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Se solicita acceso para leer y modificar <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Pídele a <ph name="SUPERVISED_USER_NAME" /> que se acerque a la computadora. Tu hijo deberá leer algunas frases de esta pantalla para crear su modelo de voz.
     <ph name="BR" />
     Si <ph name="SUPERVISED_USER_NAME" /> necesita ayuda para leer, dile a tu hijo que repita después de ti. Susúrrale lejos del micrófono para que Asistente aprenda la voz de tu hijo en lugar de la tuya.</translation>
@@ -6219,6 +6215,7 @@
 <translation id="6968288415730398122">Ingresa tu contraseña para configurar el bloqueo de pantalla</translation>
 <translation id="6969047215179982698">Desactivar Compartir con Nearby</translation>
 <translation id="6970480684834282392">Tipo de inicio</translation>
+<translation id="6970543303783413625">No se pudieron importar las contraseñas. Solo puedes importar hasta <ph name="COUNT" /> contraseñas a la vez.</translation>
 <translation id="6970856801391541997">Imprimir páginas específicas</translation>
 <translation id="6970861306198150268">Asegúrate de guardar la contraseña actual para este sitio</translation>
 <translation id="6972180789171089114">Audio/video</translation>
@@ -6450,6 +6447,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Salir de la página}other{Salir de las páginas}}</translation>
 <translation id="7207457272187520234">Envía datos de uso y diagnóstico. De forma automática, este dispositivo está enviando a Google datos de diagnóstico y sobre el uso del dispositivo y las apps. Esta información ayudará a lograr la estabilidad de las apps y el sistema, entre otras mejoras. Algunos datos agregados también ayudarán a las apps y los socios de Google, como los desarrolladores de Android. El propietario controla esta configuración. Si habilitaste la Actividad de web y de aplicaciones adicional, es posible que se almacenen estos datos en tu Cuenta de Google.</translation>
 <translation id="7207631048330366454">Buscar apps</translation>
+<translation id="7210471695184432500">Para importar contraseñas al Administrador de contraseñas de Google en este dispositivo, selecciona un archivo CSV</translation>
 <translation id="7210499381659830293">Impresoras de extensiones</translation>
 <translation id="7211783048245131419">Aún no se asignaron interruptores</translation>
 <translation id="7212097698621322584">Ingresa tu PIN actual para cambiarlo. Si no sabes cuál es, deberás restablecer la llave de seguridad y, luego, crear uno nuevo.</translation>
@@ -7174,7 +7172,6 @@
 <translation id="7898725031477653577">Traducir siempre</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">¿Buscas los componentes del navegador? Visita</translation>
-<translation id="7903345046358933331">La página no responde. Puedes esperar a que vuelva a responder o cerrarla.</translation>
 <translation id="7903429136755645827">Haz clic para personalizar los controles de juego</translation>
 <translation id="7903742244674067440">Tienes certificados archivados que identifican estas autoridades de certificación</translation>
 <translation id="7903925330883316394">Utilidad: <ph name="UTILITY_TYPE" /></translation>
@@ -7510,6 +7507,7 @@
 <translation id="8206859287963243715">Celular</translation>
 <translation id="8208216423136871611">No guardar</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Notificación nueva}other{# notificaciones nuevas}}</translation>
+<translation id="821119981794423735">Para importar contraseñas al Administrador de contraseñas de Google de <ph name="USER_EMAIL" />, selecciona un archivo CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Descarga en curso}other{Descargas en curso}}</translation>
 <translation id="8213449224684199188">Ingresaste al modo de foto</translation>
 <translation id="8214489666383623925">Abrir archivo...</translation>
@@ -8088,6 +8086,7 @@
 <translation id="8780123805589053431">Obtener descripciones de imágenes de Google</translation>
 <translation id="8780443667474968681">Se desactivó la búsqueda por voz.</translation>
 <translation id="8781834595282316166">Nueva pestaña en el grupo</translation>
+<translation id="8781980678064919987">Apagar cuando se cierra la tapa</translation>
 <translation id="8782565991310229362">Se canceló el inicio de la aplicación del kiosco.</translation>
 <translation id="8783834180813871000">Ingresa el código de vinculación por Bluetooth y, luego, presiona Intro o la tecla de retorno.</translation>
 <translation id="8784626084144195648">Promedio de datos agrupados</translation>
@@ -8152,7 +8151,6 @@
 <translation id="8846132060409673887">Leer el fabricante y el modelo de esta computadora</translation>
 <translation id="8846163936679269230">Reiniciar los perfiles de eSIM</translation>
 <translation id="8846239054091760429">Audio mono, startup, Subtitulado instantáneo y más</translation>
-<translation id="8847523528195140327">Salir cuando se cierra la tapa</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Oculta</translation>
 <translation id="8849219423513870962">Cancelar la eliminación del perfil de eSIM <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index ec995267..138b5ae 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">Desconectando...</translation>
 <translation id="1537254971476575106">Lupa de pantalla completa</translation>
 <translation id="15373452373711364">Cursor del ratón grande</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> está solicitando leer y cambiar <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Habilitar modo Demo</translation>
 <translation id="1541346352678737112">No se ha encontrado ninguna red</translation>
 <translation id="1542137295869176367">No se han podido actualizar tus datos de inicio de sesión</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022">Detalles de las credenciales de <ph name="USERNAME" /> en <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">No se ha podido añadir <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Queda: <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Bloquear en modo de suspensión o al cerrar la tapa</translation>
 <translation id="1679068421605151609">Herramientas para desarrolladores</translation>
 <translation id="1679810534535368772">¿Seguro que quieres salir?</translation>
 <translation id="167983332380191032">El servicio de gestión ha enviado un error de HTTP.</translation>
@@ -850,7 +848,6 @@
 <translation id="1794051631868188691">No mostrar nunca <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Envíanos un comentario para ayudarnos a solucionar el problema.</translation>
 <translation id="1795214765651529549">Utilizar tema clásico</translation>
-<translation id="1796105431091975902">Selecciona un playbook de Ansible para añadirlo</translation>
 <translation id="1796588414813960292">Las funciones que requieran reproducir sonido no funcionarán</translation>
 <translation id="1797117170091578105">Juega con el teclado de tu Chromebook. Puedes personalizar teclas con acciones específicas.</translation>
 <translation id="1800502858278951817">Ninguna extensión ha solicitado leer y cambiar <ph name="SITE_NAME" /></translation>
@@ -915,6 +912,7 @@
 <translation id="1842766183094193446">¿Seguro que quieres habilitar el modo Demo?</translation>
 <translation id="1845727111305721124">Puede reproducir sonido</translation>
 <translation id="1846308012215045257">Pulsa la tecla Ctrl y haz clic para ejecutar <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Cerrar sesión cuando la tapa esté cerrada</translation>
 <translation id="184862733444771842">Solicitud de función</translation>
 <translation id="1849016657376805933">Cualquier dispositivo HID</translation>
 <translation id="1849186935225320012">Esta página tiene un control absoluto de los dispositivos MIDI.</translation>
@@ -1022,7 +1020,6 @@
 <translation id="1941553344801134989">Versión: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Mostrar asignación de teclas</translation>
 <translation id="1942128823046546853">Leer y cambiar todos tus datos en todos los sitios web</translation>
-<translation id="1942600407708803723">Apagar cuando se cierre la tapa</translation>
 <translation id="1944528062465413897">Código de emparejamiento por Bluetooth:</translation>
 <translation id="1944921356641260203">Actualización encontrada</translation>
 <translation id="1947136734041527201">Permite iniciar sesión en sitios web con la cuenta que tengas con un servicio de identidad</translation>
@@ -2552,6 +2549,7 @@
 <translation id="3406290648907941085">Puede usar datos y dispositivos de realidad virtual</translation>
 <translation id="3406396172897554194">Buscar por idioma o nombre de método de introducción de texto</translation>
 <translation id="3406605057700382950">&amp;Mostrar barra de marcadores</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 contraseña importada al gestor de contraseñas de Google para <ph name="USER_EMAIL" />}other{{NUM_PASSWORDS} contraseñas importadas al gestor de contraseñas de Google para <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">Ir a la selección</translation>
 <translation id="3413122095806433232">Entidades emisoras de certificados: <ph name="LOCATION" /></translation>
@@ -3085,7 +3083,6 @@
 <translation id="389901847090970821">Seleccionar teclado</translation>
 <translation id="3900966090527141178">Exportar contraseñas</translation>
 <translation id="3903187154317825986">Teclado integrado</translation>
-<translation id="3903191712482985591">Añade un playbook</translation>
 <translation id="3904326018476041253">Servicios de ubicación</translation>
 <translation id="3904849010307028014">En función de tu interacción con un sitio (por ejemplo, iniciar sesión de forma habitual con una cuenta), el sitio puede emitir un token de confianza a tu navegador. Después, si otros sitios que visites buscan y encuentran un token de confianza válido, es más probable que te traten como a una persona y no como a un bot.</translation>
 <translation id="3905761538810670789">Reparar aplicación</translation>
@@ -3735,6 +3732,7 @@
 <translation id="4541123282641193691">No se ha podido verificar tu cuenta. Vuelve a intentarlo o reinicia el Chromebook.</translation>
 <translation id="4541662893742891060">No se ha podido conectar a este perfil. Para obtener asistencia técnica, ponte en contacto con tu operador.</translation>
 <translation id="4541706525461326392">Quitando perfil. Este proceso puede durar unos minutos.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 contraseña importada al gestor de contraseñas de Google en este dispositivo}other{{NUM_PASSWORDS} contraseñas importadas al gestor de contraseñas de Google en este dispositivo}}</translation>
 <translation id="4542520061254486227">Leer tus datos en <ph name="WEBSITE_1" /> y en <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Administrador de certificados</translation>
 <translation id="4544174279960331769">Avatar azul predeterminado</translation>
@@ -4584,7 +4582,7 @@
 <translation id="5392192690789334093">Con permiso para enviar notificaciones</translation>
 <translation id="5393761864111565424">{COUNT,plural, =1{Enlace}other{# enlaces}}</translation>
 <translation id="5396325212236512832">Inicia sesión automáticamente en sitios y aplicaciones con las credenciales guardadas. Si se desactiva esta opción, se te pedirá confirmación cada vez que vayas a iniciar sesión en un sitio o una aplicación.</translation>
-<translation id="5397378439569041789">Registrar dispositivo de kiosco o señalización</translation>
+<translation id="5397378439569041789">Registrar dispositivo de Kiosk y Signage</translation>
 <translation id="5397794290049113714">Tú</translation>
 <translation id="5398497406011404839">Marcadores ocultos</translation>
 <translation id="5398572795982417028">La referencia de página está fuera de los límites admitidos, el límite es <ph name="MAXIMUM_PAGE" /></translation>
@@ -5028,7 +5026,6 @@
 <translation id="5827733057563115968">Sugerencia de siguiente palabra</translation>
 <translation id="5828545842856466741">Añadir perfil...</translation>
 <translation id="5828633471261496623">Imprimiendo...</translation>
-<translation id="5828797982387013521">Seleccionar playbook</translation>
 <translation id="5830205393314753525">No se puede abrir <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Guardar página &amp;como...</translation>
 <translation id="5832813618714645810">Perfiles</translation>
@@ -5920,7 +5917,6 @@
 <translation id="6686665106869989887">Pestaña movida a la derecha</translation>
 <translation id="6686817083349815241">Guardar tu contraseña</translation>
 <translation id="6687079240787935001">Ocultar <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Solicitando leer y cambiar <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Dile a <ph name="SUPERVISED_USER_NAME" /> que se acerque al ordenador. Para crear su modelo de voz, deberá leer algunas frases que aparecerán en la pantalla.
     <ph name="BR" />
     Si <ph name="SUPERVISED_USER_NAME" /> necesita ayuda para leer, pídele que repita las frases después de ti. Léelas en voz baja y lejos del micrófono para que el Asistente aprenda su voz, no la tuya.</translation>
@@ -6222,6 +6218,7 @@
 <translation id="6968288415730398122">Introduce tu contraseña para configurar el bloqueo de pantalla</translation>
 <translation id="6969047215179982698">Desactivar Compartir con Nearby</translation>
 <translation id="6970480684834282392">Tipo de inicio</translation>
+<translation id="6970543303783413625">No se pueden importar las contraseñas. Solo puedes importar un máximo de <ph name="COUNT" /> contraseñas a la vez.</translation>
 <translation id="6970856801391541997">Imprimir páginas específicas</translation>
 <translation id="6970861306198150268">Asegúrate de guardar tu contraseña actual para este sitio</translation>
 <translation id="6972180789171089114">Audio/Vídeo</translation>
@@ -6453,6 +6450,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Salir de la página}other{Salir de las páginas}}</translation>
 <translation id="7207457272187520234">Envía datos de uso y diagnóstico. Este dispositivo envía automáticamente a Google datos de diagnóstico, del dispositivo y del uso de las aplicaciones. Los datos servirán para aumentar la estabilidad de las aplicaciones y del sistema y realizar otras mejoras. Parte de los datos agregados también ayudarán a las aplicaciones y a los partners de Google, como los desarrolladores de Android. El propietario ha aplicado este ajuste. Si la opción Actividad en la Web y en Aplicaciones Adicional está activada, es posible que estos datos se guarden en tu cuenta de Google.</translation>
 <translation id="7207631048330366454">Buscar aplicaciones</translation>
+<translation id="7210471695184432500">Para importar contraseñas al gestor de contraseñas de Google en este dispositivo, selecciona un archivo CSV</translation>
 <translation id="7210499381659830293">Impresoras de extensiones</translation>
 <translation id="7211783048245131419">Aún no se ha asignado ningún interruptor</translation>
 <translation id="7212097698621322584">Introduce tu PIN actual para cambiarlo. Si no sabes cuál es tu PIN, tendrás que restablecer la llave de seguridad y crear un nuevo PIN.</translation>
@@ -7177,7 +7175,6 @@
 <translation id="7898725031477653577">Traducir siempre</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">¿Buscas componentes del navegador? Visita</translation>
-<translation id="7903345046358933331">La página no responde. Puedes esperar a que vuelva a responder o cerrarla.</translation>
 <translation id="7903429136755645827">Haz clic para personalizar los controles de juegos</translation>
 <translation id="7903742244674067440">Tienes certificados registrados que identifican a estas entidades</translation>
 <translation id="7903925330883316394">Utilidad: <ph name="UTILITY_TYPE" /></translation>
@@ -7513,6 +7510,7 @@
 <translation id="8206859287963243715">Móvil</translation>
 <translation id="8208216423136871611">No guardar</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Notificación nueva}other{# notificaciones nuevas}}</translation>
+<translation id="821119981794423735">Para importar contraseñas al gestor de contraseñas de Google para <ph name="USER_EMAIL" />, selecciona un archivo CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Descarga en curso}other{Descargas en curso}}</translation>
 <translation id="8213449224684199188">Se ha cambiado al modo de foto</translation>
 <translation id="8214489666383623925">Abrir archivo...</translation>
@@ -8091,6 +8089,7 @@
 <translation id="8780123805589053431">Obtener descripciones de imágenes de Google</translation>
 <translation id="8780443667474968681">Se ha desactivado la búsqueda por voz.</translation>
 <translation id="8781834595282316166">Nueva pestaña en el grupo</translation>
+<translation id="8781980678064919987">Apagar cuando la tapa esté cerrada</translation>
 <translation id="8782565991310229362">Se ha cancelado el inicio de la aplicación del kiosco.</translation>
 <translation id="8783834180813871000">Escribe el código de emparejamiento por Bluetooth y, a continuación, pulsa Intro.</translation>
 <translation id="8784626084144195648">Media de datos agrupados</translation>
@@ -8155,7 +8154,6 @@
 <translation id="8846132060409673887">Consultar el fabricante y el modelo de este ordenador</translation>
 <translation id="8846163936679269230">Borrar perfiles de eSIM</translation>
 <translation id="8846239054091760429">Audio en mono, opciones de inicio, Subtítulos automáticos y más</translation>
-<translation id="8847523528195140327">Cerrar sesión cuando se cierre la tapa</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Oculto</translation>
 <translation id="8849219423513870962">Cancelar la retirada del perfil de eSIM con nombre <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 692b220..c495be3 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">Ühenduse katkestamine …</translation>
 <translation id="1537254971476575106">Täisekraani luup</translation>
 <translation id="15373452373711364">Suur hiirekursor</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> taotleb luba saidi <ph name="ORIGIN" /> lugemiseks ja muutmiseks</translation>
 <translation id="1540605929960647700">Demorežiimi lubamine</translation>
 <translation id="1541346352678737112">Võrku ei leitud</translation>
 <translation id="1542137295869176367">Teie sisselogimisandmeid ei saanud värskendada</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">Kasutaja <ph name="USERNAME" /> mandaadi üksikasjad domeenil <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Laiendust <ph name="EXTENSION_TYPE_PARAMETER" /> ei saa lisada</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> tühjenemiseni</translation>
-<translation id="1678794218766467608">Lukusta unerežiimi või kui kaas on suletud</translation>
 <translation id="1679068421605151609">Arendaja tööriistad</translation>
 <translation id="1679810534535368772">Kas soovite kindlasti väljuda?</translation>
 <translation id="167983332380191032">Haldusteenus edastas HTTP vea.</translation>
@@ -853,7 +851,6 @@
 <translation id="1794051631868188691">Ära kunagi näita kaupmeest <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Saatke tagasisidet, et aidata meil see probleem lahendada.</translation>
 <translation id="1795214765651529549">Kasuta klassikalist</translation>
-<translation id="1796105431091975902">Valige lisatav Ansible'i juhend</translation>
 <translation id="1796588414813960292">Heli vajavad funktsioonid ei tööta</translation>
 <translation id="1797117170091578105">Mängige oma Chromebooki klaviatuuri kasutades. Saate klahvidele konkreetsed toimingud määrata.</translation>
 <translation id="1800502858278951817">Ükski rakendus pole taotlenud saidi <ph name="SITE_NAME" /> lugemist ja muutmist</translation>
@@ -918,6 +915,7 @@
 <translation id="1842766183094193446">Kas soovite kindlasti demorežiimi lubada?</translation>
 <translation id="1845727111305721124">Lubatud esitada heli</translation>
 <translation id="1846308012215045257">Pistikprogrammi <ph name="PLUGIN_NAME" /> käitamiseks klõpsake juhtklahvil</translation>
+<translation id="1848219224579402567">Logi välja, kui kaas on suletud</translation>
 <translation id="184862733444771842">Funktsiooni taotlemine</translation>
 <translation id="1849016657376805933">Mis tahes HID-seade</translation>
 <translation id="1849186935225320012">See leht saab MIDI-seadmeid täielikult juhtida.</translation>
@@ -1025,7 +1023,6 @@
 <translation id="1941553344801134989">Versioon: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Kuva klahvide vastendamine</translation>
 <translation id="1942128823046546853">Kõigil veebisaitidel kõigi teie andmete lugemine ja muutmine</translation>
-<translation id="1942600407708803723">Lülita välja, kui kaas on suletud</translation>
 <translation id="1944528062465413897">Bluetoothi sidumiskood:</translation>
 <translation id="1944921356641260203">Leiti värskendus</translation>
 <translation id="1947136734041527201">Logime teid veebisaitidele sisse, kasutades teie isikut tuvastavas teenuses olevat kontot</translation>
@@ -1717,6 +1714,7 @@
 <translation id="2568774940984945469">Teaberiba ümbris</translation>
 <translation id="2571655996835834626">Muutke seadeid, mis juhivad veebisaitide juurdepääsu funktsioonidele, näiteks küpsistele, JavaScriptile, pistikprogrammidele, asukoha määramise teenusele, mikrofonile, kaamerale jms.</translation>
 <translation id="2572032849266859634">On antud kirjutuskaitstud juurdepääs seadmele <ph name="VOLUME_NAME" />.</translation>
+<translation id="2573276323521243649">Tagasi avatari valimise lehelt</translation>
 <translation id="2573417407488272418">Varundage rakendused ja failid enne versiooniuuendust jaotisse Failid &gt; Minu failid.</translation>
 <translation id="2573831315551295105">Lüliti määramine toimingule „<ph name="ACTION" />“</translation>
 <translation id="2575247648642144396">Ikoon on nähtav, kui laiendus saab praegusel lehel toimida. Laienduse kasutamiseks klõpsake ikoonil või vajutage klahvikombinatsiooni <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3091,7 +3089,6 @@
 <translation id="389901847090970821">Klaviatuuri valimine</translation>
 <translation id="3900966090527141178">Paroolide eksportimine</translation>
 <translation id="3903187154317825986">Sisseehitatud klaviatuur</translation>
-<translation id="3903191712482985591">Lisa juhend</translation>
 <translation id="3904326018476041253">Asukohateenused</translation>
 <translation id="3904849010307028014">Teie interaktsioonide põhjal saidiga (nt kontole regulaarselt sisse logimine) saab see sait teie brauserile väljastada usaldusmärgi. Hiljem, kui teised külastatavad saidid kontrollivad kehtivat usaldusmärki ja leiavad selle, kohtlevad nad teid suurema tõenäosusega inimesena, mitte robotina.</translation>
 <translation id="3905761538810670789">Paranda rakendust</translation>
@@ -5036,7 +5033,6 @@
 <translation id="5827733057563115968">Järgmise sõna ennustamine</translation>
 <translation id="5828545842856466741">Lisa profiil …</translation>
 <translation id="5828633471261496623">Printimine ...</translation>
-<translation id="5828797982387013521">Juhendi valimine</translation>
 <translation id="5830205393314753525">Rakendust <ph name="APP_NAME" /> ei saa avada</translation>
 <translation id="5830720307094128296">Salvesta leht &amp;nimega...</translation>
 <translation id="5832813618714645810">Profiilid</translation>
@@ -5928,7 +5924,6 @@
 <translation id="6686665106869989887">Vaheleht teisaldati paremale</translation>
 <translation id="6686817083349815241">Parooli salvestamine</translation>
 <translation id="6687079240787935001">Peida <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Saidi <ph name="ORIGIN" /> lugemise ja muutmise taotlemine:</translation>
 <translation id="6689714331348768690">Paluge kasutajal <ph name="SUPERVISED_USER_NAME" /> arvuti juurde tulla. Häälemudeli loomiseks peab laps ekraanikuvalt lugema ette mõned fraasid.
     <ph name="BR" />
     Kui <ph name="SUPERVISED_USER_NAME" /> vajab lugemisel abi, paluge lapsel korrata enda järel. Sosistage mikrofonist eemal, et assistent kuuleks teie hääle asemel lapse häält.</translation>
@@ -6410,6 +6405,7 @@
 <translation id="7138678301420049075">Muu</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> kasutab teie mikrofoni</translation>
 <translation id="7141105143012495934">Sisselogimine ebaõnnestus, kuna teie konto üksikasju ei saanud tuua. Võtke ühendust administraatoriga või proovige uuesti.</translation>
+<translation id="7141844554192012199">Kontroll</translation>
 <translation id="7144878232160441200">Proovi uuesti</translation>
 <translation id="7149839598364933473">Teisendage see seade operatsioonisüsteemiga <ph name="DEVICE_OS" /> seadmeks.</translation>
 <translation id="7149893636342594995">Viimased 24 tundi</translation>
@@ -7187,7 +7183,6 @@
 <translation id="7898725031477653577">Tõlgi alati</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Kas otsite brauseri komponente? Külastage saiti</translation>
-<translation id="7903345046358933331">Leht ei reageeri. Võite oodata lehe reageerimist või selle sulgeda.</translation>
 <translation id="7903429136755645827">Klõpsake, et mängu juhtnuppe kohandada</translation>
 <translation id="7903742244674067440">Teil on neid sertimisorganeid tuvastavad sertifikaadid</translation>
 <translation id="7903925330883316394">Utiliit: <ph name="UTILITY_TYPE" /></translation>
@@ -8102,6 +8097,7 @@
 <translation id="8780123805589053431">Google'ist piltide kirjelduste hankimine</translation>
 <translation id="8780443667474968681">Häälotsing on välja lülitatud.</translation>
 <translation id="8781834595282316166">Uus vaheleht grupis</translation>
+<translation id="8781980678064919987">Lülita välja, kui kaas on suletud</translation>
 <translation id="8782565991310229362">Kioski rakenduse käivitamine tühistati.</translation>
 <translation id="8783834180813871000">Sisestage Bluetoothi sidumiskood ja vajutage seejärel sisestusklahvi.</translation>
 <translation id="8784626084144195648">Rühmitatud keskmine</translation>
@@ -8166,7 +8162,6 @@
 <translation id="8846132060409673887">Arvuti tootja ja mudeli andmete lugemine</translation>
 <translation id="8846163936679269230">eSIM-i profiilide lähtestamine</translation>
 <translation id="8846239054091760429">Monoheli, käivitamine, reaalajas subtiitrid ja muu</translation>
-<translation id="8847523528195140327">Logi välja, kui kaas on suletud</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Peidetud</translation>
 <translation id="8849219423513870962">Tühista eSIM-i profiili <ph name="PROFILE_NAME" /> eemaldamine</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index d1c1194d..4380811 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">Deskonektatzen…</translation>
 <translation id="1537254971476575106">Pantaila osoko lupa</translation>
 <translation id="15373452373711364">Saguaren kurtsore handia</translation>
-<translation id="1539630663098418038"><ph name="ORIGIN" /> irakurri eta aldatzeko eskatzen ari da <ph name="EXTENSIONS_REQUESTING_ACCESS" /></translation>
 <translation id="1540605929960647700">Gaitu demo modua</translation>
 <translation id="1541346352678737112">Ez da aurkitu sarerik</translation>
 <translation id="1542137295869176367">Ezin izan dira eguneratu saioa hasteko datuak</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022"><ph name="USERNAME" /> erabiltzaileak <ph name="DOMAIN" /> domeinuan dituen kredentzialen xehetasunak</translation>
 <translation id="1677306805708094828">Ezin da gehitu <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> geratzen dira</translation>
-<translation id="1678794218766467608">Blokeatu bateria aurrezteko moduan edo estalkia ixtean</translation>
 <translation id="1679068421605151609">Garatzaileen tresnak</translation>
 <translation id="1679810534535368772">Ziur irten nahi duzula?</translation>
 <translation id="167983332380191032">HTTParen errore bat bidali du kudeaketa-zerbitzuak.</translation>
@@ -850,7 +848,6 @@
 <translation id="1794051631868188691">Ez erakutsi inoiz <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Bidali informazioa arazoa konpon dezagun.</translation>
 <translation id="1795214765651529549">Erabili Klasikoa</translation>
-<translation id="1796105431091975902">Hautatu gehitu beharreko Ansible-ren gida</translation>
 <translation id="1796588414813960292">Soinua behar duten eginbideek ez dute funtzionatuko</translation>
 <translation id="1797117170091578105">Jokatu Chromebook-aren teklatua erabilita. Teklak pertsonaliza ditzakezu ekintza jakin batzuk egin ditzaten.</translation>
 <translation id="1800502858278951817">Luzapenek ez dute eskatu <ph name="SITE_NAME" /> irakurtzeko edo aldatzeko baimenik</translation>
@@ -915,6 +912,7 @@
 <translation id="1842766183094193446">Ziur demo modua gaitu nahi duzula?</translation>
 <translation id="1845727111305721124">Soinua erreproduzi dezakete</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> exekutatzeko, egin iezaiozu klik Kontrol tekla sakatuta daukazula</translation>
+<translation id="1848219224579402567">Amaitu saioa estalkia itxiz gero</translation>
 <translation id="184862733444771842">Eginbide-eskaera</translation>
 <translation id="1849016657376805933">HID bidezko edozein gailu</translation>
 <translation id="1849186935225320012">Orriak MIDI gailuen kontrol osoa du.</translation>
@@ -1022,7 +1020,6 @@
 <translation id="1941553344801134989">Bertsioa: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Erakutsi teklen esleipena</translation>
 <translation id="1942128823046546853">Edozein webgunetan dauzkazun datu guztiak irakurri eta aldatu</translation>
-<translation id="1942600407708803723">Itzali estalkia ixtean</translation>
 <translation id="1944528062465413897">Bluetooth bidezko konexioaren parekatze-kodea:</translation>
 <translation id="1944921356641260203">Eguneratzea aurkitu da</translation>
 <translation id="1947136734041527201">Aukera honi esker, identitate-zerbitzu bateko kontuaren bidez webguneetan saioa has dezakezu</translation>
@@ -1711,6 +1708,7 @@
 <translation id="2568774940984945469">Informazio-barraren edukiontzia</translation>
 <translation id="2571655996835834626">Aldatu webguneek darabiltzaten eginbideen baimenak kontrolatzen dituzten ezarpenak; besteak beste, cookieak, JavaScript, pluginak, geokokapena, mikrofonoa eta kamera.</translation>
 <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> bolumenean irakurtzeko sarbidea bakarrik eman da.</translation>
+<translation id="2573276323521243649">Abatarra hautatzeko orrian atzera egiteko botoia</translation>
 <translation id="2573417407488272418">Bertsio-berritu aurretik, egin aplikazioen eta fitxategien babeskopiak Fitxategiak &gt; Nire fitxategiak atalean.</translation>
 <translation id="2573831315551295105">Esleitu erabilerraztasun-etengailu bat "<ph name="ACTION" />" ekintzari</translation>
 <translation id="2575247648642144396">Ikono hau ikusgai egongo da luzapena orri honetan ekintzak egin ditzakeenean. Luzapena erabiltzeko, sakatu ikonoa edo <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3085,7 +3083,6 @@
 <translation id="389901847090970821">Hautatu teklatua</translation>
 <translation id="3900966090527141178">Esportatu pasahitzak</translation>
 <translation id="3903187154317825986">Teklatu integratua</translation>
-<translation id="3903191712482985591">Gehitu gida bat</translation>
 <translation id="3904326018476041253">Kokapen-zerbitzuak</translation>
 <translation id="3904849010307028014">Webgune batekin izandako interakzioa oinarri hartuta (esaterako, kontu batean saioa maiz hasten baduzu), webgune horrek fidagarritasun-token bat eman diezaioke arakatzaileari. Beranduago, bisitatzen dituzun beste webgune batzuek balio duen fidagarritasun-token bat bilatzen eta aurkitzen badute, probabilitate handiagoarekin tratatuko zaituzte pertsona gisa, eta ez robot gisa.</translation>
 <translation id="3905761538810670789">Konpondu aplikazioa</translation>
@@ -5028,7 +5025,6 @@
 <translation id="5827733057563115968">Hurrengo hitzaren iragarpena</translation>
 <translation id="5828545842856466741">Gehitu profil bat…</translation>
 <translation id="5828633471261496623">Inprimatzen…</translation>
-<translation id="5828797982387013521">Hautatu gida bat</translation>
 <translation id="5830205393314753525">Ezin da ireki <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Gorde orria &amp;honela…</translation>
 <translation id="5832813618714645810">Profilak</translation>
@@ -5919,7 +5915,6 @@
 <translation id="6686665106869989887">Eskuinera eraman da fitxa</translation>
 <translation id="6686817083349815241">Gorde zure pasahitza</translation>
 <translation id="6687079240787935001">Ezkutatu <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> irakurri eta aldatzeko eskatzen:</translation>
 <translation id="6689714331348768690">Eskatu <ph name="SUPERVISED_USER_NAME" /> erabiltzaileari ordenagailura hurbiltzeko. Haurrak pantaila honetako esaldi batzuk irakurri beharko ditu bere ahots-eredua sortzeko.
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" /> erabiltzaileak irakurtzen ez badaki, eska iezaiozu zuk esandakoa errepika dezala. Xuxurla iezaiozu zer esan behar duen mikrofonotik urrun, Laguntzailea zerbitzuak haurraren ahotsa ikas dezan, eta ez zurea.</translation>
@@ -6401,6 +6396,7 @@
 <translation id="7138678301420049075">Beste bat</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> mikrofonoa erabiltzen ari da</translation>
 <translation id="7141105143012495934">Ezin izan da hasi saioa, ezin izan direlako eskuratu kontuaren xehetasunak. Jarri administratzailearekin harremanetan edo saiatu berriro.</translation>
+<translation id="7141844554192012199">Egiaztapena</translation>
 <translation id="7144878232160441200">Saiatu berriro</translation>
 <translation id="7149839598364933473">Bihurtu gailu hau <ph name="DEVICE_OS" /> darabilen gailu.</translation>
 <translation id="7149893636342594995">Azken 24 orduetakoak</translation>
@@ -7177,7 +7173,6 @@
 <translation id="7898725031477653577">Itzuli beti</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Arakatzailearen osagaien bila zabiltza? Joan helbide honetara:</translation>
-<translation id="7903345046358933331">Orri honek ez du erantzuten. Itxaron orriak erantzun arte, edo itxi ezazu.</translation>
 <translation id="7903429136755645827">Jokoak kontrolatzeko aukerak pertsonalizatzeko, egin klik hemen</translation>
 <translation id="7903742244674067440">Ziurtagiri-emaile hauek identifikatzen dituzten ziurtagiriak dituzu erregistratuta</translation>
 <translation id="7903925330883316394">Zerbitzu-aplikazioaren prozesua: <ph name="UTILITY_TYPE" /></translation>
@@ -8091,6 +8086,7 @@
 <translation id="8780123805589053431">Lortu Google-ren irudi-azalpenak</translation>
 <translation id="8780443667474968681">Desaktibatuta dago ahozko bilaketa.</translation>
 <translation id="8781834595282316166">Gehitu fitxa bat taldean</translation>
+<translation id="8781980678064919987">Itzali estalkia itxiz gero</translation>
 <translation id="8782565991310229362">Aplikazio espezializatua abiarazteari utzi zaio.</translation>
 <translation id="8783834180813871000">Idatzi Bluetooth bidezko konexioaren parekatze-kodea eta sakatu Itzuli edo Sartu.</translation>
 <translation id="8784626084144195648">Denbora-tartetan adierazitako batezbestekoa</translation>
@@ -8155,7 +8151,6 @@
 <translation id="8846132060409673887">Irakurri ordenagailuaren fabrikatzaileari eta modeloari buruzko informazioa</translation>
 <translation id="8846163936679269230">Berrezarri eSIMaren profilak</translation>
 <translation id="8846239054091760429">Audio monofonikoa, abioa, Istanteko azpitituluak eta beste</translation>
-<translation id="8847523528195140327">Amaitu saioa estalkia ixtean</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Ezkutatuta</translation>
 <translation id="8849219423513870962">Utzi <ph name="PROFILE_NAME" /> izeneko eSIMaren profila kentzeari</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 8b817fa5..ab076fe 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -561,7 +561,6 @@
 <translation id="1536754031901697553">درحال قطع اتصال...</translation>
 <translation id="1537254971476575106">ذره‌بین تمام‌صفحه</translation>
 <translation id="15373452373711364">نشانگر موشواره بزرگ</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> درخواست خواندن و تغییر <ph name="ORIGIN" /> را دارد</translation>
 <translation id="1540605929960647700">فعال کردن حالت نمایشی</translation>
 <translation id="1541346352678737112">شبکه‌ای پیدا نشد</translation>
 <translation id="1542137295869176367">داده‌های ورود به سیستم به‌روزرسانی نشد</translation>
@@ -723,7 +722,6 @@
 <translation id="1676902103953506022">جزئیات اطلاعات کاربری <ph name="USERNAME" /> در <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">نمی‌توان <ph name="EXTENSION_TYPE_PARAMETER" /> را اضافه کرد</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> باقی‌مانده</translation>
-<translation id="1678794218766467608">قفل شدن در حالت خواب یا وقتی درپوش بسته می‌شود</translation>
 <translation id="1679068421605151609">ابزار برنامه‌نویس</translation>
 <translation id="1679810534535368772">مطمئنید می‌خواهید خارج شوید؟</translation>
 <translation id="167983332380191032">‏سرویس مدیریت خطای HTTP (اچ‌تی‌تی‌پی) ارسال کرد.</translation>
@@ -859,7 +857,6 @@
 <translation id="1794051631868188691">هرگز <ph name="MERCHANT" /> نشان داده نشود</translation>
 <translation id="1794791083288629568">برای کمک به ما در رفع این مشکل بازخورد ارسال کنید.</translation>
 <translation id="1795214765651529549">استفاده از کلاسیک</translation>
-<translation id="1796105431091975902">‏«دفترچه Ansible» را برای افزودن انتخاب کنید</translation>
 <translation id="1796588414813960292">ویژگی‌هایی که به صدا نیاز دارند کار نخواهند کرد</translation>
 <translation id="1797117170091578105">‏بااستفاده از صفحه‌کلید Chromebook بازی کنید. می‌توانید کلیدها را برای کنش‌های خاصی سفارشی کنید.</translation>
 <translation id="1800502858278951817">هیچ افزونه‌ای برای خواندن و تغییر دادن <ph name="SITE_NAME" /> درخواست نکرده است</translation>
@@ -924,6 +921,7 @@
 <translation id="1842766183094193446">مطمئنید می‌خواهید حالت نمایشی را فعال کنید؟</translation>
 <translation id="1845727111305721124">اجازه دارد صدا پخش کند</translation>
 <translation id="1846308012215045257">برای اجرای <ph name="PLUGIN_NAME" /> کنترل-کلیک کنید</translation>
+<translation id="1848219224579402567">خروج از سیستم، وقتی دستگاه بسته می‌شود</translation>
 <translation id="184862733444771842">درخواست ویژگی</translation>
 <translation id="1849016657376805933">‏همه دستگاه‌های HID</translation>
 <translation id="1849186935225320012">‏این صفحه کنترل کامل دستگاه‌های MIDI را دارد.</translation>
@@ -1031,7 +1029,6 @@
 <translation id="1941553344801134989">نسخه: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">نمایش نگاشت کلید</translation>
 <translation id="1942128823046546853">همه داده‌های شما را در همه وب‌سایت‌ها بخواند و تغییر دهد</translation>
-<translation id="1942600407708803723">خاموش شدن دستگاه، وقتی درپوش بسته می‌شود</translation>
 <translation id="1944528062465413897">کد مرتبط‌سازی بلوتوث:</translation>
 <translation id="1944921356641260203">به‌روزرسانی پیدا شد</translation>
 <translation id="1947136734041527201">مجاز می‌شوید بااستفاده از حسابی که در سرویس تعیین هویت دارید به سیستم سایت وارد شوید</translation>
@@ -1723,6 +1720,7 @@
 <translation id="2568774940984945469">قسمت نوار اطلاعات</translation>
 <translation id="2571655996835834626">تنظیماتی را تغییر دهید که دسترسی وب‌سایت‌ها را به ویژگی‌هایی مثل کوکی‌ها، جاوا اسکریپت، افزایه، موقعیت جغرافیایی، میکروفون، دوربین و غیره کنترل می‌کنند.</translation>
 <translation id="2572032849266859634">مجوز دسترسی فقط خواندنی به <ph name="VOLUME_NAME" /> صادر شد.</translation>
+<translation id="2573276323521243649">برگشتن از صفحه انتخاب چهره‌نما</translation>
 <translation id="2573417407488272418">‏پیش‌از ارتقا، برنامه‌ها و فایل‌ها را در «Files &gt; فایل‌های من» پشتیبان‌گیری کنید.</translation>
 <translation id="2573831315551295105">اختصاص دادن کلید به کنش «<ph name="ACTION" />»</translation>
 <translation id="2575247648642144396">وقتی برنامه افزودنی بتواند در صفحه کنونی کار کند این نماد قابل مشاهده خواهد بود. با کلیک کردن روی نماد یا با فشار دادن <ph name="EXTENSION_SHORTCUT" /> از این برنامه افزودنی استفاده کنید.</translation>
@@ -3097,7 +3095,6 @@
 <translation id="389901847090970821">انتخاب صفحه‌کلید</translation>
 <translation id="3900966090527141178">صادر کردن گذرواژه‌ها</translation>
 <translation id="3903187154317825986">صفحه‌کلید داخلی</translation>
-<translation id="3903191712482985591">افزودن دفترچه</translation>
 <translation id="3904326018476041253">خدمات مکان</translation>
 <translation id="3904849010307028014">براساس تعاملتان با یک سایت (مثلاً مرتباً وارد شدن به سیستم حسابی خاص)، این سایت می‌تواند کد اطمینان برای مرورگرتان صادر کنند. بعداً، اگر سایت‌های دیگری که از آن‌ها بازدید می‌کنید کد اطمینان معتبری را جستجو و پیدا کنند، احتمال اینکه با شما مثل یک انسان (و نه ربات) برخورد کنند بیشتر است.</translation>
 <translation id="3905761538810670789">تعمیر برنامه</translation>
@@ -5043,7 +5040,6 @@
 <translation id="5827733057563115968">پیش‌بینی کلمه بعد</translation>
 <translation id="5828545842856466741">افزودن نمایه…</translation>
 <translation id="5828633471261496623">در حال چاپ...</translation>
-<translation id="5828797982387013521">انتخاب دفترچه</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> باز نمی‌شود</translation>
 <translation id="5830720307094128296">ذخیره صفحه &amp;بعنوان...</translation>
 <translation id="5832813618714645810">نمایه‌ها</translation>
@@ -5937,7 +5933,6 @@
 <translation id="6686665106869989887">برگه به راست منتقل شد</translation>
 <translation id="6686817083349815241">ذخیره گذرواژه‌تان</translation>
 <translation id="6687079240787935001">پنهان کردن <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">درخواست خواندن و تغییر <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">از <ph name="SUPERVISED_USER_NAME" /> بخواهید پای رایانه بیاید. فرزندتان چند عبارت را از روی صفحه می‌خواند تا مدل صوتی‌اش ایجاد شود.
     <ph name="BR" />
     اگر <ph name="SUPERVISED_USER_NAME" /> هنگام خواندن به کمک نیاز داشت، از او بخواهید عبارات را بعداز شما تکرار کند. از میکروفون فاصله بگیرید تا «دستیار» به‌جای صدای شما، صدای فرزندتان را یاد بگیرد.</translation>
@@ -6419,6 +6414,7 @@
 <translation id="7138678301420049075">دیگر</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> درحال استفاده از میکروفون است</translation>
 <translation id="7141105143012495934">به دلیل اینکه جزئيات حساب شما بازیابی نشد، ورود به سیستم ناموفق بود. لطفاً با سرپرستتان تماس بگیرید یا دوباره امتحان کنید.</translation>
+<translation id="7141844554192012199">بررسی</translation>
 <translation id="7144878232160441200">سعی مجدد</translation>
 <translation id="7149839598364933473">تبدیل این دستگاه به دستگاه <ph name="DEVICE_OS" />.</translation>
 <translation id="7149893636342594995">۲۴ ساعت گذشته</translation>
@@ -7184,7 +7180,7 @@
 <translation id="7887334752153342268">کپی‌برداری</translation>
 <translation id="7887864092952184874">موشواره بلوتوث مرتبط شد</translation>
 <translation id="7889371445710865055">تغییر زبان تایپ صوتی</translation>
-<translation id="7890147169288018054">دیدن اطلاعات شبکه، مانند «نشانی واد» یا «واپایش دسترسی رسانه» شما</translation>
+<translation id="7890147169288018054">دیدن اطلاعات شبکه، مانند «مک آدرس» یا «واپایش دسترسی رسانه» شما</translation>
 <translation id="7892384782944609022">مرتبط‌سازی انجام نشد. برای امتحان مجدد، دستگاه را انتخاب کنید.</translation>
 <translation id="7893008570150657497">دسترسی به عکس‌ها، موسیقی، و دیگر رسانه‌ها از رایانه شما</translation>
 <translation id="7893153962594818789">بلوتوث در این <ph name="DEVICE_TYPE" /> خاموش است. گذرواژه‌تان را وارد و بلوتوث را روشن کنید.</translation>
@@ -7195,7 +7191,6 @@
 <translation id="7898725031477653577">همیشه ترجمه شود</translation>
 <translation id="7901405293566323524">مرکز تلفن</translation>
 <translation id="7903290522161827520">به‌دنبال مؤلفه‌های مرورگر هستید؟ از این پیوند استفاده کنید:</translation>
-<translation id="7903345046358933331">صفحه پاسخ نمی‌دهد. می‌توانید صبر کنید تا پاسخ بدهد یا آن را ببندید.</translation>
 <translation id="7903429136755645827">برای سفارشی کردن کنترل‌های بازی، کلیک کنید</translation>
 <translation id="7903742244674067440">گواهی‌هایی برای فایل دارید که اعتبارهای این گواهی را شناسایی می‌کنند</translation>
 <translation id="7903925330883316394">ابزار کمکی: <ph name="UTILITY_TYPE" /></translation>
@@ -8111,6 +8106,7 @@
 <translation id="8780123805589053431">‏دریافت توضیحات تصویر از Google</translation>
 <translation id="8780443667474968681">جستجوی گفتاری خاموش شده است.</translation>
 <translation id="8781834595282316166">برگه جدید در گروه</translation>
+<translation id="8781980678064919987">خاموش شدن، وقتی دستگاه بسته می‌شود</translation>
 <translation id="8782565991310229362">راه‌اندازی برنامه کاربردی کیوسک لغو شد.</translation>
 <translation id="8783834180813871000">کد مرتبط‌سازی بلوتوث را تایپ کنید، سپس کلید «بازگشت» یا «ورود» را فشار دهید.</translation>
 <translation id="8784626084144195648">میانگین حذف‌شده‌ها</translation>
@@ -8175,7 +8171,6 @@
 <translation id="8846132060409673887">خواندن سازنده و مدل این رایانه</translation>
 <translation id="8846163936679269230">بازنشانی نمایه‌های سیم‌کارت داخلی</translation>
 <translation id="8846239054091760429">صدای مونو، راه‌اندازی، زیرنویس ناشنوایان زنده، و موارد دیگر</translation>
-<translation id="8847523528195140327">خروج از سیستم، وقتی درپوش بسته می‌شود</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">پنهان</translation>
 <translation id="8849219423513870962">لغو کردن حذف نمایه سیم‌کارت داخلی با نام <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 2f2b6e3..facd3fd2 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">Katkaistaan yhteyttä...</translation>
 <translation id="1537254971476575106">Koko näytön suurennus</translation>
 <translation id="15373452373711364">Suuri hiiren osoitin</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> pyytää lupaa lukea ja muuttaa sivustoa <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Ota esittelytila käyttöön</translation>
 <translation id="1541346352678737112">Verkkoa ei löytynyt</translation>
 <translation id="1542137295869176367">Kirjautumisdataasi ei voitu päivittää</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">Käyttäjän <ph name="USERNAME" /> kirjautumistiedot verkkotunnuksessa <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Lisääminen (<ph name="EXTENSION_TYPE_PARAMETER" />) ei onnistu</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> jäljellä</translation>
-<translation id="1678794218766467608">Lukitse virransäästötilassa tai kun suojus suljetaan</translation>
 <translation id="1679068421605151609">Kehittäjätyökalut</translation>
 <translation id="1679810534535368772">Haluatko varmasti poistua?</translation>
 <translation id="167983332380191032">Ylläpitopalvelu lähetti HTTP-virheen.</translation>
@@ -860,7 +858,6 @@
 <translation id="1794051631868188691">Älä näytä koskaan: <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Lähetä palautetta, niin autat meitä korjaamaan ongelman.</translation>
 <translation id="1795214765651529549">Ota käyttöön perinteinen</translation>
-<translation id="1796105431091975902">Lisättävän Ansible-ohjekirjan valinta</translation>
 <translation id="1796588414813960292">Ääntä edellyttävät ominaisuudet eivät enää toimi</translation>
 <translation id="1797117170091578105">Pelaa Chromebookin näppäimistöllä. Voit määrittää näppäimiä tietyille toiminnoille.</translation>
 <translation id="1800502858278951817">Laajennukset eivät ole pyytäneet lupaa lukea ja muuttaa tätä: <ph name="SITE_NAME" /></translation>
@@ -925,6 +922,7 @@
 <translation id="1842766183094193446">Haluatko varmasti ottaa esittelytilan käyttöön?</translation>
 <translation id="1845727111305721124">Äänten toistaminen sallittu</translation>
 <translation id="1846308012215045257">Suorita <ph name="PLUGIN_NAME" /> painamalla Control ja klikkaamalla tätä.</translation>
+<translation id="1848219224579402567">Kirjaudu ulos, kun kansi suljetaan</translation>
 <translation id="184862733444771842">Ominaisuuspyyntö</translation>
 <translation id="1849016657376805933">Kaikki HID-laitteet</translation>
 <translation id="1849186935225320012">Tällä sivulla on MIDI-laitteiden täysi käyttöoikeus.</translation>
@@ -1033,7 +1031,6 @@
 <translation id="1941553344801134989">Versio: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Näytä näppäinkartta</translation>
 <translation id="1942128823046546853">Lukea ja muokata kaikkea dataasi kaikilla sivustoilla</translation>
-<translation id="1942600407708803723">Sammuta, kun kansi suljetaan</translation>
 <translation id="1944528062465413897">Bluetooth-yhdistämiskoodi:</translation>
 <translation id="1944921356641260203">Päivitys saatavilla</translation>
 <translation id="1947136734041527201">Sallii sinun kirjautua verkkosivustoille tilillä, jolla käytät tunnistuspalvelua</translation>
@@ -3100,7 +3097,6 @@
 <translation id="389901847090970821">Valitse näppäimistö</translation>
 <translation id="3900966090527141178">Vie salasanat</translation>
 <translation id="3903187154317825986">Sisäänrakennettu näppäimistö</translation>
-<translation id="3903191712482985591">Lisää ohjekirja</translation>
 <translation id="3904326018476041253">Sijaintipalvelut</translation>
 <translation id="3904849010307028014">Sivusto voi myöntää selaimellesi luottamusmerkin sen perusteella, miten toimit sivulla, esim. jos kirjaudut säännöllisesti sisään tilille. Jos muut myöhemmin käyttämäsi sivustot löytävät kelvollisen luottamusmerkin, ne pitävät sinua todennäköisemmin ihmisenä.</translation>
 <translation id="3905761538810670789">Korjaa sovellus</translation>
@@ -5043,7 +5039,6 @@
 <translation id="5827733057563115968">Seuraavan sanan ennakointi</translation>
 <translation id="5828545842856466741">Lisää profiili…</translation>
 <translation id="5828633471261496623">Tulostetaan...</translation>
-<translation id="5828797982387013521">Valitse ohjekirja</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> ei avaudu</translation>
 <translation id="5830720307094128296">Tallenn&amp;a sivu nimellä...</translation>
 <translation id="5832813618714645810">Profiilit</translation>
@@ -5935,7 +5930,6 @@
 <translation id="6686665106869989887">Välilehti siirretty oikealle</translation>
 <translation id="6686817083349815241">Tallenna salasanasi</translation>
 <translation id="6687079240787935001">Piilota <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Pyytää lupaa lukea ja muuttaa sivustoa (<ph name="ORIGIN" />):</translation>
 <translation id="6689714331348768690">Pyydä, että <ph name="SUPERVISED_USER_NAME" /> tulee tietokoneelle. Lapsi lukee muutamia näytöllä näkyviä lauseita äänimallin luomiseksi.
     <ph name="BR" />
     Jos <ph name="SUPERVISED_USER_NAME" /> tarvitsee apua lukemiseen, pyydä häntä toistamaan perässäsi. Kuiskaa lauseet poispäin mikrofonista, jotta Assistant oppii lapsen äänen sinun äänesi sijaan.</translation>
@@ -7194,7 +7188,6 @@
 <translation id="7898725031477653577">Käännä aina</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Etsitkö selaimen osuuksia? Avaa</translation>
-<translation id="7903345046358933331">Tämä sivu ei enää vastaa. Voit odottaa sivun vastausta tai sulkea sen.</translation>
 <translation id="7903429136755645827">Yksilöi peliohjaimia klikkaamalla</translation>
 <translation id="7903742244674067440">Olet tallentanut seuraavat varmenteen myöntäjät tunnistavat varmenteet</translation>
 <translation id="7903925330883316394">Apuohjelma: <ph name="UTILITY_TYPE" /></translation>
@@ -8109,6 +8102,7 @@
 <translation id="8780123805589053431">Käytä Googlen kuvaselityksiä</translation>
 <translation id="8780443667474968681">Puhehaku on poistettu käytöstä.</translation>
 <translation id="8781834595282316166">Uusi välilehti ryhmässä</translation>
+<translation id="8781980678064919987">Sammuta, kun kansi suljetaan</translation>
 <translation id="8782565991310229362">Kioskisovelluksen käynnistäminen peruutettiin.</translation>
 <translation id="8783834180813871000">Kirjoita Bluetooth-yhdistämiskoodi ja paina sitten Return tai Enter.</translation>
 <translation id="8784626084144195648">Rajoitetun joukon keskiarvo</translation>
@@ -8173,7 +8167,6 @@
 <translation id="8846132060409673887">Lue tietokoneen valmistaja ja malli</translation>
 <translation id="8846163936679269230">Nollaa eSIM-profiilit</translation>
 <translation id="8846239054091760429">Monoääni, käynnistys, Livetekstitys ym.</translation>
-<translation id="8847523528195140327">Kirjaudu ulos, kun kansi suljetaan</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Piilotettu</translation>
 <translation id="8849219423513870962">Peru eSIM-profiilin poistaminen: <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index f5c179d..f63a815 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -564,7 +564,6 @@
 <translation id="1536754031901697553">Nagdidiskonekta...</translation>
 <translation id="1537254971476575106">Fullscreen magnifier</translation>
 <translation id="15373452373711364">Malaking mouse cursor</translation>
-<translation id="1539630663098418038">Hinihiling ng <ph name="EXTENSIONS_REQUESTING_ACCESS" /> na i-read at baguhin ang <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">I-enable ang demo mode</translation>
 <translation id="1541346352678737112">Walang nakitang network</translation>
 <translation id="1542137295869176367">Hindi ma-update ang iyong data sa pag-sign in</translation>
@@ -726,7 +725,6 @@
 <translation id="1676902103953506022">Mga detalye ng kredensyal para sa <ph name="USERNAME" /> sa <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Hindi maidagdag ang <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> na lang ang natitira</translation>
-<translation id="1678794218766467608">I-lock sa sleep mode o kapag nakasara ang cover</translation>
 <translation id="1679068421605151609">Mga Tool ng Developer</translation>
 <translation id="1679810534535368772">Sigurado ka bang gusto mong lumabas?</translation>
 <translation id="167983332380191032">Nagpadala ang serbisyo ng pamamahala ng HTTP error.</translation>
@@ -862,7 +860,6 @@
 <translation id="1794051631868188691">Huwag ipakita ang <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Magpadala ng feedback upang tulungan kaming ayusin ang isyung ito.</translation>
 <translation id="1795214765651529549">Gamitin ang Classic</translation>
-<translation id="1796105431091975902">Pumili ng Ansible Playbook na idaragdag</translation>
 <translation id="1796588414813960292">Hindi gagana ang mga feature na nangangailangan ng tunog</translation>
 <translation id="1797117170091578105">Maglaro gamit ang iyong keyboard ng Chromebook. Puwede mong i-customize ang mga key para sa mga partikular na pagkilos.</translation>
 <translation id="1800502858278951817">Walang extension na humiling na i-read at baguhin ang <ph name="SITE_NAME" /></translation>
@@ -927,6 +924,7 @@
 <translation id="1842766183094193446">Sigurado ka bang gusto mong i-enable ang demo mode?</translation>
 <translation id="1845727111305721124">Pinapayagang mag-play ng tunog</translation>
 <translation id="1846308012215045257">Pindutin ang control at i-click upang patakbuhin ang <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Mag-sign out kapag isinara ang takip</translation>
 <translation id="184862733444771842">Kahilingan sa Feature</translation>
 <translation id="1849016657376805933">Anumang HID device</translation>
 <translation id="1849186935225320012">May buong kontrol sa mga MIDI device ang pahinang ito.</translation>
@@ -1035,7 +1033,6 @@
 <translation id="1941553344801134989">Bersyon: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Ipakita ang pagmamapa ng key</translation>
 <translation id="1942128823046546853">Basahin at baguhin ang lahat ng iyong data sa lahat ng website</translation>
-<translation id="1942600407708803723">I-shut down kapag nakasara ang cover</translation>
 <translation id="1944528062465413897">Code ng pagpapares ng Bluetooth</translation>
 <translation id="1944921356641260203">May nahanap na update</translation>
 <translation id="1947136734041527201">Pinapayagan kang mag-sign in sa mga website gamit ang account mo sa serbisyo ng pagkakakilanlan</translation>
@@ -3102,7 +3099,6 @@
 <translation id="389901847090970821">Pumili ng keyboard</translation>
 <translation id="3900966090527141178">I-export ang mga password</translation>
 <translation id="3903187154317825986">Built-in na Keyboard</translation>
-<translation id="3903191712482985591">Magdagdag ng playbook</translation>
 <translation id="3904326018476041253">Mga Serbisyo ng Lokasyon</translation>
 <translation id="3904849010307028014">Batay sa iyong pakikipag-ugnayan sa isang site, tulad ng regular na pag-sign in sa isang account, puwedeng magbigay ang site na iyon ng trust token sa browser mo. Sa ibang pagkakataon, kung titingin at maghahanap ng valid na trust token ang iba pang site na binibisita mo, malamang na ituring ka nito bilang tao at hindi bot.</translation>
 <translation id="3905761538810670789">Ayusin ang app</translation>
@@ -5048,7 +5044,6 @@
 <translation id="5827733057563115968">Paghuhula sa susunod na salita</translation>
 <translation id="5828545842856466741">Magdagdag ng profile...</translation>
 <translation id="5828633471261496623">Nagpi-print...</translation>
-<translation id="5828797982387013521">Pumili ng playbook</translation>
 <translation id="5830205393314753525">Hindi mabuksan ang <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Save Page &amp;As...</translation>
 <translation id="5832813618714645810">Mga Profile</translation>
@@ -5942,7 +5937,6 @@
 <translation id="6686665106869989887">Inilipat sa kanan ang tab</translation>
 <translation id="6686817083349815241">I-save ang iyong password</translation>
 <translation id="6687079240787935001">Itago ang <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Hinihiling na i-read at baguhin ang <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Hilingin kay <ph name="SUPERVISED_USER_NAME" /> na lumapit sa computer. Magbabasa ang iyong anak ng ilang parirala sa screen na ito para gawin ang kanyang voice model.
     <ph name="BR" />
     Kung kailangan ni <ph name="SUPERVISED_USER_NAME" /> ng tulong sa pagbabasa, utusan ang iyong anak na gayahin ang sasabihin mo. Bumulong nang malayo sa mikropono para boses ng iyong anak sa halip na boses mo ang matutunan ng Assistant.</translation>
@@ -7202,7 +7196,6 @@
 <translation id="7898725031477653577">Palaging i-translate</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Hinahanap ang mga bahagi ng browser? Bisitahin ang</translation>
-<translation id="7903345046358933331">Hindi na tumutugon ang page. Maaari mong hintaying tumugon ito o isara ito.</translation>
 <translation id="7903429136755645827">I-click para i-customize ang iyong mga kontrol ng laro</translation>
 <translation id="7903742244674067440">Mayroon kang mga certificate sa file na tutukoy sa mga certificate authority na ito</translation>
 <translation id="7903925330883316394">Utility: <ph name="UTILITY_TYPE" /></translation>
@@ -8119,6 +8112,7 @@
 <translation id="8780123805589053431">Kumuha ng mga paglalarawan ng larawan mula sa Google</translation>
 <translation id="8780443667474968681">Na-off na ang paghahanap gamit ang boses.</translation>
 <translation id="8781834595282316166">Bagong Tab sa Grupo</translation>
+<translation id="8781980678064919987">Mag-shut down kapag isinara ang takip</translation>
 <translation id="8782565991310229362">Kinansela ang paglulunsad sa kiosk application.</translation>
 <translation id="8783834180813871000">I-type ang code ng pagpapares ng bluetooth pagkatapos ay pindutin ang Return o Enter.</translation>
 <translation id="8784626084144195648">Binned na Average</translation>
@@ -8183,7 +8177,6 @@
 <translation id="8846132060409673887">I-read ang manufacturer at modelo ng computer na ito</translation>
 <translation id="8846163936679269230">I-reset ang mga profile ng eSIM</translation>
 <translation id="8846239054091760429">Mono audio, startup, Instant Caption, at higit pa</translation>
-<translation id="8847523528195140327">I-sign out kapag nakasara ang cover</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Nakatago</translation>
 <translation id="8849219423513870962">Kanselahin ang pag-aalis ng profile ng eSIM na may pangalang <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb
index bf3b25c..346761ea 100644
--- a/chrome/app/resources/generated_resources_fr-CA.xtb
+++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -561,7 +561,6 @@
 <translation id="1536754031901697553">Déconnexion en cours…</translation>
 <translation id="1537254971476575106">Loupe en mode plein écran</translation>
 <translation id="15373452373711364">Grand curseur</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> demande à lire et à modifier <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Activer le mode Démo</translation>
 <translation id="1541346352678737112">Aucun réseau trouvé</translation>
 <translation id="1542137295869176367">Impossible de mettre à jour vos données de connexion</translation>
@@ -723,7 +722,6 @@
 <translation id="1676902103953506022">Authentifiant pour <ph name="USERNAME" /> sur <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Impossible d'ajouter <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> d'autonomie restante</translation>
-<translation id="1678794218766467608">Verrouiller en mode Veille ou lorsque le couvercle est fermé</translation>
 <translation id="1679068421605151609">Outils pour développeurs</translation>
 <translation id="1679810534535368772">Voulez-vous vraiment quitter cette fenêtre?</translation>
 <translation id="167983332380191032">Le service de gestion a envoyé une erreur HTTP.</translation>
@@ -851,7 +849,6 @@
 <translation id="1794051631868188691">Ne jamais afficher <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Envoyer des commentaires pour nous aider à résoudre ce problème.</translation>
 <translation id="1795214765651529549">Utiliser le thème classique</translation>
-<translation id="1796105431091975902">Sélectionner un playbook Ansible à ajouter</translation>
 <translation id="1796588414813960292">Les fonctionnalités qui utilisent des sons ne fonctionneront pas</translation>
 <translation id="1797117170091578105">Jouez à l'aide de votre clavier Chromebook. Vous pouvez affecter des touches à des actions particulières.</translation>
 <translation id="1800502858278951817">Aucune extension n'a demandé de lire et de modifier <ph name="SITE_NAME" /></translation>
@@ -916,6 +913,7 @@
 <translation id="1842766183094193446">Voulez-vous vraiment activer le mode Démo?</translation>
 <translation id="1845727111305721124">Autorisés à faire jouer des sons</translation>
 <translation id="1846308012215045257">Cliquez en appuyant sur Ctrl pour exécuter le plugiciel <ph name="PLUGIN_NAME" />.</translation>
+<translation id="1848219224579402567">Se déconnecter lorsque le couvercle est fermé</translation>
 <translation id="184862733444771842">Demande de fonctionnalité</translation>
 <translation id="1849016657376805933">N'importe quel appareil HID</translation>
 <translation id="1849186935225320012">Cette page commande entièrement les appareils MIDI.</translation>
@@ -1023,7 +1021,6 @@
 <translation id="1941553344801134989">Version : <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Afficher l'affectation des touches</translation>
 <translation id="1942128823046546853">Lire et modifier l'intégralité de vos données sur tous les sites Web</translation>
-<translation id="1942600407708803723">Éteindre lorsque le couvercle est fermé</translation>
 <translation id="1944528062465413897">Code d'association Bluetooth :</translation>
 <translation id="1944921356641260203">Une mise à jour a été trouvée</translation>
 <translation id="1947136734041527201">Vous permet de vous connecter à des sites Web en utilisant le compte que vous détenez auprès d'un service de vérification de l'identité</translation>
@@ -3087,7 +3084,6 @@
 <translation id="389901847090970821">Sélectionner un clavier</translation>
 <translation id="3900966090527141178">Exporter les mots de passe</translation>
 <translation id="3903187154317825986">Clavier intégré</translation>
-<translation id="3903191712482985591">Ajouter un playbook</translation>
 <translation id="3904326018476041253">Services de localisation</translation>
 <translation id="3904849010307028014">Un site peut envoyer un jeton de confiance à votre navigateur en fonction de votre interaction avec ce site, comme la connexion régulière à un compte. Ultérieurement, si d'autres sites que vous visitez recherchent et trouvent un jeton de confiance valide, ils seront plus susceptibles de vous traiter comme une personne et non comme un robot.</translation>
 <translation id="3905761538810670789">Réparer l'application</translation>
@@ -5032,7 +5028,6 @@
 <translation id="5827733057563115968">Prédiction du mot suivant</translation>
 <translation id="5828545842856466741">Ajouter un profil…</translation>
 <translation id="5828633471261496623">Impression...</translation>
-<translation id="5828797982387013521">Sélectionner un guide</translation>
 <translation id="5830205393314753525">Impossible d'ouvrir <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Enregistrer la p&amp;age sous…</translation>
 <translation id="5832813618714645810">Profils</translation>
@@ -5926,7 +5921,6 @@
 <translation id="6686665106869989887">Onglet déplacé vers la droite</translation>
 <translation id="6686817083349815241">Enregistrer votre mot de passe</translation>
 <translation id="6687079240787935001">Masquer <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Demande à lire et à modifier <ph name="ORIGIN" /> :</translation>
 <translation id="6689714331348768690">Demandez à <ph name="SUPERVISED_USER_NAME" /> de venir à l'ordinateur. Votre enfant lira quelques phrases sur cet écran pour créer son modèle vocal.
     <ph name="BR" />
     Si <ph name="SUPERVISED_USER_NAME" /> a besoin d'aide pour lire, demandez à votre enfant de répéter après vous. Chuchotez loin du micro pour que l'Assistant apprenne la voix de votre enfant et non la vôtre.</translation>
@@ -7185,7 +7179,6 @@
 <translation id="7898725031477653577">Toujours traduire</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Vous recherchez les composants du navigateur? Consultez</translation>
-<translation id="7903345046358933331">Cette page ne répond plus. Vous pouvez attendre qu'elle réponde ou la fermer.</translation>
 <translation id="7903429136755645827">Cliquez pour personnaliser vos commandes de jeu</translation>
 <translation id="7903742244674067440">Vous disposez de certificats qui identifient ces autorités de certification</translation>
 <translation id="7903925330883316394">Utilitaire : <ph name="UTILITY_TYPE" /></translation>
@@ -8100,6 +8093,7 @@
 <translation id="8780123805589053431">Obtenir les descriptions d'image de Google</translation>
 <translation id="8780443667474968681">La recherche vocale a été désactivée.</translation>
 <translation id="8781834595282316166">Nouvel onglet dans le groupe</translation>
+<translation id="8781980678064919987">Éteindre lorsque le couvercle est fermé</translation>
 <translation id="8782565991310229362">Lancement de l'application de kiosque annulé.</translation>
 <translation id="8783834180813871000">Entrez le code d'association Bluetooth, puis appuyez sur Retour ou Entrée</translation>
 <translation id="8784626084144195648">Moyenne de l'intervalle</translation>
@@ -8164,7 +8158,6 @@
 <translation id="8846132060409673887">Trouvez le fabricant et le modèle de cet ordinateur</translation>
 <translation id="8846163936679269230">Réinitialiser les profils eSIM</translation>
 <translation id="8846239054091760429">Son mono, démarrage, transcription instantanée, et plus encore</translation>
-<translation id="8847523528195140327">Se déconnecter lorsque le couvercle est fermé</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Caché</translation>
 <translation id="8849219423513870962">Annuler le retrait du profil eSIM nommé <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 4d579d94..9cf024d6 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -561,7 +561,6 @@
 <translation id="1536754031901697553">Déconnexion…</translation>
 <translation id="1537254971476575106">Loupe plein écran</translation>
 <translation id="15373452373711364">Grand curseur</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> demande à lire et modifier <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Activer le mode de démonstration</translation>
 <translation id="1541346352678737112">Aucun réseau trouvé</translation>
 <translation id="1542137295869176367">Impossible de mettre à jour vos données de connexion</translation>
@@ -723,7 +722,6 @@
 <translation id="1676902103953506022">Détails des identifiants pour <ph name="USERNAME" /> sur <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Impossible d'ajouter <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Temps restant : <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Verrouiller en mode veille ou lorsque l'appareil est refermé</translation>
 <translation id="1679068421605151609">Outils de développement</translation>
 <translation id="1679810534535368772">Voulez-vous vraiment quitter cet écran ?</translation>
 <translation id="167983332380191032">Le service de gestion a renvoyé une erreur HTTP.</translation>
@@ -851,7 +849,6 @@
 <translation id="1794051631868188691">Ne jamais afficher <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Envoyer des commentaires pour nous aider à résoudre ce problème.</translation>
 <translation id="1795214765651529549">Utiliser le thème classique</translation>
-<translation id="1796105431091975902">Sélectionnez un playbook Ansible à ajouter</translation>
 <translation id="1796588414813960292">Les fonctionnalités qui utilisent des sons ne seront pas disponibles</translation>
 <translation id="1797117170091578105">Jouez avec le clavier du Chromebook. Vous pouvez associer des touches à des actions spécifiques.</translation>
 <translation id="1800502858278951817">Aucune extension n'a demandé à lire et à modifier <ph name="SITE_NAME" /></translation>
@@ -916,6 +913,7 @@
 <translation id="1842766183094193446">Voulez-vous vraiment activer le mode de démonstration ?</translation>
 <translation id="1845727111305721124">Autorisé à lire des sons</translation>
 <translation id="1846308012215045257">Cliquez ici en maintenant la touche Ctrl enfoncée pour exécuter <ph name="PLUGIN_NAME" />.</translation>
+<translation id="1848219224579402567">Se déconnecter quand l'écran est rabattu</translation>
 <translation id="184862733444771842">Demande de fonctionnalité</translation>
 <translation id="1849016657376805933">Tous les appareils HID</translation>
 <translation id="1849186935225320012">Le contrôle total des appareils MIDI est activé pour cette page</translation>
@@ -1023,7 +1021,6 @@
 <translation id="1941553344801134989">Version : <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Afficher le mappage des touches</translation>
 <translation id="1942128823046546853">Lire et modifier toutes vos données sur tous les sites Web</translation>
-<translation id="1942600407708803723">Éteindre lorsque l'appareil est refermé</translation>
 <translation id="1944528062465413897">Code d'association Bluetooth :</translation>
 <translation id="1944921356641260203">Mise à jour trouvée</translation>
 <translation id="1947136734041527201">Permet de vous connecter à des sites Web avec votre compte enregistré auprès d'un service d'identité</translation>
@@ -2552,6 +2549,7 @@
 <translation id="3406290648907941085">Autorisé à utiliser des données et des appareils de réalité virtuelle</translation>
 <translation id="3406396172897554194">Faites une recherche par langue ou mode de saisie</translation>
 <translation id="3406605057700382950">&amp;Afficher la barre de favoris</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 mot de passe importé dans le Gestionnaire de mots de passe de Google pour <ph name="USER_EMAIL" />}one{{NUM_PASSWORDS} mot de passe importé dans le Gestionnaire de mots de passe de Google pour <ph name="USER_EMAIL" />}other{{NUM_PASSWORDS} mots de passe importés dans le Gestionnaire de mots de passe de Google pour <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">Aller à la sélection</translation>
 <translation id="3413122095806433232">Émetteurs de l'autorité de certification : <ph name="LOCATION" /></translation>
@@ -3085,7 +3083,6 @@
 <translation id="389901847090970821">Sélectionner un clavier</translation>
 <translation id="3900966090527141178">Exporter des mots de passe</translation>
 <translation id="3903187154317825986">Clavier intégré</translation>
-<translation id="3903191712482985591">Ajouter un playbook</translation>
 <translation id="3904326018476041253">Services de localisation</translation>
 <translation id="3904849010307028014">En fonction de votre interaction avec un site, par exemple si vous vous connectez régulièrement à un compte, ce site pourra fournir un jeton de confiance à votre navigateur. Ensuite, si d'autres sites que vous consultez recherchent et trouvent un jeton de confiance valide, ils auront plus tendance à vous traiter comme un humain, et non comme un robot.</translation>
 <translation id="3905761538810670789">Réparer l'application</translation>
@@ -3736,6 +3733,7 @@
 <translation id="4541123282641193691">Impossible de valider votre compte. Veuillez réessayer ou redémarrer votre Chromebook.</translation>
 <translation id="4541662893742891060">Impossible de se connecter à ce profil. Pour obtenir de l'aide, veuillez contacter votre opérateur.</translation>
 <translation id="4541706525461326392">Suppression du profil… Cela peut prendre quelques minutes.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 mot de passe importé dans le Gestionnaire de mots de passe de Google sur cet appareil}one{{NUM_PASSWORDS} mot de passe importé dans le Gestionnaire de mots de passe de Google sur cet appareil}other{{NUM_PASSWORDS} mots de passe importés dans le Gestionnaire de mots de passe de Google sur cet appareil}}</translation>
 <translation id="4542520061254486227">Lire vos données sur <ph name="WEBSITE_1" /> et <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Gestionnaire de certificats</translation>
 <translation id="4544174279960331769">Avatar bleu par défaut</translation>
@@ -4550,7 +4548,7 @@
 <translation id="5353252989841766347">Exporter des mots de passe depuis Chrome</translation>
 <translation id="5355099869024327351">Autoriser l'Assistant à proposer des notifications</translation>
 <translation id="5355191726083956201">La protection renforcée est activée</translation>
-<translation id="5355501370336370394">Enregistrer l'appareil d'entreprise</translation>
+<translation id="5355501370336370394">Enregistrer un appareil d'entreprise</translation>
 <translation id="5355926466126177564">L'extension <ph name="EXTENSION_NAME" /> a modifié la page qui s'affiche lorsque vous effectuez une recherche dans l'omnibox.</translation>
 <translation id="5356155057455921522">Cette mise à jour de votre administrateur permettra aux applis de votre organisation de s'ouvrir plus rapidement. Cela peut prendre quelques minutes.</translation>
 <translation id="5359910752122114278">1 résultat</translation>
@@ -4585,7 +4583,7 @@
 <translation id="5392192690789334093">Autorisés à envoyer des notifications</translation>
 <translation id="5393761864111565424">{COUNT,plural, =1{Lien}one{# lien}other{# liens}}</translation>
 <translation id="5396325212236512832">La connexion aux sites et applis avec les identifiants enregistrés est automatique. Si cette fonctionnalité est désactivée, vous êtes invité à confirmer chaque connexion à un site ou une appli.</translation>
-<translation id="5397378439569041789">Enregistrer l'appareil en mode Kiosque ou de signalétique</translation>
+<translation id="5397378439569041789">Enregistrer un appareil en mode Kiosque ou de signalétique</translation>
 <translation id="5397794290049113714">Vous</translation>
 <translation id="5398497406011404839">Favoris masqués</translation>
 <translation id="5398572795982417028">Plage de pages hors limites. Le nombre maximal de pages est <ph name="MAXIMUM_PAGE" />.</translation>
@@ -5030,7 +5028,6 @@
 <translation id="5827733057563115968">Prédiction du mot suivant</translation>
 <translation id="5828545842856466741">Ajouter un profil…</translation>
 <translation id="5828633471261496623">Impression...</translation>
-<translation id="5828797982387013521">Sélectionner un playbook</translation>
 <translation id="5830205393314753525">Impossible d'ouvrir <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Enregistrer la p&amp;age sous...</translation>
 <translation id="5832813618714645810">Profils</translation>
@@ -5924,7 +5921,6 @@
 <translation id="6686665106869989887">Onglet déplacé vers la droite</translation>
 <translation id="6686817083349815241">Enregistrer votre mot de passe</translation>
 <translation id="6687079240787935001">Masquer <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Demande à lire et modifier <ph name="ORIGIN" /> :</translation>
 <translation id="6689714331348768690">Demandez à <ph name="SUPERVISED_USER_NAME" /> de venir devant l'ordinateur. Votre enfant lira quelques phrases affichées sur cet écran pour créer son empreinte vocale.
     <ph name="BR" />
     Si <ph name="SUPERVISED_USER_NAME" /> a besoin d'aide pour lire, demandez-lui de répéter après vous. Chuchotez la phrase loin du micro pour que l'Assistant apprenne la voix de votre enfant et non la vôtre.</translation>
@@ -6226,6 +6222,7 @@
 <translation id="6968288415730398122">Saisissez votre mot de passe pour configurer le verrouillage de l'écran</translation>
 <translation id="6969047215179982698">Désactiver le Partage à proximité</translation>
 <translation id="6970480684834282392">Type de démarrage</translation>
+<translation id="6970543303783413625">Impossible d'importer les mots de passe. Vous ne pouvez en importer que <ph name="COUNT" /> à la fois.</translation>
 <translation id="6970856801391541997">Imprimer des pages spécifiques</translation>
 <translation id="6970861306198150268">Veillez à enregistrer votre mot de passe actuel pour ce site</translation>
 <translation id="6972180789171089114">Audio/Vidéo</translation>
@@ -6457,6 +6454,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Quitter la page}one{Quitter la page}other{Quitter les pages}}</translation>
 <translation id="7207457272187520234">Envoyer des données d'utilisation et de diagnostic. À l'heure actuelle, cet appareil envoie automatiquement à Google des données liées à son utilisation et à celle des applications, ainsi que des données de diagnostic. Ces informations nous aideront à améliorer, entre autres, la stabilité du système et des applications. Certaines données globales seront également utiles aux développeurs des applications Google et à nos partenaires tels que les développeurs Android. Ce paramètre est appliqué par le propriétaire. Si vous avez activé le paramètre "Activité supplémentaire sur le Web et les applications", ces données peuvent être enregistrées dans votre compte Google.</translation>
 <translation id="7207631048330366454">Rechercher dans les applications</translation>
+<translation id="7210471695184432500">Pour importer des mots de passe dans le Gestionnaire de mots de passe de Google sur cet appareil, sélectionnez un fichier CSV</translation>
 <translation id="7210499381659830293">Imprimantes d'extension</translation>
 <translation id="7211783048245131419">Aucune action n'a encore été associée à un contacteur</translation>
 <translation id="7212097698621322584">Saisissez votre code actuel pour pouvoir le modifier. Si vous ne vous en souvenez plus, vous devez réinitialiser la clé de sécurité, puis créer un autre code.</translation>
@@ -7181,7 +7179,6 @@
 <translation id="7898725031477653577">Toujours traduire</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Vous recherchez des composants du navigateur ? Accédez à la page</translation>
-<translation id="7903345046358933331">La page ne répond plus. Vous pouvez attendre qu'elle soit de nouveau accessible ou la fermer.</translation>
 <translation id="7903429136755645827">Cliquer pour personnaliser les commandes de jeu</translation>
 <translation id="7903742244674067440">Certains de vos certificats enregistrés identifient ces autorités de certification.</translation>
 <translation id="7903925330883316394">Utilitaire : <ph name="UTILITY_TYPE" /></translation>
@@ -7517,6 +7514,7 @@
 <translation id="8206859287963243715">Mobile</translation>
 <translation id="8208216423136871611">Ne pas enregistrer</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nouvelle notification}one{# nouvelle notification}other{# nouvelles notifications}}</translation>
+<translation id="821119981794423735">Pour importer des mots de passe dans le Gestionnaire de mots de passe de Google pour <ph name="USER_EMAIL" />, sélectionnez un fichier CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Téléchargement en cours}one{Téléchargement en cours}other{Téléchargements en cours}}</translation>
 <translation id="8213449224684199188">Mode Photo activé</translation>
 <translation id="8214489666383623925">Ouvrir le fichier...</translation>
@@ -8096,6 +8094,7 @@
 <translation id="8780123805589053431">Obtenir des descriptions d'images de Google</translation>
 <translation id="8780443667474968681">La recherche vocale a été désactivée.</translation>
 <translation id="8781834595282316166">Nouvel onglet dans le groupe</translation>
+<translation id="8781980678064919987">Éteindre quand l'écran est rabattu</translation>
 <translation id="8782565991310229362">Annulation du lancement de l'application kiosque.</translation>
 <translation id="8783834180813871000">Saisissez le code d'association Bluetooth, puis appuyez sur Retour ou Entrée.</translation>
 <translation id="8784626084144195648">Moyenne par intervalle</translation>
@@ -8160,7 +8159,6 @@
 <translation id="8846132060409673887">Lire le fabricant et le modèle de cet ordinateur</translation>
 <translation id="8846163936679269230">Réinitialiser les profils eSIM</translation>
 <translation id="8846239054091760429">Audio mono, démarrage, sous-titres instantanés, etc.</translation>
-<translation id="8847523528195140327">Se déconnecter lorsque l'appareil est refermé</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Masqué</translation>
 <translation id="8849219423513870962">Annuler la suppression du profil eSIM <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb
index cbe35d6..e627b12 100644
--- a/chrome/app/resources/generated_resources_gl.xtb
+++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -559,7 +559,6 @@
 <translation id="1536754031901697553">Desconectando…</translation>
 <translation id="1537254971476575106">Lupa de pantalla completa</translation>
 <translation id="15373452373711364">Cursor do rato grande</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> está solicitando ler e modificar <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Activar o modo de demostración</translation>
 <translation id="1541346352678737112">Non se atopou ningunha rede</translation>
 <translation id="1542137295869176367">Non se puideron actualizar os teus datos de inicio de sesión</translation>
@@ -721,7 +720,6 @@
 <translation id="1676902103953506022">Detalles das credenciais de <ph name="USERNAME" /> en <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Non se puido engadir a <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Tempo restante: <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Bloquear ao activar o modo de suspensión ou ao pechar a tapa</translation>
 <translation id="1679068421605151609">Ferramentas para programadores</translation>
 <translation id="1679810534535368772">Seguro que queres saír?</translation>
 <translation id="167983332380191032">O servizo de xestión enviou un erro de HTTP.</translation>
@@ -849,7 +847,6 @@
 <translation id="1794051631868188691">Non mostrar nunca <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Enviar comentarios para axudar a solucionar este problema.</translation>
 <translation id="1795214765651529549">Usar tema clásico</translation>
-<translation id="1796105431091975902">Selecciona unha guía de Ansible para engadila</translation>
 <translation id="1796588414813960292">As funcións que necesiten reproducir sons non estarán dispoñibles</translation>
 <translation id="1797117170091578105">Xoga usando o teclado do teu Chromebook. Podes personalizar as teclas para realizar accións específicas.</translation>
 <translation id="1800502858278951817">Ningunha extensión solicitou ler nin cambiar o sitio <ph name="SITE_NAME" /></translation>
@@ -914,6 +911,7 @@
 <translation id="1842766183094193446">Seguro que queres activar o modo de demostración?</translation>
 <translation id="1845727111305721124">Sitios que poden reproducir son</translation>
 <translation id="1846308012215045257">Fai clic mentres mantés premida a tecla Control para executar <ph name="PLUGIN_NAME" />.</translation>
+<translation id="1848219224579402567">Pechar sesión cando a tapa está pechada</translation>
 <translation id="184862733444771842">Solicitude de función</translation>
 <translation id="1849016657376805933">Calquera dispositivo HID</translation>
 <translation id="1849186935225320012">Esta páxina ten control total sobre os dispositivos MIDI.</translation>
@@ -1021,7 +1019,6 @@
 <translation id="1941553344801134989">Versión: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Mostrar asignación de teclas</translation>
 <translation id="1942128823046546853">Ler e cambiar todos os teus datos en todos os sitios web</translation>
-<translation id="1942600407708803723">Apagar dispositivo cando se peche a tapa</translation>
 <translation id="1944528062465413897">Código de sincronización por Bluetooth:</translation>
 <translation id="1944921356641260203">Encontrouse unha actualización</translation>
 <translation id="1947136734041527201">Permíteche iniciar sesión en sitios web coa conta que teñas cun servizo de identidade</translation>
@@ -2550,6 +2547,7 @@
 <translation id="3406290648907941085">Sitios que poden usar datos e dispositivos de realidade virtual</translation>
 <translation id="3406396172897554194">Busca un idioma ou o nome dun método de introdución de texto</translation>
 <translation id="3406605057700382950">&amp;Mostrar a barra de marcadores</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{Importouse 1 contrasinal ao xestor de contrasinais de Google de <ph name="USER_EMAIL" />}other{Importáronse {NUM_PASSWORDS} contrasinais ao xestor de contrasinais de Google de <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">Saltar á selección</translation>
 <translation id="3413122095806433232">Emisores de CA: <ph name="LOCATION" /></translation>
@@ -3083,7 +3081,6 @@
 <translation id="389901847090970821">Selecciona un teclado</translation>
 <translation id="3900966090527141178">Exportar contrasinais</translation>
 <translation id="3903187154317825986">Teclado integrado</translation>
-<translation id="3903191712482985591">Engadir guía</translation>
 <translation id="3904326018476041253">Servizos de localización</translation>
 <translation id="3904849010307028014">Os sitios poden enviar un token de confianza ao teu navegador en función de como interactúes con eles (por exemplo, ao iniciares sesión nunha conta de forma periódica). Máis tarde, se outros sitios que visites consultan e atopan un token de confianza válido, será máis probable que te traten como unha persoa, e non como un bot.</translation>
 <translation id="3905761538810670789">Reparar aplicación</translation>
@@ -3734,6 +3731,7 @@
 <translation id="4541123282641193691">Non se puido verificar a túa conta. Téntao de novo ou reinicia o Chromebook.</translation>
 <translation id="4541662893742891060">Non se puido establecer conexión con este perfil. Para obter asistencia técnica, ponte en contacto co teu operador.</translation>
 <translation id="4541706525461326392">Quitando perfil. Esta acción pode tardar uns minutos.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{Importouse 1 contrasinal ao xestor de contrasinais de Google neste dispositivo}other{Importáronse {NUM_PASSWORDS} contrasinais ao xestor de contrasinais de Google neste dispositivo}}</translation>
 <translation id="4542520061254486227">Ler os teus datos de <ph name="WEBSITE_1" /> e <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Xestor de certificados</translation>
 <translation id="4544174279960331769">Avatar azul predeterminado</translation>
@@ -5025,7 +5023,6 @@
 <translation id="5827733057563115968">Predición da seguinte palabra</translation>
 <translation id="5828545842856466741">Engadir perfil…</translation>
 <translation id="5828633471261496623">Imprimindo...</translation>
-<translation id="5828797982387013521">Seleccionar guía</translation>
 <translation id="5830205393314753525">Non se puido abrir a aplicación <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Gardar páxina &amp;como...</translation>
 <translation id="5832813618714645810">Perfís</translation>
@@ -5916,7 +5913,6 @@
 <translation id="6686665106869989887">A pestana moveuse á dereita</translation>
 <translation id="6686817083349815241">Gardar o teu contrasinal</translation>
 <translation id="6687079240787935001">Ocultar <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Solicitando ler e modificar <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Pídelle a <ph name="SUPERVISED_USER_NAME" /> que veña ao ordenador. O teu fillo ou filla vai ler unhas frases na pantalla para crear o seu modelo de voz.
     <ph name="BR" />
 Se <ph name="SUPERVISED_USER_NAME" /> precisa axuda para ler, dille que repita o que ti digas. Bisba as frases lonxe do micrófono para que o Asistente aprenda a voz do teu fillo ou filla en vez da túa.</translation>
@@ -6218,6 +6214,7 @@
 <translation id="6968288415730398122">Introduce o contrasinal para configurar o bloqueo da pantalla</translation>
 <translation id="6969047215179982698">Desactivar Compartir por Nearby</translation>
 <translation id="6970480684834282392">Tipo de inicio</translation>
+<translation id="6970543303783413625">Non se puideron importar os contrasinais. Podes importar ata <ph name="COUNT" /> á vez.</translation>
 <translation id="6970856801391541997">Imprimir páxinas específicas</translation>
 <translation id="6970861306198150268">Asegúrate de gardar o teu contrasinal actual deste sitio</translation>
 <translation id="6972180789171089114">Audio/Vídeo</translation>
@@ -6449,6 +6446,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Páxina de saída}other{Páxinas de saída}}</translation>
 <translation id="7207457272187520234">Enviar datos de uso e diagnóstico. Este dispositivo envía automaticamente datos de diagnóstico e de uso do dispositivo e das aplicacións a Google. Esta información permitirá aumentar a estabilidade do sistema e das aplicacións, e realizar outras melloras. Algúns datos agregados tamén serán útiles para as aplicacións e os socios de Google, como os programadores de Android. Esta opción de configuración contrólaa o propietario. Se está activada a opción Actividade web e das aplicacións adicional, estes datos pódense gardar na túa Conta de Google.</translation>
 <translation id="7207631048330366454">Buscar aplicacións</translation>
+<translation id="7210471695184432500">Para importar contrasinais ao xestor de contrasinais de Google neste dispositivo, selecciona un ficheiro CSV</translation>
 <translation id="7210499381659830293">Impresoras da extensión</translation>
 <translation id="7211783048245131419">Aínda non se asignou ningún interruptor</translation>
 <translation id="7212097698621322584">Introduce o teu PIN actual para cambialo. Se non sabes cal é, deberás restablecer a chave de seguranza e, despois, crear un novo.</translation>
@@ -7172,7 +7170,6 @@
 <translation id="7898725031477653577">Traducir sempre</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Buscas os compoñentes do navegador? Visita</translation>
-<translation id="7903345046358933331">A páxina deixou de responder. Podes esperar a que volva responder ou ben podes pechala.</translation>
 <translation id="7903429136755645827">Fai clic para personalizar os controis de xogo</translation>
 <translation id="7903742244674067440">Tes certificados arquivados que identifican estas entidades de certificación</translation>
 <translation id="7903925330883316394">Utilidade: <ph name="UTILITY_TYPE" /></translation>
@@ -7507,6 +7504,7 @@
 <translation id="8206859287963243715">Móbil</translation>
 <translation id="8208216423136871611">Non gardar</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{1 notificación nova}other{# notificacións novas}}</translation>
+<translation id="821119981794423735">Para importar contrasinais ao xestor de contrasinais de Google de <ph name="USER_EMAIL" />, selecciona un ficheiro CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{A descarga está en curso}other{As descargas están en curso}}</translation>
 <translation id="8213449224684199188">Iniciouse o modo de foto</translation>
 <translation id="8214489666383623925">Abrir ficheiro...</translation>
@@ -8085,6 +8083,7 @@
 <translation id="8780123805589053431">Obter descricións de Google para as imaxes</translation>
 <translation id="8780443667474968681">Desactivouse a busca por voz.</translation>
 <translation id="8781834595282316166">Nova pestana no grupo</translation>
+<translation id="8781980678064919987">Apagar cando a tapa estea pechada</translation>
 <translation id="8782565991310229362">Cancelouse o inicio da aplicación de quiosco.</translation>
 <translation id="8783834180813871000">Escribe o código de sincronización por Bluetooth e, a continuación, preme Intro.</translation>
 <translation id="8784626084144195648">Media agrupada</translation>
@@ -8149,7 +8148,6 @@
 <translation id="8846132060409673887">Consultar o fabricante e o modelo deste ordenador</translation>
 <translation id="8846163936679269230">Restablecer perfís de eSIM</translation>
 <translation id="8846239054091760429">Audio en mono, inicio, Subtítulos instantáneos e moito máis</translation>
-<translation id="8847523528195140327">Pechar sesión cando se peche a tapa</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Oculto</translation>
 <translation id="8849219423513870962">Cancelar eliminación do perfil de eSIM chamado "<ph name="PROFILE_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 403ce3a..b5f7171 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -558,7 +558,6 @@
 <translation id="1536754031901697553">ડિસ્કનેક્ટ થઈ રહ્યું છે…</translation>
 <translation id="1537254971476575106">પૂર્ણસ્ક્રીન મૅગ્નિફાયર</translation>
 <translation id="15373452373711364">મોટું માઉસ કર્સર</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> દ્વારા <ph name="ORIGIN" />ને વાંચવાની અને તેમાં ફેરફાર કરવાની વિનંતી કરવામાં આવી છે</translation>
 <translation id="1540605929960647700">ડેમો મોડ ચાલુ કરો</translation>
 <translation id="1541346352678737112">કોઈ નેટવર્ક મળ્યું નથી</translation>
 <translation id="1542137295869176367">તમારો સાઇન ઇન ડેટા અપડેટ કરી શકાયો નથી</translation>
@@ -719,7 +718,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> પર <ph name="USERNAME" />ના લૉગ ઇન વિગતો</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" />ને ઉમેરી શકતા નથી</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> બાકી</translation>
-<translation id="1678794218766467608">સ્લીપ મોડમાં અથવા કવર બંધ કરેલું હોય ત્યારે લૉક કરો</translation>
 <translation id="1679068421605151609">વિકાસકર્તા સાધનો</translation>
 <translation id="1679810534535368772">શું તમે ખરેખર બહાર નીકળવા માગો છો?</translation>
 <translation id="167983332380191032">મેનેજમેન્ટ સેવાએ HTTP ભૂલ મોકલી.</translation>
@@ -847,7 +845,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> ક્યારેય બતાવશો નહીં</translation>
 <translation id="1794791083288629568">આ સમસ્યાને ઠીક કરવામાં અમારી સહાય કરવા માટે પ્રતિસાદ મોકલો.</translation>
 <translation id="1795214765651529549">ક્લાસિકનો ઉપયોગ કરો</translation>
-<translation id="1796105431091975902">ઉમેરવા માટે કોઈ Ansible પ્લેબુક પસંદ કરો</translation>
 <translation id="1796588414813960292">સાઉન્ડની આવશ્યકતા હોય તેવી સુવિધાઓ કામ કરશે નહીં</translation>
 <translation id="1797117170091578105">તમારા Chromebook કીબોર્ડનો ઉપયોગ કરીને રમો. તમે ચોક્કસ ક્રિયાઓ માટે કી કસ્ટમાઇઝ કરી શકો છો.</translation>
 <translation id="1800502858278951817">કોઈપણ એક્સ્ટેન્શન દ્વારા <ph name="SITE_NAME" /> વાંચવાની અને તેમાં ફેરફાર કરવાની વિનંતી કરવામાં આવી નથી</translation>
@@ -912,6 +909,7 @@
 <translation id="1842766183094193446">શું તમે ખરેખર ડેમો મોડ ચાલુ કરવા માગો છો?</translation>
 <translation id="1845727111305721124">સાઉન્ડ ચલાવવાની મંજૂરી છે</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> ચલાવવા માટે Control-ક્લિક કરો</translation>
+<translation id="1848219224579402567">લિડ બંધ કરવામાં આવે, ત્યારે સાઇન આઉટ કરો</translation>
 <translation id="184862733444771842">સુવિધા માટેની વિનંતી</translation>
 <translation id="1849016657376805933">કોઈપણ HID ડિવાઇસ</translation>
 <translation id="1849186935225320012">આ પેજ પાસે MIDI ડિવાઇસનું સંપૂર્ણ નિયંત્રણ છે.</translation>
@@ -1019,7 +1017,6 @@
 <translation id="1941553344801134989">વર્ઝન: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">કીનું મૅપિંગ બતાવો</translation>
 <translation id="1942128823046546853">બધી વેબસાઇટ પરનો તમારો ડેટા વાંચો અને તેમાં ફેરફાર કરો</translation>
-<translation id="1942600407708803723">કવર બંધ કરવામાં આવે ત્યારે શટ ડાઉન કરો</translation>
 <translation id="1944528062465413897">બ્લૂટૂથ જોડાણ કરવાનો કોડ:</translation>
 <translation id="1944921356641260203">અપડેટ મળ્યું</translation>
 <translation id="1947136734041527201">તમારા ઓળખ સેવાઓ સાથેના એકાઉન્ટનો ઉપયોગ કરીને તમને વેબસાઇટમાં સાઇન ઇન કરવાની મંજૂરી આપે છે</translation>
@@ -1709,6 +1706,7 @@
 <translation id="2568774940984945469">માહિતી બાર સંગ્રહક</translation>
 <translation id="2571655996835834626">તમારી તે સેટિંગને બદલો કે જે કૂકી, JavaScript, પ્લગ-ઇન, ભૌગોલિક સ્થાન, માઇક્રોફોન, કૅમેરા, વગેરે જેવી સુવિધાઓની વેબસાઇટના ઍક્સેસને નિયંત્રિત કરે છે</translation>
 <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> ને માત્ર વાંચવાની ઍક્સેસ મંજૂર કરવામાં આવી છે.</translation>
+<translation id="2573276323521243649">અવતાર પસંદ કરવાના પેજ પરથી પાછા</translation>
 <translation id="2573417407488272418">અપગ્રેડ કરતા પહેલાં ફાઇલો &gt; મારી ફાઇલોમાં ઍપ અને ફાઇલોનું બૅકઅપ લો.</translation>
 <translation id="2573831315551295105">“<ph name="ACTION" />” માટે સ્વિચની સોંપણી કરો</translation>
 <translation id="2575247648642144396">જ્યારે એક્સ્ટેન્શન વર્તમાન પેજ પર કામ કરી શકે ત્યારે આ આઇકન દેખાશે. આઇકન પર ક્લિક કરીને અથવા <ph name="EXTENSION_SHORTCUT" /> દબાવીને આ એક્સ્ટેન્શનનો ઉપયોગ કરો.</translation>
@@ -3083,7 +3081,6 @@
 <translation id="389901847090970821">કીબોર્ડ પસંદ કરો</translation>
 <translation id="3900966090527141178">પાસવર્ડની નિકાસ કરો</translation>
 <translation id="3903187154317825986">બિલ્ટ-ઇન કીબોર્ડ</translation>
-<translation id="3903191712482985591">પ્લેબુક ઉમેરો</translation>
 <translation id="3904326018476041253">સ્થાન સેવાઓ</translation>
 <translation id="3904849010307028014">એકાઉન્ટમાં નિયમિતપણે સાઇન ઇન કરવા જેવી સાઇટ સાથેની તમારી ક્રિયાપ્રતિક્રિયાના આધારે, તે સાઇટ તમારા બ્રાઉઝર માટે ટ્રસ્ટ ટોકન જારી કરી શકે છે. તે પછી, જો તમે મુલાકાત લીધેલી અન્ય સાઇટ ટ્રસ્ટ ટોકનને ચેક કરે અને એ માન્ય ટ્રસ્ટ ટોકન જણાય, તો તે તમારી સાથે બૉટની જેમ નહીં પણ એક વ્યક્તિની જેમ વર્તે તેવી શક્યતા વધુ છે.</translation>
 <translation id="3905761538810670789">ઍપ્લિકેશન સુધારો</translation>
@@ -5029,7 +5026,6 @@
 <translation id="5827733057563115968">આગલા શબ્દનું પૂર્વાનુમાન</translation>
 <translation id="5828545842856466741">પ્રોફાઇલ ઉમેરો...</translation>
 <translation id="5828633471261496623">છાપકામ...</translation>
-<translation id="5828797982387013521">પ્લેબુક પસંદ કરો</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> ખોલી શકાતી નથી</translation>
 <translation id="5830720307094128296">પેજ આ &amp;રીતે સાચવો...</translation>
 <translation id="5832813618714645810">પ્રોફાઇલ</translation>
@@ -5924,7 +5920,6 @@
 <translation id="6686665106869989887">ટૅબને જમણે ખસેડી</translation>
 <translation id="6686817083349815241">તમારો પાસવર્ડ સાચવો</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> છુપાવો</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" />ને વાંચવાની અને તેમાં ફેરફાર કરવાની વિનંતી કરી રહ્યાં છીએ:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" />ને કમ્પ્યુટર પર આવવાનું કહો. તમારું બાળક તેમનું વૉઇસ મૉડલ બનાવવા માટે આ સ્ક્રીન પરના કેટલાક શબ્દસમૂહો વાંચશે.
     <ph name="BR" />
     જો <ph name="SUPERVISED_USER_NAME" />ને વાંચવામાં સહાય જોઈએ, તો તમારા બાળકને તમારા પછી બોલવા માટે કહો. માઇકથી થોડે દૂર હળવેથી બોલો, એટલે Assistant તમારા બદલે તમારા બાળકનો વૉઇસ પારખે.</translation>
@@ -6406,6 +6401,7 @@
 <translation id="7138678301420049075">અન્ય</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> તમારા માઇક્રોફોનનો ઉપયોગ કરી રહી છે</translation>
 <translation id="7141105143012495934">સાઇન ઇન નિષ્ફળ થયું કારણ કે તમારી એકાઉન્ટ વિગતો પાછી મેળવી શકાઈ નથી. કૃપા કરીને તમારા એડમિનનો સંપર્ક કરો અથવા ફરી પ્રયાસ કરો.</translation>
+<translation id="7141844554192012199">તપાસ</translation>
 <translation id="7144878232160441200">ફરી પ્રયત્ન કરો</translation>
 <translation id="7149839598364933473">આ ડિવાઇસને <ph name="DEVICE_OS" /> ડિવાઇસમાં રૂપાંતરિત કરો.</translation>
 <translation id="7149893636342594995">છેલ્લા 24 કલાક</translation>
@@ -7182,7 +7178,6 @@
 <translation id="7898725031477653577">હંમેશાં અનુવાદ કરો</translation>
 <translation id="7901405293566323524">ફોન હબ</translation>
 <translation id="7903290522161827520">બ્રાઉઝરના ઘટકો શોધી રહ્યાં છો? મુલાકાત લો</translation>
-<translation id="7903345046358933331">પેજમાં પ્રતિસાદ આવતો નથી. તમે તે પ્રતિસાદ આપવા યોગ્ય બને તેની રાહ જોઈ શકો છો અથવા તેને બંધ કરી શકો છો.</translation>
 <translation id="7903429136755645827">તમરા ગેમના નિયંત્રણો કસ્ટમાઇઝ કરવા માટે ક્લિક કરો</translation>
 <translation id="7903742244674067440">તમારી પાસે ફાઇલ પર પ્રમાણપત્રો છે જે આ પ્રમાણપત્ર અધિકારીઓને ઓળખે છે</translation>
 <translation id="7903925330883316394">ઉપયોગિતા: <ph name="UTILITY_TYPE" /></translation>
@@ -8093,6 +8088,7 @@
 <translation id="8780123805589053431">Google તરફથી છબીનાં વર્ણનો મેળવો</translation>
 <translation id="8780443667474968681">વૉઇસ શોધ સેવા બંધ કરવામાં આવી છે.</translation>
 <translation id="8781834595282316166">ગ્રૂપમાં નવું ટૅબ</translation>
+<translation id="8781980678064919987">લિડ બંધ કરવામાં આવે, ત્યારે શટ ડાઉન કરો</translation>
 <translation id="8782565991310229362">કિઓસ્ક ઍપ્લિકેશન લોન્ચ રદ કર્યું.</translation>
 <translation id="8783834180813871000">બ્લૂટૂથ જોડાણ કરવાનો કોડ ટાઇપ કરો, પછી Return અથવા Enter કી દબાવો.</translation>
 <translation id="8784626084144195648">બિન કરેલ સરેરાશ</translation>
@@ -8157,7 +8153,6 @@
 <translation id="8846132060409673887">આ કમ્પ્યુટરના ઉત્પાદક અને મૉડલનું નામ વાંચો</translation>
 <translation id="8846163936679269230">ઇ-સિમની બધી પ્રોફાઇલ રીસેટ કરો</translation>
 <translation id="8846239054091760429">મૉનો ઑડિયો, સ્ટાર્ટઅપ, લાઇવ કૅપ્શન અને બીજું ઘણું</translation>
-<translation id="8847523528195140327">કવર બંધ કરવામાં આવે ત્યારે સાઇન આઉટ કરો</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">છુપાવેલી</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> નામની ઇ-સિમ પ્રોફાઇલને કાઢી નાખવાનું રદ કરો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 7b333e5..55f927e 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -564,7 +564,6 @@
 <translation id="1536754031901697553">डिसकनेक्ट हो रहा है...</translation>
 <translation id="1537254971476575106">फ़ुलस्क्रीन मैग्निफ़ायर</translation>
 <translation id="15373452373711364">बड़ा माउस कर्सर</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" />, <ph name="ORIGIN" /> को पढ़ने और उसमें बदलाव करने का अनुरोध कर रहा है</translation>
 <translation id="1540605929960647700">'डेमो मोड' चालू करें</translation>
 <translation id="1541346352678737112">कोई भी नेटवर्क नहीं मिला</translation>
 <translation id="1542137295869176367">आपका साइन इन करने के लिए डेटा अपडेट नहीं किया जा सका</translation>
@@ -726,7 +725,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> पर, <ph name="USERNAME" /> के क्रेडेंशियल</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> को जोड़ा नहीं जा सकता</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> बाकी</translation>
-<translation id="1678794218766467608">स्लीप मोड या कवर बंद होने पर लॉक करें</translation>
 <translation id="1679068421605151609">डेवलपर टूल</translation>
 <translation id="1679810534535368772">क्या आप वाकई बाहर निकलना चाहते हैं?</translation>
 <translation id="167983332380191032">मैनेजर सेवा ने एचटीटीपी गड़बड़ी भेजी है.</translation>
@@ -862,7 +860,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> कभी न दिखाएं</translation>
 <translation id="1794791083288629568">इस समस्या को ठीक करने में हमारी सहायता करने के लिए फ़ीडबैक भेजें.</translation>
 <translation id="1795214765651529549">क्लासिक का उपयोग करें</translation>
-<translation id="1796105431091975902">जोड़ने के लिए किसी Ansible प्लेबुक को चुनें</translation>
 <translation id="1796588414813960292">वे सुविधाएं काम नहीं करेंगी जिन्हें आवाज़ की ज़रूरत है</translation>
 <translation id="1797117170091578105">अपने Chromebook के कीबोर्ड की मदद से चलाएं. कीबोर्ड की कुंजियों को अपनी पसंद के मुताबिक, खास कार्रवाइयों के लिए सेट किया जा सकता है.</translation>
 <translation id="1800502858278951817">किसी भी एक्सटेंशन ने, <ph name="SITE_NAME" /> को पढ़ने और उसे बदलने की अनुमति नहीं मांगी है</translation>
@@ -927,6 +924,7 @@
 <translation id="1842766183094193446">क्या आप वाकई 'डेमो मोड' चालू करना चाहते हैं?</translation>
 <translation id="1845727111305721124">आवाज़ चलाने की अनुमति है</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> को चलाने के लिए कंट्रोल दबाए रखते हुए क्लिक करें</translation>
+<translation id="1848219224579402567">लिड बंद होने पर साइन आउट करें</translation>
 <translation id="184862733444771842">सुविधा का अनुरोध</translation>
 <translation id="1849016657376805933">कोई भी एचआईडी डिवाइस</translation>
 <translation id="1849186935225320012">इस पेज के पास MIDI डिवाइस का पूरा नियंत्रण है.</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">वर्शन: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">की-मैपिंग दिखाएं</translation>
 <translation id="1942128823046546853">यह एक्सटेंशन, सभी वेबसाइटों पर आपका डेटा पढ़ और बदल सकेगा</translation>
-<translation id="1942600407708803723">कवर बंद होने पर शट डाउन करें</translation>
 <translation id="1944528062465413897">ब्लूटूथ इस्तेमाल करके डिवाइस जोड़ने का कोड</translation>
 <translation id="1944921356641260203">अपडेट मिला</translation>
 <translation id="1947136734041527201">इसकी मदद से, पहचान करने वाली सेवा के लिए बनाए गए अपने खाते के ज़रिए, वेबसाइटों में साइन इन किया जा सकता है</translation>
@@ -2564,6 +2561,7 @@
 <translation id="3406290648907941085">वर्चुअल रियलिटी डिवाइस और डेटा इस्तेमाल करने की अनुमति है</translation>
 <translation id="3406396172897554194">भाषा या इनपुट के नाम से खोजें</translation>
 <translation id="3406605057700382950">बुकमार्क बार &amp;दिखाएं</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{<ph name="USER_EMAIL" /> के लिए, Google Password Manager में 1 पासवर्ड इंपोर्ट किया गया}one{<ph name="USER_EMAIL" /> के लिए, Google Password Manager में {NUM_PASSWORDS} पासवर्ड इंपोर्ट किया गया}other{<ph name="USER_EMAIL" /> के लिए, Google Password Manager में {NUM_PASSWORDS} पासवर्ड इंपोर्ट किए गए}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">चुनें पर जाएं</translation>
 <translation id="3413122095806433232">CA जारीकर्ता: <ph name="LOCATION" /></translation>
@@ -3097,7 +3095,6 @@
 <translation id="389901847090970821">कीबोर्ड चुनें</translation>
 <translation id="3900966090527141178">पासवर्ड निर्यात करें</translation>
 <translation id="3903187154317825986">पहले से मौजूद कीबोर्ड</translation>
-<translation id="3903191712482985591">प्लेबुक जोड़ें</translation>
 <translation id="3904326018476041253">जगह की जानकारी</translation>
 <translation id="3904849010307028014">किसी साइट के साथ हुए आपके इंटरैक्शन के आधार पर, वह साइट आपके ब्राउज़र को ट्रस्ट टोकन जारी कर सकती है. इस इंटरैक्शन में किसी खाते में नियमित रूप से साइन इन करने जैसी गतिविधियां शामिल होती हैं. इसके बाद, दूसरी साइटों पर जाने पर, अगर वे साइटें आपको जारी एक मान्य ट्रस्ट टोकन का पता लगा लेती हैं, तो इस बात की ज़्यादा उम्मीद होती है कि आपको एक व्यक्ति माना जाएगा, न कि बॉट.</translation>
 <translation id="3905761538810670789">ऐप्लिकेशन को ठीक करें</translation>
@@ -3748,6 +3745,7 @@
 <translation id="4541123282641193691">आपके खाते की पुष्टि नहीं हो सकी. कृपया फिर से कोशिश करें या अपना Chromebook रीस्टार्ट करें.</translation>
 <translation id="4541662893742891060">इस प्रोफ़ाइल से कनेक्ट नहीं किया जा सकता. तकनीकी सहायता के लिए, कृपया मोबाइल और इंटरनेट सेवा देने वाली अपनी कंपनी से संपर्क करें.</translation>
 <translation id="4541706525461326392">प्रोफ़ाइल हटाई जा रही है. इसमें कुछ मिनट लग सकते हैं.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{इस डिवाइस पर, Google Password Manager में 1 पासवर्ड इंपोर्ट किया गया}one{इस डिवाइस पर, Google Password Manager में {NUM_PASSWORDS} पासवर्ड इंपोर्ट किया गया}other{इस डिवाइस पर, Google Password Manager में {NUM_PASSWORDS} पासवर्ड इंपोर्ट किए गए}}</translation>
 <translation id="4542520061254486227"><ph name="WEBSITE_1" /> और <ph name="WEBSITE_2" /> पर अपना डेटा पढ़ें</translation>
 <translation id="4543778593405494224">प्रमाणपत्र मैनेजर</translation>
 <translation id="4544174279960331769">डिफ़ॉल्ट नीला अवतार</translation>
@@ -5040,7 +5038,6 @@
 <translation id="5827733057563115968">अगले शब्द का अनुमान</translation>
 <translation id="5828545842856466741">प्रोफ़ाइल जोड़ें...</translation>
 <translation id="5828633471261496623">प्रिंट हो रहा है...</translation>
-<translation id="5828797982387013521">प्लेबुक चुनें</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> को खोला नहीं जा सकता</translation>
 <translation id="5830720307094128296">पेज को इस रूप में सेव करें...</translation>
 <translation id="5832813618714645810">प्रोफ़ाइलें</translation>
@@ -5931,7 +5928,6 @@
 <translation id="6686665106869989887">टैब को दाईं ओर ले जाया गया</translation>
 <translation id="6686817083349815241">अपना पासवर्ड सेव करें</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> छिपाएं</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> को पढ़ने और उसमें बदलाव करने का अनुरोध किया जा रहा है:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> को कंप्यूटर पर आने के लिए कहें. अपनी आवाज़ का नमूना बनाने के लिए, आपका बच्चा इस स्क्रीन पर कुछ वाक्यांश पढ़ेगा.
     <ph name="BR" />
     अगर <ph name="SUPERVISED_USER_NAME" /> को पढ़ने में मदद चाहिए, तो उन्हें अपने बाद वाक्यांश दोहराने को कहें. माइक से दूर होकर धीरे बोलें, ताकि Assistant आपके बजाय आपके बच्चे की आवाज़ जानें.</translation>
@@ -6231,6 +6227,7 @@
 <translation id="6968288415730398122">स्क्रीन लॉक कॉन्फ़िगर करने के लिए अपना पासवर्ड डालें</translation>
 <translation id="6969047215179982698">आस-पास शेयर करने की सुविधा बंद करें</translation>
 <translation id="6970480684834282392">स्टार्टअप प्रकार</translation>
+<translation id="6970543303783413625">पासवर्ड इंपोर्ट नहीं किए जा सके. एक बार में सिर्फ़ <ph name="COUNT" /> पासवर्ड इंपोर्ट किए जा सकते हैं.</translation>
 <translation id="6970856801391541997">विशेष पेज प्रिंट करें</translation>
 <translation id="6970861306198150268">पक्का करें कि आप इस साइट के लिए अपना मौजूदा पासवर्ड सेव कर रहे हैं</translation>
 <translation id="6972180789171089114">ऑडियो/वीडियो</translation>
@@ -6462,6 +6459,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{पेज से बाहर निकलें}one{पेज से बाहर निकलें}other{पेज से बाहर निकलें}}</translation>
 <translation id="7207457272187520234">इस्तेमाल और गड़बड़ी की जानकारी से जुड़ा डेटा भेजें. यह डिवाइस फ़िलहाल Google को गड़बड़ी की जानकारी, डिवाइस, और ऐप्लिकेशन के इस्तेमाल से जुड़ा डेटा अपने-आप भेज रहा है. यह सिस्टम और ऐप्लिकेशन की स्थिरता बढ़ाने और दूसरे सुधार करने में मदद करेगा. इकट्ठा किया गया कुछ डेटा, Google ऐप्लिकेशन और पार्टनर की भी मदद करेगा. जैसे, Android डेवलपर. यह सेटिंग, डिवाइस के मालिक ने लागू की है. अगर आपकी दूसरी 'वेब और ऐप्लिकेशन गतिविधि' सेटिंग चालू है, तो यह डेटा आपके Google खाते में सेव किया जा सकता है.</translation>
 <translation id="7207631048330366454">ऐप्लिकेशन खोजें</translation>
+<translation id="7210471695184432500">इस डिवाइस पर, Google Password Manager में पासवर्ड इंपोर्ट करने के लिए, कोई CSV फ़ाइल चुनें</translation>
 <translation id="7210499381659830293">एक्सटेंशन प्रिंटर</translation>
 <translation id="7211783048245131419">अभी तक कोई भी स्विच असाइन नहीं किया गया</translation>
 <translation id="7212097698621322584">अपना मौजूदा पिन डालकर उसे बदलें. अगर आप पिन नहीं जानते हैं, तो आपको सुरक्षा कुंजी रीसेट करनी होगी, फिर एक नया पिन बनाना होगा.</translation>
@@ -7182,7 +7180,6 @@
 <translation id="7898725031477653577">हमेशा अनुवाद करें</translation>
 <translation id="7901405293566323524">फ़ोन हब</translation>
 <translation id="7903290522161827520">ब्राउज़र कॉम्पोनेंट वाला पेज चाहिए? यहां जाएं</translation>
-<translation id="7903345046358933331">पेज कोई प्रतिसाद नहीं दे रहा है. आप उसके प्रतिसाद देने तक प्रतीक्षा कर सकते हैं या उसे बंद कर सकते हैं.</translation>
 <translation id="7903429136755645827">गेम के कंट्रोल को पसंद के मुताबिक बनाने के लिए क्लिक करें</translation>
 <translation id="7903742244674067440">इन प्रमाणपत्र प्राधिकारियों की पहचान करने वाले प्रमाणपत्र आपके रिकॉर्ड में हैं</translation>
 <translation id="7903925330883316394">उपयोगिता: <ph name="UTILITY_TYPE" /></translation>
@@ -7518,6 +7515,7 @@
 <translation id="8206859287963243715">सेलुलर</translation>
 <translation id="8208216423136871611">न सेव करें</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{नई सूचना}one{# नई सूचना}other{# नई सूचनाएं}}</translation>
+<translation id="821119981794423735"><ph name="USER_EMAIL" /> के लिए, Google Password Manager में पासवर्ड इंपोर्ट करने के लिए, कोई CSV फ़ाइल चुनें</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{डाउनलोड जारी है}one{डाउनलोड जारी हैं}other{डाउनलोड जारी हैं}}</translation>
 <translation id="8213449224684199188">आप फ़ोटो मोड में हैं</translation>
 <translation id="8214489666383623925">फ़ाइल खोलें...</translation>
@@ -8097,6 +8095,7 @@
 <translation id="8780123805589053431">Google से इमेज के बारे में जानकारी पाएं</translation>
 <translation id="8780443667474968681">बोलकर खोजने की सेवा बंद कर दी गई है.</translation>
 <translation id="8781834595282316166">ग्रुप में नया टैब जोड़ें</translation>
+<translation id="8781980678064919987">लिड बंद होने पर शट डाउन करें</translation>
 <translation id="8782565991310229362">कियोस्क ऐप्स  लॉन्च रद्द किया गया.</translation>
 <translation id="8783834180813871000">ब्लूटूथ इस्तेमाल करके दूसरे डिवाइस से जोड़ने का कोड लिखें. इसके बाद, Return या Enter दबाएं.</translation>
 <translation id="8784626084144195648">बिन औसत</translation>
@@ -8161,7 +8160,6 @@
 <translation id="8846132060409673887">इस कंप्यूटर का निर्माता और मॉडल पढ़ें</translation>
 <translation id="8846163936679269230">ई-सिम प्रोफ़ाइलों को रीसेट करें</translation>
 <translation id="8846239054091760429">मोनो ऑडियो, स्टार्टअप, और लाइव कैप्शन वगैरह</translation>
-<translation id="8847523528195140327">कवर बंद होने पर साइन आउट करें</translation>
 <translation id="8847988622838149491">यूएसबी</translation>
 <translation id="8849001918648564819">छिपा हुआ</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> नाम की ई-सिम प्रोफ़ाइल को हटाने की प्रक्रिया रद्द करें</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index daa502a0..381cbb0 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -562,7 +562,6 @@
 <translation id="1536754031901697553">Prekidanje veze...</translation>
 <translation id="1537254971476575106">Povećalo za cijeli zaslon</translation>
 <translation id="15373452373711364">Veliki pokazivač miša</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> zahtijeva čitanje i promjenu web-lokacije <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Omogućite demo-način</translation>
 <translation id="1541346352678737112">Nije pronađena nijedna mreža</translation>
 <translation id="1542137295869176367">Podatke za prijavu nije moguće ažurirati</translation>
@@ -724,7 +723,6 @@
 <translation id="1676902103953506022">Pojedinosti o vjerodajnicama za korisnika <ph name="USERNAME" /> na <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Nije moguće dodati <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Još <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Zaključavanje u načinu mirovanja ili kada je poklopac zatvoren</translation>
 <translation id="1679068421605151609">Alati za razvojne programere</translation>
 <translation id="1679810534535368772">Jeste li sigurni da želite odustati?</translation>
 <translation id="167983332380191032">Usluga upravljanja poslala je HTTP pogrešku.</translation>
@@ -852,7 +850,6 @@
 <translation id="1794051631868188691">Nikad nemoj prikazivati trgovca <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Pošaljite povratne informacije da biste nam pomogli riješiti taj problem.</translation>
 <translation id="1795214765651529549">Koristi klasičnu</translation>
-<translation id="1796105431091975902">Odaberite Ansible Playbook za dodavanje</translation>
 <translation id="1796588414813960292">Značajke kojima je potreban zvuk neće funkcionirati</translation>
 <translation id="1797117170091578105">Igrajte pomoću Chromebookove tipkovnice. Tipke možete prilagoditi određenim radnjama.</translation>
 <translation id="1800502858278951817">Nijedno proširenje nije zatražilo da čita i miijenja <ph name="SITE_NAME" /></translation>
@@ -917,6 +914,7 @@
 <translation id="1842766183094193446">Jeste li sigurni da želite omogućiti demo-način?</translation>
 <translation id="1845727111305721124">Dopuštena je reprodukcija zvuka</translation>
 <translation id="1846308012215045257">Kliknite uz tipku Control za pokretanje dodatka <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Odjavi se kada se zatvori poklopac</translation>
 <translation id="184862733444771842">Zahtjev za značajku</translation>
 <translation id="1849016657376805933">Bilo koji HID uređaj</translation>
 <translation id="1849186935225320012">Ta stranica ima potpuni nadzor nad MIDI uređajima.</translation>
@@ -1024,7 +1022,6 @@
 <translation id="1941553344801134989">Verzija: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Prikaži mapiranje tipki</translation>
 <translation id="1942128823046546853">Pročitajte i promijenite sve svoje podatke na svim web-lokacijama</translation>
-<translation id="1942600407708803723">Isključivanje kada se zatvori poklopac</translation>
 <translation id="1944528062465413897">Bluetoothov kôd za uparivanje:</translation>
 <translation id="1944921356641260203">Pronađeno je ažuriranje</translation>
 <translation id="1947136734041527201">Omogućuje vam da se prijavite na web-lokacije pomoću računa koji imate na usluzi za identitet</translation>
@@ -3089,7 +3086,6 @@
 <translation id="389901847090970821">Odaberite tipkovnicu</translation>
 <translation id="3900966090527141178">Izvoz zaporki</translation>
 <translation id="3903187154317825986">Ugrađena tipkovnica</translation>
-<translation id="3903191712482985591">Dodajte playbook</translation>
 <translation id="3904326018476041253">Usluge lokacije</translation>
 <translation id="3904849010307028014">Na temelju vaše interakcije s određenom web-lokacijom, kao što je redovito prijavljivanje na račun, ta web-lokacija može vašem pregledniku izdati oznaku povjerenja. Ako druge web-lokacije koje poslije posjetite provjere postoji li važeća oznaka povjerenja i pronađu je, vjerojatnije je da će vas tretirati kao osobu, a ne bot.</translation>
 <translation id="3905761538810670789">Popravi aplikaciju</translation>
@@ -5032,7 +5028,6 @@
 <translation id="5827733057563115968">Predviđanje sljedeće riječi</translation>
 <translation id="5828545842856466741">Dodaj profil...</translation>
 <translation id="5828633471261496623">Ispis...</translation>
-<translation id="5828797982387013521">Odaberite priručnik</translation>
 <translation id="5830205393314753525">Nije moguće otvoriti aplikaciju <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Spremi stranicu &amp;kao...</translation>
 <translation id="5832813618714645810">Profili</translation>
@@ -5927,7 +5922,6 @@
 <translation id="6686665106869989887">Kartica je premještena udesno</translation>
 <translation id="6686817083349815241">Spremite zaporku</translation>
 <translation id="6687079240787935001">Sakrij <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Zahtijevanje čitanja i promjene web-lokacije <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Neka <ph name="SUPERVISED_USER_NAME" /> dođe do računala. Dijete će pročitati nekoliko izraza na ovom zaslonu da bi se izradio njegov glasovni model.
     <ph name="BR" />
     Ako <ph name="SUPERVISED_USER_NAME" /> treba pomoć s čitanjem, neka ponavlja za vama. Šapćite dalje od mikrofona kako bi Asistent naučio prepoznavati djetetov, a ne vaš glas.</translation>
@@ -7186,7 +7180,6 @@
 <translation id="7898725031477653577">Uvijek prevedi</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Tražite li komponente preglednika? Otvorite</translation>
-<translation id="7903345046358933331">Stranica je prestala reagirati. Možete pričekati da počne reagirati ili je zatvoriti.</translation>
 <translation id="7903429136755645827">Kliknite da biste prilagodili kontrole igara</translation>
 <translation id="7903742244674067440">U arhivi imate certifikate koji identificiraju ova tijela za izdavanje certifikata</translation>
 <translation id="7903925330883316394">Uslužni proces: <ph name="UTILITY_TYPE" /></translation>
@@ -8103,6 +8096,7 @@
 <translation id="8780123805589053431">Dohvati opise slika s Googlea</translation>
 <translation id="8780443667474968681">Glasovno je pretraživanje isključeno.</translation>
 <translation id="8781834595282316166">Nova kartica u grupi</translation>
+<translation id="8781980678064919987">Isključi računalo kada se zatvori poklopac</translation>
 <translation id="8782565991310229362">Pokretanje aplikacije kioska otkazano je.</translation>
 <translation id="8783834180813871000">Unesite kôd za uparivanje pa pritisnite Return ili Enter.</translation>
 <translation id="8784626084144195648">Kvantizacijski prosjek</translation>
@@ -8167,7 +8161,6 @@
 <translation id="8846132060409673887">Čitanje proizvođača i modela računala</translation>
 <translation id="8846163936679269230">Poništavanje eSIM profila</translation>
 <translation id="8846239054091760429">Monozvuk, pokretanje, automatski titlovi i drugo</translation>
-<translation id="8847523528195140327">Odjava kada se zatvori poklopac</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Skriveno</translation>
 <translation id="8849219423513870962">Otkazivanje uklanjanja eSIM profila <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index f738337..67cb166 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">Kapcsolat bontása...</translation>
 <translation id="1537254971476575106">Teljes képernyős nagyító</translation>
 <translation id="15373452373711364">Nagy egérmutató</translation>
-<translation id="1539630663098418038">A(z) <ph name="EXTENSIONS_REQUESTING_ACCESS" /> a(z) <ph name="ORIGIN" /> olvasását és módosítását kérelmezi</translation>
 <translation id="1540605929960647700">Demó mód engedélyezése</translation>
 <translation id="1541346352678737112">Nem található hálózat</translation>
 <translation id="1542137295869176367">Nem sikerült a bejelentkezési adatok frissítése</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022"><ph name="USERNAME" /> hitelesítési adatai a(z) <ph name="DOMAIN" /> domainen</translation>
 <translation id="1677306805708094828">A(z) <ph name="EXTENSION_TYPE_PARAMETER" /> nem adható hozzá</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> van hátra</translation>
-<translation id="1678794218766467608">Zárolás alvó módban vagy lezárt fedél esetén</translation>
 <translation id="1679068421605151609">Fejlesztői eszközök</translation>
 <translation id="1679810534535368772">Biztosan kilép?</translation>
 <translation id="167983332380191032">A kezelési szolgáltatás HTTP-hibát küldött</translation>
@@ -861,7 +859,6 @@
 <translation id="1794051631868188691">Soha ne jelenítse meg a következőt: <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Küldjön visszajelzést, hogy segítsen a probléma megoldásában.</translation>
 <translation id="1795214765651529549">Klasszikus téma használata</translation>
-<translation id="1796105431091975902">Válassza ki a hozzáadni kívánt Ansible-playbookot</translation>
 <translation id="1796588414813960292">A hangot igénylő funkciók nem működnek majd</translation>
 <translation id="1797117170091578105">Játszhat a Chromebook billentyűzetével. Az egyes billentyűket a kívánt műveletekhez rendelheti.</translation>
 <translation id="1800502858278951817">Egyetlen bővítmény se kérte a(z) <ph name="SITE_NAME" /> olvasását vagy módosítását</translation>
@@ -926,6 +923,7 @@
 <translation id="1842766183094193446">Biztosan engedélyezi a demó módot?</translation>
 <translation id="1845727111305721124">Lejátszhatnak hangot</translation>
 <translation id="1846308012215045257">A Control billentyű lenyomása mellett kattintson ide a(z) <ph name="PLUGIN_NAME" /> futtatásához.</translation>
+<translation id="1848219224579402567">Kijelentkezés, ha le van zárva a fedél</translation>
 <translation id="184862733444771842">Funkciókérés</translation>
 <translation id="1849016657376805933">Bármely HID-eszköz</translation>
 <translation id="1849186935225320012">Ez az oldal teljes hozzáféréssel rendelkezik a MIDI-eszközökhöz.</translation>
@@ -1033,7 +1031,6 @@
 <translation id="1941553344801134989">Verzió: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Billentyűzetkiosztás megjelenítése</translation>
 <translation id="1942128823046546853">Az Ön összes adatának olvasása és módosítása az összes webhelyen</translation>
-<translation id="1942600407708803723">Kikapcsolás a képernyő lecsukásakor</translation>
 <translation id="1944528062465413897">Bluetooth-párosítókód:</translation>
 <translation id="1944921356641260203">A rendszer frissítést talált</translation>
 <translation id="1947136734041527201">Lehetővé teszi, hogy identitásszolgáltató által biztosított fiókkal jelentkezzen be a webhelyekre</translation>
@@ -1725,6 +1722,7 @@
 <translation id="2568774940984945469">Infósáv tárolója</translation>
 <translation id="2571655996835834626">A weboldalak cookie-khoz, JavaScripthez, beépülő modulokhoz, tartózkodási helyhez, mikrofonhoz, kamerához és egyéb funkciókhoz való hozzáférését vezérlő beállítások módosítása.</translation>
 <translation id="2572032849266859634">Csak olvasási hozzáférést kapott a következőhöz: <ph name="VOLUME_NAME" />.</translation>
+<translation id="2573276323521243649">Vissza az avatarválasztó oldalról</translation>
 <translation id="2573417407488272418">Biztonsági másolat készítése az alkalmazásokról és a fájlokról a frissítés előtt a következő helyre: Fájlok &gt; Saját fájlok.</translation>
 <translation id="2573831315551295105">Kapcsoló hozzárendelése a következő művelethez: <ph name="ACTION" /></translation>
 <translation id="2575247648642144396">Ez az ikon akkor látható, ha az adott bővítmény műveletet hajthat végre az aktuális oldalon. A bővítményt az ikonra kattintva, illetve a következő billentyűkódot megnyomva használhatja: <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -2565,6 +2563,7 @@
 <translation id="3406290648907941085">Használhatják a virtuálisvalóság-eszközöket és -adatokat</translation>
 <translation id="3406396172897554194">Kereshet nyelv vagy a beviteli módszer neve szerint</translation>
 <translation id="3406605057700382950">&amp;Könyvjelzősáv megjelenítése</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 jelszó importálása a Google Jelszókezelőbe a(z) <ph name="USER_EMAIL" /> fiók számára sikeresen megtörtént}other{{NUM_PASSWORDS} jelszó importálása a Google Jelszókezelőbe a(z) <ph name="USER_EMAIL" /> fiók számára sikeresen megtörtént}}</translation>
 <translation id="3409785640040772790">Térkép</translation>
 <translation id="3412265149091626468">Ugrás a kijelöléshez</translation>
 <translation id="3413122095806433232">CA kibocsátók: <ph name="LOCATION" /></translation>
@@ -3098,7 +3097,6 @@
 <translation id="389901847090970821">Billentyűzet kiválasztása</translation>
 <translation id="3900966090527141178">Jelszavak exportálása</translation>
 <translation id="3903187154317825986">Beépített billentyűzet</translation>
-<translation id="3903191712482985591">Playbook hozzáadása</translation>
 <translation id="3904326018476041253">Helyszolgáltatások</translation>
 <translation id="3904849010307028014">A webhelyeken végzett tevékenységei (például a fiókokba való rendszeres bejelentkezések) alapján az érintett webhely megbízhatósági tokent biztosíthat a böngésző számára. Ha pedig később a többi Ön által felkeresett webhely érvényes megbízhatósági tokent keres, majd talál, akkor sokkal nagyobb valószínűséggel kezelik Önt személyként, mint robotként.</translation>
 <translation id="3905761538810670789">Alkalmazás javítása</translation>
@@ -3749,6 +3747,7 @@
 <translation id="4541123282641193691">Nem sikerült ellenőrizni a fiókot. Próbálja meg ismét, vagy indítsa újra a Chromebookot.</translation>
 <translation id="4541662893742891060">Nem lehet csatlakozni ehhez a profilhoz. Műszaki segítségért forduljon a szolgáltatóhoz.</translation>
 <translation id="4541706525461326392">Profil eltávolítása. Ez eltarthat néhány percig.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 jelszó importálálása a Google Jelszókezelőbe ezen az eszközön sikeresen megtörtént}other{{NUM_PASSWORDS} jelszó importálása a Google Jelszókezelőbe ezen az eszközön sikeresen megtörtént}}</translation>
 <translation id="4542520061254486227">Adatok beolvasása a következő webhelyeken: <ph name="WEBSITE_1" /> és <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Tanúsítványkezelő</translation>
 <translation id="4544174279960331769">Alapértelmezett kék avatar</translation>
@@ -5044,7 +5043,6 @@
 <translation id="5827733057563115968">Várható kifejezés</translation>
 <translation id="5828545842856466741">Profil hozzáadása…</translation>
 <translation id="5828633471261496623">Nyomtatás...</translation>
-<translation id="5828797982387013521">Ötlettár kiválasztása</translation>
 <translation id="5830205393314753525">A(z) <ph name="APP_NAME" /> nem nyitható meg</translation>
 <translation id="5830720307094128296">Oldal mentése &amp;másként...</translation>
 <translation id="5832813618714645810">Profilok</translation>
@@ -5936,7 +5934,6 @@
 <translation id="6686665106869989887">Lap jobbra helyezve</translation>
 <translation id="6686817083349815241">Jelszó mentése</translation>
 <translation id="6687079240787935001">A következők elrejtése: <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">A(z) <ph name="ORIGIN" /> olvasásának és módosításának kérelmezése:</translation>
 <translation id="6689714331348768690">Hívja a számítógéphez őt: <ph name="SUPERVISED_USER_NAME" />. Hangmintája létrehozásához gyermekének fel kell olvasnia néhány kifejezést erről a képernyőről.
     <ph name="BR" />
     Ha <ph name="SUPERVISED_USER_NAME" /> segítségre szorul a felolvasáshoz, kérje meg, hogy ismételje Ön után. Suttogjon a mikrofontól távol, hogy a Segéd gyermeke hangját tanulja meg, ne az Önét.</translation>
@@ -6238,6 +6235,7 @@
 <translation id="6968288415730398122">Adja meg jelszavát a képernyőzár beállításához</translation>
 <translation id="6969047215179982698">Közeli megosztás kikapcsolása</translation>
 <translation id="6970480684834282392">Kezdési típus</translation>
+<translation id="6970543303783413625">Nem lehet importálni a jelszavakat. Egyszerre legfeljebb <ph name="COUNT" /> jelszót importálhat.</translation>
 <translation id="6970856801391541997">Adott oldalak nyomtatása</translation>
 <translation id="6970861306198150268">Mindenképpen mentse a webhelyhez tartozó aktuális jelszavát</translation>
 <translation id="6972180789171089114">Hanganyag/videó</translation>
@@ -6417,6 +6415,7 @@
 <translation id="7138678301420049075">Egyéb</translation>
 <translation id="7139627972753429585">A(z) <ph name="APP_NAME" /> használja a mikrofont</translation>
 <translation id="7141105143012495934">A bejelentkezés nem sikerült, mert a fiókadatokat nem sikerült lekérni. Kérjük, forduljon rendszergazdájához, vagy próbálja újra.</translation>
+<translation id="7141844554192012199">Ellenőrzés</translation>
 <translation id="7144878232160441200">Újra</translation>
 <translation id="7149839598364933473">Eszköz konvertálása a következő rendszert használó eszközzé: <ph name="DEVICE_OS" />.</translation>
 <translation id="7149893636342594995">Az elmúlt 24 órából</translation>
@@ -6469,6 +6468,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Oldal elhagyása}other{Oldalak elhagyása}}</translation>
 <translation id="7207457272187520234">Használati és diagnosztikai adatok küldése. Ez az eszköz jelenleg automatikusan küld diagnosztikai, eszköz- és alkalmazáshasználati adatokat a Google-nak. Az adatok a rendszer- és alkalmazásstabilitás javításában, valamint más fejlesztésekben segítenek. Bizonyos összesített adatok a Google-alkalmazásoknak és -partnereknek, például az Android-fejlesztőknek is segítenek. Ezt a beállítást kötelezővé tette az eszköz tulajdonosa. Ha az Internetes és alkalmazástevékenységek beállítás is be van kapcsolva, akkor a rendszer ezeket az adatokat az Ön Google-fiókjába is mentheti.</translation>
 <translation id="7207631048330366454">Alkalmazások keresése</translation>
+<translation id="7210471695184432500">Ha jelszavakat szeretne importálni a Google Jelszókezelőbe ezen az eszközön, válassza ki a kívánt CSV-fájlt</translation>
 <translation id="7210499381659830293">Bővítményalapú nyomtatók</translation>
 <translation id="7211783048245131419">Még nem lett hozzárendelve kapcsoló</translation>
 <translation id="7212097698621322584">A módosításhoz adja meg jelenlegi PIN-kódját. Ha nem tudja a PIN-kódot, vissza kell állítania a biztonsági hardverkulcsot, majd új PIN-kódot kell létrehoznia.</translation>
@@ -7192,7 +7192,6 @@
 <translation id="7898725031477653577">Mindig legyen lefordítva</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">A böngésző-összetevőket keresi? Nyissa meg ezt az oldalt:</translation>
-<translation id="7903345046358933331">Az oldal nem válaszol. Megvárhatja, hogy reagáljon, vagy bezárhatja.</translation>
 <translation id="7903429136755645827">Kattintson a játékvezérlők személyre szabásához</translation>
 <translation id="7903742244674067440">Vannak olyan tanúsítványok, amelyek azonosítják ezeket a tanúsítványkibocsátókat</translation>
 <translation id="7903925330883316394">Segédprogram: <ph name="UTILITY_TYPE" /></translation>
@@ -7528,6 +7527,7 @@
 <translation id="8206859287963243715">Mobil</translation>
 <translation id="8208216423136871611">Ne mentse</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Új értesítés}other{# új értesítés}}</translation>
+<translation id="821119981794423735">Ha jelszavakat szeretne importálni a Google Jelszókezelőbe a(z) <ph name="USER_EMAIL" /> fiók számára, válassza ki a kívánt CSV-fájlt</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Letöltés folyamatban}other{Letöltések folyamatban}}</translation>
 <translation id="8213449224684199188">Fotó mód bekapcsolva</translation>
 <translation id="8214489666383623925">Fájl megnyitása...</translation>
@@ -8106,6 +8106,7 @@
 <translation id="8780123805589053431">Képleírások lekérése a Google-tól</translation>
 <translation id="8780443667474968681">A hangalapú keresés ki van kapcsolva.</translation>
 <translation id="8781834595282316166">Új lap a csoportban</translation>
+<translation id="8781980678064919987">Kikapcsolás, ha le van zárva a fedél</translation>
 <translation id="8782565991310229362">Kiosk-alkalmazás indítása visszavonva.</translation>
 <translation id="8783834180813871000">Írja be a párosítókódot, majd nyomja meg az Enter vagy a Return billentyűt</translation>
 <translation id="8784626084144195648">Kidobottak átlaga</translation>
@@ -8170,7 +8171,6 @@
 <translation id="8846132060409673887">A számítógép gyártójának és típusának elolvasása</translation>
 <translation id="8846163936679269230">eSIM-profilok visszaállítása</translation>
 <translation id="8846239054091760429">Monó hang, indítás, Élő feliratozás és egyebek.</translation>
-<translation id="8847523528195140327">Kijelentkezés a képernyő lecsukásakor</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Rejtett</translation>
 <translation id="8849219423513870962">A következő eSIM-profil eltávolításának megszakítása: <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb
index 7c9bcaa..9927a14 100644
--- a/chrome/app/resources/generated_resources_hy.xtb
+++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -562,7 +562,6 @@
 <translation id="1536754031901697553">Անջատվում է…</translation>
 <translation id="1537254971476575106">Լիաէկրան խոշորացույց</translation>
 <translation id="15373452373711364">Մկնիկի մեծ նշորդ</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> ընդլայնմանն անհրաժեշտ է <ph name="ORIGIN" /> կայքի տվյալները կարդալու և փոփոխելու թույլտվություն</translation>
 <translation id="1540605929960647700">Ցուցադրական ռեժիմի միացում</translation>
 <translation id="1541346352678737112">Ցանց չի գտնվել</translation>
 <translation id="1542137295869176367">Չհաջողվեց թարմացնել ձեր մուտքի տվյալները</translation>
@@ -724,7 +723,6 @@
 <translation id="1676902103953506022"><ph name="USERNAME" /> օգտատիրոջ մուտքի տվյալները <ph name="DOMAIN" /> տիրույթի համար</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" />ը չի կարող ավելացվել</translation>
 <translation id="1677472565718498478">Մնացել է <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Կողպել քնի ռեժիմում, կամ երբ պատյանի շապիկը փակ է</translation>
 <translation id="1679068421605151609">Ծրագրավորողի գործիքներ</translation>
 <translation id="1679810534535368772">Իսկապե՞ս ուզում եք դուրս գալ</translation>
 <translation id="167983332380191032">Կառավարման ծառայությունն ուղարկել է HTTP-ի սխալ։</translation>
@@ -852,7 +850,6 @@
 <translation id="1794051631868188691">Երբեք ցույց չտալ «<ph name="MERCHANT" />» վաճառողին</translation>
 <translation id="1794791083288629568">Հայտնել կարծիք՝ խնդիրը վերացնելու համար:</translation>
 <translation id="1795214765651529549">Օգտագործել դասական թեման</translation>
-<translation id="1796105431091975902">Ընտրեք Ansible ձեռնարկ՝ ավելացնելու համար</translation>
 <translation id="1796588414813960292">Գործառույթները, որոնց համար պահանջվում է ձայն, չեն աշխատի</translation>
 <translation id="1797117170091578105">Խաղացեք ձեր Chromebook-ի ստեղնաշարի միջոցով։ Ստեղներին կարող եք նշանակել որոշակի գործողություններ։</translation>
 <translation id="1800502858278951817">Ոչ մի ընդլայնում <ph name="SITE_NAME" /> կայքը կարդալու և փոփոխելու թույլտվություն չի հայցել</translation>
@@ -917,6 +914,7 @@
 <translation id="1842766183094193446">Միացնե՞լ ցուցադրական ռեժիմը</translation>
 <translation id="1845727111305721124">Թույլատրվում է նվագարկել</translation>
 <translation id="1846308012215045257">Ctrl ստեղնը պահեք և մկնիկով սեղմեք՝ <ph name="PLUGIN_NAME" />-ն աշխատեցնելու համար</translation>
+<translation id="1848219224579402567">Դուրս գալ հաշվից, երբ սարքի կափարիչը փակ է</translation>
 <translation id="184862733444771842">Գործառույթ ավելացնելու առաջարկ</translation>
 <translation id="1849016657376805933">Ցանկացած HID սարք</translation>
 <translation id="1849186935225320012">Այս էջն ամբողջովին վերահսկում է MIDI սարքերը:</translation>
@@ -1024,7 +1022,6 @@
 <translation id="1941553344801134989">Տարբերակ՝ <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Ցույց տալ ստեղների նշանակումը</translation>
 <translation id="1942128823046546853">Կարդալ և փոփոխել ձեր տվյալները բոլոր կայքերում</translation>
-<translation id="1942600407708803723">Ավարտել աշխատանքը, երբ պատյանի շապիկը փակ է</translation>
 <translation id="1944528062465413897">Bluetooth-ով զուգակցման կոդ՝</translation>
 <translation id="1944921356641260203">Գտնվել է թարմացում</translation>
 <translation id="1947136734041527201">Թույլ է տալիս ձեզ մուտք գործել կայքեր ինքնության հաստատման ծառայության միջոցով</translation>
@@ -2552,6 +2549,7 @@
 <translation id="3406290648907941085">Թույլատրվում է օգտագործել վիրտուալ իրականության սարքեր և տվյալներ</translation>
 <translation id="3406396172897554194">Որոնեք ըստ լեզվի կամ ներածման մեթոդի</translation>
 <translation id="3406605057700382950">&amp;Ցուցադրել էջանիշների գոտին</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 գաղտնաբառ ներմուծվեց <ph name="USER_EMAIL" /> հաշվի Google գաղտնաբառերի կառավարիչ}one{{NUM_PASSWORDS} գաղտնաբառ ներմուծվեց <ph name="USER_EMAIL" /> հաշվի Google գաղտնաբառերի կառավարիչ}other{{NUM_PASSWORDS} գաղտնաբառ ներմուծվեց <ph name="USER_EMAIL" /> հաշվի Google գաղտնաբառերի կառավարիչ}}</translation>
 <translation id="3409785640040772790">Քարտեզներ</translation>
 <translation id="3412265149091626468">Jump to Selection</translation>
 <translation id="3413122095806433232">Հավաստագրման կենտրոնի թողարկողներ՝ <ph name="LOCATION" /></translation>
@@ -3085,7 +3083,6 @@
 <translation id="389901847090970821">Ընտրեք ստեղնաշարը</translation>
 <translation id="3900966090527141178">Գաղտնաբառերի արտահանում</translation>
 <translation id="3903187154317825986">Ներկառուցված ստեղնաշար</translation>
-<translation id="3903191712482985591">Ավելացրեք ձեռնարկ</translation>
 <translation id="3904326018476041253">Տեղորոշման ծառայություններ</translation>
 <translation id="3904849010307028014">Երբ դուք փոխգործակցում եք կայքի հետ (օրինակ՝ կանոնավոր կերպով հաշիվ եք մտնում), այն կարող է ձեր դիտարկիչին վստահության թոքեն տրամադրել։ Դրանից հետո, եթե ձեր այցելած մյուս կայքերը գտնեն վստահության վավեր թոքեն, ամենայն հավանականությամբ ձեզ կճանաչեն որպես մարդ, այլ ոչ թե բոտ։</translation>
 <translation id="3905761538810670789">Հավելվածի վերանորոգում</translation>
@@ -3736,6 +3733,7 @@
 <translation id="4541123282641193691">Չհաջողվեց մուտք գործել։ Փորձեք նորից կամ վերաբեռնեք Chromebook-ը։</translation>
 <translation id="4541662893742891060">Չհաջողվեց միանալ այս պրոֆիլին։ Տեխնիկական աջակցության համար կապվեք օպերատորի հետ։</translation>
 <translation id="4541706525461326392">Պրոֆիլը հեռացվում է։ Դա կարող է մի քանի րոպե տևել։</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 գաղտնաբառ ներմուծվեց այս սարքի Google գաղտնաբառերի կառավարիչ}one{{NUM_PASSWORDS} գաղտնաբառ ներմուծվեց այս սարքի Google գաղտնաբառերի կառավարիչ}other{{NUM_PASSWORDS} գաղտնաբառ ներմուծվեց այս սարքի Google գաղտնաբառերի կառավարիչ}}</translation>
 <translation id="4542520061254486227">Կարդալ ձեր տվյալները <ph name="WEBSITE_1" /> և <ph name="WEBSITE_2" /> կայքերում</translation>
 <translation id="4543778593405494224">Վկայագրերի կառավարիչ</translation>
 <translation id="4544174279960331769">Կանխադրված կապույտ ավատար</translation>
@@ -5029,7 +5027,6 @@
 <translation id="5827733057563115968">Հաջորդ բառի կանխատեսում</translation>
 <translation id="5828545842856466741">Ավելացնել պրոֆիլ...</translation>
 <translation id="5828633471261496623">Տպում…</translation>
-<translation id="5828797982387013521">Ընտրել ձեռնարկ</translation>
 <translation id="5830205393314753525">Չհաջողվեց բացել <ph name="APP_NAME" /> հավելվածը</translation>
 <translation id="5830720307094128296">Պահել էջը &amp;որպես…</translation>
 <translation id="5832813618714645810">Պրոֆիլներ</translation>
@@ -5922,7 +5919,6 @@
 <translation id="6686665106869989887">Ներդիրը տեղափոխվեց աջ</translation>
 <translation id="6686817083349815241">Պահել գաղտնաբառը</translation>
 <translation id="6687079240787935001">Թաքցնել «<ph name="MODULE_TITLE" />» զամբյուղը</translation>
-<translation id="6688391094668641513">Կայքի (<ph name="ORIGIN" />) տվյալները կարդալու և փոփոխելու հարցում՝</translation>
 <translation id="6689714331348768690">Խնդրեք <ph name="SUPERVISED_USER_NAME" />-ին մոտենալ համակարգչին։ Իր ձայնի նմուշը ստեղծելու համար երեխան պետք է կարդա էկրանին ցուցադրված մի քանի արտահայտություն։
     <ph name="BR" />
     Եթե <ph name="SUPERVISED_USER_NAME" />-ին օգնելու կարիք լինի, առաջարկեք նրան կրկնել ձեր հետևից։ Ասեք բառերը շշուկով՝ շրջվելով խոսափողից, որպեսզի Օգնականը հիշի երեխայի, այլ ոչ թե ձեր ձայնը։</translation>
@@ -6224,6 +6220,7 @@
 <translation id="6968288415730398122">Էկրանի կողպումը կարգավորելու համար մուտքագրեք ձեր գաղտնաբառը</translation>
 <translation id="6969047215179982698">Անջատել մոտակա սարքերի հետ փոխանակումը</translation>
 <translation id="6970480684834282392">Մեկնարկի տեսակ</translation>
+<translation id="6970543303783413625">Չհաջողվեց ներմուծել գաղտնաբառերը։ Միաժամանակ կարող եք ներմուծել մինչև <ph name="COUNT" /> գաղտնաբառ։</translation>
 <translation id="6970856801391541997">Ընտրված էջերի տպում</translation>
 <translation id="6970861306198150268">Համոզվեք, որ պահել եք այս կայքի ձեր ընթացիկ գաղտնաբառը</translation>
 <translation id="6972180789171089114">Աուդիո/տեսանյութեր</translation>
@@ -6455,6 +6452,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Փակել էջը}one{Փակել էջը}other{Փակել էջը}}</translation>
 <translation id="7207457272187520234">Օգտագործման և դիագնոստիկ տվյալների ուղարկում։ Այս սարքը Google-ին ավտոմատ ուղարկում է ախտորոշման, ինչպես նաև սարքի և հավելվածի օգտագործման մասին տվյալներ։ Դա կօգնի բարելավել համակարգի ու հավելվածների աշխատանքի կայունությունը։ Հավաքված տեղեկությունների մի մասը օգտակար կլինի մեր գործընկերների, օրինակ, Android ծրագրավորողների համար։ Այս կարգավորումը պարտադրված է սեփականատիրոջ կողմից։ Եթե միացնեք Վեբ որոնման և հավելվածների լրացուցիչ պատմությունը, այս տվյալները կպահվեն ձեր Google հաշվում։</translation>
 <translation id="7207631048330366454">Որոնել հավելվածներ</translation>
+<translation id="7210471695184432500">Գաղտնաբառերը այս սարքի Google գաղտնաբառերի կառավարիչ ներմուծելու համար ընտրեք CSV ֆայլ</translation>
 <translation id="7210499381659830293">Ընդլայնում-տպիչներ</translation>
 <translation id="7211783048245131419">Նշանակված փոխանջատիչներ չկան</translation>
 <translation id="7212097698621322584">Մուտքագրեք ձեր ընթացիկ PIN կոդը՝ այն փոխելու համար: Եթե չգիտեք ձեր PIN կոդը, զրոյացրեք անվտանգության բանալու կարգավորումները և նշեք նոր PIN կոդ։</translation>
@@ -7177,7 +7175,6 @@
 <translation id="7898725031477653577">Միշտ թարգմանել</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Դիտարկիչի բաղադրիչնե՞րն եք փնտրում։ Անցեք</translation>
-<translation id="7903345046358933331">Էջը չի պատասխանում: Կարող եք սպասել պատասխանին կամ փակել էջը:</translation>
 <translation id="7903429136755645827">Սեղմեք՝ խաղի կառավարման տարրերը կարգավորելու համար</translation>
 <translation id="7903742244674067440">Ձեր պահված հավաստագրերում նշված են այս հավաստագրման կենտրոնները</translation>
 <translation id="7903925330883316394">Օժանդակ ծրագիր՝ <ph name="UTILITY_TYPE" /></translation>
@@ -7512,6 +7509,7 @@
 <translation id="8206859287963243715">Բջջային</translation>
 <translation id="8208216423136871611">Չպահել</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Նոր ծանուցում}one{# նոր ծանուցում}other{# նոր ծանուցում}}</translation>
+<translation id="821119981794423735">Գաղտնաբառերը <ph name="USER_EMAIL" /> հաշվի Google գաղտնաբառերի կառավարիչ ներմուծելու համար ընտրեք CSV ֆայլ</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Ներբեռնումն ընթացքում է}one{Ներբեռնումն ընթացքում է}other{Ներբեռնումներն ընթացքում են}}</translation>
 <translation id="8213449224684199188">Լուսանկարելու ռեժիմը միացավ</translation>
 <translation id="8214489666383623925">Open File...</translation>
@@ -8091,6 +8089,7 @@
 <translation id="8780123805589053431">Ստացեք պատկերների նկարագրությունները Google-ից</translation>
 <translation id="8780443667474968681">Ձայնային որոնումն անջատվել է:</translation>
 <translation id="8781834595282316166">Նոր ներդիր խմբում</translation>
+<translation id="8781980678064919987">Ավարտել աշխատանքը, երբ սարքի կափարիչը փակ է</translation>
 <translation id="8782565991310229362">Kiosk հավելվածի գործարկումը չեղարկվեց:</translation>
 <translation id="8783834180813871000">Մուտքագրեք Bluetooth-ով զուգակցման կոդը, ապա սեղմեք RETURN կամ ENTER։</translation>
 <translation id="8784626084144195648">Միջինն ըստ խմբերի</translation>
@@ -8155,7 +8154,6 @@
 <translation id="8846132060409673887">Ցույց տալ համակարգչի արտադրողին և մոդելը</translation>
 <translation id="8846163936679269230">Վերակայել eSIM պրոֆիլները</translation>
 <translation id="8846239054091760429">Մոնո աուդիո, մեկնարկի ձայներ, ենթագրեր և ավելին</translation>
-<translation id="8847523528195140327">Դուրս գալ հաշվից, երբ պատյանի շապիկը փակ է</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Ոչ ոք</translation>
 <translation id="8849219423513870962">Չեղարկել eSIM պրոֆիլի (<ph name="PROFILE_NAME" />) հեռացումը</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 7b321c3..f92829a 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">Memutuskan sambungan...</translation>
 <translation id="1537254971476575106">Kaca pembesar layar penuh</translation>
 <translation id="15373452373711364">Kursor mouse besar</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> meminta untuk membaca dan mengubah <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Aktifkan mode demo</translation>
 <translation id="1541346352678737112">Jaringan tidak ditemukan</translation>
 <translation id="1542137295869176367">Data login Anda tidak dapat diperbarui</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">Detail kredensial untuk <ph name="USERNAME" /> di <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Tidak dapat menambahkan <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Sisa waktu <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Kunci dalam mode tidur atau saat penutup ditutup</translation>
 <translation id="1679068421605151609">Alat Developer</translation>
 <translation id="1679810534535368772">Yakin ingin keluar?</translation>
 <translation id="167983332380191032">Layanan pengelolaan mengirim error HTTP.</translation>
@@ -861,7 +859,6 @@
 <translation id="1794051631868188691">Jangan pernah tampilkan <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Kirim masukan untuk membantu kami menyelesaikan masalah ini.</translation>
 <translation id="1795214765651529549">Gunakan Klasik</translation>
-<translation id="1796105431091975902">Pilih Playbook Ansible untuk ditambahkan</translation>
 <translation id="1796588414813960292">Fitur yang memerlukan suara tidak akan berfungsi</translation>
 <translation id="1797117170091578105">Mainkan dengan keyboard Chromebook. Anda dapat menyesuaikan tombol untuk tindakan tertentu.</translation>
 <translation id="1800502858278951817">Tidak ada ekstensi yang meminta untuk membaca dan mengubah <ph name="SITE_NAME" /></translation>
@@ -926,6 +923,7 @@
 <translation id="1842766183094193446">Yakin ingin mengaktifkan mode demo?</translation>
 <translation id="1845727111305721124">Diizinkan memutar suara</translation>
 <translation id="1846308012215045257">Kontrol-klik untuk menjalankan <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Logout saat penutup ditutup</translation>
 <translation id="184862733444771842">Permintaan Fitur</translation>
 <translation id="1849016657376805933">Semua perangkat HID</translation>
 <translation id="1849186935225320012">Halaman ini memiliki kontrol penuh perangkat MIDI.</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">Versi: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Tampilkan konfigurasi tombol</translation>
 <translation id="1942128823046546853">Membaca dan mengubah semua data Anda di semua situs</translation>
-<translation id="1942600407708803723">Mati saat cover ditutup</translation>
 <translation id="1944528062465413897">Kode penyambungan Bluetooth:</translation>
 <translation id="1944921356641260203">Pembaruan ditemukan</translation>
 <translation id="1947136734041527201">Memungkinkan Anda login ke situs menggunakan akun yang Anda miliki dengan layanan identitas</translation>
@@ -1726,6 +1723,7 @@
 <translation id="2568774940984945469">Infobar Container</translation>
 <translation id="2571655996835834626">Mengubah setelan yang mengontrol akses situs ke fitur seperti cookie, JavaScript, plugin, geolokasi, mikrofon, kamera, dll.</translation>
 <translation id="2572032849266859634">Akses hanya baca ke <ph name="VOLUME_NAME" /> telah diberikan.</translation>
+<translation id="2573276323521243649">Kembali dari halaman pemilihan avatar</translation>
 <translation id="2573417407488272418">Cadangkan aplikasi dan file ke File &gt; File saya sebelum melakukan upgrade.</translation>
 <translation id="2573831315551295105">Tetapkan tombol akses untuk “<ph name="ACTION" />”</translation>
 <translation id="2575247648642144396">Ikon ini akan terlihat saat ekstensi dapat berperan di halaman aktif. Gunakan ekstensi ini dengan mengklik ikon atau dengan menekan <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3100,7 +3098,6 @@
 <translation id="389901847090970821">Pilih keyboard</translation>
 <translation id="3900966090527141178">Ekspor sandi</translation>
 <translation id="3903187154317825986">Keyboard Bawaan</translation>
-<translation id="3903191712482985591">Tambahkan playbook</translation>
 <translation id="3904326018476041253">Layanan Lokasi</translation>
 <translation id="3904849010307028014">Berdasarkan interaksi Anda dengan situs, seperti login ke akun secara rutin, situs tersebut dapat menerbitkan trust token ke browser Anda. Kemudian, jika situs lain yang Anda buka memeriksa dan menemukan trust token yang valid, situs biasanya akan menganggap Anda sebagai manusia, bukan bot.</translation>
 <translation id="3905761538810670789">Perbaiki aplikasi</translation>
@@ -5046,7 +5043,6 @@
 <translation id="5827733057563115968">Prediksi kata berikutnya</translation>
 <translation id="5828545842856466741">Tambahkan profil ...</translation>
 <translation id="5828633471261496623">Mencetak...</translation>
-<translation id="5828797982387013521">Pilih playbook</translation>
 <translation id="5830205393314753525">Tidak dapat membuka <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Simp&amp;an Halaman Sebagai...</translation>
 <translation id="5832813618714645810">Profil</translation>
@@ -5938,7 +5934,6 @@
 <translation id="6686665106869989887">Tab dipindah ke kanan</translation>
 <translation id="6686817083349815241">Simpan sandi Anda</translation>
 <translation id="6687079240787935001">Sembunyikan <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Meminta untuk membaca dan mengubah <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Minta <ph name="SUPERVISED_USER_NAME" /> melihat komputer ini. Anak Anda akan membaca beberapa frasa di layar ini untuk membuat model suaranya.
     <ph name="BR" />
     Jika <ph name="SUPERVISED_USER_NAME" /> memerlukan bantuan saat membaca, minta dia mengulangi ucapan Anda. Berbisiklah jauh dari mikrofon agar Asisten mengenali suara anak Anda, bukan suara Anda.</translation>
@@ -6420,6 +6415,7 @@
 <translation id="7138678301420049075">Lainnya</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> sedang menggunakan mikrofon Anda</translation>
 <translation id="7141105143012495934">Proses masuk gagal karena detail akun Anda tidak dapat diambil. Hubungi administrator Anda atau coba lagi.</translation>
+<translation id="7141844554192012199">Pemeriksaan</translation>
 <translation id="7144878232160441200">Coba lagi</translation>
 <translation id="7149839598364933473">Ubah perangkat ini menjadi perangkat <ph name="DEVICE_OS" />.</translation>
 <translation id="7149893636342594995">24 jam terakhir</translation>
@@ -7197,7 +7193,6 @@
 <translation id="7898725031477653577">Selalu terjemahkan</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Mencari komponen browser? Buka</translation>
-<translation id="7903345046358933331">Halaman ini tidak merespons. Anda dapat menunggu hingga halaman merespons atau menutupnya.</translation>
 <translation id="7903429136755645827">Klik untuk menyesuaikan kontrol game Anda</translation>
 <translation id="7903742244674067440">Anda memiliki sertifikat pada file yang mengidentifikasi otoritas sertifikat ini</translation>
 <translation id="7903925330883316394">Utilitas: <ph name="UTILITY_TYPE" /></translation>
@@ -8112,6 +8107,7 @@
 <translation id="8780123805589053431">Dapatkan deskripsi gambar dari Google</translation>
 <translation id="8780443667474968681">Penelusuran suara telah dinonaktifkan.</translation>
 <translation id="8781834595282316166">Tab Baru di Grup</translation>
+<translation id="8781980678064919987">Matikan saat penutup ditutup</translation>
 <translation id="8782565991310229362">Peluncuran aplikasi kios dibatalkan.</translation>
 <translation id="8783834180813871000">Ketik kode penyambungan Bluetooth lalu tekan tombol Kembali atau Enter.</translation>
 <translation id="8784626084144195648">Rata-rata dalam Sampah</translation>
@@ -8176,7 +8172,6 @@
 <translation id="8846132060409673887">Membaca produsen dan model komputer ini</translation>
 <translation id="8846163936679269230">Reset profil eSIM</translation>
 <translation id="8846239054091760429">Audio mono, pengaktifan, Teks Otomatis, dan lainnya</translation>
-<translation id="8847523528195140327">Logout saat cover ditutup</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Tersembunyi</translation>
 <translation id="8849219423513870962">Batalkan penghapusan profil eSIM bernama <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb
index 6c773eb..3be2cfd 100644
--- a/chrome/app/resources/generated_resources_is.xtb
+++ b/chrome/app/resources/generated_resources_is.xtb
@@ -564,7 +564,6 @@
 <translation id="1536754031901697553">Aftengir ...</translation>
 <translation id="1537254971476575106">Stækkunargler á öllum skjánum</translation>
 <translation id="15373452373711364">Stór músarbendill</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> biður um að fá að lesa og breyta <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Kveikja á prufustillingu</translation>
 <translation id="1541346352678737112">Ekkert netkerfi fannst</translation>
 <translation id="1542137295869176367">Ekki var hægt að uppfæra innskráningargögnin þín</translation>
@@ -726,7 +725,6 @@
 <translation id="1676902103953506022">Innskráningarupplýsingar fyrir <ph name="USERNAME" /> á <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Ekki er hægt að bæta við <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> eftir</translation>
-<translation id="1678794218766467608">Læsa í svefnstillingu eða þegar hulstri er lokað</translation>
 <translation id="1679068421605151609">Forritunartól</translation>
 <translation id="1679810534535368772">Ertu viss um að þú viljir hætta?</translation>
 <translation id="167983332380191032">Umsjónarþjónusta sendi HTTP-villu.</translation>
@@ -862,7 +860,6 @@
 <translation id="1794051631868188691">Sýna aldrei <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Sendu ábendingu til að hjálpa okkur að leysa þetta vandamál.</translation>
 <translation id="1795214765651529549">Nota hefðbundið þema</translation>
-<translation id="1796105431091975902">Veldu Ansible-handbók til að bæta við</translation>
 <translation id="1796588414813960292">Eiginleikar sem þarfnast hljóðs munu ekki virka</translation>
 <translation id="1797117170091578105">Spilaðu með Chromebook lyklaborðinu. Þú getur sérsniðið lykla fyrir ákveðnar aðgerðir.</translation>
 <translation id="1800502858278951817">Engar viðbætur hafa beðið um að lesa og gera breytingar á <ph name="SITE_NAME" /></translation>
@@ -927,6 +924,7 @@
 <translation id="1842766183094193446">Ertu viss um að þú viljir kveikja á kynningarstillingu?</translation>
 <translation id="1845727111305721124">Mega spila hljóð</translation>
 <translation id="1846308012215045257">Ýttu á Ctrl og smelltu til að keyra <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Skrá út þegar lokið er sett niður</translation>
 <translation id="184862733444771842">Beiðni um eiginleika</translation>
 <translation id="1849016657376805933">Hvaða HID-tæki sem er</translation>
 <translation id="1849186935225320012">Þessi síða hefur fulla stjórn yfir MIDI-tækjum.</translation>
@@ -1035,7 +1033,6 @@
 <translation id="1941553344801134989">Útgáfa: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Sýna lyklaskipan</translation>
 <translation id="1942128823046546853">Lesa og breyta öllum gögnum þínum á öllum vefsvæðum</translation>
-<translation id="1942600407708803723">Slökkva þegar hulstrið er lokað</translation>
 <translation id="1944528062465413897">Bluetooth-pörunarkóði:</translation>
 <translation id="1944921356641260203">Uppfærsla fannst</translation>
 <translation id="1947136734041527201">Gerir þér kleift að skrá þig inn á vefsvæði með reikningi hjá auðkenningarþjónustu</translation>
@@ -3101,7 +3098,6 @@
 <translation id="389901847090970821">Velja lyklaborð</translation>
 <translation id="3900966090527141178">Flytja út aðgangsorð</translation>
 <translation id="3903187154317825986">Innbyggt lyklaborð</translation>
-<translation id="3903191712482985591">Bæta við handbók</translation>
 <translation id="3904326018476041253">Staðsetningarþjónusta</translation>
 <translation id="3904849010307028014">Í samræmi við notkun þína á vefsvæði, til dæmis þegar þú skráir þig reglulega inn á reikning, getur viðkomandi vefsvæði úthlutað vafranum þínum traustum lykli. Þegar önnur vefsvæði sem þú opnar síðar leita að og finna gildan traustan lykil er líklegra að viðkomandi vefsvæði skilgreini þig sem manneskju en spjallara.</translation>
 <translation id="3905761538810670789">Gera við forrit</translation>
@@ -5047,7 +5043,6 @@
 <translation id="5827733057563115968">Ágiskun orða</translation>
 <translation id="5828545842856466741">Bæta prófíl við...</translation>
 <translation id="5828633471261496623">Prentar...</translation>
-<translation id="5828797982387013521">Velja handbók</translation>
 <translation id="5830205393314753525">Ekki er hægt að opna <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Vist&amp;a síðu sem...</translation>
 <translation id="5832813618714645810">Prófílar</translation>
@@ -5941,7 +5936,6 @@
 <translation id="6686665106869989887">Flipi færður til hægri</translation>
 <translation id="6686817083349815241">Vista aðgangsorðið</translation>
 <translation id="6687079240787935001">Fela <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Beiðni um að lesa og breyta <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Biddu <ph name="SUPERVISED_USER_NAME" /> um að koma nær tölvunni. Barnið þitt les upp nokkrar setningar á þessum skjá til að búa til raddlíkan þess.
     <ph name="BR" />
     Ef <ph name="SUPERVISED_USER_NAME" /> þarf aðstoð við lesturinn skaltu láta barnið herma eftir þér. Hvíslaðu til að hljóðneminn heyri ekki í þér og Hjálparinn læri inn á rödd barnsins frekar en rödd þína.</translation>
@@ -7200,7 +7194,6 @@
 <translation id="7898725031477653577">Þýða alltaf</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Ertu að leita að vafraíhlutum? Opna</translation>
-<translation id="7903345046358933331">Síðan er hætt að svara. Þú getur beðið eftir að hún lagist eða lokað henni.</translation>
 <translation id="7903429136755645827">Smelltu til að sérsníða leikjastýringar</translation>
 <translation id="7903742244674067440">Þú ert með skráð vottorð sem bera kennsl á þessar vottunarstöðvar</translation>
 <translation id="7903925330883316394">Hjálparferli: <ph name="UTILITY_TYPE" /></translation>
@@ -8115,6 +8108,7 @@
 <translation id="8780123805589053431">Fá lýsingar á myndum frá Google</translation>
 <translation id="8780443667474968681">Slökkt hefur verið á raddleit.</translation>
 <translation id="8781834595282316166">Nýr flipi í hópi</translation>
+<translation id="8781980678064919987">Slökkva þegar lokið er sett niður</translation>
 <translation id="8782565991310229362">Hætt við að ræsa sjálfsalaforrit.</translation>
 <translation id="8783834180813871000">Sláðu inn Bluetooth-pörunarkóðann og ýttu svo á Return eða Enter.</translation>
 <translation id="8784626084144195648">Uppsafnað meðaltal</translation>
@@ -8179,7 +8173,6 @@
 <translation id="8846132060409673887">Lesa um framleiðanda og útgáfu þessarar tölvu</translation>
 <translation id="8846163936679269230">Endurstilla eSIM-prófíla</translation>
 <translation id="8846239054091760429">Einóma hljóðstilling, ræsing, skjátextar í rauntíma og fleira</translation>
-<translation id="8847523528195140327">Útskráning þegar hulstrinu er lokað</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Falið</translation>
 <translation id="8849219423513870962">Hætta við að fjarlægja eSIM-prófíl með heitinu <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 0af8f35..7a5a61a6 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">Disconnessione…</translation>
 <translation id="1537254971476575106">Lente d'ingrandimento a schermo intero</translation>
 <translation id="15373452373711364">Puntatore del mouse grande</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> richiede di leggere e modificare il sito <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Attiva modalità demo</translation>
 <translation id="1541346352678737112">Nessuna rete trovata</translation>
 <translation id="1542137295869176367">Impossibile aggiornare i dati di accesso</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022">Credenziali per <ph name="USERNAME" /> su <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Impossibile aggiungere <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> rimanenti</translation>
-<translation id="1678794218766467608">Blocca in modalità di sospensione o quando il coperchio è chiuso</translation>
 <translation id="1679068421605151609">Strumenti per sviluppatori</translation>
 <translation id="1679810534535368772">Vuoi uscire?</translation>
 <translation id="167983332380191032">Il servizio di gestione ha inviato un errore HTTP.</translation>
@@ -850,7 +848,6 @@
 <translation id="1794051631868188691">Non mostrare mai <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Invia feedback per aiutarci a risolvere questo problema.</translation>
 <translation id="1795214765651529549">Usa classico</translation>
-<translation id="1796105431091975902">Seleziona un playbook Ansible da aggiungere</translation>
 <translation id="1796588414813960292">Le funzionalità che richiedono l'audio non funzioneranno</translation>
 <translation id="1797117170091578105">Gioca usando la tastiera di Chromebook. Puoi personalizzare i tasti assegnando loro azioni specifiche.</translation>
 <translation id="1800502858278951817">Nessuna estensione ha chiesto di leggere e modificare il sito <ph name="SITE_NAME" /></translation>
@@ -915,6 +912,7 @@
 <translation id="1842766183094193446">Vuoi attivare questa modalità demo?</translation>
 <translation id="1845727111305721124">Possono riprodurre suoni</translation>
 <translation id="1846308012215045257">Premi CTRL e fai clic per eseguire <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Esci alla chiusura del coperchio</translation>
 <translation id="184862733444771842">Richiesta di funzionalità</translation>
 <translation id="1849016657376805933">Qualsiasi dispositivo HID</translation>
 <translation id="1849186935225320012">Questa pagina ha il controllo totale dei dispositivi MIDI.</translation>
@@ -1022,7 +1020,6 @@
 <translation id="1941553344801134989">Versione: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Mostra la mappatura dei tasti</translation>
 <translation id="1942128823046546853">Leggere e modificare tutti i tuoi dati su tutti i siti web</translation>
-<translation id="1942600407708803723">Spegni alla chiusura del coperchio</translation>
 <translation id="1944528062465413897">Codice di accoppiamento Bluetooth:</translation>
 <translation id="1944921356641260203">Aggiornamento trovato</translation>
 <translation id="1947136734041527201">Ti consente di accedere ai siti web utilizzando l'account che hai creato con un servizio di identità</translation>
@@ -3084,7 +3081,6 @@
 <translation id="389901847090970821">Seleziona la tastiera</translation>
 <translation id="3900966090527141178">Esportazione delle password</translation>
 <translation id="3903187154317825986">Tastiera incorporata</translation>
-<translation id="3903191712482985591">Aggiungi playbook</translation>
 <translation id="3904326018476041253">Servizi di geolocalizzazione</translation>
 <translation id="3904849010307028014">In base alla tua interazione con un sito, ad esempio l'accesso regolare a un account, il sito in questione può emettere un token attendibile per il browser in uso. Dopodiché, se altri siti che visiti cercano e trovano un token attendibile valido, è più probabile che ti considerino una persona e non un bot.</translation>
 <translation id="3905761538810670789">Ripara app</translation>
@@ -5026,7 +5022,6 @@
 <translation id="5827733057563115968">Previsione della parola seguente</translation>
 <translation id="5828545842856466741">Aggiungi profilo…</translation>
 <translation id="5828633471261496623">Stampa in corso...</translation>
-<translation id="5828797982387013521">Seleziona playbook</translation>
 <translation id="5830205393314753525">Impossibile aprire <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">S&amp;alva pagina con nome...</translation>
 <translation id="5832813618714645810">Profili</translation>
@@ -5917,7 +5912,6 @@
 <translation id="6686665106869989887">Scheda spostata a destra</translation>
 <translation id="6686817083349815241">Salva la password</translation>
 <translation id="6687079240787935001">Nascondi <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Richiesta di lettura e modifica del sito <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Fai venire al computer <ph name="SUPERVISED_USER_NAME" />. Tuo figlio leggerà alcune frasi sullo schermo per creare il suo modello vocale.
     <ph name="BR" />
     Se <ph name="SUPERVISED_USER_NAME" /> ha bisogno di aiuto nella lettura, chiedi di ripetere quello che leggi tu. Rimani a una certa distanza dal microfono, in modo che l'assistente possa identificare la voce di tuo figlio e non la tua.</translation>
@@ -7174,7 +7168,6 @@
 <translation id="7898725031477653577">Traduci sempre</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Stai cercando i componenti del browser? Visita la pagina</translation>
-<translation id="7903345046358933331">La pagina non risponde. Puoi aspettare che risponda oppure chiuderla.</translation>
 <translation id="7903429136755645827">Fai clic per personalizzare i controlli del gioco</translation>
 <translation id="7903742244674067440">Hai dei certificati su file che identificano queste autorità di certificazione</translation>
 <translation id="7903925330883316394">Utility: <ph name="UTILITY_TYPE" /></translation>
@@ -8088,6 +8081,7 @@
 <translation id="8780123805589053431">Scarica le descrizioni delle immagini da Google</translation>
 <translation id="8780443667474968681">La ricerca vocale è stata disattivata.</translation>
 <translation id="8781834595282316166">Nuova scheda nel gruppo</translation>
+<translation id="8781980678064919987">Spegni alla chiusura del coperchio</translation>
 <translation id="8782565991310229362">Avvio dell'applicazione kiosk annullato.</translation>
 <translation id="8783834180813871000">Digita il codice di accoppiamento Bluetooth e premi Invio</translation>
 <translation id="8784626084144195648">Media raccolta</translation>
@@ -8152,7 +8146,6 @@
 <translation id="8846132060409673887">Lettura del produttore e del modello di questo computer</translation>
 <translation id="8846163936679269230">Reimposta i profili eSIM</translation>
 <translation id="8846239054091760429">Audio in formato mono, avvio, Sottotitoli in tempo reale e altro ancora</translation>
-<translation id="8847523528195140327">Esci alla chiusura del coperchio</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Nascosto</translation>
 <translation id="8849219423513870962">Annulla la rimozione del profilo eSIM chiamato <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index fb75a828d6..6f2667748 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -562,7 +562,6 @@
 <translation id="1536754031901697553">מתנתק...</translation>
 <translation id="1537254971476575106">מגדיל למסך מלא</translation>
 <translation id="15373452373711364">סמן עכבר גדול</translation>
-<translation id="1539630663098418038">התקבלה בקשה מ-<ph name="EXTENSIONS_REQUESTING_ACCESS" /> לקרוא ולשנות את <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">הפעלת מצב הדגמה</translation>
 <translation id="1541346352678737112">לא נמצאה רשת</translation>
 <translation id="1542137295869176367">לא ניתן לעדכן את פרטי הכניסה שלך</translation>
@@ -724,7 +723,6 @@
 <translation id="1676902103953506022">פרטי הכניסה של <ph name="USERNAME" /> ב-<ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">אי אפשר להוסיף את ה<ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">זמן נותר - <ph name="TIME" /></translation>
-<translation id="1678794218766467608">נעילה במצב שינה או כשהמכסה סגור</translation>
 <translation id="1679068421605151609">כלים עבור מפתחים</translation>
 <translation id="1679810534535368772">לצאת?</translation>
 <translation id="167983332380191032">‏שירות הניהול שלח שגיאת HTTP.</translation>
@@ -860,7 +858,6 @@
 <translation id="1794051631868188691">אין להציג את <ph name="MERCHANT" /> אף פעם</translation>
 <translation id="1794791083288629568">שליחת משוב שיעזור לנו לפתור את הבעיה.</translation>
 <translation id="1795214765651529549">שימוש בעיצוב קלאסי</translation>
-<translation id="1796105431091975902">‏יש לבחור פלייבוק של Ansible כדי להוסיף אותו</translation>
 <translation id="1796588414813960292">תכונות שצריכות צלילים לא יפעלו</translation>
 <translation id="1797117170091578105">‏אפשר לשחק באמצעות המקלדת של Chromebook. ניתן להתאים אישית את המקשים לפעולות ספציפיות.</translation>
 <translation id="1800502858278951817">לא התקבלה בקשה מתוסף כלשהו לקרוא ולשנות את <ph name="SITE_NAME" /></translation>
@@ -925,6 +922,7 @@
 <translation id="1842766183094193446">להפעיל מצב הדגמה?</translation>
 <translation id="1845727111305721124">מורשים להשמיע צלילים</translation>
 <translation id="1846308012215045257">‏כדי להפעיל את <ph name="PLUGIN_NAME" />, יש ללחוץ עליו תוך כדי הקשה על Control</translation>
+<translation id="1848219224579402567">יציאה מהחשבון כשמכסה סגור</translation>
 <translation id="184862733444771842">שליחת בקשה להוספת תכונה</translation>
 <translation id="1849016657376805933">‏כל מכשיר HID</translation>
 <translation id="1849186935225320012">‏לדף זה יש שליטה מלאה על מכשירי MIDI.</translation>
@@ -1033,7 +1031,6 @@
 <translation id="1941553344801134989">גרסה: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">הצגת מיפוי המפתחות</translation>
 <translation id="1942128823046546853">קריאה ושינוי של כל הנתונים שלך בכל האתרים</translation>
-<translation id="1942600407708803723">כיבוי כשסוגרים את הכיסוי</translation>
 <translation id="1944528062465413897">‏קוד התאמת Bluetooth:</translation>
 <translation id="1944921356641260203">נמצא עדכון</translation>
 <translation id="1947136734041527201">אפשרות להיכנס לאתרים באמצעות החשבון שלך בשירות זיהוי מסוים</translation>
@@ -2566,6 +2563,7 @@
 <translation id="3406290648907941085">מורשים להשתמש בנתונים או במכשירים של מציאות מדומה</translation>
 <translation id="3406396172897554194">חיפוש לפי שפה או לפי שם שיטת הקלט</translation>
 <translation id="3406605057700382950">&amp;הצגת סרגל הסימניות</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{‏סיסמה אחת יובאה למנהל הסיסמאות של Google בחשבון <ph name="USER_EMAIL" />}two{‏{NUM_PASSWORDS} סיסמאות יובאו למנהל הסיסמאות של Google בחשבון <ph name="USER_EMAIL" />}many{‏{NUM_PASSWORDS} סיסמאות יובאו למנהל הסיסמאות של Google בחשבון <ph name="USER_EMAIL" />}other{‏{NUM_PASSWORDS} סיסמאות יובאו למנהל הסיסמאות של Google בחשבון <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">מפות</translation>
 <translation id="3412265149091626468">מעבר אל בחירה</translation>
 <translation id="3413122095806433232">מנפיקי רשות אישורים: <ph name="LOCATION" /></translation>
@@ -3099,7 +3097,6 @@
 <translation id="389901847090970821">בחירת מקלדת</translation>
 <translation id="3900966090527141178">ייצוא סיסמאות</translation>
 <translation id="3903187154317825986">מקלדת מובנית</translation>
-<translation id="3903191712482985591">הוספת פלייבוק</translation>
 <translation id="3904326018476041253">שירותי מיקום</translation>
 <translation id="3904849010307028014">על סמך הפעולות שלך באתר, למשל כניסות שגרתיות לחשבון, האתר יכול להנפיק אסימון מהימנות לדפדפן שלך. לאחר מכן, אם אתרים אחרים שביקרת בהם בודקים ומוצאים אסימון מהימנות תקף, יש סיכוי גבוה יותר שהם יתייחסו אליך כאל אדם ולא כבוט.</translation>
 <translation id="3905761538810670789">תיקון האפליקציה</translation>
@@ -3751,6 +3748,7 @@
 <translation id="4541123282641193691">‏לא ניתן היה לאמת את החשבון שלך. יש לנסות שוב או להפעיל מחדש את ה-Chromebook.</translation>
 <translation id="4541662893742891060">לא ניתן להתחבר לפרופיל הזה. עליך לפנות לספק לקבלת תמיכה טכנית.</translation>
 <translation id="4541706525461326392">הסרת הפרופיל מתבצעת. הפעולה עשויה להימשך מספר דקות.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{‏סיסמה אחת יובאה למנהל הסיסמאות של Google במכשיר הזה}two{‏{NUM_PASSWORDS} סיסמאות יובאו למנהל הסיסמאות של Google במכשיר הזה}many{‏{NUM_PASSWORDS} סיסמאות יובאו למנהל הסיסמאות של Google במכשיר הזה}other{‏{NUM_PASSWORDS} סיסמאות יובאו למנהל הסיסמאות של Google במכשיר הזה}}</translation>
 <translation id="4542520061254486227">קריאת הנתונים שלך באתרים <ph name="WEBSITE_1" /> ו-<ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">מנהל האישורים</translation>
 <translation id="4544174279960331769">דמות ברירת מחדל כחולה</translation>
@@ -5044,7 +5042,6 @@
 <translation id="5827733057563115968">חיזוי המילה הבאה</translation>
 <translation id="5828545842856466741">הוספת פרופיל...</translation>
 <translation id="5828633471261496623">ההדפסה מתבצעת...</translation>
-<translation id="5828797982387013521">בחירת מדריך</translation>
 <translation id="5830205393314753525">לא ניתן לפתוח את <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">שמירת הדף &amp;כ...</translation>
 <translation id="5832813618714645810">פרופילים</translation>
@@ -5940,7 +5937,6 @@
 <translation id="6686665106869989887">הכרטיסייה הועברה שמאלה</translation>
 <translation id="6686817083349815241">שמירת הסיסמה שלך</translation>
 <translation id="6687079240787935001">הסתרה של <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">התקבלה בקשה מהתוסף לקרוא ולשנות את <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">‏צריך לבקש מ<ph name="SUPERVISED_USER_NAME" /> לגשת למחשב. הילד או הילדה יקריאו מספר ביטויים שיופיעו במסך הזה כדי ליצור את תבנית הקול שלהם.
     <ph name="BR" />
     אם ל<ph name="SUPERVISED_USER_NAME" /> נדרשת עזרה בקריאה, אפשר להציע לילד או לילדה לחזור על הביטוי אחריך. צריך ללחוש הרחק מהמיקרופון כדי ש-Assistant תלמד להכיר את הקול של הילד או הילדה ולא את הקול שלך.</translation>
@@ -6242,6 +6238,7 @@
 <translation id="6968288415730398122">יש להזין את הסיסמה כדי להגדיר את נעילת המסך</translation>
 <translation id="6969047215179982698">כיבוי של 'שיתוף בקרבת מקום'</translation>
 <translation id="6970480684834282392">סוג הפעלה</translation>
+<translation id="6970543303783413625">לא ניתן לייבא את הסיסמאות. ניתן לייבא רק עד <ph name="COUNT" /> סיסמאות בכל פעם.</translation>
 <translation id="6970856801391541997">הדפסת דפים ספציפיים</translation>
 <translation id="6970861306198150268">עליך להקפיד לשמור את הסיסמה המעודכנת לאתר הזה</translation>
 <translation id="6972180789171089114">אודיו/וידאו</translation>
@@ -6473,6 +6470,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{יציאה מהדף}two{יציאה מהדפים}many{יציאה מהדפים}other{יציאה מהדפים}}</translation>
 <translation id="7207457272187520234">‏שליחת מידע לגבי אופן השימוש בנתונים וניתוח הביצועים. המכשיר הזה שולח עכשיו אל Google באופן אוטומטי נתוני אבחון, נתוני מכשיר ונתוני שימוש באפליקציות. הנתונים האלה יעזרו לשמור על היציבות של המערכת ושל האפליקציות ולבצע שיפורים אחרים. חלק מהנתונים הנצברים יעזרו גם לשפר את האפליקציות של Google וכן יעזרו לשותפים של Google, כמו מפתחים של Android. ההגדרה הזו נאכפת על-ידי הבעלים. אם הופעלה ההגדרה 'פעילות באפליקציות ובאתרי אינטרנט נוספים', ייתכן שהנתונים יישמרו בחשבון Google שלך.</translation>
 <translation id="7207631048330366454">חיפוש אפליקציות</translation>
+<translation id="7210471695184432500">‏צריך לבחור קובץ CSV כדי לייבא סיסמאות למנהל הסיסמאות של Google במכשיר הזה</translation>
 <translation id="7210499381659830293">מדפסות בתוסף</translation>
 <translation id="7211783048245131419">עוד לא הוקצו מתגים.</translation>
 <translation id="7212097698621322584">צריך להזין את קוד האימות הנוכחי כדי לשנות אותו. אם קוד האימות לא ידוע לך, צריך לאפס את מפתח האבטחה ולאחר מכן ליצור קוד אימות חדש.</translation>
@@ -7196,7 +7194,6 @@
 <translation id="7898725031477653577">ברצוני לקבל תרגום תמיד</translation>
 <translation id="7901405293566323524">מרכז טלפוני</translation>
 <translation id="7903290522161827520">רוצה לאתר את רכיבי הדפדפן? יש לעבור לכתובת</translation>
-<translation id="7903345046358933331">הדף אינו מגיב. תוכל להמתין עד שיגיב או לסגור אותו.</translation>
 <translation id="7903429136755645827">ניתן ללחוץ כדי להתאים אישית את פקדי המשחקים</translation>
 <translation id="7903742244674067440">יש לך אישורים בקובץ המזהים רשויות אישורים אלה</translation>
 <translation id="7903925330883316394">תוכנית שירות: <ph name="UTILITY_TYPE" /></translation>
@@ -7534,6 +7531,7 @@
 <translation id="8206859287963243715">סלולארי</translation>
 <translation id="8208216423136871611">אל תשמור</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{התראה חדשה}two{# התראות חדשות}many{# התראות חדשות}other{# התראות חדשות}}</translation>
+<translation id="821119981794423735">‏צריך לבחור קובץ CSV כדי לייבא סיסמאות למנהל הסיסמאות של Google בחשבון <ph name="USER_EMAIL" /></translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{הורדה מתבצעת}two{הורדות מתבצעות}many{הורדות מתבצעות}other{הורדות מתבצעות}}</translation>
 <translation id="8213449224684199188">עברת למצב תמונות</translation>
 <translation id="8214489666383623925">פתיחת קובץ...</translation>
@@ -8114,6 +8112,7 @@
 <translation id="8780123805589053431">‏קבלת תיאורי תמונות מ-Google</translation>
 <translation id="8780443667474968681">החיפוש הקולי הושבת.</translation>
 <translation id="8781834595282316166">כרטיסייה חדשה בקבוצה</translation>
+<translation id="8781980678064919987">כיבוי כשהמכסה סגור</translation>
 <translation id="8782565991310229362">ההפעלה של יישום קיוסק בוטלה.</translation>
 <translation id="8783834180813871000">‏עליך להקליד את קוד ההתאמה ל-Bluetooth ולאחר מכן ללחוץ על Return או Enter.</translation>
 <translation id="8784626084144195648">ממוצע צבור</translation>
@@ -8178,7 +8177,6 @@
 <translation id="8846132060409673887">קריאת היצרן והדגם של המחשב הזה</translation>
 <translation id="8846163936679269230">‏איפוס הפרופילים של ה-eSIM</translation>
 <translation id="8846239054091760429">אודיו במונו, הפעלה, כתוביות מיידיות ועוד</translation>
-<translation id="8847523528195140327">יציאה מהחשבון כשסוגרים את הכיסוי</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">מוסתר</translation>
 <translation id="8849219423513870962">‏ביטול ההסרה של פרופיל ה-eSIM שנקרא <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 6ffc793..47e27f1b 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">切断しています...</translation>
 <translation id="1537254971476575106">全画面拡大鏡</translation>
 <translation id="15373452373711364">大きいマウスカーソル</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> は <ph name="ORIGIN" /> の読み取りと変更をリクエストしています</translation>
 <translation id="1540605929960647700">デモモードの有効化</translation>
 <translation id="1541346352678737112">ネットワークが見つかりません</translation>
 <translation id="1542137295869176367">ログインデータを更新できませんでした</translation>
@@ -721,7 +720,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> での <ph name="USERNAME" /> の認証情報</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> を追加できません</translation>
 <translation id="1677472565718498478">残り <ph name="TIME" /></translation>
-<translation id="1678794218766467608">スリープモードの場合やディスプレイを閉じたときにロックする</translation>
 <translation id="1679068421605151609">デベロッパー ツール</translation>
 <translation id="1679810534535368772">終了してもよろしいですか?</translation>
 <translation id="167983332380191032">管理サービスから HTTP エラーが送信されました。</translation>
@@ -849,7 +847,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> を今後表示しない</translation>
 <translation id="1794791083288629568">フィードバックを送信して問題解決に協力する。</translation>
 <translation id="1795214765651529549">クラシックを使用</translation>
-<translation id="1796105431091975902">追加する Ansible Playbook を選択してください</translation>
 <translation id="1796588414813960292">音を使用する機能は動作しなくなります</translation>
 <translation id="1797117170091578105">Chromebook のキーボードを使ってプレイしましょう。特定の操作を行うキーをカスタマイズできます。</translation>
 <translation id="1800502858278951817"><ph name="SITE_NAME" /> の読み取りと変更を要求している拡張機能はありません</translation>
@@ -914,6 +911,7 @@
 <translation id="1842766183094193446">デモモードを有効にしてもよろしいですか?</translation>
 <translation id="1845727111305721124">音声の再生を許可するサイト</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> を実行するには Control キーを押しながらクリックします</translation>
+<translation id="1848219224579402567">ディスプレイを閉じたときにログアウトする</translation>
 <translation id="184862733444771842">機能リクエスト</translation>
 <translation id="1849016657376805933">すべての HID デバイス</translation>
 <translation id="1849186935225320012">このページは MIDI デバイスのフル コントロールが許可されています。</translation>
@@ -1019,7 +1017,6 @@
 <translation id="1941553344801134989">バージョン: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">キーのマッピングを表示</translation>
 <translation id="1942128823046546853">すべてのウェブサイト上にある自分の全データの読み取りと変更</translation>
-<translation id="1942600407708803723">ディスプレイを閉じたときにシャットダウンする</translation>
 <translation id="1944528062465413897">Bluetooth ペア設定コード:</translation>
 <translation id="1944921356641260203">アップデートが見つかりました</translation>
 <translation id="1947136734041527201">ID サービスで使用しているアカウントでウェブサイトにログインできます</translation>
@@ -3077,7 +3074,6 @@
 <translation id="389901847090970821">キーボードを選択</translation>
 <translation id="3900966090527141178">パスワードのエクスポート</translation>
 <translation id="3903187154317825986">デバイス内蔵キーボード</translation>
-<translation id="3903191712482985591">Playbook を追加</translation>
 <translation id="3904326018476041253">位置情報サービス</translation>
 <translation id="3904849010307028014">アカウントへの定期的なログインなど、そのサイトとのやり取りに基づき、サイトはブラウザにトラスト トークンを発行できます。その後、アクセスした他のサイトが有効なトラスト トークンを確認して検出した場合、そのサイトはユーザーを bot ではなく人間と同じように扱う可能性が高くなります。</translation>
 <translation id="3905761538810670789">アプリを修復</translation>
@@ -5014,7 +5010,6 @@
 <translation id="5827733057563115968">次の入力候補を予測</translation>
 <translation id="5828545842856466741">プロファイルを追加...</translation>
 <translation id="5828633471261496623">印刷中...</translation>
-<translation id="5828797982387013521">Playbook を選択</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> を開けません</translation>
 <translation id="5830720307094128296">ページを別名で保存(&amp;A)...</translation>
 <translation id="5832813618714645810">プロファイル</translation>
@@ -5902,7 +5897,6 @@
 <translation id="6686665106869989887">タブを右に移動しました</translation>
 <translation id="6686817083349815241">パスワードを保存</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> を非表示にする</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> の読み取りと変更をリクエストしています:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> さんにパソコンの前に来てもらってください。お子様の音声モデルを作成するには、この画面上のフレーズをいくつか声に出して読んでもらいます。
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" /> さんが声を出して読む際にサポートが必要な場合は、あなたが読んだ後に繰り返してもらうようにします。その際、マイクから離れて小声で読むようにすると、アシスタントがあなたではなくお子様の声を認識できるようになります。</translation>
@@ -7155,7 +7149,6 @@
 <translation id="7898725031477653577">常に翻訳する</translation>
 <translation id="7901405293566323524">スマートフォン ハブ</translation>
 <translation id="7903290522161827520">ブラウザ コンポーネントをお探しですか?次にアクセスしてください</translation>
-<translation id="7903345046358933331">ページが応答していません。応答があるまで待つか、終了することができます。</translation>
 <translation id="7903429136755645827">クリックすると、ゲーム操作キーをカスタマイズできます</translation>
 <translation id="7903742244674067440">これらの認証局を識別する証明書がファイルに格納されています</translation>
 <translation id="7903925330883316394">ユーティリティ: <ph name="UTILITY_TYPE" /></translation>
@@ -8069,6 +8062,7 @@
 <translation id="8780123805589053431">Google から画像の説明を取得</translation>
 <translation id="8780443667474968681">音声検索がオフになっています。</translation>
 <translation id="8781834595282316166">グループにタブを追加</translation>
+<translation id="8781980678064919987">ディスプレイを閉じたときにシャットダウンする</translation>
 <translation id="8782565991310229362">キオスク アプリケーションの起動がキャンセルされました。</translation>
 <translation id="8783834180813871000">Bluetooth のペア設定コードを入力してから、Return キーまたは Enter キーを押してください。</translation>
 <translation id="8784626084144195648">ビニング平均</translation>
@@ -8133,7 +8127,6 @@
 <translation id="8846132060409673887">このパソコンのメーカーと機種の情報を取得する</translation>
 <translation id="8846163936679269230">eSIM プロファイルをリセット</translation>
 <translation id="8846239054091760429">モノラル音声、起動、自動字幕起こしなど</translation>
-<translation id="8847523528195140327">ディスプレイを閉じたときにログアウトする</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">非表示</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> という名前の eSIM プロファイルの削除をキャンセルします</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb
index 8b0f97f60..5af2c9f90 100644
--- a/chrome/app/resources/generated_resources_ka.xtb
+++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">მიმდინარეობს კავშირის გაწყვეტა…</translation>
 <translation id="1537254971476575106">სრულეკრანიანი ლუპა</translation>
 <translation id="15373452373711364">დიდი მაუსის კურსორი</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> ითხოვს, წაიკითხოს და შეცვალოს <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">დემო-რეჟიმის ჩართვა</translation>
 <translation id="1541346352678737112">ქსელი ვერ მოიძებნა</translation>
 <translation id="1542137295869176367">თქვენი სისტემაში შესვლის მონაცემების განახლება ვერ მოხერხდა</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022"><ph name="USERNAME" />-ის ავტორიზაციის მონაცემების დეტალები <ph name="DOMAIN" />-ზე</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> ვერ დაემატება</translation>
 <translation id="1677472565718498478">დარჩენილია <ph name="TIME" /></translation>
-<translation id="1678794218766467608">ჩაკეტვა ძილის რეჟიმში ან თავსახურის დაფარვისას</translation>
 <translation id="1679068421605151609">დეველოპერის ხელსაწყოები</translation>
 <translation id="1679810534535368772">ნამდვილად გსურთ გასვლა?</translation>
 <translation id="167983332380191032">მართვის სერვისმა გამოაგზავნა შეტყობინება HTTP შეცდომის შესახებ.</translation>
@@ -850,7 +848,6 @@
 <translation id="1794051631868188691">აღარასოდეს გამოჩნდეს <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">გამოხმაურება ამ პრობლემის მოგვარების ხელშესაწყობად.</translation>
 <translation id="1795214765651529549">კლასიკურის გამოყენება</translation>
-<translation id="1796105431091975902">დასამატებლად აირჩიეთ Ansible ინსტრუქცია</translation>
 <translation id="1796588414813960292">ფუნქციები, რომლებიც ხმას საჭიროებს, არ იმუშავებს</translation>
 <translation id="1797117170091578105">ითამაშეთ თქვენი Chromebook კლავიატურის მეშვეობით. სურვილისამებრ, კლავიშების მორგებაც შეგიძლიათ, კონკრეტული მოქმედებები რომ შეასრულოთ.</translation>
 <translation id="1800502858278951817"><ph name="SITE_NAME" />-ის წაკითხვა და შეცვლა არცერთ გაფართოებას არ მოუთხოვია</translation>
@@ -915,6 +912,7 @@
 <translation id="1842766183094193446">ნამდვილად გსურთ დემო-რეჟიმის ჩართვა?</translation>
 <translation id="1845727111305721124">ხმის დაკვრა დაშვებულია</translation>
 <translation id="1846308012215045257">დააწკაპუნეთ კლავიშზე Control დაჭერით, რათა გაუშვათ <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">სისტემიდან გამოსვლა თავსახურის დახურვისას</translation>
 <translation id="184862733444771842">ფუნქციის მოთხოვნა</translation>
 <translation id="1849016657376805933">ნებისმიერი HID მოწყობილობა</translation>
 <translation id="1849186935225320012">ეს გვერდი სრულად აკონტროლებს MIDI მოწყობილობებს.</translation>
@@ -1022,7 +1020,6 @@
 <translation id="1941553344801134989">ვერსია: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">კლავიშების განლაგების ჩვენება</translation>
 <translation id="1942128823046546853">თქვენი ყველა მონაცემის წაკითხვა და შეცვლა ყველა ვებსაიტზე</translation>
-<translation id="1942600407708803723">გამორთვა თავსახურის დახურვისას</translation>
 <translation id="1944528062465413897">Bluetooth-დაწყვილების კოდი:</translation>
 <translation id="1944921356641260203">ნაპოვნია განახლება</translation>
 <translation id="1947136734041527201">საშუალებას გაძლევთ, შეხვიდეთ ვებსაიტებში პირადობის მონაცემების სერვისში არსებული ანგარიშით</translation>
@@ -3086,7 +3083,6 @@
 <translation id="389901847090970821">აირჩიეთ კლავიატურა</translation>
 <translation id="3900966090527141178">პაროლების ექსპორტი</translation>
 <translation id="3903187154317825986">ჩაშენებული კლავიატურა</translation>
-<translation id="3903191712482985591">ინსტრუქციის დამატება</translation>
 <translation id="3904326018476041253">მდებარეობის სერვისები</translation>
 <translation id="3904849010307028014">ამა თუ იმ საიტთან თქვენი ინტერაქციის (მაგალითად, თქვენს ანგარიშში რეგულარულად შესვლის) მიხედვით, შესაბამის საიტს შეეძლება ნდობის ჟეტონის გაცემა თქვენი ბრაუზერისთვის. თუ მოგვიანებით თქვენ მიერ მონახულებული სხვა საიტები შეამოწმებს ნდობის მართებულ ჟეტონების არსებობას და იპოვის მათი, ისინი უფრო დიდი ალბათობით ჩათვლიან, რომ ადამიანი ხართ და არა ბოტი.</translation>
 <translation id="3905761538810670789">აპის აღდგენა</translation>
@@ -5031,7 +5027,6 @@
 <translation id="5827733057563115968">შემდეგი სიტყვის ამოცნობა</translation>
 <translation id="5828545842856466741">პროფილის დამატება…</translation>
 <translation id="5828633471261496623">ბეჭდვა…</translation>
-<translation id="5828797982387013521">ინსტრუქციის არჩევა</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> არ იხსნება</translation>
 <translation id="5830720307094128296">&amp;შეინახეთ გვერდი როგორც…</translation>
 <translation id="5832813618714645810">პროფილები</translation>
@@ -5923,7 +5918,6 @@
 <translation id="6686665106869989887">ჩანართი გადატანილია მარჯვნივ</translation>
 <translation id="6686817083349815241">შეინახეთ თქვენი პაროლი</translation>
 <translation id="6687079240787935001">დამალოს <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">ითხოვს, წაიკითხოს და შეცვალოს <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">სთხოვეთ <ph name="SUPERVISED_USER_NAME" />-ს, მოვიდეს კომპიუტერთან. თქვენმა ბავშვმა ამ ეკრანიდან რამდენიმე ფრაზა უნდა წაიკითხოს, თავისი ხმის მოდელი რომ შექმნას.
     <ph name="BR" />
     თუ <ph name="SUPERVISED_USER_NAME" /> კითხვაში დახმარებას საჭიროებს, სთხოვეთ, თქვენ მიერ წარმოთქმული გაიმეოროს. ჩაუჩურჩულეთ მას მიკროფონისგან მოშორებით, რომ ასისტენტმა თქვენი შვილის ხმის ამოცნობა ისწავლოს და არა თქვენი.</translation>
@@ -7182,7 +7176,6 @@
 <translation id="7898725031477653577">ყოველთვის თარგმნე</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">ბრაუზერის კომპონენტებს ეძებთ? მოინახულეთ</translation>
-<translation id="7903345046358933331">გვერდი აღარ რეაგირებს. შეგიძლიათ დაელოდოთ მისგან პასუხს ან დახუროთ იგი.</translation>
 <translation id="7903429136755645827">დააწკაპუნეთ თამაშის მართვის საშუალებების მოსარგებად</translation>
 <translation id="7903742244674067440">თქვენ შენახული გაქვთ სერტიფიკატები, რომლებიც ქვემოთ ჩამოთვლილი სერტიფიკატთა ცენტრების ამოცნობას ახორციელებს</translation>
 <translation id="7903925330883316394">უტილიტა: <ph name="UTILITY_TYPE" /></translation>
@@ -8096,6 +8089,7 @@
 <translation id="8780123805589053431">სურათების აღწერილობების მიღება Google-ისგან</translation>
 <translation id="8780443667474968681">ხმოვანი ძიება გამოირთო.</translation>
 <translation id="8781834595282316166">ახალი ჩანართი ჯგუფში</translation>
+<translation id="8781980678064919987">გამორთვა თავსახურის დახურვისას</translation>
 <translation id="8782565991310229362">კიოსკის განაცხადის გაშვება გაუქმდა.</translation>
 <translation id="8783834180813871000">აკრიფეთ Bluetooth-დაწყვილების კოდი და დააჭირეთ Return-ს ან Enter-ს.</translation>
 <translation id="8784626084144195648">დაჯგუფებული საშუალო</translation>
@@ -8160,7 +8154,6 @@
 <translation id="8846132060409673887">ამ კომპიუტერის მწარმოებლისა და მოდელის შესახებ ინფორმაციის წაკითხვა</translation>
 <translation id="8846163936679269230">eSIM პროფილების გადაყენება</translation>
 <translation id="8846239054091760429">მონოაუდიო, გაშვება, ავტოსუბტიტრები და სხვა</translation>
-<translation id="8847523528195140327">სისტემიდან გამოსვლა თავსახურის დახურვისას</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">დამალული</translation>
 <translation id="8849219423513870962">აღარ ამოიშალოს eSIM პროფილი სახელად <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb
index 7ac499a..4a2dd9f1 100644
--- a/chrome/app/resources/generated_resources_kk.xtb
+++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -557,7 +557,6 @@
 <translation id="1536754031901697553">Ажыратылуда…</translation>
 <translation id="1537254971476575106">Толық экран ұлғайтқышы</translation>
 <translation id="15373452373711364">Үлкен тінтуір курсоры</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> кеңейтімі <ph name="ORIGIN" /> сайтын оқу мен өзгертуді сұрауда.</translation>
 <translation id="1540605929960647700">Демо режимін қосу</translation>
 <translation id="1541346352678737112">Желі табылмады</translation>
 <translation id="1542137295869176367">Кіру деректері жаңартылмады.</translation>
@@ -719,7 +718,6 @@
 <translation id="1676902103953506022">Пайдаланушының (<ph name="USERNAME" />) <ph name="DOMAIN" /> доменіндегі тіркелу деректері</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> енгізілмеді.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> қалды</translation>
-<translation id="1678794218766467608">Ұйқы режимінде немесе қақпақ жабылған кезде құлыптау</translation>
 <translation id="1679068421605151609">Әзірлеуші құралдары</translation>
 <translation id="1679810534535368772">Шынымен де шыққыңыз келе ме?</translation>
 <translation id="167983332380191032">Басқару қызметі HTTP қатесін жіберді.</translation>
@@ -847,7 +845,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> ешқашан көрсетілмесін</translation>
 <translation id="1794791083288629568">Бұл мәселені шешуімізге көмектесу үшін пікір жіберіңіз.</translation>
 <translation id="1795214765651529549">Классикалық тақырыпты пайдалану</translation>
-<translation id="1796105431091975902">Қосу үшін Ansible нұсқаулығын таңдаңыз</translation>
 <translation id="1796588414813960292">Дыбысты қажет ететін функциялар жұмыс істемейді.</translation>
 <translation id="1797117170091578105">Chromebook пернетақтасымен ойнаңыз. Пернелерді арнайы әрекеттерге тағайындауға болады.</translation>
 <translation id="1800502858278951817"><ph name="SITE_NAME" /> сайтын оқуға және өзгертуге ешқандай кеңейтім сұралмады.</translation>
@@ -912,6 +909,7 @@
 <translation id="1842766183094193446">Демо режимін шынымен қосқыңыз келе ме?</translation>
 <translation id="1845727111305721124">Дыбысты ойнатуға рұқсаты барлар</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> плагинін іске қосу үшін Control түймесін басыңыз</translation>
+<translation id="1848219224579402567">Қақпағы жабылғанда, жүйеден шығу</translation>
 <translation id="184862733444771842">Функция қосуды сұрау</translation>
 <translation id="1849016657376805933">Кез келген HID құрылғысы</translation>
 <translation id="1849186935225320012">Бұл бет MIDI құрылғыларының толық бақылауына ие.</translation>
@@ -1019,7 +1017,6 @@
 <translation id="1941553344801134989">Нұсқасы: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Пернелер тіркесімін көрсету</translation>
 <translation id="1942128823046546853">Барлық веб-сайттағы деректі оқу және өзгерту</translation>
-<translation id="1942600407708803723">Қақпағы жабылғанда, жұмысты аяқтау</translation>
 <translation id="1944528062465413897">Bluetooth жұптау коды:</translation>
 <translation id="1944921356641260203">Жаңарту табылды</translation>
 <translation id="1947136734041527201">Идентификация қызметін пайдаланып, аккаунт арқылы веб-сайттарға кіруге мүмкіндік береді.</translation>
@@ -2548,6 +2545,7 @@
 <translation id="3406290648907941085">Виртуалдық шындық құрылғыларын мен деректерін пайдалануға рұқсаты барлар</translation>
 <translation id="3406396172897554194">Тілді немесе енгізу әдісін көрсетіңіз</translation>
 <translation id="3406605057700382950">Бетбелгілер жолағын &amp;көрсету</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 құпия сөз <ph name="USER_EMAIL" /> аккаунтына арналған Google Құпия сөз менеджеріне импортталды.}other{{NUM_PASSWORDS} құпия сөз <ph name="USER_EMAIL" /> аккаунтына арналған Google Құпия сөз менеджеріне импортталды.}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">Таңдауға өту</translation>
 <translation id="3413122095806433232">CA мекемелері: <ph name="LOCATION" /></translation>
@@ -3081,7 +3079,6 @@
 <translation id="389901847090970821">Пернетақтаны таңдау</translation>
 <translation id="3900966090527141178">Құпия сөздерді экспорттау</translation>
 <translation id="3903187154317825986">Ендірілген пернетақта</translation>
-<translation id="3903191712482985591">Нұсқаулық қосу</translation>
 <translation id="3904326018476041253">Локация қызметтері</translation>
 <translation id="3904849010307028014">Сайтты пайдалануыңызға (мысалы, аккаунтқа күнделікті кіруіңізге) қарай, ол браузеріңізге сенім токенін беруі мүмкін. Кейін сіз кірген басқа сайттар жарамды сенім токені бар екенін анықтаса, олар сізді бот емес, адам деп есептейді.</translation>
 <translation id="3905761538810670789">Қолданбаны жөндеу</translation>
@@ -3732,6 +3729,7 @@
 <translation id="4541123282641193691">Аккаунтыңыз расталмады. Әрекетті қайталаңыз немесе Chromebook құрылғыңызды қайта жүктеңіз.</translation>
 <translation id="4541662893742891060">Бұл профильге қосылу мүмкін емес. Техникалық қолдау керек болса, операторға хабарласыңыз.</translation>
 <translation id="4541706525461326392">Профиль өшірілуде. Бұл бірнеше минутқа созылуы мүмкін.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 құпия сөз осы құрылғыдағы Google Құпия сөз менеджеріне импортталды.}other{{NUM_PASSWORDS} құпия сөз осы құрылғыдағы Google Құпия сөз менеджеріне импортталды.}}</translation>
 <translation id="4542520061254486227"><ph name="WEBSITE_1" /> және <ph name="WEBSITE_2" /> веб-сайттарындағы деректеріңізді оқу</translation>
 <translation id="4543778593405494224">Сертификат басқарушысы</translation>
 <translation id="4544174279960331769">Әдепкі көк түсті аватар</translation>
@@ -5023,7 +5021,6 @@
 <translation id="5827733057563115968">Келесі сөзді болжау</translation>
 <translation id="5828545842856466741">Профиль қосу…</translation>
 <translation id="5828633471261496623">Басып шығару…</translation>
-<translation id="5828797982387013521">Нұсқаулықты таңдау</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> қолданбасын ашу мүмкін емес</translation>
 <translation id="5830720307094128296">Бетті &amp;басқаша сақтау…</translation>
 <translation id="5832813618714645810">Профильдер</translation>
@@ -5914,7 +5911,6 @@
 <translation id="6686665106869989887">Қойынды оң жаққа жылжытылды.</translation>
 <translation id="6686817083349815241">Құпия сөзді сақтау</translation>
 <translation id="6687079240787935001">"<ph name="MODULE_TITLE" />" жасыру</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> сайтының деректерін оқу мен өзгерту сұралуда:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> компьютерге жақын келсін. Өз дауысының үлгісін жасау үшін, балаңыз осы экрандағы бірнеше фразаны оқиды.
     <ph name="BR" />
     Егер <ph name="SUPERVISED_USER_NAME" /> оқи алмаса, балаңыз сіз айтқанды қайталасын. Микрофоннан алшақтау тұрып сыбырлаңыз, сонда Assistant сіздің дауысыңызды емес, балаңыздың дауысын жаттайды.</translation>
@@ -6216,6 +6212,7 @@
 <translation id="6968288415730398122">Экран құлпын конфигурациялау үшін құпия сөзді енгізіңіз</translation>
 <translation id="6969047215179982698">Nearby Share функциясын өшіру</translation>
 <translation id="6970480684834282392">Іске қосу түрі</translation>
+<translation id="6970543303783413625">Құпия сөздерді импорттау мүмкін емес. Бір уақытта тек <ph name="COUNT" /> құпия сөзге дейін импорттай аласыз.</translation>
 <translation id="6970856801391541997">Арнайы беттерді басып шығару</translation>
 <translation id="6970861306198150268">Осы сайттың ағымдағы құпия сөзін сақтап жатқаныңызға көз жеткізіңіз.</translation>
 <translation id="6972180789171089114">Аудиомазмұн/Бейне</translation>
@@ -6447,6 +6444,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Беттен шығу}other{Беттерден шығу}}</translation>
 <translation id="7207457272187520234">Пайдалану және диагностика туралы деректерді жіберу. Бұл құрылғыдан Google-ға диагностика, құрылғы мен қолданбаны пайдалану деректері автоматты түрде жіберіліп тұрады. Олар жүйе мен қолданбаның тұрақты жұмыс істеуіне және басқа да жақсартулар енгізуге көмектеседі. Кейбір жиынтық деректер Google қолданбаларын жетілдіруге және Android әзірлеушілері сияқты серіктестердің жұмысына көмектеседі. Бұл параметрді иесі орнатқан. Егер "Интернет пен қолданбаларды пайдаланудың қосымша тарихы" параметрі қосулы болса, бұл деректер сіздің Google аккаунтыңызға сақталуы мүмкін.</translation>
 <translation id="7207631048330366454">Қолданбалар іздеу</translation>
+<translation id="7210471695184432500">Құпия сөздерді осы құрылғыдағы Google Құпия сөз менеджеріне импорттау үшін CSV файлын таңдаңыз.</translation>
 <translation id="7210499381659830293">Кеңейтім қолданатын принтерлер</translation>
 <translation id="7211783048245131419">Әлі ешқандай ауыстырғыш тағайындалмады.</translation>
 <translation id="7212097698621322584">Қолданыстағы PIN кодын өзгерту үшін оны енгізіңіз. PIN кодыңызды білмесеңіз, оны бастапқы күйге қайтарып, жаңа PIN кодын жасаңыз.</translation>
@@ -7170,7 +7168,6 @@
 <translation id="7898725031477653577">Әрқашан аудару</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Браузер компоненттерін іздеп жатырсыз ба? Келесіге бетке өтіңіз:</translation>
-<translation id="7903345046358933331">Бет жауап бермеді. Оның жауап беруін күтуіңізге немесе жабуыңызға болады.</translation>
 <translation id="7903429136755645827">Ойынның басқару элементтерін реттеу үшін басыңыз</translation>
 <translation id="7903742244674067440">Файлда осы сертификат беруші орталықтарды анықтайтын сертификаттарыңыз бар</translation>
 <translation id="7903925330883316394">Утилита: <ph name="UTILITY_TYPE" /></translation>
@@ -7505,6 +7502,7 @@
 <translation id="8206859287963243715">Ұялы</translation>
 <translation id="8208216423136871611">Сақтамау</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Жаңа хабарландыру}other{# жаңа хабарландыру}}</translation>
+<translation id="821119981794423735">Құпия сөздерді <ph name="USER_EMAIL" /> аккаунтына арналған Google Құпия сөз менеджеріне импорттау үшін CSV файлын таңдаңыз.</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Файл жүктеп алынуда}other{Файлдар жүктеп алынуда}}</translation>
 <translation id="8213449224684199188">Фото режимі қосылды</translation>
 <translation id="8214489666383623925">Файлды ашу…</translation>
@@ -8083,6 +8081,7 @@
 <translation id="8780123805589053431">Google-дан кескін сипаттамаларын алу</translation>
 <translation id="8780443667474968681">Дауыспен іздеу өшірілген.</translation>
 <translation id="8781834595282316166">Топқа жаңа қойынды енгізу</translation>
+<translation id="8781980678064919987">Қақпағы жабылғанда өшу</translation>
 <translation id="8782565991310229362">Киоск қолданбасын іске қосудан бас тартылды.</translation>
 <translation id="8783834180813871000">Bluetooth жұптау кодын теріңіз, содан кейін "Return" немесе "Enter" пернесін басыңыз.</translation>
 <translation id="8784626084144195648">Топтастырылған орташа мән</translation>
@@ -8147,7 +8146,6 @@
 <translation id="8846132060409673887">Компьютердің өндірушісі және моделі туралы ақпаратты оқыңыз</translation>
 <translation id="8846163936679269230">eSIM профильдерін бастапқы күйге қайтару</translation>
 <translation id="8846239054091760429">Моно аудио, іске қосу, Live Caption және т. б.</translation>
-<translation id="8847523528195140327">Қақпағы жабылғанда, жүйеден шығу</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Жасырын</translation>
 <translation id="8849219423513870962">"<ph name="PROFILE_NAME" />" атты eSIM профилін өшіруден бас тарту</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb
index 10290e84..96a0d212 100644
--- a/chrome/app/resources/generated_resources_km.xtb
+++ b/chrome/app/resources/generated_resources_km.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">កំពុង​ផ្ដាច់...</translation>
 <translation id="1537254971476575106">កែវ​ពង្រីក​ពេញ​អេក្រង់</translation>
 <translation id="15373452373711364">ទស្សន៍ទ្រនិច​កណ្តុរធំ</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> កំពុងស្នើសុំអាន និងផ្លាស់ប្ដូរ <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">បើកមុខងារ​សាកល្បង</translation>
 <translation id="1541346352678737112">រកបណ្ដាញមិនឃើញទេ</translation>
 <translation id="1542137295869176367">មិនអាច​ធ្វើបច្ចុប្បន្នភាព​ទិន្នន័យសម្រាប់ចូលគណនី​របស់អ្នកបានទេ</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">សេចក្ដី​លម្អិត​នៃ​​ព័ត៌មានផ្ទៀងផ្ទាត់​សម្រាប់ <ph name="USERNAME" /> នៅលើ <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">មិនអាច​បញ្ចូល <ph name="EXTENSION_TYPE_PARAMETER" /> បានទេ</translation>
 <translation id="1677472565718498478">នៅសល់ <ph name="TIME" /></translation>
-<translation id="1678794218766467608">ចាក់សោក្នុងមុខងារដេក ឬនៅពេលគម្របត្រូវបានបិទ</translation>
 <translation id="1679068421605151609">ឧបករណ៍អ្នកអភិវឌ្ឍន៍</translation>
 <translation id="1679810534535368772">តើអ្នក​ពិតជាចង់ចាក​ចេញមែនឬ?</translation>
 <translation id="167983332380191032">សេវាកម្មគ្រប់គ្រង​បានផ្ញើ​បញ្ហា HTTP ។</translation>
@@ -861,7 +859,6 @@
 <translation id="1794051631868188691">កុំ​បង្ហាញ <ph name="MERCHANT" /> ឱ្យសោះ</translation>
 <translation id="1794791083288629568">ផ្ញើមតិស្ថាបនាដើម្បីជួយឲ្យយើងដោះស្រាយបញ្ហានេះ។</translation>
 <translation id="1795214765651529549">ប្រើបែបធម្មតា</translation>
-<translation id="1796105431091975902">ជ្រើសរើស Ansible Playbook ដើម្បីបញ្ចូល</translation>
 <translation id="1796588414813960292">មុខងារដែលត្រូវការសំឡេងនឹងមិនដំណើរការទេ</translation>
 <translation id="1797117170091578105">លេង​ដោយប្រើប្រាស់​ក្ដារចុច Chromebook របស់អ្នក។ អ្នក​អាច​ប្ដូរ​គ្រាប់ចុច​ឱ្យ​ចង​ភ្ជាប់​ទៅ​សកម្មភាព​ជាក់លាក់​តាមបំណង។</translation>
 <translation id="1800502858278951817">មិនមានកម្មវិធីបន្ថែមបានស្នើសុំអាន និងផ្លាស់ប្ដូរ <ph name="SITE_NAME" /> ទេ</translation>
@@ -926,6 +923,7 @@
 <translation id="1842766183094193446">តើអ្នក​ប្រាកដ​ថាចង់​បើក​មុខងារ​សាកល្បង​មែនឬ?</translation>
 <translation id="1845727111305721124">អនុញ្ញាតឱ្យចាក់សំឡេង</translation>
 <translation id="1846308012215045257">ចុច Control-click ដើម្បីដំណើរការ <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">ចេញពីគណនី​នៅពេលគម្របបិទ</translation>
 <translation id="184862733444771842">សំណើមុខងារ</translation>
 <translation id="1849016657376805933">ឧបករណ៍ HID នានា</translation>
 <translation id="1849186935225320012">ទំព័រនេះមានការគ្រប់គ្រងឧបករណ៍ MIDI ទាំងស្រុង។</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">កំណែ៖ <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">បង្ហាញ​ការកំណត់ប្លង់​គ្រាប់ចុច</translation>
 <translation id="1942128823046546853">អាន និងប្ដូរ​ទិន្នន័យ​ទាំងអស់​របស់អ្នក​នៅលើ​គេហទំព័រ​ទាំងអស់</translation>
-<translation id="1942600407708803723">បិទ​នៅពេល​បិទគម្រប</translation>
 <translation id="1944528062465413897">កូដផ្គូផ្គងប៊្លូធូស៖</translation>
 <translation id="1944921356641260203">ការធ្វើបច្ចុប្បន្នភាពត្រូវបានរកឃើញ</translation>
 <translation id="1947136734041527201">អនុញ្ញាតឱ្យអ្នកចូលគេហទំព័រដោយប្រើប្រាស់គណនីដែលអ្នកមានជាមួយនឹងសេវាកម្មដែលសួររកអត្ដសញ្ញាណ</translation>
@@ -3101,7 +3098,6 @@
 <translation id="389901847090970821">ជ្រើសរើសក្តារចុច</translation>
 <translation id="3900966090527141178">នាំចេញ​ពាក្យសម្ងាត់</translation>
 <translation id="3903187154317825986">ក្ដារចុច​ដែលភ្ជាប់​មកជាមួយ​ស្រាប់</translation>
-<translation id="3903191712482985591">បញ្ចូល playbook</translation>
 <translation id="3904326018476041253">សេវាកម្ម​ទីតាំង</translation>
 <translation id="3904849010307028014">ផ្អែកលើ​អន្តរកម្ម​របស់អ្នកជាមួយ​គេហទំព័រ​ដូចជា ការចូលគណនី​ជាទៀងទាត់ គេហទំព័រនោះ​អាចចេញថូខិន​ដែលជឿទុកចិត្ត​ដល់កម្មវិធីរុករកតាមអ៊ីនធឺណិត​របស់អ្នក។ ក្រោយមកទៀត ប្រសិនបើ​គេហទំព័រ​ផ្សេងទៀតដែលអ្នកចូលមើល​ពិនិត្យរកមើល ហើយរកឃើញ​ថូខិនដែលជឿទុកចិត្ត​ដែលត្រឹមត្រូវ នោះគេហទំព័រ​ទាំងនោះទំនងជា​ចាត់ទុកអ្នកថា​ជាមនុស្ស មិនមែនរ៉ូបូតទេ។</translation>
 <translation id="3905761538810670789">ជួសជុលកម្មវិធី</translation>
@@ -5048,7 +5044,6 @@
 <translation id="5827733057563115968">ការទស្សន៍ទាយ​ពាក្យបន្ទាប់</translation>
 <translation id="5828545842856466741">បញ្ចូល​កម្រង​ព័ត៌មាន...</translation>
 <translation id="5828633471261496623">កំពុងបោះពុម្ព...</translation>
-<translation id="5828797982387013521">ជ្រើសរើស playbook</translation>
 <translation id="5830205393314753525">មិនអាច​បើក <ph name="APP_NAME" /> បានទេ</translation>
 <translation id="5830720307094128296">រក្សាទុកទំព័រជា...</translation>
 <translation id="5832813618714645810">កម្រងព័ត៌មាន</translation>
@@ -5940,7 +5935,6 @@
 <translation id="6686665106869989887">បានផ្លាស់ទី​ផ្ទាំង​ទៅខាងស្ដាំ</translation>
 <translation id="6686817083349815241">រក្សាទុកពាក្យសម្ងាត់របស់អ្នក</translation>
 <translation id="6687079240787935001">លាក់ <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">កំពុងស្នើសុំ​អាន និង​ផ្លាស់ប្ដូរ <ph name="ORIGIN" />៖</translation>
 <translation id="6689714331348768690">ឱ្យ <ph name="SUPERVISED_USER_NAME" /> មកជិត​កុំព្យូទ័រ​។ កូនរបស់អ្នក​នឹងត្រូវអាន​ពីរបីឃ្លា​នៅលើ​អេក្រង់នេះ ដើម្បីបង្កើត​គំរូសំឡេង​របស់គាត់។
     <ph name="BR" />
     ប្រសិនបើ <ph name="SUPERVISED_USER_NAME" /> ត្រូវការ​ជំនួយ​ក្នុងការអាន សូមឱ្យកូន​របស់អ្នក​អានតាមអ្នក។ ខ្សឹបឱ្យឆ្ងាយ​ពីមីក្រូហ្វូន ដើម្បីឱ្យ​ជំនួយការ​រៀនពី​សំឡេង​របស់កូន​អ្នក ជំនួសឱ្យ​សំឡេងរបស់អ្នក។</translation>
@@ -7200,7 +7194,6 @@
 <translation id="7898725031477653577">បកប្រែជានិច្ច</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">កំពុងរកមើល​សមាសភាគ​កម្មវិធីរុករកតាមអ៊ីនធឺណិត​ឬ? ចូលមើល</translation>
-<translation id="7903345046358933331">ទំព័រមិនមានការឆ្លើយតប។ អ្នកអាចរង់ចាំរហូតដល់ទំព័រនេះធ្វើការឆ្លើយតប ឬបិទទំព័រនោះចោល។</translation>
 <translation id="7903429136755645827">ចុច ដើម្បីប្ដូរ​ការបញ្ជា​ហ្គេម​របស់អ្នក​តាមបំណង</translation>
 <translation id="7903742244674067440">អ្នកមានវិញ្ញាបនបត្រនៅលើឯកសារដែលកំណត់អត្តសញ្ញាណអាជ្ញាធរវិញ្ញាបនបត្រទាំងនេះ</translation>
 <translation id="7903925330883316394">ឧបករណ៍ប្រើប្រាស់៖ <ph name="UTILITY_TYPE" /></translation>
@@ -8115,6 +8108,7 @@
 <translation id="8780123805589053431">ទាញយក​ការពណ៌នា​អំពី​រូបភាពពី Google</translation>
 <translation id="8780443667474968681">ការស្វែង​រកតាម​សំឡេង​ត្រូវបាន​បិទ។</translation>
 <translation id="8781834595282316166">ផ្ទាំងថ្មី​នៅក្នុងក្រុម</translation>
+<translation id="8781980678064919987">បិទ​នៅពេល​គម្របបិទ</translation>
 <translation id="8782565991310229362">ការបើកដំណើរការកម្មវិធីបញ្ជរត្រូវបានបដិសេធ។</translation>
 <translation id="8783834180813871000">វាយបញ្ចូល​កូដ​ផ្គូផ្គងប៊្លូធូស បន្ទាប់​មក​ចុច Return ឬ Enter។</translation>
 <translation id="8784626084144195648">Binned Average</translation>
@@ -8179,7 +8173,6 @@
 <translation id="8846132060409673887">អានក្រុមហ៊ុនផលិត និងម៉ូដែល​នៃ​កុំព្យូទ័រនេះ</translation>
 <translation id="8846163936679269230">កំណត់កម្រងព័ត៌មាន eSIM ឡើងវិញ</translation>
 <translation id="8846239054091760429">សំឡេង​ម៉ូណូ សំឡេង​ពេលចាប់ផ្ដើម អក្សររត់ក្នុងពេលជាក់ស្ដែង និង​អ្វីៗ​ជាច្រើន​ទៀត</translation>
-<translation id="8847523528195140327">ចេញ​នៅពេល​បិទគម្រប</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">លាក់</translation>
 <translation id="8849219423513870962">បោះបង់​ការលុបកម្រងព័ត៌មាន eSIM ដែលមានឈ្មោះ <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 71998b4..1af7b10 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -278,6 +278,7 @@
 <translation id="125220115284141797">ಡಿಫಾಲ್ಟ್</translation>
 <translation id="1252987234827889034">ಪ್ರೊಫೈಲ್ ದೋಷ ಸಂಭವಿಸಿದೆ</translation>
 <translation id="1254593899333212300">ನೇರ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕ</translation>
+<translation id="1257336506558170607">ಆಯ್ಕೆಮಾಡಿದ ಪ್ರಮಾಣಪತ್ರವನ್ನು ರಫ್ತು ಮಾಡಿ</translation>
 <translation id="1258491128795710625">ಹೊಸತೇನಿದೆ</translation>
 <translation id="1259152067760398571">ಸುರಕ್ಷತಾ ಪರಿಶೀಲನೆಯನ್ನು ನಿನ್ನೆಯ ದಿನ ನಡೆಸಲಾಗಿದೆ</translation>
 <translation id="1260451001046713751"><ph name="HOST" /> ನಿಂದ ಪಾಪ್-ಅಪ್‍ಗಳು ಮತ್ತು ಮರುನಿರ್ದೇಶನಗಳನ್ನು ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ</translation>
@@ -565,7 +566,6 @@
 <translation id="1536754031901697553">ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="1537254971476575106">ಪೂರ್ಣಪರದೆ ವರ್ಧಕ</translation>
 <translation id="15373452373711364">ದೊಡ್ಡ ಮೌಸ್ ಕರ್ಸರ್</translation>
-<translation id="1539630663098418038"><ph name="ORIGIN" /> ಅನ್ನು ಓದಲು ಮತ್ತು ಬದಲಾಯಿಸಲು <ph name="EXTENSIONS_REQUESTING_ACCESS" /> ವಿನಂತಿಸುತ್ತಿದೆ</translation>
 <translation id="1540605929960647700">ಡೆಮೊ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="1541346352678737112">ಯಾವುದೇ ನೆಟ್‌ವರ್ಕ್ ಕಂಡುಬಂದಿಲ್ಲ</translation>
 <translation id="1542137295869176367">ನಿಮ್ಮ ಸೈನ್-ಇನ್ ಡೇಟಾವನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
@@ -727,7 +727,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> ನಲ್ಲಿ <ph name="USERNAME" /> ನ ರುಜುವಾತುಗಳು</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> ಅನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ಬಾಕಿ ಉಳಿದಿದೆ</translation>
-<translation id="1678794218766467608">ಸ್ಲೀಪ್ ಮೋಡ್‌ನಲ್ಲಿರುವಾಗ ಅಥವಾ ಕವರ್ ಮುಚ್ಚಿದಾಗ ಲಾಕ್ ಮಾಡಿ</translation>
 <translation id="1679068421605151609">ಡೆವಲಪರ್ ಟೂಲ್ಸ್</translation>
 <translation id="1679810534535368772">ನೀವು ಖಚಿತವಾಗಿಯೂ ನಿರ್ಗಮಿಸಲು ಬಯಸುವಿರಾ?</translation>
 <translation id="167983332380191032">ನಿರ್ವಹಣಾ ಸೇವೆಯು HTTP ದೋಷ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಿದೆ.</translation>
@@ -855,7 +854,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> ಅನ್ನು ಎಂದಿಗೂ ತೋರಿಸಬೇಡಿ</translation>
 <translation id="1794791083288629568">ಈ ಸಮಸ್ಯೆಯನ್ನು ಸರಿಪಡಿಸಲು ನಮಗೆ ಸಹಾಯ ಮಾಡುವುದಕ್ಕಾಗಿ ಪ್ರತಿಕ್ರಿಯೆ ಕಳುಹಿಸಿ.</translation>
 <translation id="1795214765651529549">ಕ್ಲಾಸಿಕ್ ಬಳಸಿ</translation>
-<translation id="1796105431091975902">ಸೇರಿಸಲು Ansible ಪ್ಲೇಬುಕ್ ಅನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="1796588414813960292">ಧ್ವನಿಯ ಅಗತ್ಯವಿರುವ ಫೀಚರ್‌ಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ</translation>
 <translation id="1797117170091578105">ನಿಮ್ಮ Chromebook ಕೀಬೋರ್ಡ್ ಬಳಸಿ ಗೇಮ್ ಅನ್ನು ಆಡಿ. ನಿರ್ದಿಷ್ಟ ಕ್ರಿಯೆಗಳಿಗಾಗಿ ನೀವು ಕೀಗಳನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಬಹುದು.</translation>
 <translation id="1800502858278951817"><ph name="SITE_NAME" /> ಅನ್ನು ಓದಲು ಮತ್ತು ಬದಲಾಯಿಸಲು ಯಾವುದೇ ವಿಸ್ತರಣೆಗಳನ್ನು ವಿನಂತಿಸಲಾಗಿಲ್ಲ</translation>
@@ -920,6 +918,7 @@
 <translation id="1842766183094193446">ನೀವು ಖಚಿತವಾಗಿಯೂ ಡೆಮೊ ಮೋಡ್ ಸಕ್ರಿಯಗೊಳಿಸಲು ಬಯಸುತ್ತೀರಾ?</translation>
 <translation id="1845727111305721124">ಧ್ವನಿಯನ್ನು ಪ್ಲೇ ಮಾಡಲು ಈ ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸಲಾಗಿದೆ</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> ಅನ್ನು ರನ್ ಮಾಡಲು ಕಂಟ್ರೋಲ್-ಕ್ಲಿಕ್ ಮಾಡಿ</translation>
+<translation id="1848219224579402567">ಲಿಡ್‌ ಅನ್ನು ಮುಚ್ಚಿದಾಗ ಸೈನ್‌ ಔಟ್‌ ಮಾಡಿ</translation>
 <translation id="184862733444771842">ಫೀಚರ್‌ ವಿನಂತಿ</translation>
 <translation id="1849016657376805933">ಯಾವುದೇ HID ಸಾಧನ</translation>
 <translation id="1849186935225320012">ಈ ಪುಟಕ್ಕೆ MIDI ಸಾಧನಗಳ ಸಂಪೂರ್ಣ ನಿಯಂತ್ರಣವಿದೆ.</translation>
@@ -1027,7 +1026,6 @@
 <translation id="1941553344801134989">ಆವೃತ್ತಿ: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">ಕೀ ಮ್ಯಾಪಿಂಗ್ ಅನ್ನು ತೋರಿಸಿ</translation>
 <translation id="1942128823046546853">ಎಲ್ಲಾ ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಓದಿ ಮತ್ತು ಬದಲಾಯಿಸಿ</translation>
-<translation id="1942600407708803723">ಕವರ್ ಮುಚ್ಚಿದ ನಂತರ ಸ್ಥಗಿತಗೊಳಿಸಿ</translation>
 <translation id="1944528062465413897">ಬ್ಲೂಟೂತ್ ಜೋಡಿಸುವ ಕೋಡ್:</translation>
 <translation id="1944921356641260203">ಅಪ್‌ಡೇಟ್‌‌ ಕಂಡುಬಂದಿದೆ</translation>
 <translation id="1947136734041527201">ಗುರುತಿನ ಸೇವೆಯ ಜೊತೆಗೆ ನೀವು ಹೊಂದಿರುವ ಖಾತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ವೆಬ್‌ಸೈಟ್‌ಗಳಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ</translation>
@@ -3094,7 +3092,6 @@
 <translation id="389901847090970821">ಕೀಬೋರ್ಡ್ ಆಯ್ಕೆ ಮಾಡಿ</translation>
 <translation id="3900966090527141178">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಎಕ್ಸ್‌ಪೋರ್ಟ್ ಮಾಡಿ</translation>
 <translation id="3903187154317825986">ಅಂತರ್ನಿರ್ಮಿತ ಕೀಬೋರ್ಡ್</translation>
-<translation id="3903191712482985591">ಪ್ಲೇಬುಕ್ ಅನ್ನು ಸೇರಿಸಿ</translation>
 <translation id="3904326018476041253">ಸ್ಥಳ ಸೇವೆಗಳು</translation>
 <translation id="3904849010307028014">ಖಾತೆಯೊಂದಕ್ಕೆ ಸೈನ್ ಇನ್ ಮಾಡುವಂತಹ ಸೈಟ್ ಒಂದರ ಜೊತೆಗೆ ನೀವು ನಡೆಸುವ ಸಂವಹನವನ್ನು ಆಧರಿಸಿ, ಆ ಸೈಟ್ ನಿಮ್ಮ ಬ್ರೌಸರ್‌ಗೆ ಟ್ರಸ್ಟ್ ಟೋಕನ್ ವಿತರಿಸಬಹುದು. ನಂತರ, ನೀವು ಭೇಟಿ ನೀಡುವ ಇತರ ಸೈಟ್‌ಗಳು ಮಾನ್ಯವಾದ ಟ್ರಸ್ಟ್ ಟೋಕನ್ ಅನ್ನು ಹುಡುಕಿದರೆ ಮತ್ತು ಅದನ್ನು ಪಡೆದುಕೊಂಡರೆ, ಅವು ನಿಮ್ಮನ್ನು ಬಾಟ್‌ನಂತೆ ನಡೆಸಿಕೊಳ್ಳುವ ಬದಲು ಒಬ್ಬ ವ್ಯಕ್ತಿಯಂತೆ ನಡೆಸಿಕೊಳ್ಳುವ ಸಾಧ್ಯತೆ ಹೆಚ್ಚಿರುತ್ತದೆ.</translation>
 <translation id="3905761538810670789">ಅಪ್ಲಿಕೇಶನ್ ಸರಿಪಡಿಸು</translation>
@@ -5041,7 +5038,6 @@
 <translation id="5827733057563115968">ಮುಂದಿನ ಪದದ ಮುನ್ನೋಟಗಳು</translation>
 <translation id="5828545842856466741">ಪ್ರೊಫೈಲ್ ಸೇರಿಸಿ...</translation>
 <translation id="5828633471261496623">ಮುದ್ರಿಸಲಾಗುತ್ತಿದೆ...</translation>
-<translation id="5828797982387013521">ಪ್ಲೇಬುಕ್ ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> ತೆರೆಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation>
 <translation id="5830720307094128296">&amp;ಇದರಂತೆ ಪುಟವನ್ನು ಉಳಿಸಿ...</translation>
 <translation id="5832813618714645810">ಪ್ರೊಫೈಲ್‌ಗಳು</translation>
@@ -5935,7 +5931,6 @@
 <translation id="6686665106869989887">ಟ್ಯಾಬ್ ಅನ್ನು ಬಲಕ್ಕೆ ಸರಿಸಲಾಗಿದೆ</translation>
 <translation id="6686817083349815241">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಉಳಿಸಿ</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> ಅನ್ನು ಮರೆಮಾಡಿ</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> ಅನ್ನು ಓದಲು ಮತ್ತು ಬದಲಾಯಿಸಲು ವಿನಂತಿಸಲಾಗುತ್ತಿದೆ:</translation>
 <translation id="6689714331348768690">ಕಂಪ್ಯೂಟರ್‌ಗೆ ಬರಲು <ph name="SUPERVISED_USER_NAME" /> ಅವರಿಗೆ ಕೇಳಿ. ನಿಮ್ಮ ಮಗು ಅವರ ವಾಯ್ಸ್ ಮಾಡೆಲ್ ಅನ್ನು ರಚಿಸಲು ಈ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ಕೆಲವು ನುಡಿಗಟ್ಟುಗಳನ್ನು ಓದುತ್ತದೆ.
     <ph name="BR" />
     ಓದುವುದಕ್ಕೆ <ph name="SUPERVISED_USER_NAME" /> ಅವರಿಗೆ ಸಹಾಯದ ಅಗತ್ಯವಿದ್ದರೆ, ನಿಮ್ಮ ನಂತರ ನಿಮ್ಮ ಮಗು ಪುನಾರವರ್ತಿಸಲು ಹೇಳಿ. ಮೈಕ್‌ನಿಂದ ದೂರದಲ್ಲಿ ಪಿಸು ಮಾತಾಡಿ, ಇದರಿಂದಾಗಿ Assistant ನಿಮ್ಮ ಮಗುವಿನ ಧ್ವನಿಯನ್ನು ಕಲಿಯುತ್ತಾರೆ.</translation>
@@ -7194,7 +7189,6 @@
 <translation id="7898725031477653577">ಯಾವಾಗಲೂ ಅನುವಾದಿಸು</translation>
 <translation id="7901405293566323524">ಫೋನ್ ಹಬ್</translation>
 <translation id="7903290522161827520">ಬ್ರೌಸರ್ ಕಾಂಪೊನೆಂಟ್‌ಗಳಿಗಾಗಿ ಹುಡುಕುತ್ತಿರುವಿರಾ? ಭೇಟಿ ನೀಡಿ</translation>
-<translation id="7903345046358933331">ಪುಟವು ಸ್ಪಂದಿಸುತ್ತಿಲ್ಲ. ಅದು ಸ್ಪಂದಿಸುವ ತನಕ ನೀವು ಕಾಯಬಹುದು ಅಥವಾ ಅದನ್ನು ಮುಚ್ಚಬಹುದು.</translation>
 <translation id="7903429136755645827">ನಿಮ್ಮ ಗೇಮ್ ನಿಯಂತ್ರಣಗಳನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ</translation>
 <translation id="7903742244674067440">ಈ ಪ್ರಮಾಣಪತ್ರದ ಪ್ರಾಧಿಕಾರಗಳ ಗುರುತಿಸುವ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ನೀವು ಫೈಲ್‌ನಲ್ಲಿ ಹೊಂದಿದ್ದೀರಿ</translation>
 <translation id="7903925330883316394">ಉಪಯುಕ್ತತೆ: <ph name="UTILITY_TYPE" /></translation>
@@ -8107,6 +8101,7 @@
 <translation id="8780123805589053431">Google ನಿಂದ ಚಿತ್ರದ ವಿವರಣೆಗಳನ್ನು ಪಡೆಯಿರಿ</translation>
 <translation id="8780443667474968681">ಧ್ವನಿ ಹುಡುಕಾಟವನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ.</translation>
 <translation id="8781834595282316166">ಗುಂಪಿನಲ್ಲಿ ಹೊಸ ಟ್ಯಾಬ್</translation>
+<translation id="8781980678064919987">ಲಿಡ್‌ ಅನ್ನು ಮುಚ್ಚಿದಾಗ ಸಾಧನದ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಸ್ಥಗಿತಗೊಳಿಸಿ</translation>
 <translation id="8782565991310229362">ಕಿಯೋಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್ ಬಿಡುಗಡೆಯನ್ನು ರದ್ದು ಮಾಡಲಾಗಿದೆ.</translation>
 <translation id="8783834180813871000">ಬ್ಲೂಟೂತ್ ಜೋಡಣೆ ಕೋಡ್‌ ಟೈಪ್‌ ಮಾಡಿ ನಂತರ Return ಅಥವಾ Enter ಒತ್ತಿ.</translation>
 <translation id="8784626084144195648">ಶೇಖರಿಸಿದ ಸರಾಸರಿ</translation>
@@ -8171,7 +8166,6 @@
 <translation id="8846132060409673887">ಈ ಕಂಪ್ಯೂಟರ್‌ನ ತಯಾರಕರು ಮತ್ತು ಮಾದರಿಯನ್ನು ಓದಿ</translation>
 <translation id="8846163936679269230">eSIM ಪ್ರೊಫೈಲ್‌ಗಳನ್ನು ರೀಸೆಟ್ ಮಾಡಿ</translation>
 <translation id="8846239054091760429">ಮೊನೊ ಆಡಿಯೊ, ಸ್ಟಾರ್ಟ್‌ಅಪ್, ಲೈವ್ ಶೀರ್ಷಿಕೆ ಮತ್ತು ಇನ್ನಷ್ಟು</translation>
-<translation id="8847523528195140327">ಕವರ್ ಮುಚ್ಚಿದ ನಂತರ ಸೈನ್ ಔಟ್ ಆಗಿ</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">ಮರೆಮಾಡಲಾಗಿದೆ</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> ಹೆಸರಿನ eSIM ಪ್ರೊಫೈಲ್ ತೆಗೆದುಹಾಕುವುದನ್ನು ರದ್ದುಗೊಳಿಸಿ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index 3a3c425c..2b6c7d7 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">연결을 해제하는 중...</translation>
 <translation id="1537254971476575106">전체화면 돋보기</translation>
 <translation id="15373452373711364">큰 마우스 커서</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" />에서 <ph name="ORIGIN" /> 사이트를 읽고 변경할 수 있도록 요청합니다.</translation>
 <translation id="1540605929960647700">데모 모드 사용</translation>
 <translation id="1541346352678737112">네트워크 없음</translation>
 <translation id="1542137295869176367">로그인 데이터를 업데이트할 수 없습니다.</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" />의 <ph name="USERNAME" /> 관련 자세한 사용자 인증 정보</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" />을(를) 추가할 수 없습니다.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> 남음</translation>
-<translation id="1678794218766467608">절전 모드에서 또는 커버가 닫혀 있을 때 잠금</translation>
 <translation id="1679068421605151609">개발자 도구</translation>
 <translation id="1679810534535368772">종료하시겠습니까?</translation>
 <translation id="167983332380191032">관리 서비스에서 HTTP 오류를 전송했습니다.</translation>
@@ -861,7 +859,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> 표시 안함</translation>
 <translation id="1794791083288629568">이 문제를 해결하는 데 도움이 되도록 의견 전송</translation>
 <translation id="1795214765651529549">기본 테마 사용</translation>
-<translation id="1796105431091975902">추가할 Ansible Playbook 선택</translation>
 <translation id="1796588414813960292">소리가 필요한 기능이 작동하지 않습니다</translation>
 <translation id="1797117170091578105">Chromebook 키보드를 사용하여 플레이합니다. 특정 작업에 맞게 키를 맞춤설정할 수 있습니다.</translation>
 <translation id="1800502858278951817"><ph name="SITE_NAME" /> 사이트를 읽고 변경하도록 요청한 확장 프로그램이 없음</translation>
@@ -926,6 +923,7 @@
 <translation id="1842766183094193446">데모 모드를 사용하도록 설정하시겠습니까?</translation>
 <translation id="1845727111305721124">소리 재생이 허용됨</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" />을(를) 실행하려면 Control 키를 누르고 클릭합니다.</translation>
+<translation id="1848219224579402567">덮개가 닫히면 로그아웃</translation>
 <translation id="184862733444771842">기능 요청</translation>
 <translation id="1849016657376805933">모든 HID 기기</translation>
 <translation id="1849186935225320012">이 페이지는 MIDI 기기를 완전히 제어할 수 있습니다.</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">버전: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">키 매핑 표시</translation>
 <translation id="1942128823046546853">모든 웹사이트의 전체 데이터 읽기 및 변경</translation>
-<translation id="1942600407708803723">커버를 닫으면 종료</translation>
 <translation id="1944528062465413897">블루투스 페어링 코드:</translation>
 <translation id="1944921356641260203">사용 가능한 업데이트 있음</translation>
 <translation id="1947136734041527201">가지고 있는 ID 서비스 계정으로 웹사이트에 로그인할 수 있습니다.</translation>
@@ -1727,6 +1724,7 @@
 <translation id="2568774940984945469">정보 표시줄 컨테이너</translation>
 <translation id="2571655996835834626">쿠키, 자바스크립트, 플러그인, 위치정보, 마이크, 카메라 등의 기능에 대한 웹사이트의 액세스 권한을 관리하는 설정을 변경합니다.</translation>
 <translation id="2572032849266859634"><ph name="VOLUME_NAME" />에 대한 읽기 전용 액세스가 허용되었습니다.</translation>
+<translation id="2573276323521243649">아바타 선택 페이지에서 이전 페이지로 돌아가기</translation>
 <translation id="2573417407488272418">앱과 파일을 파일 &gt; 내 파일에 백업한 후 업그레이드합니다.</translation>
 <translation id="2573831315551295105">'<ph name="ACTION" />'에 스위치 할당</translation>
 <translation id="2575247648642144396">현재 페이지에서 확장 프로그램을 실행할 수 있으면 아이콘이 표시됩니다. 아이콘을 클릭하거나 <ph name="EXTENSION_SHORTCUT" />을(를) 눌러 확장 프로그램을 사용합니다.</translation>
@@ -3101,7 +3099,6 @@
 <translation id="389901847090970821">키보드 선택</translation>
 <translation id="3900966090527141178">비밀번호 내보내기</translation>
 <translation id="3903187154317825986">내장 키보드</translation>
-<translation id="3903191712482985591">Playbook 추가</translation>
 <translation id="3904326018476041253">위치 서비스</translation>
 <translation id="3904849010307028014">사이트에서는 나와 사이트의 상호작용(예: 정기적인 계정 로그인)을 기반으로 브라우저에 신뢰 토큰을 발행할 수 있습니다. 나중에 방문하는 다른 사이트에서 유효한 신뢰 토큰이 있는지 확인하여 토큰을 찾으면 이 사이트에서도 나를 봇이 아닌 사람으로 여길 가능성이 큽니다.</translation>
 <translation id="3905761538810670789">앱 복구</translation>
@@ -5045,7 +5042,6 @@
 <translation id="5827733057563115968">다음 예상 단어</translation>
 <translation id="5828545842856466741">프로필 추가...</translation>
 <translation id="5828633471261496623">인쇄 중...</translation>
-<translation id="5828797982387013521">플레이북 선택</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> 앱을 열 수 없습니다</translation>
 <translation id="5830720307094128296">페이지를 다른 이름으로 저장(&amp;A)...</translation>
 <translation id="5832813618714645810">프로필</translation>
@@ -5937,7 +5933,6 @@
 <translation id="6686665106869989887">오른쪽으로 탭을 이동함</translation>
 <translation id="6686817083349815241">비밀번호 저장</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> 숨기기</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> 사이트 읽기 및 변경 요청:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" />님을 컴퓨터 앞으로 부르세요. 화면에 표시되는 몇 개의 구문을 읽으면 음성 모델이 생성됩니다.
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" />님이 읽는 데 도움이 필요하다면 먼저 읽어준 후 따라 하라고 하세요. 마이크 멀리서 작게 이야기하여 어시스턴트가 부모님이 아닌 자녀의 음성을 학습하게 하세요.</translation>
@@ -6419,6 +6414,7 @@
 <translation id="7138678301420049075">기타</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" />에서 마이크를 사용 중입니다.</translation>
 <translation id="7141105143012495934">계정 세부정보를 가져올 수 없어 로그인할 수 없습니다. 관리자에게 문의하거나 다시 시도해 주세요.</translation>
+<translation id="7141844554192012199">진단</translation>
 <translation id="7144878232160441200">다시 시도</translation>
 <translation id="7149839598364933473">이 기기를 <ph name="DEVICE_OS" /> 기기로 전환합니다</translation>
 <translation id="7149893636342594995">지난 24시간</translation>
@@ -7197,7 +7193,6 @@
 <translation id="7898725031477653577">항상 번역</translation>
 <translation id="7901405293566323524">휴대전화 허브</translation>
 <translation id="7903290522161827520">브라우저 구성요소를 찾는다면 다음으로 이동하세요.</translation>
-<translation id="7903345046358933331">페이지에서 응답이 없습니다. 페이지가 응답할 때까지 기다리거나 페이지를 닫으세요.</translation>
 <translation id="7903429136755645827">클릭하여 게임 컨트롤 맞춤설정</translation>
 <translation id="7903742244674067440">다음 인증기관을 식별하는 인증서가 등록되어 있습니다.</translation>
 <translation id="7903925330883316394">유틸리티: <ph name="UTILITY_TYPE" /></translation>
@@ -8112,6 +8107,7 @@
 <translation id="8780123805589053431">Google에서 이미지 설명 가져오기</translation>
 <translation id="8780443667474968681">음성 검색이 사용 중지되었습니다.</translation>
 <translation id="8781834595282316166">그룹에 새 탭 추가</translation>
+<translation id="8781980678064919987">덮개가 닫히면 종료</translation>
 <translation id="8782565991310229362">키오스크 애플리케이션 실행이 취소되었습니다.</translation>
 <translation id="8783834180813871000">블루투스 페어링 코드를 입력하고 Return 또는 Enter 키를 누르세요.</translation>
 <translation id="8784626084144195648">비닝 평균</translation>
@@ -8176,7 +8172,6 @@
 <translation id="8846132060409673887">이 컴퓨터의 제조업체 및 모델을 읽습니다.</translation>
 <translation id="8846163936679269230">eSIM 프로필 재설정</translation>
 <translation id="8846239054091760429">모노 오디오, 시작, 실시간 자막 등</translation>
-<translation id="8847523528195140327">커버를 닫으면 로그아웃</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">숨김</translation>
 <translation id="8849219423513870962">이름이 <ph name="PROFILE_NAME" />인 eSIM 프로필 삭제 취소</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb
index 02bda53e..e4c9621 100644
--- a/chrome/app/resources/generated_resources_ky.xtb
+++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">Ажыратылууда…</translation>
 <translation id="1537254971476575106">Толук экран лупасы</translation>
 <translation id="15373452373711364">Чоң чычкан курсору</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> төмөнкүнү окуу жана өзгөртүүнү суранууда: <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Демо режимин иштетүү</translation>
 <translation id="1541346352678737112">Тармак табылган жок</translation>
 <translation id="1542137295869176367">Аккаунтка кирүү дайындарыңыз жаңырган жок</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> домениндеги колдонуучунун (<ph name="USERNAME" />) эсептик дайындары</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> кеңейтүүсүн кошуу мүмкүн болбой жатат</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> калды</translation>
-<translation id="1678794218766467608">Көшүү режиминде жана жапкычы жабылып турганда кулпулоо</translation>
 <translation id="1679068421605151609">Иштеп чыгуучунун куралдары</translation>
 <translation id="1679810534535368772">Чын эле чыгасызбы?</translation>
 <translation id="167983332380191032">Башкаруучу кызматтан туура эмес HTTP коду келди.</translation>
@@ -861,7 +859,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> эч качан көрүнбөсүн</translation>
 <translation id="1794791083288629568">Бул көйгөйдү оңдоого жардам берүү үчүн пикириңизди билдириңиз.</translation>
 <translation id="1795214765651529549">Классикалык теманы колдонуу</translation>
-<translation id="1796105431091975902">Кошуу үчүн Ansible окуу куралын тандаңыз</translation>
 <translation id="1796588414813960292">Добушту колдонгон функциялар иштебей калат</translation>
 <translation id="1797117170091578105">Chromebook баскычтобун колдонуп ойноңуз. Баскычтарды белгилүү бир аракеттерге ыңгайлаштыра аласыз.</translation>
 <translation id="1800502858278951817"><ph name="SITE_NAME" /> сайтын окуу же өзгөртүү үчүн бир да кеңейтүү уруксат сураган жок</translation>
@@ -926,6 +923,7 @@
 <translation id="1842766183094193446">Демо режимди чын эле иштетесизби?</translation>
 <translation id="1845727111305721124">Үн чыгара алат</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> иштетүү үчүн Control баскычын басып туруп, чычкандын баскычын басыңыз</translation>
+<translation id="1848219224579402567">Капкагы жабык болгондо чыгуу</translation>
 <translation id="184862733444771842">Функция кошуу сурамы</translation>
 <translation id="1849016657376805933">HID түзмөгү</translation>
 <translation id="1849186935225320012">Бул бет MIDI түзмөктөрүн толугу менен көзөмөлдөйт.</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">Версиясы: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Дайындалган баскычтарды көрүү</translation>
 <translation id="1942128823046546853">Бардык вебсайттардагы дайын-даректериңизди окуу жана өзгөртүү</translation>
-<translation id="1942600407708803723">Капкагы жабылып турганда өчүрүлсүн</translation>
 <translation id="1944528062465413897">Bluetooth байланышуу коду:</translation>
 <translation id="1944921356641260203">Жаңыртуу табылды</translation>
 <translation id="1947136734041527201">Аныктыгын текшерүү кызматында катталган аккаунтуңуз менен вебсайттарга кирүүгө мүмкүнчүлүк берет</translation>
@@ -3101,7 +3098,6 @@
 <translation id="389901847090970821">Баскычтопту тандоо</translation>
 <translation id="3900966090527141178">Сырсөздөрдү экспорттоо</translation>
 <translation id="3903187154317825986">Кыстарылган баскычтоп</translation>
-<translation id="3903191712482985591">Окуу куралын кошуу</translation>
 <translation id="3904326018476041253">Жайгашкан жерди аныктоо кызматтары</translation>
 <translation id="3904849010307028014">Сайт менен иштөөңүз, мисалы, аккаунтуңузга ар дайым кирүү сыяктуу аракетиңиздин негизинде ал сайт серепчиңизге ишеним токенин бере алат. Кийинчерээк, баш баккан сайттарыңыз ишеним токенин текшерип, аны жарактуу деп тапса, сизди көбүнчө бот катары эмес, адам катары кабыл алат.</translation>
 <translation id="3905761538810670789">Колдонмону оңдоо</translation>
@@ -5047,7 +5043,6 @@
 <translation id="5827733057563115968">Кийинки сөздү божомолдоо</translation>
 <translation id="5828545842856466741">Профиль кошуу...</translation>
 <translation id="5828633471261496623">Басып чыгарууда…</translation>
-<translation id="5828797982387013521">Оку куралын тандоо</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> колдонмосу ачылбай жатат</translation>
 <translation id="5830720307094128296">Бетти &amp;төмөнкүдөй сактоо…</translation>
 <translation id="5832813618714645810">Профилдер</translation>
@@ -5939,7 +5934,6 @@
 <translation id="6686665106869989887">Өтмөк оңго жылды</translation>
 <translation id="6686817083349815241">Сырсөзүңүздү сактаңыз</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> жашыруу</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> окуу жана өзгөртүүнү суранууда:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> балаңызды компьютерге жакын чакырыңыз. Ал үнүнүн үлгүсүн түзүү үчүн бул экрандагы бир нече фразаларды окуйт.
     <ph name="BR" />
     Эгер <ph name="SUPERVISED_USER_NAME" /> өзү окуй албаса, сизди кайталатып окутуңуз. Жардамчы балаңыз эмес сиздин үнүңүздү жаздырып албасы үчүн микрофондон алыс туруп шыбырап окуңуз.</translation>
@@ -7199,7 +7193,6 @@
 <translation id="7898725031477653577">Ар дайым которуу</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Cерепчинин компоненттерин издеп жатасызбы? Төмөнкүгө өтүңүз:</translation>
-<translation id="7903345046358933331">Бул барак жооп бербей калды. Ал жооп бергиче күтө турсаңыз же жаап салсаңыз болот.</translation>
 <translation id="7903429136755645827">Оюндун башкаруу элементтерин ыңгайлаштыруу үчүн басыңыз</translation>
 <translation id="7903742244674067440">Тастыктоо бийлигин аныктаган файлда бир нече тастыктамаларыңыз бар</translation>
 <translation id="7903925330883316394">Утилита: <ph name="UTILITY_TYPE" /></translation>
@@ -8113,6 +8106,7 @@
 <translation id="8780123805589053431">Google'дан сүрөттөрдүн түшүндүрмөлөрүн алуу</translation>
 <translation id="8780443667474968681">Айтып издөө функциясы өчүрүлгөн.</translation>
 <translation id="8781834595282316166">Топтогу жаңы өтмөк</translation>
+<translation id="8781980678064919987">Капкагы жабык болгондо өчүрүлсүн</translation>
 <translation id="8782565991310229362">Киоск колдонмосун ишке киргизүү аракети жокко чыгарылды.</translation>
 <translation id="8783834180813871000">Bluetooth'дун жупташтыруу кодун терип, андан соң "Артка" же "Киргизүү" баскычын басыңыз.</translation>
 <translation id="8784626084144195648">Топтолгон ортоломо</translation>
@@ -8177,7 +8171,6 @@
 <translation id="8846132060409673887">Компьютердин өндүрүүчүсүн жана үлгүсүн окуу</translation>
 <translation id="8846163936679269230">eSIM-карта профилдерин баштапкы абалга келтирүү</translation>
 <translation id="8846239054091760429">Моно аудио, баштоо, Ыкчам коштомо жазуулар жана башкалар</translation>
-<translation id="8847523528195140327">Капкагы жабылып турганда аккаунттан чыгарылсын</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Жашырылды</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> деп аталган eSIM-картанын профилинин өчүрүүнү жокко чыгаруу</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 3f4fae9..c9ad053 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -561,7 +561,6 @@
 <translation id="1536754031901697553">ກຳລັງຕັດການເຊື່ອມຕໍ່...</translation>
 <translation id="1537254971476575106">ແວ່ນຂະຫຍາຍເຕັມຈໍ</translation>
 <translation id="15373452373711364">ເຄີເຊີເມົາສ໌ໃຫຍ່</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> ກຳລັງຮ້ອງຂໍເພື່ອອ່ານ ແລະ ປ່ຽນ <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">ເປີດນຳໃຊ້ໂໝດສາທິດ</translation>
 <translation id="1541346352678737112">ບໍ່ພົບເຄືອຂ່າຍ</translation>
 <translation id="1542137295869176367">ບໍ່ສາມາດອັບເດດຂໍ້ມູນການເຂົ້າສູ່ລະບົບຂອງທ່ານໄດ້</translation>
@@ -723,7 +722,6 @@
 <translation id="1676902103953506022">ລາຍລະອຽດຂໍ້ມູນການເຂົ້າສູ່ລະບົບສຳລັບ <ph name="USERNAME" /> ຢູ່ <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">ບໍ່ສາມາດເພີ່ມ <ph name="EXTENSION_TYPE_PARAMETER" /> ໄດ້</translation>
 <translation id="1677472565718498478">ຍັງເຫຼືອ <ph name="TIME" /></translation>
-<translation id="1678794218766467608">ລັອກໜ້າຈໍໃນໂໝດການນອນ ຫຼື ໃນຕອນທີ່ໜ້າປົກຖືກປິດໄວ້</translation>
 <translation id="1679068421605151609">ເຄື່ອງ​ມື​ຜູ້ພັດ​ທະ​ນາ</translation>
 <translation id="1679810534535368772">ທ່ານແນ່ໃຈບໍ່ວ່າຕ້ອງການອອກ?</translation>
 <translation id="167983332380191032">ການບໍລິການຈັດການໄດ້ສົ່ງລະຫັດຂໍ້ຜິດພາດ HTTP.</translation>
@@ -859,7 +857,6 @@
 <translation id="1794051631868188691">ຢ່າສະແດງ <ph name="MERCHANT" /> ອີກ</translation>
 <translation id="1794791083288629568">ສົ່ງຄຳຕິຊົມເພື່ອຊ່ວຍພວກເຮົາແກ້ໄຂບັນຫານີ້.</translation>
 <translation id="1795214765651529549">ໃຊ້ແບບຄລາດສິກ</translation>
-<translation id="1796105431091975902">ເລືອກ Ansible Playbook ທີ່ຈະເພີ່ມ</translation>
 <translation id="1796588414813960292">ຄຸນສົມບັດທີ່ຕ້ອງການສຽງຈະໃຊ້ບໍ່ໄດ້</translation>
 <translation id="1797117170091578105">ຫຼິ້ນໂດຍໃຊ້ແປ້ນພິມ Chromebook ຂອງທ່ານ. ທ່ານສາມາດປັບແຕ່ງປຸ່ມເປັນຄຳສັ່ງສະເພາະຕ່າງໆໄດ້.</translation>
 <translation id="1800502858278951817">ບໍ່ມີສ່ວນຂະຫຍາຍທີ່ຮ້ອງຂໍໃຫ້ອ່ານ ແລະ ປ່ຽນແປງ <ph name="SITE_NAME" /></translation>
@@ -924,6 +921,7 @@
 <translation id="1842766183094193446">ທ່ານແນ່ໃຈບໍ່ວ່າທ່ານຕ້ອງການເປີດນຳໃຊ້ໂໝດສາທິດ?</translation>
 <translation id="1845727111305721124">ໄດ້ຮັບອະນຸຍາດໃຫ້ຫຼິ້ນສຽງ</translation>
 <translation id="1846308012215045257">ກົດ Control ແລ້ວຄລິກເພື່ອເປີດໃຊ້ <ph name="PLUGIN_NAME" />.</translation>
+<translation id="1848219224579402567">ອອກຈາກລະບົບເມື່ອປິດຝາປິດ</translation>
 <translation id="184862733444771842">ຄຳຮ້ອງຂໍຄຸນສົມບັດ</translation>
 <translation id="1849016657376805933">ອຸປະກອນ HID ໃດກໍໄດ້</translation>
 <translation id="1849186935225320012">ຫນ້າ​ນີ້​ມີ​ການ​ຄວບ​ຄຸມ​ອຸປະກອນ MIDI ເຕັມ​.</translation>
@@ -1031,7 +1029,6 @@
 <translation id="1941553344801134989">ເວີຊັນ: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">ສະແດງການຈັບຄູ່ປຸ່ມ</translation>
 <translation id="1942128823046546853">ອ່ານ ແລະ ປ່ຽນຂໍ້ມູນທັງໝົດຂອງທ່ານຢູ່ທຸກເວັບໄຊ</translation>
-<translation id="1942600407708803723">ປິດເຄື່ອງເມື່ອປິດຝາ</translation>
 <translation id="1944528062465413897">ລະຫັດການຈັບຄູ່ Bluetooth</translation>
 <translation id="1944921356641260203">ພົບການອັບເດດແລ້ວ</translation>
 <translation id="1947136734041527201">ເຮັດໃຫ້ທ່ານສາມາດເຂົ້າສູ່ລະບົບຫາເວັບໄຊຕ່າງໆໂດຍໃຊ້ບັນຊີທີ່ທ່ານມີກັບບໍລິການຕົວຕົນໄດ້</translation>
@@ -1725,6 +1722,7 @@
 <translation id="2568774940984945469">ພາຊະນະບັນຈຸແຖບຂໍ້ມູນ</translation>
 <translation id="2571655996835834626">ປ່ຽນການຕັ້ງຄ່າທີ່ຄວບຄຸມການເຂົ້າເຖິງຄຸນສົມບັດຕ່າງໆຂອງເວັບໄຊ ເຊັ່ນ: ຄຸກກີ້, JavaScript, ປລັກອິນ, ສະຖານທີ່ທາງພູມສາດ, ໄມໂຄຣໂຟນ, ກ້ອງຖ່າຍຮູບ ແລະ ອື່ນໆ.</translation>
 <translation id="2572032849266859634">​ການເຂົ້າ​ຫາ <ph name="VOLUME_NAME" /> ອ່ານ​ເທົ່າ​ນັ້ນໄດ້​ຮັບ​​ອະ​ນຸ​ຍາດແລ້ວ​.</translation>
+<translation id="2573276323521243649">ກັບອອກຈາກໜ້າການເລືອກຮູບແທນຕົວ</translation>
 <translation id="2573417407488272418">ສຳຮອງຂໍ້ມູນແອັບ ແລະ ໄຟລ໌ໄປໃສ່ໄຟລ໌ &gt; ໄຟລ໌ຂອງຂ້ອຍ ກ່ອນອັບເກຣດ.</translation>
 <translation id="2573831315551295105">ມອບໝາຍສະວິດສຳລັບ “<ph name="ACTION" />”</translation>
 <translation id="2575247648642144396">ຈະສາມາດເຫັນໄອຄອນນີ້ໄດ້ ເມື່ອສ່ວນຂະຫຍາຍສາມາດດໍາເນີນການຢູ່ໃນໜ້າປະຈຸບັນໄດ້. ໃຊ້ສ່ວນຂະຫຍາຍນີ້ໂດຍການຄລິກໃສ່ໄອຄອນ ຫຼືໂດຍການກົດ <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -2565,6 +2563,7 @@
 <translation id="3406290648907941085">ໄດ້ຮັບອະນຸຍາດໃຫ້ໃຊ້ອຸປະກອນເວີຊົວ ຣິອາລິຕີ ແລະ ຂໍ້ມູນ</translation>
 <translation id="3406396172897554194">ຊອກຫາຕາມພາສາ ຫຼື ຊື່ການປ້ອນຂໍ້ມູນ</translation>
 <translation id="3406605057700382950">ສະແດງແຖບບຸກມາກສ໌</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{ນຳເຂົ້າລະຫັດຜ່ານ 1 ລາຍການໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google ສຳລັບ <ph name="USER_EMAIL" /> ແລ້ວ}other{ນຳເຂົ້າລະຫັດຜ່ານ {NUM_PASSWORDS} ລາຍການໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google ສຳລັບ <ph name="USER_EMAIL" /> ແລ້ວ}}</translation>
 <translation id="3409785640040772790">ແຜນທີ່</translation>
 <translation id="3412265149091626468">ຂ້າມໄປຫາການເລືອກ</translation>
 <translation id="3413122095806433232">ຜູ້ອອກ CA: <ph name="LOCATION" /></translation>
@@ -3098,7 +3097,6 @@
 <translation id="389901847090970821">ເລືອກແປ້ນພິມ</translation>
 <translation id="3900966090527141178">ສົ່ງລະຫັດຜ່ານອອກ</translation>
 <translation id="3903187154317825986">ແປ້ນພິມໃນຕົວ</translation>
-<translation id="3903191712482985591">ເພີ່ມ Playbook</translation>
 <translation id="3904326018476041253">ການບໍລິການສະຖານທີ່</translation>
 <translation id="3904849010307028014">ໂດຍອ້າງອີງໃສ່ການໂຕ້ຕອບຂອງທ່ານກັບເວັບໄຊໃດໜຶ່ງ, ເຊັ່ນ: ການເຂົ້າສູ່ລະບົບຫາບັນຊີຕາມປົກກະຕິ, ເວັບໄຊນັ້ນສາມາດອອກໂທເຄນຄວາມເຊື່ອຖືໄປໃຫ້ໂປຣແກຣມທ່ອງເວັບຂອງທ່ານໄດ້. ໃນພາຍຫຼັງ, ຫາກເວັບໄຊອື່ນໆທີ່ທ່ານເຂົ້າເບິ່ງມີການກວດຫາ ແລະ ພົບໂທເຄນຄວາມເຊື່ອຖືທີ່ຖືກຕ້ອງ, ກໍມີໂອກາດທີ່ພວກມັນຈະປະຕິບັດກັບທ່ານວ່າເປັນຄົນ ແລະ ບໍ່ແມ່ນບັອດ.</translation>
 <translation id="3905761538810670789">ສ້ອມ​ແປງແອັບ</translation>
@@ -3750,6 +3748,7 @@
 <translation id="4541123282641193691">ບໍ່ສາມາດພິສູດຢືນຢັນບັນຊີຂອງທ່ານໄດ້. ກະລຸນາລອງອີກຄັ້ງ ຫຼື ເລີ່ມປິດເປີດ Chromebook ຂອງທ່ານຄືນໃໝ່.</translation>
 <translation id="4541662893742891060">ບໍ່ສາມາດເຊື່ອມຕໍ່ກັບໂປຣໄຟລ໌ນີ້ໄດ້. ສຳລັບການຊ່ວຍເຫຼືອດ້ານເທັກນິກ, ກະລຸນາຕິດຕໍ່ຜູ້ໃຫ້ບໍລິການຂອງທ່ານ.</translation>
 <translation id="4541706525461326392">ກຳລັງລຶບໂປຣໄຟລ໌ອອກ. ຂັ້ນຕອນນີ້ອາດໃຊ້ເວລາສອງສາມນາທີ.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{ນຳເຂົ້າລະຫັດຜ່ານ 1 ລາຍການໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google ຢູ່ອຸປະກອນນີ້ແລ້ວ}other{ນຳເຂົ້າລະຫັດຜ່ານ {NUM_PASSWORDS} ລາຍການໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google ຢູ່ອຸປະກອນນີ້ແລ້ວ}}</translation>
 <translation id="4542520061254486227">ອ່ານ​ຂໍ້​ມູນ​ຂອງ​ທ່ານ​ຢູ່​ເທິງ <ph name="WEBSITE_1" /> ແລະ <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">ຜູ້​ຈັດ​ການ​ໃບ​ຢັ້ງ​ຢືນ</translation>
 <translation id="4544174279960331769">ຮູບແທນຕົວສີຟ້າຕາມຄ່າເລີ່ມຕົ້ນ</translation>
@@ -5042,7 +5041,6 @@
 <translation id="5827733057563115968">​ການ​ຄາດ​ເດົາ​ຄຳ​ຕໍ່​ໄປ</translation>
 <translation id="5828545842856466741">ເພີ່ມໂປຣໄຟລ໌່...</translation>
 <translation id="5828633471261496623">ກໍາລັງພິມ...</translation>
-<translation id="5828797982387013521">ເລືອກຄູ່ມື</translation>
 <translation id="5830205393314753525">ບໍ່ສາມາດເປີດ <ph name="APP_NAME" /> ໄດ້</translation>
 <translation id="5830720307094128296">ບັນທຶກໜ້າເປັນ...</translation>
 <translation id="5832813618714645810">ໂປຣໄຟລ໌</translation>
@@ -5934,7 +5932,6 @@
 <translation id="6686665106869989887">ຍ້າຍແຖບໄປເບື້ອງຂວາແລ້ວ</translation>
 <translation id="6686817083349815241">ບັນທຶກລະຫັດຜ່ານຂອງທ່ານ</translation>
 <translation id="6687079240787935001">ເຊື່ອງ <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">ກຳລັງຮ້ອງຂໍເພື່ອອ່ານ ແລະ ປ່ຽນ <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">ຂໍ <ph name="SUPERVISED_USER_NAME" /> ໃຫ້ມາເບິ່ງຄອມພິວເຕີ. ລອງຂອງທ່ານຈະຕ້ອງອ່ານກຸ່ມຄຳສອງສາມຢ່າງຢູ່ໜ້າຈໍນີ້ເພື່ອສ້າງຮູບແບບສຽງຂອງເຂົາເຈົ້າ.
     <ph name="BR" />
     ຫາກ <ph name="SUPERVISED_USER_NAME" /> ຕ້ອງການຄວາມຊ່ວຍເຫຼືອໃນການອ່ານ, ໃຫ້ລູກຂອງທ່ານອ່ານຊ້ຳຫຼັງຈາກທ່ານ. ໃຫ້ເວົ້າຄ່ອຍໆຫ່າງຈາກໄມເພື່ອໃຫ້ຜູ້ຊ່ວຍສາມາດຮຽນຮູ້ສຽງຂອງລູກທ່ານແທນທີ່ຈະເປັນສຽງທ່ານ.</translation>
@@ -6236,6 +6233,7 @@
 <translation id="6968288415730398122">ປ້ອນລະຫັດຜ່ານຂອງທ່ານເພື່ອກຳນົດຄ່າການລັອກໜ້າຈໍ</translation>
 <translation id="6969047215179982698">ປິດການແບ່ງປັນໃກ້ຄຽງ</translation>
 <translation id="6970480684834282392">ປະ​ເພດເລີ່ມຕົ້ນ</translation>
+<translation id="6970543303783413625">ບໍ່ສາມາດນຳເຂົ້າລະຫັດຜ່ານໄດ້. ທ່ານສາມາດນຳເຂົ້າລະຫັດຜ່ານໄດ້ສູງສຸດເທື່ອລະ <ph name="COUNT" /> ລາຍການເທົ່ານັ້ນ.</translation>
 <translation id="6970856801391541997">ພິມ​ໜ້າສະ​ເພາະ</translation>
 <translation id="6970861306198150268">ກະລຸນາກວດສອບວ່າທ່ານກຳລັງບັນທຶກລະຫັດຜ່ານປັດຈຸບັນຂອງທ່ານສຳລັບເວັບໄຊນີ້</translation>
 <translation id="6972180789171089114">ສຽງ/ວິດີໂອ</translation>
@@ -6415,6 +6413,7 @@
 <translation id="7138678301420049075">ອື່ນໆ</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> ກຳລັງໃຊ້ໄມໂຄຣໂຟນຂອງທ່ານ</translation>
 <translation id="7141105143012495934">ລົງຊື່ເຂົ້າໃຊ້​ບໍ່​ສຳ​ເລັດ ເພາະ​ວ່າ​ບໍ່​ສາ​ມາດ​ກູ້​ຄືນ​ລາຍ​ລະ​ອຽດ​ບັນ​ຊີ​ຂອງ​ທ່ານ​ໄດ້. ກະ​ລຸ​ນາ​ຕິດ​ຕໍ່​ຜູ້ຄວບຄຸມຂອງທ່ານ ຫຼື ລອງໃໝ່ອີກ.</translation>
+<translation id="7141844554192012199">ການກວດສອບ</translation>
 <translation id="7144878232160441200">ລອງໃໝ່ອີກ</translation>
 <translation id="7149839598364933473">ປ່ຽນແປງອຸປະກອນນີ້ເປັນອຸປະກອນ <ph name="DEVICE_OS" />.</translation>
 <translation id="7149893636342594995">24 ຊົ່ວໂມງຜ່ານມາ</translation>
@@ -6467,6 +6466,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{ອອກຈາກໜ້າ}other{ອອກຈາກໜ້າ}}</translation>
 <translation id="7207457272187520234">ສົ່ງຂໍ້ມູນການນຳໃຊ້ ແລະ ການວິເຄາະ. ອຸປະກອນນີ້ກຳລັງສົ່ງຂໍ້ມູນການວິເຄາະ, ຂໍ້ມູນອຸປະກອນ ແລະ ການໃຊ້ແອັບໃຫ້ Google ໂດຍອັດຕະໂນມັດໃນຂະນະນີ້. ນີ້ຈະຊ່ວຍປັບປຸງຄວາມສະຖຽນຂອງລະບົບ ແລະ ແອັບ ແລະ ການປັບປຸງອື່ນໆ. ບາງຂໍ້ມູນແບບຮວມກັນຍັງຈະຊ່ວຍແອັບ ແລະ ຮຸ້ນສ່ວນຂອງ Google ນຳອີກ ເຊັ່ນ: ຜູ້ພັດທະນາ Android. ເຈົ້າຂອງບັງຄັບໃຊ້ການຕັ້ງຄ່ານີ້. ຖ້າເປີດການຕັ້ງຄ່າການເຄື່ອນໄຫວເວັບ ແລະ ແອັບເພີ່ມເຕີມຂອງທ່ານ, ລະບົບອາດຈະບັນທຶກຂໍ້ມູນນີ້ໄວ້ໃນບັນຊີ Google ຂອງທ່ານ.</translation>
 <translation id="7207631048330366454">ຊອກ​ຫາ​ແອັບ</translation>
+<translation id="7210471695184432500">ເພື່ອນຳເຂົ້າລະຫັດຜ່ານໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google ຢູ່ອຸປະກອນນີ້, ໃຫ້ເລືອກໄຟລ໌ CSV</translation>
 <translation id="7210499381659830293">ເຄື່ອງພິມຂອງສ່ວນຂະຫຍາຍ</translation>
 <translation id="7211783048245131419">ບໍ່ທັນກຳນົດປຸ່ມໃດເທື່ອ</translation>
 <translation id="7212097698621322584">ປ້ອນ PIN ປັດຈຸບັນຂອງທ່ານເພື່ອປ່ຽນມັນ. ຖ້າທ່ານບໍ່ຮູ້ຈັກ PIN ຂອງທ່ານ, ທ່ານຈະຈໍາເປັນຕ້ອງຣີເຊັດກະແຈຄວາມປອດໄພ, ແລ້ວສ້າງ PIN ໃໝ່.</translation>
@@ -7190,7 +7190,6 @@
 <translation id="7898725031477653577">ແປຢູ່ສະເໝີ</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">ກຳລັງຊອກຫາອົງປະກອບໂປຣແກຣມທ່ອງເວັບບໍ? ເຂົ້າເບິ່ງ</translation>
-<translation id="7903345046358933331">ໜ້າບໍ່ຕອບສະໜອງ. ທ່ານສາມາດລໍຖ້າມັນໃຫ້ຕອບສະໜອງ ຫຼື ປິດ​ມັນ​ໄດ້.</translation>
 <translation id="7903429136755645827">ຄລິກເພື່ອປັບແຕ່ງການຄວບຄຸມເກມຂອງທ່ານ</translation>
 <translation id="7903742244674067440">ທ່ານມີໃບຢັ້ງຢືນຢູ່ໃນໄຟລ໌ທີ່ລະບຸໜ່ວຍ​ງານ​ອອກໃບຢັ້ງຢືນເຫຼົ່ານີ້</translation>
 <translation id="7903925330883316394">ການ​ໃຊ້ປະ​ໂຫຍດ​: <ph name="UTILITY_TYPE" /></translation>
@@ -7525,6 +7524,7 @@
 <translation id="8206859287963243715">ເຊວລູລາ</translation>
 <translation id="8208216423136871611">ຢ່າບັນທຶກ</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{ການແຈ້ງເຕືອນໃໝ່}other{ການແຈ້ງເຕືອນໃໝ່ # ລາຍການ}}</translation>
+<translation id="821119981794423735">ເພື່ອນຳເຂົ້າລະຫັດຜ່ານໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google ສຳລັບ <ph name="USER_EMAIL" />, ໃຫ້ເລືອກໄຟລ໌ CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{ການດາວໂຫຼດພວມດຳເນີນຢູ່}other{ການດາວໂຫຼດພວມດຳເນີນຢູ່}}</translation>
 <translation id="8213449224684199188">ເຂົ້າໂໝດຮູບພາບແລ້ວ</translation>
 <translation id="8214489666383623925">ເປີດ​ໄຟລ​໌...</translation>
@@ -8103,6 +8103,7 @@
 <translation id="8780123805589053431">ຮັບລາຍລະອຽດຮູບພາບຈາກ Google</translation>
 <translation id="8780443667474968681">ປິດການຊອກຫາດ້ວຍສຽງແລ້ວ.</translation>
 <translation id="8781834595282316166">ແຖບໃໝ່ໃນກຸ່ມ</translation>
+<translation id="8781980678064919987">ປິດເຄື່ອງເມື່ອປິດຝາປິດ</translation>
 <translation id="8782565991310229362">ຍົກເລີກການເປີດແອັບພລິເຄຊັນ Kiosk ແລ້ວ.</translation>
 <translation id="8783834180813871000">ພິມລະຫັດການຈັບຄູ່ Bluetooth ຈາກນັ້ນກົດ Return ຫຼື Enter</translation>
 <translation id="8784626084144195648">ສະ​ເລ່ຍລົງຖັງແລ້ວ</translation>
@@ -8167,7 +8168,6 @@
 <translation id="8846132060409673887">ອ່ານການຜະລິດ ແລະ ຮຸ່ນຂອງຄອມພິວເຕີນີ້</translation>
 <translation id="8846163936679269230">ຣີເຊັດໂປຣໄຟລ໌ eSIM</translation>
 <translation id="8846239054091760429">ສຽງໂມໂນ, ສະຕາດອັບ, ຄຳບັນຍາຍສົດ ແລະ ອື່ນໆ</translation>
-<translation id="8847523528195140327">ອອກຈາກລະບົບເມື່ອປິດຝາ</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">ເຊື່ອງໄວ້</translation>
 <translation id="8849219423513870962">ຍົກເລີກການລຶບໂປຣໄຟລ໌ eSIM ຊື່ <ph name="PROFILE_NAME" /> ອອກ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index e5640d09..53c45d9 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -566,7 +566,6 @@
 <translation id="1536754031901697553">Atjungiama...</translation>
 <translation id="1537254971476575106">Viso ekrano didintuvas</translation>
 <translation id="15373452373711364">Didelis pelės žymeklis</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> prašo leidimo skaityti ir keisti <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Demonstracinio režimo įgalinimas</translation>
 <translation id="1541346352678737112">Nerasta jokių tinklų</translation>
 <translation id="1542137295869176367">Nepavyko atnaujinti prisijungimo duomenų</translation>
@@ -728,7 +727,6 @@
 <translation id="1676902103953506022">Išsamūs <ph name="USERNAME" /> prisijungimo duomenys <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Nepavyko pridėti <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Liko <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Užrakinti miego režimu arba uždarius dangtelį</translation>
 <translation id="1679068421605151609">Kūrėjo įrankiai</translation>
 <translation id="1679810534535368772">Ar tikrai norite išeiti?</translation>
 <translation id="167983332380191032">Tvarkymo paslauga išsiuntė HTTP klaidą.</translation>
@@ -864,7 +862,6 @@
 <translation id="1794051631868188691">Niekada nerodyti „<ph name="MERCHANT" />“</translation>
 <translation id="1794791083288629568">Atsiųskite atsiliepimų, kad padėtumėte mums išspręsti šią problemą.</translation>
 <translation id="1795214765651529549">Naudoti klasikinę</translation>
-<translation id="1796105431091975902">Norimo pridėti „Ansible“ vadovo pasirinkimas</translation>
 <translation id="1796588414813960292">Funkcijos, kurioms reikalingas garsas, neveiks</translation>
 <translation id="1797117170091578105">Žaiskite naudodami „Chromebook“ klaviatūrą. Galite tinkinti konkrečių veiksmų klavišus.</translation>
 <translation id="1800502858278951817">Jokie plėtiniai nepateikė <ph name="SITE_NAME" /> skaitymo ir keitimo užklausos</translation>
@@ -929,6 +926,7 @@
 <translation id="1842766183094193446">Ar tikrai norite įgalinti demonstracinį režimą?</translation>
 <translation id="1845727111305721124">Leidžiama leisti garsą</translation>
 <translation id="1846308012215045257">Spustelėkite „Ctrl“, kad paleistumėte „<ph name="PLUGIN_NAME" />“</translation>
+<translation id="1848219224579402567">Atsijungti, kai dangtis uždarytas</translation>
 <translation id="184862733444771842">Funkcijos užklausa</translation>
 <translation id="1849016657376805933">Bet kuris HID įrenginys</translation>
 <translation id="1849186935225320012">Šiame puslapyje visiškai valdomi MIDI įrenginiai.</translation>
@@ -1037,7 +1035,6 @@
 <translation id="1941553344801134989">Versija: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Rodyti klavišų schemą</translation>
 <translation id="1942128823046546853">Skaityti ir keisti visus jūsų duomenis visose svetainėse</translation>
-<translation id="1942600407708803723">Išjungti, kai dangtelis uždarytas</translation>
 <translation id="1944528062465413897">„Bluetooth“ susiejimo kodas:</translation>
 <translation id="1944921356641260203">Naujinys rastas</translation>
 <translation id="1947136734041527201">Leidžiama prisijungti prie svetainių naudojant tapatybės nustatymo paslaugos paskyrą</translation>
@@ -1729,6 +1726,7 @@
 <translation id="2568774940984945469">Informacinės juostos sudėtinis rodinys</translation>
 <translation id="2571655996835834626">Pakeisti nustatymus, pagal kuriuos tvarkoma svetainių prieiga prie funkcijų, pvz., slapukų, „JavaScript“, papildinių, geografinės vietovės, mikrofono, fotoaparato ir kt.</translation>
 <translation id="2572032849266859634">„<ph name="VOLUME_NAME" />“ suteiktas leidimas tik skaityti.</translation>
+<translation id="2573276323521243649">Grįžti iš pseudoportreto pasirinkimo puslapio</translation>
 <translation id="2573417407488272418">Prieš naujovindami sukurkite atsargines programų ir failų kopijas skiltyje „Failai“ &gt; „Mano failai“.</translation>
 <translation id="2573831315551295105">Veiksmo „<ph name="ACTION" />“ jungiklio priskyrimas</translation>
 <translation id="2575247648642144396">Ši piktograma bus matoma, kai plėtinys galės veikti dabartiniame puslapyje. Naudokite šį plėtinį spustelėję piktogramą arba paspaudę <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3103,7 +3101,6 @@
 <translation id="389901847090970821">Pasirinkti klaviatūrą</translation>
 <translation id="3900966090527141178">Eksportuokite slaptažodžius</translation>
 <translation id="3903187154317825986">Įtaisytoji klaviatūra</translation>
-<translation id="3903191712482985591">Vadovo pridėjimas</translation>
 <translation id="3904326018476041253">Vietovės paslaugos</translation>
 <translation id="3904849010307028014">Remiantis jūsų sąveika su svetaine, pvz., reguliariais prisijungimais prie paskyros, svetainė gali išduoti patikimą prieigos raktą jūsų naršyklei. Vėliau, jei kitos svetainės, kuriose lankotės, tikrins, ar nėra galiojančio patikimo prieigos rakto, ir jį ras, labiau tikėtina, kad jos jus laikys žmogumi, o ne robotu.</translation>
 <translation id="3905761538810670789">Pataisyti programą</translation>
@@ -5050,7 +5047,6 @@
 <translation id="5827733057563115968">Kito žodžio numatymas</translation>
 <translation id="5828545842856466741">Pridėti profilį...</translation>
 <translation id="5828633471261496623">Spausdinama...</translation>
-<translation id="5828797982387013521">Pasirinkti vadovą</translation>
 <translation id="5830205393314753525">Nepavyko atidaryti „<ph name="APP_NAME" />“</translation>
 <translation id="5830720307094128296">Išsaugoti puslapį &amp;kaip...</translation>
 <translation id="5832813618714645810">Profiliai</translation>
@@ -5948,7 +5944,6 @@
 <translation id="6686665106869989887">Skirtukas perkeltas dešinėn</translation>
 <translation id="6686817083349815241">Išsaugokite slaptažodį</translation>
 <translation id="6687079240787935001">Slėpti: <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Prašoma leidimo skaityti ir keisti <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Paprašykite, kad <ph name="SUPERVISED_USER_NAME" /> prieitų prie kompiuterio. Vaikas turės perskaityti kelias frazes šiame ekrane, kad būtų sukurtas balso modelis.
     <ph name="BR" />
     Jei <ph name="SUPERVISED_USER_NAME" /> reikia pagalbos skaitant, nurodykite vaikui kartoti, ką sakote. Šnabždėkite toliau nuo mikrofono, kad Padėjėjas girdėtų ne jūsų, o vaiko balsą.</translation>
@@ -6430,6 +6425,7 @@
 <translation id="7138678301420049075">Kitas</translation>
 <translation id="7139627972753429585">„<ph name="APP_NAME" />“ naudoja mikrofoną</translation>
 <translation id="7141105143012495934">Nepavyko prisijungti, nes negalima gauti išsamios paskyros informacijos. Susisiekite su administratoriumi arba bandykite dar kartą.</translation>
+<translation id="7141844554192012199">Patikra</translation>
 <translation id="7144878232160441200">Kartoti</translation>
 <translation id="7149839598364933473">Konvertuokite šį įrenginį į „<ph name="DEVICE_OS" />“ įrenginį.</translation>
 <translation id="7149893636342594995">Pastarosios 24 valandos</translation>
@@ -7207,7 +7203,6 @@
 <translation id="7898725031477653577">Visada versti</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Ieškote naršyklės komponentų? Apsilankykite adresu</translation>
-<translation id="7903345046358933331">Puslapis neatsako. Galite palaukti, kol atsakys, arba uždaryti.</translation>
 <translation id="7903429136755645827">Spustelėkite, jei norite tinkinti žaidimų valdiklius</translation>
 <translation id="7903742244674067440">Turite pateiktų sertifikatų, identifikuojančių šias sertifikatą išdavusias institucijas</translation>
 <translation id="7903925330883316394">Paslaugų programa: <ph name="UTILITY_TYPE" /></translation>
@@ -8125,6 +8120,7 @@
 <translation id="8780123805589053431">Gauti vaizdų aprašų iš „Google“</translation>
 <translation id="8780443667474968681">Paieška balsu išjungta.</translation>
 <translation id="8781834595282316166">Naujas skirtukas grupėje</translation>
+<translation id="8781980678064919987">Išjungti, kai dangtis uždarytas</translation>
 <translation id="8782565991310229362">Atšauktas viešojo terminalo programos paleidimas.</translation>
 <translation id="8783834180813871000">Įveskite „Bluetooth“ susiejimo kodą ir paspauskite „Return“ arba „Enter“.</translation>
 <translation id="8784626084144195648">Intervalo vidurkis</translation>
@@ -8189,7 +8185,6 @@
 <translation id="8846132060409673887">Skaityti šio kompiuterio gamintojo ir modelio informaciją</translation>
 <translation id="8846163936679269230">Nustatyti „eSIM“ kortelės profilius iš naujo</translation>
 <translation id="8846239054091760429">Monofoninis garsas, paleidimas, subtitrai realiuoju laiku ir daugiau</translation>
-<translation id="8847523528195140327">Atsijungti uždarius dangtelį</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Paslėpta</translation>
 <translation id="8849219423513870962">Atšaukti „eSIM“ kortelės profilio pavadinimu „<ph name="PROFILE_NAME" />“ pašalinimą</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index ee249b4..fd69ece 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -326,6 +326,7 @@
 <translation id="1307165550267142340">PIN ir izveidots</translation>
 <translation id="1307431692088049276">Turpmāk vairs nejautāt</translation>
 <translation id="1307559529304613120">Hmm... Sistēmai neizdevās saglabāt šīs ierīces ilgtermiņa API piekļuves pilnvaru.</translation>
+<translation id="1312811472299082263">Izveidot no Ansible skriptārija vai Crostini dublējuma faila</translation>
 <translation id="1313405956111467313">Automātiska starpniekservera konfigurācija</translation>
 <translation id="131364520783682672">Caps Lock</translation>
 <translation id="1313660246522271310">Jūs tiksiet izrakstīts no visām vietnēm, tostarp visās atvērtajās cilnēs.</translation>
@@ -562,7 +563,6 @@
 <translation id="1536754031901697553">Notiek atvienošana...</translation>
 <translation id="1537254971476575106">Pilnekrāna lupa</translation>
 <translation id="15373452373711364">Liels peles kursors</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> pieprasa atļauju lasīt un mainīt saturu vietnē <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Demonstrācijas režīma iespējošana</translation>
 <translation id="1541346352678737112">Tīkls netika atrasts</translation>
 <translation id="1542137295869176367">Nevarēja atjaunināt pierakstīšanās datus</translation>
@@ -724,7 +724,6 @@
 <translation id="1676902103953506022">Akreditācijas datu informācija lietotājam <ph name="USERNAME" /> domēnā <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Nevar pievienot: <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Atlikušais laiks: <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Bloķēšana miega režīmā vai aizverot vāku</translation>
 <translation id="1679068421605151609">Izstrādātāja rīki</translation>
 <translation id="1679810534535368772">Vai tiešām vēlaties iziet?</translation>
 <translation id="167983332380191032">No pārvaldības pakalpojuma tika nosūtīts kļūdains HTTP kods.</translation>
@@ -852,7 +851,6 @@
 <translation id="1794051631868188691">Nekad nerādīt <ph name="MERCHANT" /> informāciju</translation>
 <translation id="1794791083288629568">Sūtīt atsauksmes, lai palīdzētu novērst šo problēmu.</translation>
 <translation id="1795214765651529549">Izmantot klasisko motīvu</translation>
-<translation id="1796105431091975902">Atlasiet pievienojamo Ansible skriptāriju</translation>
 <translation id="1796588414813960292">Funkcijas, kurām nepieciešama skaņa, nedarbosies</translation>
 <translation id="1797117170091578105">Atskaņojiet saturu, izmantojot Chromebook datora tastatūru. Varat pielāgot taustiņus konkrētām darbībām.</translation>
 <translation id="1800502858278951817">Neviens paplašinājums nav pieprasījis lasīt un mainīt vietnes <ph name="SITE_NAME" /> datus</translation>
@@ -890,6 +888,7 @@
 <translation id="1822140782238030981">Vai esat Chrome lietotājs? Pierakstieties!</translation>
 <translation id="1823098433522728610">Šajā dokumentā ir sensitīvs saturs.</translation>
 <translation id="18245044880483936">Dublētie dati netiks ieskaitīti jūsu bērna Diska krātuves kvotā.</translation>
+<translation id="1825320185978744007">Bloķēšana miega režīmā vai kad vāks ir aizvērts</translation>
 <translation id="1825565032302550710">Porta numuram jābūt starp 1024 un 65535</translation>
 <translation id="182577151972096764">nesen skatītās receptes</translation>
 <translation id="18260074040409954">Varat izmantot saglabātās paroles jebkurā ierīcē. Tās ir saglabātas sadaļā <ph name="GOOGLE_PASSWORD_MANAGER" /> kontā <ph name="EMAIL" />.</translation>
@@ -917,6 +916,7 @@
 <translation id="1842766183094193446">Vai tiešām vēlaties iespējot demonstrācijas režīmu?</translation>
 <translation id="1845727111305721124">Drīkst atskaņot skaņu</translation>
 <translation id="1846308012215045257">Lai palaistu spraudni <ph name="PLUGIN_NAME" />, nospiediet taustiņu Ctrl un noklikšķiniet</translation>
+<translation id="1848219224579402567">Izrakstīties, kad vāks tiek aizvērts</translation>
 <translation id="184862733444771842">Funkcijas pieprasījums</translation>
 <translation id="1849016657376805933">Jebkura HID ierīce</translation>
 <translation id="1849186935225320012">Šai lapai ir pieejama MIDI ierīču pilnīga pārvaldība.</translation>
@@ -1024,7 +1024,6 @@
 <translation id="1941553344801134989">Versija: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Rādīt taustiņu saistīšanu</translation>
 <translation id="1942128823046546853">Lasīt un mainīt visus jūsu datus visās vietnēs</translation>
-<translation id="1942600407708803723">Izslēgt ierīci, aizverot vāku</translation>
 <translation id="1944528062465413897">Bluetooth kods savienošanai pārī:</translation>
 <translation id="1944921356641260203">Atrasts atjauninātājs</translation>
 <translation id="1947136734041527201">Ļauj jums pierakstīties vietnēs, izmantojot kontu, kuram darbojas identitātes pakalpojums.</translation>
@@ -1102,6 +1101,7 @@
 <translation id="2028449514182362831">Funkcijas, kurām nepieciešama piekļuve kustību sensoriem, nedarbosies</translation>
 <translation id="202918510990975568">Ievadiet paroli, lai konfigurētu drošību un pierakstīšanos.</translation>
 <translation id="2030455719695904263">Skārienpaliktnis</translation>
+<translation id="2031385797619033640">Noklikšķiniet, lai atļautu paplašinājumiem <ph name="EXTENSIONS_REQUESTING_ACCESS" /> lasīt un mainīt saturu vietnē <ph name="ORIGIN" />:</translation>
 <translation id="2031639749079821948">Parole ir saglabāta Google kontā</translation>
 <translation id="2031914984822377766">Pievienojiet vēlamās <ph name="LINK_BEGIN" />vietņu valodas<ph name="LINK_END" />. Saraksta augšējā valoda tiks izmantota tulkojumiem.</translation>
 <translation id="2033758234986231162">Nevar uzturēt savienojumu ar jūsu tālruni. Tālrunim ir jāatrodas tuvumā, tam jābūt atbloķētam, un tajā ir jābūt ieslēgtam Bluetooth un Wi-Fi savienojumam.</translation>
@@ -1458,6 +1458,7 @@
 <translation id="2328561734797404498">Lai varētu izmantot lietotni <ph name="APP_NAME" />, restartējiet ierīci.</translation>
 <translation id="2328636661627946415">Ja izmantojat inkognito režīmu, vietne drīkst lietot sīkfailus, lai skatītu jūsu pārlūkošanas darbības šajā vietnē, bet ne ārpus tās. Pabeidzot inkognito sesiju, sīkfaili tiek dzēsti.</translation>
 <translation id="2329597144923131178">Pierakstieties, lai grāmatzīmes, vēsture, paroles u.c. būtu pieejamas visās jūsu ierīcēs.</translation>
+<translation id="2332115969598251205">Nevar ielādēt kontā <ph name="PRIMARY_EMAIL" /> saglabātās ierīces. Pārbaudiet interneta savienojumu un mēģiniet vēlreiz.</translation>
 <translation id="2332131598580221120">Skatīt veikalā</translation>
 <translation id="2332192922827071008">Atvērt preferences</translation>
 <translation id="2332515770639153015">Droša pārlūkošana ar papildu aizsardzību ir ieslēgta</translation>
@@ -1900,6 +1901,7 @@
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Pārbaudīt gramatiku un pareizrakstību</translation>
 <translation id="2753677631968972007">Manuāli kontrolēt vietņu atļaujas.</translation>
+<translation id="2754226775788136540">Tiek meklētas kontā <ph name="PRIMARY_EMAIL" /> saglabātās ātrās savienošanas pārī ierīces.</translation>
 <translation id="2754825024506485820">Google Play veikalā varat atrast nepieciešamās lietotnes — sākot no produktivitātes un beidzot ar izklaidi. Varat instalēt lietotnes jebkurā brīdī.</translation>
 <translation id="2755349111255270002">Atiestatiet šo <ph name="DEVICE_TYPE" /> ierīci</translation>
 <translation id="2755367719610958252">Pārvaldīt pieejamības funkcijas</translation>
@@ -2115,6 +2117,7 @@
 <translation id="2942279350258725020">Android ziņojumi</translation>
 <translation id="2942560570858569904">Notiek gaidīšana...</translation>
 <translation id="2942581856830209953">Pielāgot šo lapu</translation>
+<translation id="2943268899142471972">Atlasiet Ansible sktiptāriju vai Crostini dublējuma failu</translation>
 <translation id="2944060181911631861">Lietojuma un diagnostikas datu sūtīšana. Palīdziet uzlabot Android lietošanas pieredzi, automātiski nosūtot diagnostikas, ierīces un lietotņu lietojuma datus uzņēmumam Google. Šī informācija palīdzēs uzlabot sistēmas un lietotņu stabilitāti un daudz ko citu. Noteiktus apkopotus datus izmantos arī Google lietotņu izstrādātāji un partneri, piemēram, Android izstrādātāji. Ja ir ieslēgts papildu iestatījums “Darbības tīmeklī un lietotnēs”, šie dati var tikt saglabāti jūsu Google kontā. <ph name="BEGIN_LINK1" />Uzzināt vairāk<ph name="END_LINK1" /></translation>
 <translation id="2946054015403765210">Pāriet uz failiem</translation>
 <translation id="2946119680249604491">Pievienot savienojumu</translation>
@@ -2955,6 +2958,7 @@
 <translation id="3784472333786002075">Sīkfaili ir faili, ko izveido vietnes. Ir divu veidu sīkfaili. Pirmās puses sīkfailus izveido jūsu apmeklētā vietne. Šī vietne ir redzama adreses joslā. Trešo pušu sīkfailus izveido citas vietnes. Jūsu apmeklētajā vietnē var būt ietverts citu vietņu saturs, piemēram, reklāmas vai attēli.</translation>
 <translation id="3785308913036335955">Rādīt lietotņu saīsnes</translation>
 <translation id="3785727820640310185">Saglabātās paroles šai vietnei</translation>
+<translation id="3787434344076711519">Tiek gaidīts tulkojums</translation>
 <translation id="3788301286821743879">Diemžēl kioska lietojumprogrammu nevarēja palaist.</translation>
 <translation id="3788331399335602504">šos failus</translation>
 <translation id="3788401245189148511">Varētu:</translation>
@@ -3087,7 +3091,6 @@
 <translation id="389901847090970821">Tastatūras atlasīšana</translation>
 <translation id="3900966090527141178">Paroļu eksportēšana</translation>
 <translation id="3903187154317825986">Iebūvētā tastatūra</translation>
-<translation id="3903191712482985591">Pievienojiet skriptāriju</translation>
 <translation id="3904326018476041253">Atrašanās vietu pakalpojumi</translation>
 <translation id="3904849010307028014">Ņemot vērā jūsu mijiedarbību ar vietni, piemēram, regulāru pierakstīšanos kontā, attiecīgā vietne var izsniegt pārlūkam uzticamības marķieri. Pēc tam, ja citās jūsu apmeklētajās vietnēs tiks meklēts un atrasts jūsu derīgais uzticamības marķieris, palielināsies iespēja, ka šajās vietnēs pret jums izturēsies kā pret cilvēku, nevis robotu.</translation>
 <translation id="3905761538810670789">Lietotnes labošana</translation>
@@ -3238,6 +3241,7 @@
 <translation id="4036778507053569103">No servera lejupielādētā politika nav derīga.</translation>
 <translation id="4037084878352560732">Zirgs</translation>
 <translation id="403725336528835653">Vispirms izmēģināt</translation>
+<translation id="4040041015953651705">Valoda, no kuras tulkot</translation>
 <translation id="4040105702484676956">Vai notīrīt vietnes <ph name="SITE_NAME" /> datus, atļaujas un instalēto lietotni?</translation>
 <translation id="4042863763121826131">{NUM_PAGES,plural, =1{Iziet no lapas}zero{Iziet no lapām}one{Iziet no lapām}other{Iziet no lapām}}</translation>
 <translation id="4043267180218562935">Kursora lielums</translation>
@@ -4043,6 +4047,7 @@
 <translation id="4838170306476614339">Skatiet tālruņa fotoattēlus, multivides saturu un paziņojumus.</translation>
 <translation id="4838836835474292213">Atļauta piekļuve starpliktuves satura lasīšanai</translation>
 <translation id="4838907349371614303">Parole ir atjaunināta</translation>
+<translation id="4838958829619609362">Atlase nav šādā valodā: <ph name="LANGUAGE" /></translation>
 <translation id="4839303808932127586">Saglabāt &amp;video kā</translation>
 <translation id="4840096453115567876">Vai tomēr iziet no inkognito režīma?</translation>
 <translation id="4841741146571978176">Obligātā virtuālā mašīna nepastāv. Lai turpinātu, mēģiniet iestatīt <ph name="VM_TYPE" />.</translation>
@@ -4811,6 +4816,7 @@
 <translation id="558918721941304263">Notiek lietotņu ielāde...</translation>
 <translation id="5590418976913374224">Atskaņot signālu ierīces palaišanas laikā</translation>
 <translation id="5592595402373377407">Vēl nav pieejams pietiekami daudz datu.</translation>
+<translation id="5594899180331219722">Atlasīt failu</translation>
 <translation id="5595307023264033512">Kopējais krātuves apjoms, ko izmanto vietnes: <ph name="TOTAL_USAGE" /></translation>
 <translation id="5595485650161345191">Rediģēt adresi</translation>
 <translation id="5596627076506792578">Citas opcijas</translation>
@@ -5030,7 +5036,6 @@
 <translation id="5827733057563115968">Nākamā vārda paredzēšana</translation>
 <translation id="5828545842856466741">Pievienot profilu...</translation>
 <translation id="5828633471261496623">Notiek drukāšana...</translation>
-<translation id="5828797982387013521">Atlasīt rokasgrāmatu</translation>
 <translation id="5830205393314753525">Nevar atvērt lietotni <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">S&amp;aglabāt lapu kā...</translation>
 <translation id="5832813618714645810">Profili</translation>
@@ -5042,6 +5047,7 @@
 <translation id="5834581999798853053">Atlikušas apmēram <ph name="TIME" /> minūtes</translation>
 <translation id="5835486486592033703"><ph name="WINDOW_TITLE" /> — ierakstīšana ar kameru vai mikrofonu</translation>
 <translation id="583673505367439042">Atļaut vietnēm pieprasīt atļauju rediģēt failus un mapes jūsu ierīcē</translation>
+<translation id="5836999627049108525">Valoda, no kuras tulkot</translation>
 <translation id="583756221537636748">Futrālis</translation>
 <translation id="5840658767386246331">Meklēt, izmantojot Google</translation>
 <translation id="5840680448799937675">Faili vienmēr tiks kopīgoti bezsaistē.</translation>
@@ -5549,6 +5555,7 @@
 <translation id="6318944945640833942">Nevarēja noteikt printeri. Lūdzu, vēlreiz ievadiet printera adresi.</translation>
 <translation id="6322370287306604163">Ātrāka atbloķēšana, izmantojot pirksta nospiedumu</translation>
 <translation id="6322559670748154781">Šis fails parasti netiek lejupielādēts un ir bloķēts saskaņā ar iestatījumu “Papildu aizsardzība”.</translation>
+<translation id="6324083483652497048">Noklikšķiniet, lai atļautu šiem paplašinājumiem lasīt un mainīt saturu vietnē <ph name="ORIGIN" />:</translation>
 <translation id="6324916366299863871">Saīsnes rediģēšana</translation>
 <translation id="6325191661371220117">Atspējot automātisko palaišanu</translation>
 <translation id="6326175484149238433">Noņemt no pārlūka Chrome</translation>
@@ -5925,7 +5932,6 @@
 <translation id="6686665106869989887">Cilne tika pārvietota pa labi</translation>
 <translation id="6686817083349815241">Saglabājiet savu paroli</translation>
 <translation id="6687079240787935001">Paslēpt moduli “<ph name="MODULE_TITLE" />”</translation>
-<translation id="6688391094668641513">Tiek pieprasīta atļauja lasīt un mainīt saturu vietnē <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Pieaiciniet lietotāju <ph name="SUPERVISED_USER_NAME" /> pie datora. Lai izveidotu balss modeli, bērnam būs jānolasa dažas ekrānā redzamās frāzes.
     <ph name="BR" />
     Ja lietotājs <ph name="SUPERVISED_USER_NAME" /> nevar patstāvīgi nolasīt frāzes, nolasiet katru frāzi un lieciet bērnam atkārtot. Nolasiet frāzes čukstus, novēršoties no mikrofona, lai Asistents uztvertu bērna balsi, nevis jūsu.</translation>
@@ -6583,6 +6589,7 @@
 <translation id="7343372807593926528">Pirms atsauksmes nosūtīšanas aprakstiet problēmu.</translation>
 <translation id="7344585835349671209">Pārvaldiet HTTPS/SSL sertifikātus savā ierīcē</translation>
 <translation id="7345706641791090287">Apstipriniet savu paroli</translation>
+<translation id="7345919885156673810">Atlase nav šādā valodā: <ph name="LANGUAGE" /></translation>
 <translation id="7346909386216857016">Labi, sapratu</translation>
 <translation id="7347452120014970266">Tādējādi tiks notīrīti visi vietnes <ph name="ORIGIN_NAME" /> un tās instalēto lietotņu saglabātie dati un sīkfaili.</translation>
 <translation id="7347751611463936647">Lai izmantotu šo paplašinājumu, ierakstiet <ph name="EXTENSION_KEYWORD" />, pēc tam TAB un komandu vai meklēšanas vaicājumu.</translation>
@@ -7183,7 +7190,6 @@
 <translation id="7898725031477653577">Vienmēr tulkot</translation>
 <translation id="7901405293566323524">Tālruņu centrāle</translation>
 <translation id="7903290522161827520">Vai meklējat pārlūka komponentus? Apmeklējiet vietni</translation>
-<translation id="7903345046358933331">Lapa vairs nereaģē. Varat uzgaidīt, līdz tā atsāks reaģēt, vai aizvērt to.</translation>
 <translation id="7903429136755645827">Noklikšķiniet, lai pielāgotu spēļu vadīklas.</translation>
 <translation id="7903742244674067440">Sistēmā ir sertifikāti, kas identificē šīs sertifikātu izdevējiestādes</translation>
 <translation id="7903925330883316394">Utilīta: <ph name="UTILITY_TYPE" /></translation>
@@ -8100,6 +8106,7 @@
 <translation id="8780123805589053431">Iegūt attēlu aprakstus no Google</translation>
 <translation id="8780443667474968681">Meklēšana ar balsi ir izslēgta.</translation>
 <translation id="8781834595282316166">Jauna cilne grupā</translation>
+<translation id="8781980678064919987">Izslēgt, kad vāks tiek aizvērts</translation>
 <translation id="8782565991310229362">Kioska lietojumprogrammas palaišana tika atcelta.</translation>
 <translation id="8783834180813871000">Ierakstiet kodu Bluetooth savienošanai pārī un pēc tam nospiediet ievadīšanas taustiņu.</translation>
 <translation id="8784626084144195648">Apkopotais vidējais</translation>
@@ -8164,7 +8171,6 @@
 <translation id="8846132060409673887">Nolasīt šī datora ražotāju un modeli</translation>
 <translation id="8846163936679269230">eSIM profilu atiestatīšana</translation>
 <translation id="8846239054091760429">Mono audio, startēšana, subtitri reāllaikā u.c.</translation>
-<translation id="8847523528195140327">Izrakstīties, aizverot vāku</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Paslēpta</translation>
 <translation id="8849219423513870962">Atcelt šī eSIM profila noņemšanu: <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb
index 019c213..cdd54cbb 100644
--- a/chrome/app/resources/generated_resources_mk.xtb
+++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -278,6 +278,7 @@
 <translation id="125220115284141797">Стандардни</translation>
 <translation id="1252987234827889034">Се појави грешка на профилот</translation>
 <translation id="1254593899333212300">Директна интернет-врска</translation>
+<translation id="1257336506558170607">Извезете го избраниот сертификат</translation>
 <translation id="1258491128795710625">Што има ново</translation>
 <translation id="1259152067760398571">Безбедносната проверка беше извршена вчера</translation>
 <translation id="1260451001046713751">Секогаш дозволувај скокачки прозорци и пренасочувања од <ph name="HOST" /></translation>
@@ -327,6 +328,7 @@
 <translation id="1307165550267142340">Вашиот PIN е создаден</translation>
 <translation id="1307431692088049276">Не прашувај ме повторно</translation>
 <translation id="1307559529304613120">Ах! Системот не успеа да го складира пристапниот токен на долгорочниот АПИ за уредот.</translation>
+<translation id="1312811472299082263">Создајте од упатства Ansible или бекап датотека Crostini</translation>
 <translation id="1313405956111467313">Автоматска конфигурација на прокси</translation>
 <translation id="131364520783682672">Големи букви</translation>
 <translation id="1313660246522271310">Ќе ве одјавиме од сите сајтови, вклучително и од отворените картички</translation>
@@ -564,7 +566,6 @@
 <translation id="1536754031901697553">Се исклучува…</translation>
 <translation id="1537254971476575106">Лупа за цел екран</translation>
 <translation id="15373452373711364">Голем покажувач на глувчето</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> бара да се прочита и промени <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Демо-режим</translation>
 <translation id="1541346352678737112">Не е најдена мрежа</translation>
 <translation id="1542137295869176367">Не може да се ажурираат податоците за најавување</translation>
@@ -726,7 +727,6 @@
 <translation id="1676902103953506022">Детали за акредитивите за <ph name="USERNAME" /> на <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Не може да се додаде <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Уште <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Заклучувај во режим во мирување или кога капакот е затворен</translation>
 <translation id="1679068421605151609">Програмерски алатки</translation>
 <translation id="1679810534535368772">Дали сте сигурни дека сакате да излезете?</translation>
 <translation id="167983332380191032">Услугата за управување испрати HTTP-грешка.</translation>
@@ -862,7 +862,6 @@
 <translation id="1794051631868188691">Никогаш не прикажувај ја кошничката на <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Испратете повратни информации за да ни помогнете да го решиме проблемов.</translation>
 <translation id="1795214765651529549">Користи „Класичен“</translation>
-<translation id="1796105431091975902">Изберете Ansible Playbook за да се додаде</translation>
 <translation id="1796588414813960292">Функциите на коишто им требаат звуци нема да работат</translation>
 <translation id="1797117170091578105">Играјте со вашата тастатура Chromebook. Можете да ги приспособите копчињата на конкретни дејства.</translation>
 <translation id="1800502858278951817">Ниту една екстензија не побарала да го чита или измени <ph name="SITE_NAME" /></translation>
@@ -900,6 +899,7 @@
 <translation id="1822140782238030981">Веќе сте корисник на Chrome? Најавете се</translation>
 <translation id="1823098433522728610">Документов содржи чувствителни содржини.</translation>
 <translation id="18245044880483936">Податоците од бекапот нема да се вбројуваат во квотата за простор на Drive на вашето дете.</translation>
+<translation id="1825320185978744007">Заклучи при спиење или кога капакот е затворен</translation>
 <translation id="1825565032302550710">Портата мора да биде помеѓу 1024 и 65535</translation>
 <translation id="182577151972096764">неодамна прегледани рецепти</translation>
 <translation id="18260074040409954">Зачуваните лозинки може да ги користите на кој било уред. Тие се зачувуваат во <ph name="GOOGLE_PASSWORD_MANAGER" /> за <ph name="EMAIL" />.</translation>
@@ -927,6 +927,7 @@
 <translation id="1842766183094193446">Дали сигурно сакате да овозможите демо-режим?</translation>
 <translation id="1845727111305721124">Дозволено им е да пуштаат звук</translation>
 <translation id="1846308012215045257">Контролен клик за да го извршите приклучокот <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Одјави се кога капакот е затворен</translation>
 <translation id="184862733444771842">Барање за функција</translation>
 <translation id="1849016657376805933">Кој било HID-уред</translation>
 <translation id="1849186935225320012">Страницата има целосна контрола над MIDI-уреди.</translation>
@@ -1035,7 +1036,6 @@
 <translation id="1941553344801134989">Верзија: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Прикажете го мапирањето копчиња</translation>
 <translation id="1942128823046546853">да ги чита и менува ги сите ваши податоци на сите веб-сајтови</translation>
-<translation id="1942600407708803723">Исклучи кога капакот е затворен</translation>
 <translation id="1944528062465413897">Код за спарување преку Bluetooth:</translation>
 <translation id="1944921356641260203">Најдено е ажурирање</translation>
 <translation id="1947136734041527201">Ви овозможува да се најавувате на веб-сајтови со сметката што ја имате на услугата за идентификација</translation>
@@ -1113,6 +1113,7 @@
 <translation id="2028449514182362831">Функциите на коишто им требаат сензорите за движење нема да работат</translation>
 <translation id="202918510990975568">Внесете ја лозинката за да ги конфигурирате безбедноста и најавувањето</translation>
 <translation id="2030455719695904263">Подлога на допир</translation>
+<translation id="2031385797619033640">Кликнете за да се дозволи <ph name="EXTENSIONS_REQUESTING_ACCESS" /> да го чита или менува <ph name="ORIGIN" />:</translation>
 <translation id="2031639749079821948">Вашата лозинка е зачувана во сметката на Google</translation>
 <translation id="2031914984822377766">Додајте ги претпочитаните <ph name="LINK_BEGIN" />јазици за веб-сајтови<ph name="LINK_END" />. Првиот јазик на списокот ќе се користи за преводи.</translation>
 <translation id="2033758234986231162">Не може да се одржи врска со телефонот. Проверете дали телефонот е во близина и отклучен и дали се вклучени Bluetooth и Wi-Fi.</translation>
@@ -1472,6 +1473,7 @@
 <translation id="2328561734797404498">Рестартирајте го уредот за да го користите <ph name="APP_NAME" />.</translation>
 <translation id="2328636661627946415">Кога сте во режимот „Инкогнито“, сајтовите може да користат колачиња само за да ја гледаат вашата активност од прелистувањето на нивниот сајт. Колачињата се бришат на крајот на сесијата во „Инкогнито“.</translation>
 <translation id="2329597144923131178">Најавете се за да ги добиете обележувачите, историјата, лозинките и другите поставки на сите ваши уреди.</translation>
+<translation id="2332115969598251205">Не може да се вчитаат уредите зачувани на <ph name="PRIMARY_EMAIL" />. Проверете ја интернет-врската и обидете се повторно.</translation>
 <translation id="2332131598580221120">Прикажи во продавница</translation>
 <translation id="2332192922827071008">Отвори ги „Поставките“</translation>
 <translation id="2332515770639153015">„Подобреното безбедно прелистување“ е вклучено</translation>
@@ -1915,6 +1917,7 @@
 <translation id="2749836841884031656">SIM</translation>
 <translation id="2749881179542288782">Провери граматика со правопис</translation>
 <translation id="2753677631968972007">Рачно контролирајте ги дозволите за сајтовите.</translation>
+<translation id="2754226775788136540">Се бараат уреди со „Брзо спарување“ зачувани на <ph name="PRIMARY_EMAIL" /></translation>
 <translation id="2754825024506485820">Најдете ги потребните апликации на Google Play Store, од апликации за продуктивност до апликации за забава. Можете да инсталирате апликации во секое време.</translation>
 <translation id="2755349111255270002">Ресетирајте го овој <ph name="DEVICE_TYPE" /></translation>
 <translation id="2755367719610958252">Управувајте со функциите за пристапност</translation>
@@ -2130,6 +2133,7 @@
 <translation id="2942279350258725020">Пораки на Android</translation>
 <translation id="2942560570858569904">Се чека…</translation>
 <translation id="2942581856830209953">Приспособете ја страницава</translation>
+<translation id="2943268899142471972">Изберете упатства Ansible или бекап датотека Crostini</translation>
 <translation id="2944060181911631861">Испраќајте податоци за користење и дијагностика. Помогнете ни да го подобриме вашето доживување со Android со автоматско испраќање дијагностички и податоци за користењето на уредот и апликациите до Google. Овие податоци ќе ни помогнат околу стабилноста на системот и апликациите и за други подобрувања. Некои збирни податоци ќе им помогнат на апликациите и партнерите на Google, како што се програмерите на Android. Ако сте ја вклучиле дополнителната поставка „Активност на интернет и апликации“, овие податоци може да се зачувуваат во вашата сметка на Google. <ph name="BEGIN_LINK1" />Дознајте повеќе<ph name="END_LINK1" /></translation>
 <translation id="2946054015403765210">Оди на датотеките</translation>
 <translation id="2946119680249604491">Додај врска</translation>
@@ -2568,6 +2572,7 @@
 <translation id="3406290648907941085">Дозволено им е да ги користат податоците и уредите со виртуелна реалност</translation>
 <translation id="3406396172897554194">Пребарувајте по јазик или по име на методот за внесување</translation>
 <translation id="3406605057700382950">&amp;Покажи лента со обележувачи</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 лозинка е увезена на Google Password Manager за <ph name="USER_EMAIL" />}one{{NUM_PASSWORDS} лозинка се увезени на Google Password Manager за <ph name="USER_EMAIL" />}other{{NUM_PASSWORDS} лозинки се увезени на Google Password Manager за <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Карти</translation>
 <translation id="3412265149091626468">Скокни до Избор</translation>
 <translation id="3413122095806433232">Издавачи на ЦА: <ph name="LOCATION" /></translation>
@@ -2969,6 +2974,7 @@
 <translation id="3784472333786002075">Колачињата се датотеки што ги создаваат веб-сајтовите. Има два типа колачиња: првиот тип колачиња ги создава сајтот што го посетувате. Сајтот се прикажува во лентата за адреси. Вториот тип колачиња ги создаваат други сајтови. Овие сајтови се сопственици на дел од содржините, како рекламите или сликите што ги гледате на веб-сајтот што го посетувате.</translation>
 <translation id="3785308913036335955">Покажи кратенка за Апликации</translation>
 <translation id="3785727820640310185">Зачувани лозинки за сајтов</translation>
+<translation id="3787434344076711519">Се чека превод</translation>
 <translation id="3788301286821743879">Апликацијата Kiosk не може да се стартува.</translation>
 <translation id="3788331399335602504">овие датотеки</translation>
 <translation id="3788401245189148511">Може да:</translation>
@@ -3101,7 +3107,6 @@
 <translation id="389901847090970821">Изберете тастатура</translation>
 <translation id="3900966090527141178">Извезување лозинки</translation>
 <translation id="3903187154317825986">Вградена тастатура</translation>
-<translation id="3903191712482985591">Додајте Playbook</translation>
 <translation id="3904326018476041253">Услуги според локација</translation>
 <translation id="3904849010307028014">Според вашата интеракција со некој сајт, како што е редовното најавување на сметка, тој сајт може да му издаде токен за доверба на вашиот прелистувач. Подоцна, ако другите сајтови што ги посетувате проверат и пронајдат важечки токен за доверба, поверојатно е дека ќе ве третираат како човек, а не како бот.</translation>
 <translation id="3905761538810670789">Поправи ја апликацијата</translation>
@@ -3252,6 +3257,7 @@
 <translation id="4036778507053569103">Правилото преземено од серверот е неважечко.</translation>
 <translation id="4037084878352560732">Коњ</translation>
 <translation id="403725336528835653">Прво испробајте</translation>
+<translation id="4040041015953651705">Јазик од кој треба да се преведе</translation>
 <translation id="4040105702484676956">Да се избришат податоците и дозволите од сајтот за <ph name="SITE_NAME" /> и неговите инсталирани апликации?</translation>
 <translation id="4042863763121826131">{NUM_PAGES,plural, =1{Излези од страницата}one{Излези од страниците}other{Излези од страниците}}</translation>
 <translation id="4043267180218562935">Големина на курсорот</translation>
@@ -3753,6 +3759,7 @@
 <translation id="4541123282641193691">Вашата сметка не може да се потврди. Обидете се повторно или рестартирајте го вашиот Chromebook.</translation>
 <translation id="4541662893742891060">Не може да се поврзе со профилов. За техничка поддршка, контактирајте со операторот.</translation>
 <translation id="4541706525461326392">Се отстранува профилот. Може да потрае неколку минути.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 лозинка е увезена на Google Password Manager на уредов}one{{NUM_PASSWORDS} лозинка се увезени на Google Password Manager на уредов}other{{NUM_PASSWORDS} лозинки се увезени на Google Password Manager на уредов}}</translation>
 <translation id="4542520061254486227">Читајте ги вашите податоци на <ph name="WEBSITE_1" /> и <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Управник со сертификати</translation>
 <translation id="4544174279960331769">Стандарден син аватар</translation>
@@ -4057,6 +4064,7 @@
 <translation id="4838170306476614339">Прегледувајте ги фотографиите, аудиовизуелните содржини и известувањата од телефонот</translation>
 <translation id="4838836835474292213">Дозволен е пристапот за читање на привремената меморија</translation>
 <translation id="4838907349371614303">Лозинката е ажурирана</translation>
+<translation id="4838958829619609362">Не е избран <ph name="LANGUAGE" /></translation>
 <translation id="4839303808932127586">За&amp;чувај видео како...</translation>
 <translation id="4840096453115567876">Сепак да се излезе од режимот „Инкогнито“?</translation>
 <translation id="4841741146571978176">Бараната виртуелна машина не постои. Поставете <ph name="VM_TYPE" /> за да продолжите</translation>
@@ -4825,6 +4833,7 @@
 <translation id="558918721941304263">Вчитување апликации…</translation>
 <translation id="5590418976913374224">Пуштај звук при стартување на уредот</translation>
 <translation id="5592595402373377407">Уште нема доволно достапни податоци.</translation>
+<translation id="5594899180331219722">Изберете датотека</translation>
 <translation id="5595307023264033512">Вкупен капацитет искористен од сајтовите: <ph name="TOTAL_USAGE" /></translation>
 <translation id="5595485650161345191">Измени адреса</translation>
 <translation id="5596627076506792578">Повеќе опции</translation>
@@ -5046,7 +5055,6 @@
 <translation id="5827733057563115968">Предвидување следен збор</translation>
 <translation id="5828545842856466741">Додајте профил…</translation>
 <translation id="5828633471261496623">Се печати…</translation>
-<translation id="5828797982387013521">Избери упатства</translation>
 <translation id="5830205393314753525">Не може да се отвори <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Зачувај страница &amp;како...</translation>
 <translation id="5832813618714645810">Профили</translation>
@@ -5058,6 +5066,7 @@
 <translation id="5834581999798853053">Преостануваат околу <ph name="TIME" /> минути</translation>
 <translation id="5835486486592033703"><ph name="WINDOW_TITLE" /> - камерата или микрофонот снима</translation>
 <translation id="583673505367439042">Сајтовите може да прашуваат за да ги изменуваат датотеките и папките на уредот</translation>
+<translation id="5836999627049108525">Јазик од кој треба да се преведе</translation>
 <translation id="583756221537636748">Футрола за полнење</translation>
 <translation id="5840658767386246331">Пребарувајте со Google</translation>
 <translation id="5840680448799937675">Датотеките секогаш ќе се споделуваат офлајн</translation>
@@ -5566,6 +5575,7 @@
 <translation id="6318944945640833942">Не може да се открие печатач. Внесете ја адресата на печатачот повторно.</translation>
 <translation id="6322370287306604163">Отклучувајте побрзо со отпечаток</translation>
 <translation id="6322559670748154781">Датотекава обично не се презема и е блокирана од „Напредна заштита“</translation>
+<translation id="6324083483652497048">Кликнете за да дозволите екстензииве да го читаат и менуваат <ph name="ORIGIN" />:</translation>
 <translation id="6324916366299863871">Изменете ја кратенката</translation>
 <translation id="6325191661371220117">Оневозможи автоматско стартување</translation>
 <translation id="6326175484149238433">Отстрани од Chrome</translation>
@@ -5940,7 +5950,6 @@
 <translation id="6686665106869989887">Картичката е преместена надесно</translation>
 <translation id="6686817083349815241">Зачувајте ја лозинката</translation>
 <translation id="6687079240787935001">Сокриј <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Се бара да се прочита и промени <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Побарајте од <ph name="SUPERVISED_USER_NAME" /> да дојде до компјутерот. Вашето дете ќе прочита неколку фрази од екранов за да создаде свој гласовен модел.
     <ph name="BR" />
     Ако <ph name="SUPERVISED_USER_NAME" /> има потреба од помош при читањето, тогаш нека повторува после вас. Шепотете подалеку од микрофонот за да може „Помошникот“ да го научи гласот на вашето дете, а не вашиот.</translation>
@@ -6242,6 +6251,7 @@
 <translation id="6968288415730398122">Внесете ја лозинката за да го конфигурирате заклучувањето на екранот</translation>
 <translation id="6969047215179982698">Исклучете „Споделување во близина“</translation>
 <translation id="6970480684834282392">Тип стартување</translation>
+<translation id="6970543303783413625">Не може да се увезат лозинките. Може да увезете најмногу <ph name="COUNT" /> лозинки истовремено.</translation>
 <translation id="6970856801391541997">Печати специфични страници</translation>
 <translation id="6970861306198150268">Уверете се дека ја зачувувате тековната лозинка за сајтов</translation>
 <translation id="6972180789171089114">Аудио/видео</translation>
@@ -6474,6 +6484,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Излези од страницата}one{Излези од страниците}other{Излези од страниците}}</translation>
 <translation id="7207457272187520234">Испраќајте податоци за користење и дијагностика. Уредов во моментов автоматски испраќа дијагностички и податоци за користењето на уредот и апликациите до Google. Податоциве ќе ни помогнат околу стабилноста на системот и апликациите и за други подобрувања. Некои збирни податоци ќе им помогнат на апликациите и партнерите на Google, како што се програмерите на Android. Поставкава е наметната од сопственикот. Ако сте ја вклучиле дополнителната поставка „Активност на интернет и апликации“, податоциве може да се зачувуваат во вашата сметка на Google.</translation>
 <translation id="7207631048330366454">Пребарувајте апликации</translation>
+<translation id="7210471695184432500">За да увезете лозинки на Google Password Manager на уредов, изберете датотека CSV</translation>
 <translation id="7210499381659830293">Печатачи за екстензии</translation>
 <translation id="7211783048245131419">Сѐ уште не е назначен прекинувач</translation>
 <translation id="7212097698621322584">Внесете го тековниот PIN за да го промените. Ако не го знаете PIN-кодот, ќе треба да го ресетирате безбедносниот клуч, а потоа да создадете нов PIN.</translation>
@@ -6597,6 +6608,7 @@
 <translation id="7343372807593926528">Опишете го проблемот пред да испратите повратни информации.</translation>
 <translation id="7344585835349671209">Управувајте со сертификатите за HTTPS/SSL на уредот</translation>
 <translation id="7345706641791090287">Потврдете ја лозинката</translation>
+<translation id="7345919885156673810">Не е избран <ph name="LANGUAGE" /></translation>
 <translation id="7346909386216857016">Добро, сфатив</translation>
 <translation id="7347452120014970266">Ова ќе ги избрише сите податоци и колачиња складирани од сајтот <ph name="ORIGIN_NAME" /> и од неговите инсталирани апликации</translation>
 <translation id="7347751611463936647">За да ја користите оваа наставка, напишете „<ph name="EXTENSION_KEYWORD" />“, а потоа TAB, потоа вашата наредба или пребарување.</translation>
@@ -7198,7 +7210,6 @@
 <translation id="7898725031477653577">Секогаш преведувај</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Барате компоненти на прелистувач? Оди</translation>
-<translation id="7903345046358933331">Страницата не реагира. Може да почекате да реагира или да ја затворите.</translation>
 <translation id="7903429136755645827">Кликнете за да ги приспособите контролите за игри</translation>
 <translation id="7903742244674067440">Имате сертификати што ги идентификуваат овие органи за сертификати</translation>
 <translation id="7903925330883316394">Услужна програма: <ph name="UTILITY_TYPE" /></translation>
@@ -7533,6 +7544,7 @@
 <translation id="8206859287963243715">Мобилен</translation>
 <translation id="8208216423136871611">Не зачувувај</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Ново известување}one{# ново известување}other{# нови известувања}}</translation>
+<translation id="821119981794423735">За да увезете лозинки на Google Password Manager за <ph name="USER_EMAIL" />, изберете датотека CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Преземањето е во тек}one{Преземањата се во тек}other{Преземањата се во тек}}</translation>
 <translation id="8213449224684199188">Влеговте во режим на фотографија</translation>
 <translation id="8214489666383623925">Отвори датотека...</translation>
@@ -8115,6 +8127,7 @@
 <translation id="8780123805589053431">Добивајте описи за слики од Google</translation>
 <translation id="8780443667474968681">Гласовното пребарување е исклучено.</translation>
 <translation id="8781834595282316166">Нова картичка во групата</translation>
+<translation id="8781980678064919987">Исклучи кога капакот е затворен</translation>
 <translation id="8782565991310229362">Откажано е стартувањето на апликацијата Киоск.</translation>
 <translation id="8783834180813871000">Напишете го кодот за спарување преку Bluetooth, а потоа притиснете Return или Enter.</translation>
 <translation id="8784626084144195648">Биниран просек</translation>
@@ -8179,7 +8192,6 @@
 <translation id="8846132060409673887">Прочитај ги производителот и моделот на овој компјутер</translation>
 <translation id="8846163936679269230">Ресетирајте ги профилите на eSIM</translation>
 <translation id="8846239054091760429">Моно аудио, стартување, „Автоматски титлови“ и друго</translation>
-<translation id="8847523528195140327">Одјави се кога капакот е затворен</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Сокриен</translation>
 <translation id="8849219423513870962">Откажете го отстранувањето на профилот на eSIM наречен <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 006d602..319c6f7 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -559,7 +559,6 @@
 <translation id="1536754031901697553">വിച്ഛേദിക്കുന്നു...</translation>
 <translation id="1537254971476575106">പൂർണ്ണസ്‌ക്രീൻ മാഗ്‌നിഫയർ</translation>
 <translation id="15373452373711364">വലിയ മൗസ് കഴ്‌സർ</translation>
-<translation id="1539630663098418038"><ph name="ORIGIN" /> വായിക്കാനും മാറ്റാനും <ph name="EXTENSIONS_REQUESTING_ACCESS" /> അഭ്യർത്ഥിക്കുന്നു</translation>
 <translation id="1540605929960647700">ഡെമോ മോഡ് പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="1541346352678737112">നെറ്റ്‌വർക്കുകളൊന്നും കണ്ടെത്തിയില്ല</translation>
 <translation id="1542137295869176367">നിങ്ങളുടെ സൈൻ ഇൻ ഡാറ്റ അപ്ഡേറ്റ് ചെയ്യാനായില്ല</translation>
@@ -721,7 +720,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> എന്നതിലെ <ph name="USERNAME" /> എന്നയാളുടെ ക്രെഡൻഷ്യലുകൾ</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> എന്നത് ചേർക്കാനാവില്ല</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ശേഷിക്കുന്നു</translation>
-<translation id="1678794218766467608">ഉറക്ക മോഡിലായിരിക്കുമ്പോഴോ കവർ അടച്ചിരിക്കുമ്പോഴോ ലോക്ക് ചെയ്യുക</translation>
 <translation id="1679068421605151609">ഡെവലപ്പർ ടൂളുകൾ</translation>
 <translation id="1679810534535368772">നിങ്ങൾക്ക് പുറത്തുകടക്കണമെന്ന് തീർച്ചയാണോ?</translation>
 <translation id="167983332380191032">മാനേജ്‌മെന്റ് സേവനം, HTTP പിശക് അയച്ചു.</translation>
@@ -849,7 +847,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> ഒരിക്കലും കാണിക്കരുത്</translation>
 <translation id="1794791083288629568">ഈ പ്രശ്‌നം പരിഹരിക്കാൻ ഞങ്ങളെ സഹായിക്കുന്നതിന് ഫീഡ്‌ബാക്ക് അയയ്‌ക്കുക.</translation>
 <translation id="1795214765651529549">ക്ലാസിക് ഉപയോഗിക്കുക</translation>
-<translation id="1796105431091975902">ചേർക്കാൻ Ansible പ്ലേബുക്ക് തിരഞ്ഞെടുക്കുക</translation>
 <translation id="1796588414813960292">ശബ്ദം ആവശ്യമായ ഫീച്ചറുകൾ പ്രവർത്തിക്കില്ല</translation>
 <translation id="1797117170091578105">നിങ്ങളുടെ Chromebook കീബോർഡ് ഉപയോഗിച്ച് കളിക്കുക. നിർദ്ദിഷ്ട പ്രവർത്തനങ്ങൾക്കുള്ള കീകൾ നിങ്ങൾക്ക് ഇഷ്ടാനുസൃതമാക്കാം.</translation>
 <translation id="1800502858278951817"><ph name="SITE_NAME" /> വായിക്കാനും അതിൽ മാറ്റം വരുത്താനും ഒരു വിപുലീകരണവും അഭ്യർത്ഥിച്ചിട്ടില്ല</translation>
@@ -914,6 +911,7 @@
 <translation id="1842766183094193446">ഡൊമോ മോഡ് പ്രവർത്തനക്ഷമമാക്കണമെന്ന് ഉറപ്പാണോ?</translation>
 <translation id="1845727111305721124">ശബ്‌ദം പ്ലേ ചെയ്യാൻ അനുവദിക്കുന്നു</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> റൺ ചെയ്യാൻ കൺട്രോൾ-ക്ലിക്ക്</translation>
+<translation id="1848219224579402567">ലിഡ് അടഞ്ഞിരിക്കുമ്പോൾ സൈൻ ഔട്ട് ചെയ്യുക</translation>
 <translation id="184862733444771842">ഫീച്ചർ അഭ്യർത്ഥ</translation>
 <translation id="1849016657376805933">എതൊരു HID ഉപകരണത്തിലും</translation>
 <translation id="1849186935225320012">ഈ പേജിന് MIDI ഉപകരണങ്ങളുടെ പൂർണ്ണ നിയന്ത്രണമുണ്ട്.</translation>
@@ -1021,7 +1019,6 @@
 <translation id="1941553344801134989">പതിപ്പ്: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">കീ മാപ്പിംഗ് കാണിക്കുക</translation>
 <translation id="1942128823046546853">എല്ലാ വെബ്സൈറ്റുകളിലെയും നിങ്ങളുടെ എല്ലാ ഡാറ്റയും വായിക്കുക, മാറ്റുക</translation>
-<translation id="1942600407708803723">കവർ അടയ്‌ക്കുമ്പോൾ ഷട്ട് ഡൗൺ ചെയ്യുന്നു</translation>
 <translation id="1944528062465413897">Bluetooth ജോടിയാക്കൽ കോഡ്:</translation>
 <translation id="1944921356641260203">അപ്‌ഡേറ്റ് കണ്ടെത്തി</translation>
 <translation id="1947136734041527201">സമാനമായ സേവനത്തിൽ നിങ്ങൾക്കുള്ള അക്കൗണ്ട് ഉപയോഗിച്ച് വെബ്സൈറ്റുകളിൽ സൈൻ ഇൻ ചെയ്യാൻ അനുവദിക്കുന്നു</translation>
@@ -3085,7 +3082,6 @@
 <translation id="389901847090970821">കീബോർഡ് തിരഞ്ഞെടുക്കുക</translation>
 <translation id="3900966090527141178">പാസ്‌വേഡുകൾ എക്‌സ്‌പോർട്ട് ചെയ്യുക</translation>
 <translation id="3903187154317825986">ബിൽറ്റ് ഇൻ കീബോർഡ്</translation>
-<translation id="3903191712482985591">പ്ലേബുക്ക് ചേർക്കുക</translation>
 <translation id="3904326018476041253">ലൊക്കേഷൻ സേവനങ്ങൾ</translation>
 <translation id="3904849010307028014">ഒരു അക്കൗണ്ടിലേക്ക് പതിവായി സൈൻ ഇൻ ചെയ്യുന്നത് പോലെ സൈറ്റുമായുള്ള നിങ്ങളുടെ ഇടപഴകലിനെ അടിസ്ഥാനമാക്കി, നിങ്ങളുടെ ബ്രൗസറിന് ഒരു ട്രസ്റ്റ് ടോക്കൺ നൽകാൻ ആ സൈറ്റിനാകും. പിന്നീട്, നിങ്ങൾ സന്ദർശിക്കുന്ന മറ്റ് സൈറ്റുകൾ ഒരു സാധുവായ ട്രസ്റ്റ് ടോക്കണിനായി പരിശോധിക്കുകയും അത് കണ്ടെത്തുകയും ചെയ്താൽ, അവ നിങ്ങളെ ഒരു ബോട്ടായി കരുതാതെ ഒരു വ്യക്തിയായി പരിഗണിക്കാനാണ് കൂടുതൽ സാധ്യത.</translation>
 <translation id="3905761538810670789">ആപ്പ് റിപ്പയർ ചെയ്യുക</translation>
@@ -5030,7 +5026,6 @@
 <translation id="5827733057563115968">അടുത്ത വാക്ക് പ്രവ‌ചനം</translation>
 <translation id="5828545842856466741">പ്രൊഫൈൽ ചേർക്കുക...</translation>
 <translation id="5828633471261496623">പ്രിന്‍റ് ചെയ്യുന്നു...</translation>
-<translation id="5828797982387013521">പ്ലേബുക്ക് തിരഞ്ഞെടുക്കുക</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> തുറക്കാനാകുന്നില്ല</translation>
 <translation id="5830720307094128296">പേജ് &amp;ഇതായി സംരക്ഷിക്കുക...</translation>
 <translation id="5832813618714645810">പ്രൊഫൈലുകൾ</translation>
@@ -5923,7 +5918,6 @@
 <translation id="6686665106869989887">ടാബ് വലത്തേക്ക് നീക്കി</translation>
 <translation id="6686817083349815241">നിങ്ങളുടെ പാസ്‌വേഡ് സംരക്ഷിക്കുക</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> മറയ്ക്കുക</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> വായിക്കാനും മാറ്റാനും അഭ്യർത്ഥിക്കുന്നു:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> എന്ന കുട്ടിയോട് കമ്പ്യൂട്ടറിന്റെ അടുത്ത് വരാൻ ആവശ്യപ്പെടുക. നിങ്ങളുടെ കുട്ടിയുടെ ശബ്‌ദ മോഡൽ സൃഷ്ടിക്കാൻ കുട്ടി ഈ സ്ക്രീനിലെ കുറച്ച് വാചകങ്ങൾ വായിക്കും.
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" /> എന്ന കുട്ടിക്ക് വായിക്കാൻ സഹായം വേണമെങ്കിൽ, നിങ്ങൾ വായിച്ചതിനുശേഷം ആവർത്തിക്കാൻ അവരോട് ആവശ്യപ്പെടുക. മൈക്കിൽ നിന്നും അകലെ മാറി നിന്ന് പതുക്കെ സംസാരിക്കുക, അതുവഴി നിങ്ങളുടെ ശബ്ദത്തിന് പകരം കുട്ടിയുടെ ശബ്ദം Assistant പഠിക്കും.</translation>
@@ -7182,7 +7176,6 @@
 <translation id="7898725031477653577">എല്ലായ്പ്പോഴും വിവർത്തനം ചെയ്യുക</translation>
 <translation id="7901405293566323524">ഫോൺ ഹബ്</translation>
 <translation id="7903290522161827520">ബ്രൗസർ കമ്പോണന്റുകൾ തിരയുകയാണോ? ഇവിടെ സന്ദർശിക്കൂ</translation>
-<translation id="7903345046358933331">പേജ് പ്രതികരിക്കുന്നില്ല. അത് പ്രതികരിക്കുന്നതുവരെ നിങ്ങൾക്ക് കാത്തിരിക്കാം അല്ലെങ്കിൽ അത് അടയ്‌ക്കുക.</translation>
 <translation id="7903429136755645827">നിങ്ങളുടെ ഗെയിം നിയന്ത്രണങ്ങൾ ഇഷ്ടാനുസൃതമാക്കാൻ ക്ലിക്ക് ചെയ്യുക</translation>
 <translation id="7903742244674067440">ഈ സർട്ടിഫിക്കറ്റ് അതോറിറ്റികളെ തിരിച്ചറിയുന്ന സർട്ടിഫിക്കറ്റുകൾ നിങ്ങളുടെ ഫയലിലുണ്ട്</translation>
 <translation id="7903925330883316394">ഉപയുക്തത: <ph name="UTILITY_TYPE" /></translation>
@@ -8096,6 +8089,7 @@
 <translation id="8780123805589053431">Google-ൽ നിന്ന് ചിത്ര വിവരണങ്ങൾ നേടുക</translation>
 <translation id="8780443667474968681">ശബ്‌ദ തിരയൽ ഓഫാക്കിയിരിക്കുന്നു.</translation>
 <translation id="8781834595282316166">ഗ്രൂപ്പിലെ പുതിയ ടാബ്</translation>
+<translation id="8781980678064919987">ലിഡ് അടഞ്ഞിരിക്കുമ്പോൾ ഷട്ട് ഡൗൺ ചെയ്യുക</translation>
 <translation id="8782565991310229362">കിയോസ്‌ക് ആപ്പ് ലോഞ്ച് ചെയ്യൽ റദ്ദാക്കി.</translation>
 <translation id="8783834180813871000">Bluetooth ജോടിയാക്കൽ കോഡ് ടൈപ്പ് ചെയ്‌ത ശേഷം 'മടങ്ങുക' അല്ലെങ്കിൽ 'എന്റർ' അമർത്തുക.</translation>
 <translation id="8784626084144195648">ബിൻ ചെയ്ത ശരാശരി</translation>
@@ -8160,7 +8154,6 @@
 <translation id="8846132060409673887">ഈ കമ്പ്യൂട്ടറിന്റെ നിർമ്മാതാവ്, മോഡൽ എന്നിവയെക്കുറിച്ചുള്ള വിവരം വായിക്കുക</translation>
 <translation id="8846163936679269230">eSIM പ്രൊഫൈലുകൾ റീസെറ്റ് ചെയ്യുക</translation>
 <translation id="8846239054091760429">മോണോ ഓഡിയോ, സ്റ്റാർട്ടപ്പ്, തത്സമയ ക്യാപ്ഷൻ എന്നിവയും മറ്റും</translation>
-<translation id="8847523528195140327">കവർ അടയ്‌ക്കുമ്പോൾ സൈൻ ഔട്ട് ചെയ്യുന്നു</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">മറച്ചിരിക്കുന്നു</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> എന്ന് പേരിട്ടിരിക്കുന്ന ഇ-സിം പ്രൊഫൈലിന്റെ നീക്കം ചെയ്യൽ റദ്ദാക്കുക</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb
index 6133616..d0b9502 100644
--- a/chrome/app/resources/generated_resources_mn.xtb
+++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">Салгаж байна...</translation>
 <translation id="1537254971476575106">Бүтэн дэлгэцийг томруулагч</translation>
 <translation id="15373452373711364">Том хулганын курсор</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> <ph name="ORIGIN" />-г уншиж, өөрчлөх хүсэлт тавьж байна</translation>
 <translation id="1540605929960647700">Туршилтын горимыг идэвхжүүлэх</translation>
 <translation id="1541346352678737112">Сүлжээ олдсонгүй</translation>
 <translation id="1542137295869176367">Таны нэвтрэх өгөгдлийг шинэчилж чадсангүй</translation>
@@ -721,7 +720,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> дээрх <ph name="USERNAME" />-н мандат үнэмлэхийн дэлгэрэнгүй</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" />-г нэмэх боломжгүй байна</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> үлдсэн</translation>
-<translation id="1678794218766467608">Амраах горимд байгаа эсвэл таг хаалттай үед түгжих</translation>
 <translation id="1679068421605151609">Хөгжүүлэгч багаж</translation>
 <translation id="1679810534535368772">Та эндээс гарахдаа итгэлтэй байна уу?</translation>
 <translation id="167983332380191032">Менежментийн үйлчилгээ HTTP-н алдааг илгээсэн.</translation>
@@ -857,7 +855,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" />-г хэзээ ч бүү харуул</translation>
 <translation id="1794791083288629568">Энэ алдааг засахад бидэнд туслан, санал хүсэлтээ илгээнэ үү.</translation>
 <translation id="1795214765651529549">Сонгодог загварыг ашиглах</translation>
-<translation id="1796105431091975902">Нэмэх Ansible гарын авлагыг сонгоно уу</translation>
 <translation id="1796588414813960292">Дуу чимээ шаардлагатай онцлогууд ажиллахгүй</translation>
 <translation id="1797117170091578105">Chromebook-н гараа ашиглан тоглоно уу. Та тодорхой үйлдлүүдийн товчийг өөрчлөх боломжтой.</translation>
 <translation id="1800502858278951817">Ямар ч өргөтгөл <ph name="SITE_NAME" />-г унших болон өөрчлөх хүсэлт тавиагүй</translation>
@@ -922,6 +919,7 @@
 <translation id="1842766183094193446">Та туршилтын горимыг идэвхжүүлэх үү?</translation>
 <translation id="1845727111305721124">Дуу тоглуулахыг зөвшөөрсөн</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" />-г ажиллуулахын тулд control товчлуурыг дарна уу</translation>
+<translation id="1848219224579402567">Бүрхүүл хаалттай үед гарах</translation>
 <translation id="184862733444771842">Онцлогийн хүсэлт</translation>
 <translation id="1849016657376805933">Дурын HID төхөөрөмж</translation>
 <translation id="1849186935225320012">Энэ хуудас нь MIDI төхөөрөмжүүдийг бүрэн хянаж байна.</translation>
@@ -1030,7 +1028,6 @@
 <translation id="1941553344801134989">Хувилбар: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Товч харгалзуулалтыг харуулах</translation>
 <translation id="1942128823046546853">Таны бүх вебсайт дээрх өгөгдлийг унших болон өөрчлөх</translation>
-<translation id="1942600407708803723">Хавтас хаалттай үед унтраах</translation>
 <translation id="1944528062465413897">Bluetooth хослуулах код:</translation>
 <translation id="1944921356641260203">Шинэчлэлт хийх тухай мэдээлэл олдлоо</translation>
 <translation id="1947136734041527201">Таныг таниулбарын үйлчилгээтэй бүртгэлээ ашиглан вебсайтуудад нэвтрэх боломжийг олгоно</translation>
@@ -1722,6 +1719,7 @@
 <translation id="2568774940984945469">Мэдээллийн цонх агуулагч</translation>
 <translation id="2571655996835834626">Таны веб сайтын күүки, JavaScript, залгаас, геолокаци, микрофон, камер зэрэг онцлогийн хандалтыг хянадаг тохиргоог өөрчилдөг.</translation>
 <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> руу зөвхөн унших горимоор нэвтрэх зөвшөөрлийг олгосон байна.</translation>
+<translation id="2573276323521243649">Аватар сонгох хуудаснаас буцах</translation>
 <translation id="2573417407488272418">Сайжруулахаас өмнө аппууд болон файлуудыг Файлс &gt; Миний файлуудад хуулбарлана уу.</translation>
 <translation id="2573831315551295105">“<ph name="ACTION" />”-д сэлгүүр онооно уу</translation>
 <translation id="2575247648642144396">Өргөтгөл нь тухайн хуудсанд ажиллахад тэмдэглэгээ харагдана. Энэхүү тэмдэглэгээн дээр дарж эсвэл <ph name="EXTENSION_SHORTCUT" /> дээр дарснаар өргөлтгөлийг ашиглах боломжтой.</translation>
@@ -3096,7 +3094,6 @@
 <translation id="389901847090970821">Гар сонгох</translation>
 <translation id="3900966090527141178">Нууц үгийг экспортлох</translation>
 <translation id="3903187154317825986">Суурилагдсан гар</translation>
-<translation id="3903191712482985591">Гарын авлага нэмэх</translation>
 <translation id="3904326018476041253">Байршлын үйлчилгээ</translation>
 <translation id="3904849010307028014">Бүртгэлд тогтмол нэвтрэх зэрэг таны сайттай хийсэн харилцан үйлдэл тулгуурлан тухайн сайт таны хөтчид итгэмжлэгдсэн токен олгох боломжтой. Дараа нь хэрэв таны зочилсон бусад сайт хүчинтэй итгэмжлэгдсэн токен шалгасан, мөн олсон бол тэдгээр сайт тантай бот бус харин хүн шиг хандах магадлал өндөр болно.</translation>
 <translation id="3905761538810670789">Апп засах</translation>
@@ -5042,7 +5039,6 @@
 <translation id="5827733057563115968">Дараагийн үг тааварлалт</translation>
 <translation id="5828545842856466741">Профайл нэмэх...</translation>
 <translation id="5828633471261496623">Хэвлэж байна...</translation>
-<translation id="5828797982387013521">Гарын авлага сонгох</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" />-г нээх боломжгүй</translation>
 <translation id="5830720307094128296">Хуудсыг  ... гэх хадгалах</translation>
 <translation id="5832813618714645810">Профайлууд</translation>
@@ -5933,7 +5929,6 @@
 <translation id="6686665106869989887">Табыг баруун тийш зөөсөн</translation>
 <translation id="6686817083349815241">Нууц үгээ хадгална уу</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" />-г нуух</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" />-г уншиж, өөрчлөх хүсэлт тавьж байна:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" />-г компьютерын урд ирэхийг хүснэ үү. Таны хүүхэд дуу хоолойн загвараа үүсгэхийн тулд энэ дэлгэц дээр цөөн хэллэг унших шаардлагатай.
     <ph name="BR" />
     Хэрэв <ph name="SUPERVISED_USER_NAME" />-д уншихад нь тусламж хэрэгтэй бол түүнийг өөрийнхөө араас давтуулж хэлүүлээрэй. Микрофоноосоо зайтай шивнэснээр Туслах таны оронд хүүхдийн тань дуу хоолойг сурна.</translation>
@@ -6415,6 +6410,7 @@
 <translation id="7138678301420049075">Бусад</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> таны микрофоныг ашиглаж байна</translation>
 <translation id="7141105143012495934">Таны бүртгэлийн мэдээллийг татаж чадсангүй тул нэвтрэх үйлдэл амжилтгүй боллоо. Та админтайгаа холбогдох, эсвэл дахин оролдох хэрэгтэй.</translation>
+<translation id="7141844554192012199">Хяналт</translation>
 <translation id="7144878232160441200">Дахин оролдох</translation>
 <translation id="7149839598364933473">Энэ төхөөрөмжийг <ph name="DEVICE_OS" /> төхөөрөмж болгож хөрвүүлээрэй.</translation>
 <translation id="7149893636342594995">Сүүлийн 24 цаг</translation>
@@ -7191,7 +7187,6 @@
 <translation id="7898725031477653577">Үргэлж хөрвүүлэх</translation>
 <translation id="7901405293566323524">Утасны Hub</translation>
 <translation id="7903290522161827520">Хөтчийн бүрэлдэхүүн хэсгүүдийг хайж байна уу? Зочлох</translation>
-<translation id="7903345046358933331">Энэ хуудас хариу мэдэгдэхгүй байна. Та энэ хуудсыг хариу мэдэгдтэл хүлээх, эсвэл хаах боломжтой.</translation>
 <translation id="7903429136755645827">Тоглоомын тохиргоогоо өөрчлөхийн тулд товшино уу</translation>
 <translation id="7903742244674067440">Танд эдгээр сертификатын эрхийг тодорхойлох файлын сертификат байна</translation>
 <translation id="7903925330883316394">Хэрэгсэл: <ph name="UTILITY_TYPE" /></translation>
@@ -8102,6 +8097,7 @@
 <translation id="8780123805589053431">Google-с зургийн тайлбар авах</translation>
 <translation id="8780443667474968681">Дуут хайлтыг унтраасан байна.</translation>
 <translation id="8781834595282316166">Бүлэг доторх шинэ таб</translation>
+<translation id="8781980678064919987">Бүрхүүл хаагдсан үед унтраах</translation>
 <translation id="8782565991310229362">Kiosk программыг эхлүүлэх явц цуцлагдсан.</translation>
 <translation id="8783834180813871000">Bluetooth хослуулах кодыг оруулаад Return эсвэл Enter дарна уу.</translation>
 <translation id="8784626084144195648">Хэмжигдсэн дундаж утга</translation>
@@ -8166,7 +8162,6 @@
 <translation id="8846132060409673887">Энэ компьютерийн үйлдвэрлэгч болон загварыг унших</translation>
 <translation id="8846163936679269230">eSIM профайлуудыг шинэчлэх</translation>
 <translation id="8846239054091760429">Моно аудио, эхлэл, Шууд тайлбар болон бусад</translation>
-<translation id="8847523528195140327">Хавтас хаалттай үед гарах</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Нуусан</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> нэртэй eSIM профайлыг хасах үйлдлийг цуцлах</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 07e1570..8cda4a2 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -277,6 +277,7 @@
 <translation id="125220115284141797">डीफॉल्ट</translation>
 <translation id="1252987234827889034">प्रोफाइल एरर आली</translation>
 <translation id="1254593899333212300">थेट इंटरनेट कनेक्शन</translation>
+<translation id="1257336506558170607">निवडलेले सर्टिफिकेट एक्सपोर्ट करा</translation>
 <translation id="1258491128795710625">नवीन काय आहे</translation>
 <translation id="1259152067760398571">सुरक्षा तपासणी काल रन केली गेली</translation>
 <translation id="1260451001046713751"><ph name="HOST" /> कडील पॉप-अप आणि रीडिरेक्टना नेहमी अनुमती द्या</translation>
@@ -563,7 +564,6 @@
 <translation id="1536754031901697553">डिस्कनेक्ट करत आहे...</translation>
 <translation id="1537254971476575106">क्षेत्रे भिंग</translation>
 <translation id="15373452373711364">मोठा माउस कर्सर</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> हे <ph name="ORIGIN" /> वाचण्याची आणि बदलण्याची विनंती करत आहे</translation>
 <translation id="1540605929960647700">डेमो मोड सुरू करा</translation>
 <translation id="1541346352678737112">कोणतेही नेटवर्क आढळले नाही</translation>
 <translation id="1542137295869176367">तुमचा साइन इन डेटा अपडेट केला जाऊ शकला नाही</translation>
@@ -724,7 +724,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> वरील <ph name="USERNAME" /> साठी क्रेडेंशियल तपशील</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> जोडू शकत नाही</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> शिल्लक</translation>
-<translation id="1678794218766467608">स्लीप मोडमध्ये किंवा कव्हर बंद असताना लॉक करा</translation>
 <translation id="1679068421605151609">डेव्हलपर टूल</translation>
 <translation id="1679810534535368772">तुम्हाला नक्की बाहेर पडायचे आहे का?</translation>
 <translation id="167983332380191032">व्यवस्थापन सेवेने HTTP एरर पाठवली.</translation>
@@ -860,7 +859,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> कधीही दाखवू नका</translation>
 <translation id="1794791083288629568">या समस्येचे निराकरण करण्यात आम्हाला मदत करण्यासाठी अभिप्राय पाठवा.</translation>
 <translation id="1795214765651529549">क्लासिक वापरा</translation>
-<translation id="1796105431091975902">जोडण्यासाठी Ansible प्लेबुक निवडा</translation>
 <translation id="1796588414813960292">साउंडची आवश्यकता असलेली वैशिष्ट्ये काम करणार नाहीत</translation>
 <translation id="1797117170091578105">तुमच्या Chromebook चा कीबोर्ड वापरून प्ले करा. तुम्ही विशिष्ट कृतींसाठी की कस्टमाइझ करू शकता.</translation>
 <translation id="1800502858278951817">कोणत्याही एक्स्टेंशनने <ph name="SITE_NAME" /> ला वाचण्यासाठी आणि बदलण्यासाठी विनंती केलेली नाही</translation>
@@ -925,6 +923,7 @@
 <translation id="1842766183094193446">तुम्हाला खरंच डेमो मोड सुरू करायचा आहे का?</translation>
 <translation id="1845727111305721124">आवाज प्ले करण्याची अनुमती आहे</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> चालवण्‍यासाठी Control-क्लिक करा</translation>
+<translation id="1848219224579402567">लिड बंद असताना साइन आउट करा</translation>
 <translation id="184862733444771842">वैशिष्ट्याबद्दल विनंती</translation>
 <translation id="1849016657376805933">कोणतेही HID डिव्हाइस</translation>
 <translation id="1849186935225320012">या पृष्ठास MIDI डिव्हाइसचे पूर्ण नियंत्रण आहे.</translation>
@@ -1033,7 +1032,6 @@
 <translation id="1941553344801134989">आवृत्ती: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">की मॅपिंग दाखवा</translation>
 <translation id="1942128823046546853">सर्व वेबसाइटवरील तुमचा सर्व डेटा वाचू आणि बदलू शकते</translation>
-<translation id="1942600407708803723">कव्हर बंद केल्यावर शट डाउन करा</translation>
 <translation id="1944528062465413897">ब्लूटूथ पेअरिंग कोड:</translation>
 <translation id="1944921356641260203">अपडेट आढळले</translation>
 <translation id="1947136734041527201">ओळखीच्या सेवेसह तुमच्याकडे असलेले खाते वापरून तुम्हाला वेबसाइटवर साइन इन करू देते</translation>
@@ -1725,6 +1723,7 @@
 <translation id="2568774940984945469">इंफोबार कंटेनर</translation>
 <translation id="2571655996835834626">कुकी, JavaScript, प्लग-इन, भौगोलिक स्थान, मायक्रोफोन, कॅमेरा इ. सारख्या वैशिष्ट्यांवरील वेबसाइटचे अ‍ॅक्सेस नियंत्रित करणार्‍या तुमच्या सेटिंग्ज बदला.</translation>
 <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> साठी रीड-ओन्ली ॲक्सेस मंजूर केला गेला आहे.</translation>
+<translation id="2573276323521243649">अवतार निवड पेजवरून मागे जा</translation>
 <translation id="2573417407488272418">अपग्रेड करण्याआधी अ‍ॅप्स आणि फाइल यांचा फाइल &gt; माझ्या फाइल यामध्ये बॅकअप घ्या.</translation>
 <translation id="2573831315551295105">“<ph name="ACTION" />” साठी स्विच असाइन करा</translation>
 <translation id="2575247648642144396">एक्स्टेंशन वर्तमान पेजवर ॲक्शन करु शकत असेल तेव्हा हे आयकन दृश्यमान होईल. आयकनवर क्लिक करुन किंवा <ph name="EXTENSION_SHORTCUT" /> दाबून हे एक्स्टेंशन वापरा.</translation>
@@ -3099,7 +3098,6 @@
 <translation id="389901847090970821">कीबोर्ड निवडा</translation>
 <translation id="3900966090527141178">पासवर्ड एक्सपोर्ट करा</translation>
 <translation id="3903187154317825986">बिल्ट-इन कीबोर्ड</translation>
-<translation id="3903191712482985591">प्लेबुक जोडा</translation>
 <translation id="3904326018476041253">स्‍थान सेवा</translation>
 <translation id="3904849010307028014">नियमितपणे खात्यामध्ये साइन इन करणे यासारख्या एखाद्या साइटसोबतच्या तुमच्या संवादाच्या आधारे, ती साइट तुमच्या ब्राउझरला ट्रस्ट टोकन जारी करू शकते. त्यानंतर, तुम्ही इतर साइटना भेट दिल्यास आणि त्या साइटना वैध ट्रस्ट टोकन सापडल्यास, त्या तुम्हाला बॉट नव्हे तर एखादी व्यक्ती समजण्याची जास्त शक्यता आहे.</translation>
 <translation id="3905761538810670789">अ‍ॅप दुरुस्त करा</translation>
@@ -5043,7 +5041,6 @@
 <translation id="5827733057563115968">पुढील शब्दांचा अंदाज</translation>
 <translation id="5828545842856466741">प्रोफाइल जोडा…</translation>
 <translation id="5828633471261496623">प्रिंट करत आहे...</translation>
-<translation id="5828797982387013521">प्लेबुक निवडा</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> उघडू शकत नाही</translation>
 <translation id="5830720307094128296">पेज या फॉरमॅटमध्ये सेव्ह करा...</translation>
 <translation id="5832813618714645810">प्रोफाइल</translation>
@@ -5936,7 +5933,6 @@
 <translation id="6686665106869989887">टॅब उजवीकडे हलवला आहे</translation>
 <translation id="6686817083349815241">तुमचा पासवर्ड सेव्ह करा</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> लपवा</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> वाचण्याची आणि बदलण्याची विनंती करत आहे:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> ला कॉंप्युटरजवळ बोलवा. तुमचे लहान मूल त्यांचे व्हॉइस मॉडेल तयार करण्यासाठी या स्क्रीनवरील काही वाक्ये वाचेल.
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" /> ला वाचताना मदत हवी असल्यास, तुमच्या लहान मुलाला तुमच्या पाठोपाठ म्हणायला सांगा. माइकपासून लांब हळू आवाजात बोला जेणेकरून, Assistant हे तुमच्या लहान मुलाचा आवाज ओळखायला शिकेल, तुमचा नाही.</translation>
@@ -6418,6 +6414,7 @@
 <translation id="7138678301420049075">इतर</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> तुमचा मायक्रोफोन वापरत आहे</translation>
 <translation id="7141105143012495934">तुमचे खाते तपशील प्राप्त करणे शक्य झाले नसल्याने साइन-इन अयशस्वी झाले. कृपया तुमच्या ॲडमिनिस्ट्रेटरशी संपर्क साधा किंवा पुन्हा प्रयत्न करा.</translation>
+<translation id="7141844554192012199">तपासणी</translation>
 <translation id="7144878232160441200">पुन्हा प्रयत्न करा</translation>
 <translation id="7149839598364933473">हे डिव्हाइस <ph name="DEVICE_OS" /> डिव्हाइसमध्ये रूपांतरित करा.</translation>
 <translation id="7149893636342594995">शेवटच्या 72 तासांमधील</translation>
@@ -7193,7 +7190,6 @@
 <translation id="7898725031477653577">नेहमी भाषांतर करा</translation>
 <translation id="7901405293566323524">फोन हब</translation>
 <translation id="7903290522161827520">ब्राउझरचे घटक शोधत आहात का? भेट द्या</translation>
-<translation id="7903345046358933331">पृष्ठ असंवादी झाले आहे. तुम्ही ते संवादी होईपर्यंत प्रतीक्षा करू शकता किंवा ते बंद करू शकता.</translation>
 <translation id="7903429136755645827">तुमची गेम नियंत्रणे कस्टमाइझ करण्यासाठी क्लिक करा</translation>
 <translation id="7903742244674067440">तुमच्याकडे फाइलवर अशी सर्टिफिकेट आहेत जी या सर्टिफिकेट अधिकार्‍यांची ओळख पटवतात</translation>
 <translation id="7903925330883316394">उयुक्तता: <ph name="UTILITY_TYPE" /></translation>
@@ -8108,6 +8104,7 @@
 <translation id="8780123805589053431">Google कडून इमेज वर्णन मिळवा</translation>
 <translation id="8780443667474968681">व्हॉइस शोध बंद केले गेले आहे.</translation>
 <translation id="8781834595282316166">गटामधील नवीन टॅब</translation>
+<translation id="8781980678064919987">झाकण बंद असताना बंद करा</translation>
 <translation id="8782565991310229362">कियोस्क ॲप्लिकेशन लाँच रद्द झाले.</translation>
 <translation id="8783834180813871000">ब्लूटूथ पेअरिंग कोड टाइप करा, नंतर Return किंवा Enter दाबा.</translation>
 <translation id="8784626084144195648">बिन केलेली सरासरी</translation>
@@ -8173,7 +8170,6 @@
 <translation id="8846132060409673887">या कॉंप्युटरची उत्पादक आणि मॉडेल माहिती वाचा</translation>
 <translation id="8846163936679269230">eSIM प्रोफाइल रीसेट करा</translation>
 <translation id="8846239054091760429">मोनो ऑडिओ, स्टार्टअप, लाइव्ह कॅप्शन आणि बरेच काही</translation>
-<translation id="8847523528195140327">कव्हर बंद केल्यावर साइन आउट करा</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">लपवलेली</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> हे नाव असलेली eSIM प्रोफाइल काढून टाकणे रद्द करा</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index 6ce5fe5..e1d5a23 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">Memutuskan sambungan...</translation>
 <translation id="1537254971476575106">Penggadang skrin penuh</translation>
 <translation id="15373452373711364">Kursor tetikus besar</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> meminta untuk membaca dan menukar <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Dayakan mod tunjuk cara</translation>
 <translation id="1541346352678737112">Tiada rangkaian ditemukan</translation>
 <translation id="1542137295869176367">Data log masuk anda tidak dapat dikemas kini</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">Butiran bukti kelayakan untuk <ph name="USERNAME" /> pada <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Tidak dapat menambah <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Berbaki <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Kunci bila berada dalam mod tidur atau apabila penutup ditutup</translation>
 <translation id="1679068421605151609">Alat Pembangun</translation>
 <translation id="1679810534535368772">Adakah anda pasti mahu keluar?</translation>
 <translation id="167983332380191032">Perkhidmatan pengurusan menghantar ralat HTTP.</translation>
@@ -861,7 +859,6 @@
 <translation id="1794051631868188691">Jangan tunjukkan <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Hantar maklum balas untuk membantu kami menyelesaikan isu ini.</translation>
 <translation id="1795214765651529549">Gunakan Klasik</translation>
-<translation id="1796105431091975902">Pilih Ansible Playbook untuk ditambah</translation>
 <translation id="1796588414813960292">Ciri yang memerlukan bunyi tidak akan berfungsi</translation>
 <translation id="1797117170091578105">Main menggunakan papan kekunci Chromebook anda. Anda boleh menyesuaikan kekunci kepada tindakan tertentu.</translation>
 <translation id="1800502858278951817">Tiada sambungan telah meminta untuk membaca dan menukar <ph name="SITE_NAME" /></translation>
@@ -926,6 +923,7 @@
 <translation id="1842766183094193446">Adakah anda pasti mahu mendayakan mod tunjuk cara?</translation>
 <translation id="1845727111305721124">Dibenarkan untuk memainkan bunyi</translation>
 <translation id="1846308012215045257">Tekan Ctrl dan klik untuk menjalankan <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Log keluar apabila penutup ditutup</translation>
 <translation id="184862733444771842">Permintaan Ciri</translation>
 <translation id="1849016657376805933">Sebarang peranti HID</translation>
 <translation id="1849186935225320012">Halaman ini mengawal sepenuhnya peranti MIDI.</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">Versi: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Tunjukkan pemetaan kekunci</translation>
 <translation id="1942128823046546853">Baca dan ubah semua data anda pada semua laman web</translation>
-<translation id="1942600407708803723">Matikan apabila penutup ditutup</translation>
 <translation id="1944528062465413897">Kod gandingan Bluetooth:</translation>
 <translation id="1944921356641260203">Kemas kini ditemui</translation>
 <translation id="1947136734041527201">Membolehkan anda log masuk ke laman web menggunakan akaun anda yang mempunyai perkhidmatan identiti</translation>
@@ -3100,7 +3097,6 @@
 <translation id="389901847090970821">Pilih papan kekunci</translation>
 <translation id="3900966090527141178">Eksport kata laluan</translation>
 <translation id="3903187154317825986">Papan Kekunci Terbina Dalam</translation>
-<translation id="3903191712482985591">Tambah panduan</translation>
 <translation id="3904326018476041253">Perkhidmatan Lokasi</translation>
 <translation id="3904849010307028014">Berdasarkan interaksi anda dengan laman, seperti kerap log masuk ke akaun, laman tersebut boleh mengeluarkan token amanah kepada penyemak imbas anda. Kemudian, jika laman lain yang anda lawati menyemak dan menemukan token amanah yang sah, laman tersebut lebih berkemungkinan untuk melayan anda seperti orang dan bukannya bot.</translation>
 <translation id="3905761538810670789">Baiki apl</translation>
@@ -5046,7 +5042,6 @@
 <translation id="5827733057563115968">Ramalan perkataan seterusnya</translation>
 <translation id="5828545842856466741">Tambah profil...</translation>
 <translation id="5828633471261496623">Mencetak...</translation>
-<translation id="5828797982387013521">Pilih panduan Ansible</translation>
 <translation id="5830205393314753525">Tidak dapat membuka <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Simpan Halaman &amp;Sebagai...</translation>
 <translation id="5832813618714645810">Profil</translation>
@@ -5938,7 +5933,6 @@
 <translation id="6686665106869989887">Tab dialihkan ke kanan</translation>
 <translation id="6686817083349815241">Simpan kata laluan anda</translation>
 <translation id="6687079240787935001">Sembunyikan <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Meminta untuk membaca dan menukar <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Minta <ph name="SUPERVISED_USER_NAME" /> datang ke komputer. Anak anda akan membaca beberapa frasa pada skrin ini untuk membuat model suara mereka.
     <ph name="BR" />
     Jika <ph name="SUPERVISED_USER_NAME" /> memerlukan bantuan untuk membaca, minta dia ikut selepas anda. Baca dengan perlahan dan jauh dari mikrofon agar Assistant mengecam suara anak anda dan bukannya suara anda.</translation>
@@ -7197,7 +7191,6 @@
 <translation id="7898725031477653577">Sentiasa terjemahkan</translation>
 <translation id="7901405293566323524">Hab Telefon</translation>
 <translation id="7903290522161827520">Mencari komponen penyemak imbas? Lawati</translation>
-<translation id="7903345046358933331">Halaman tersebut menjadi tidak responsif. Anda boleh menunggu halaman menjadi responsif atau tutup halaman.</translation>
 <translation id="7903429136755645827">Klik untuk menyesuaikan kawalan permainan anda</translation>
 <translation id="7903742244674067440">Anda mempunyai sijil pada fail yang mengenal pasti pihak berkuasa sijil ini</translation>
 <translation id="7903925330883316394">Utiliti: <ph name="UTILITY_TYPE" /></translation>
@@ -8113,6 +8106,7 @@
 <translation id="8780123805589053431">Dapatkan perihalan imej daripada Google</translation>
 <translation id="8780443667474968681">Carian suara telah dimatikan.</translation>
 <translation id="8781834595282316166">Tab Baharu dalam Kumpulan</translation>
+<translation id="8781980678064919987">Matikan apabila penutup ditutup</translation>
 <translation id="8782565991310229362">Pelancaran aplikasi kios dibatalkan.</translation>
 <translation id="8783834180813871000">Taip kod gandingan Bluetooth, kemudian tekan Return atau Enter.</translation>
 <translation id="8784626084144195648">Purata Bin</translation>
@@ -8177,7 +8171,6 @@
 <translation id="8846132060409673887">Baca tentang pengeluar dan model komputer ini</translation>
 <translation id="8846163936679269230">Tetapkan semula profil eSIM</translation>
 <translation id="8846239054091760429">Audio mono, permulaan, Sari Kata Langsung dan pelbagai lagi</translation>
-<translation id="8847523528195140327">Log keluar apabila penutup ditutup</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Disembunyikan</translation>
 <translation id="8849219423513870962">Batalkan pengalihan keluar profil eSIM yang bernama <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index e1ed42fc..2db2393 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -562,7 +562,6 @@
 <translation id="1536754031901697553">ချိတ်ဆက်မှု ဖြုတ်နေသည်...</translation>
 <translation id="1537254971476575106">မျက်နှာပြင်အပြည့် မှန်ဘီလူး</translation>
 <translation id="15373452373711364">ကြီးမားသည့် မောက်စ်ညွှန်ပြကိရိယာ</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> က <ph name="ORIGIN" /> ကို ဖတ်ပြီးပြောင်းရန် ခွင့်တောင်းနေသည်</translation>
 <translation id="1540605929960647700">သရုပ်ပြမုဒ်ကို ဖွင့်ပါ</translation>
 <translation id="1541346352678737112">ကွန်ရက် မတွေ့ပါ</translation>
 <translation id="1542137295869176367">သင်၏ လက်မှတ်ထိုးဝင်ခြင်းဆိုင်ရာ ဒေတာများကို အပ်ဒိတ်လုပ်၍ မရပါ</translation>
@@ -724,7 +723,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> ရှိ <ph name="USERNAME" /> အတွက် အထောက်အထားအသေးစိတ်</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> ကို ထည့်၍မရပါ</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ကျန်ပါသည်</translation>
-<translation id="1678794218766467608">အိပ်စက်မုဒ်တွင်ရှိချိန် (သို့) အဖုံးပိတ်ထားချိန် လော့ခ်ချရန်</translation>
 <translation id="1679068421605151609">ပြုစုသူ၏ ကိရိယာများ</translation>
 <translation id="1679810534535368772">သင်ထွက်ခွာလိုသည်မှာ သေချာပါသလား။</translation>
 <translation id="167983332380191032">စီမံခန့်ခွဲခြင်းဝန်ဆောင်မှုသည် HTTP အမှားအယွင်းကို ပို့ထားသည်။</translation>
@@ -860,7 +858,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> ကို ဘယ်တော့မှ မပြပါနှင့်</translation>
 <translation id="1794791083288629568">ဤပြဿနာကို ဖြေရှင်းရာတွင် ကူညီပေးရန် အကြံပြုချက် ပေးပို့ပါ။</translation>
 <translation id="1795214765651529549">ဂန္ထဝင်ကို အသုံးပြုရန်</translation>
-<translation id="1796105431091975902">‘Ansible လမ်းညွှန်’ ထည့်ရန် ရွေးပါ</translation>
 <translation id="1796588414813960292">အသံလိုအပ်သော ဝန်ဆောင်မှုများ အလုပ်လုပ်မည်မဟုတ်ပါ</translation>
 <translation id="1797117170091578105">Chromebook ကီးဘုတ်သုံး၍ ဖွင့်နိုင်သည်။ သတ်မှတ်လုပ်ဆောင်ချက်များအတွက် ကီးများစိတ်ကြိုက်သတ်မှတ်နိုင်သည်။</translation>
 <translation id="1800502858278951817"><ph name="SITE_NAME" /> အား ဖတ်ရန်နှင့် ပြောင်းလဲရန် တောင်းဆိုထားသော နောက်ဆက်တွဲများ မရှိပါ</translation>
@@ -925,6 +922,7 @@
 <translation id="1842766183094193446">သရုပ်ပြမုဒ်ကို ဖွင့်လိုသည်မှာ သေချာပါသလား။</translation>
 <translation id="1845727111305721124">အသံဖွင့်ရန် ခွင့်ပြုထားသည်</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> ကို ဖွင့်ရန် ကွန်ထရိုး-ကလစ် နှိပ်ပါ</translation>
+<translation id="1848219224579402567">အဖုံးပိတ်လိုက်သည့်အခါ ထွက်ရန်</translation>
 <translation id="184862733444771842">ဝန်ဆောင်မှု တောင်းဆိုချက်</translation>
 <translation id="1849016657376805933">HID စက်ပစ္စည်းအားလုံး</translation>
 <translation id="1849186935225320012">ဒီစာမျက်နှာသည် MIDI ကိရိယာများကို အပြည့်အဝ ထိန်းချုပ်သည်။</translation>
@@ -1032,7 +1030,6 @@
 <translation id="1941553344801134989">ဗားရှင်း- <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">ကီးနေရာချခြင်း ပြရန်</translation>
 <translation id="1942128823046546853">ဝဘ်ဆိုက်အားလုံးပေါ်ရှိ သင့်ဒေတာအားလုံးကို ဖတ်ရှုခြင်းနှင့် ပြောင်းခြင်း</translation>
-<translation id="1942600407708803723">အဖုံးကို ပိတ်လိုက်သည့်အခါ စက်ပိတ်ရန်</translation>
 <translation id="1944528062465413897">ဘလူးတုသ် တွဲချိတ်ရန်ကုဒ်-</translation>
 <translation id="1944921356641260203">မွမ်းမံမှု တွေ့ထား</translation>
 <translation id="1947136734041527201">အထောက်အထား ဝန်ဆောင်မှုဖြင့် သင့်အကောင့်ကို သုံးပြီး ဝဘ်ဆိုက်များသို့ လက်မှတ်ထိုးဝင်ခွင့်ပြုသည်</translation>
@@ -3099,7 +3096,6 @@
 <translation id="389901847090970821">ကီးဘုတ်ကို ရွေးပါ</translation>
 <translation id="3900966090527141178">စကားဝှက်များကို တင်ပို့ရန်</translation>
 <translation id="3903187154317825986">အသင့်ပါ ကီးဘုတ်</translation>
-<translation id="3903191712482985591">လမ်းညွှန်ထည့်ရန်</translation>
 <translation id="3904326018476041253">တည်နေရာဝန်ဆောင်မှုများ</translation>
 <translation id="3904849010307028014">အကောင့်တွင် ပုံမှန်လက်မှတ်ထိုးဝင်ခြင်းကဲ့သို့ ဝဘ်ဆိုက်နှင့် သင်၏ပြန်လှန်တုံ့ပြန်မှုပေါ် အခြေခံ၍ အဆိုပါဝဘ်ဆိုက်က သင့်ဘရောင်ဇာကို ယုံကြည်မှုတိုကင် ထုတ်ပေးနိုင်သည်။ နောက်ပိုင်းတွင် သင်ဝင်ကြည့်သော အခြားဝဘ်ဆိုက်များက ယုံကြည်မှုတိုကင်ကို စစ်ဆေးပြီး မှန်ကန်ကြောင်းတွေ့ရှိပါက သင့်အား ဘော့တ်အဖြစ်မဟုတ်ဘဲ လူပုဂ္ဂိုလ်အနေနှင့် ဆက်ဆံနိုင်ခြေရှိသည်။</translation>
 <translation id="3905761538810670789">အက်ပ်ပြင်ဆင်ရန်</translation>
@@ -5045,7 +5041,6 @@
 <translation id="5827733057563115968">လာမည့်စကားလုံး ခန့်မှန်းချက်</translation>
 <translation id="5828545842856466741">ပရိုဖိုင် ထည့်ရန်...</translation>
 <translation id="5828633471261496623">ပရင့် ထုတ်နေသည်...</translation>
-<translation id="5828797982387013521">လမ်းညွှန်ရွေးရန်</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> ကို ဖွင့်၍မရပါ</translation>
 <translation id="5830720307094128296">စာမျက်နှာကို...အဖြစ် သိမ်းရန်</translation>
 <translation id="5832813618714645810">ပရိုဖိုင်များ</translation>
@@ -5934,7 +5929,6 @@
 <translation id="6686665106869989887">တဘ်ကို ညာသို့ရွှေ့လိုက်သည်</translation>
 <translation id="6686817083349815241">သင့်လျှို့ဝှက်စကားလုံးအား သိမ်းမည်</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> ကို ဖျောက်ရန်</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> ကို ဖတ်ပြီးပြောင်းရန် ခွင့်တောင်းနေသည်-</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> ကို ကွန်ပျူတာရှိရာသို့ လာခိုင်းပါ။ သင့်ကလေးသည် သူ၏အသံ နမူနာ ပြုလုပ်ရန် ဤဖန်သားပြင်ပေါ်ရှိ စကားရပ်အနည်းငယ်ကို ဖတ်ရပါမည်။
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" /> စာဖတ်ရာတွင် အကူအညီလိုအပ်ပါက သင့်နောက်မှ လိုက်ရွတ်ခိုင်းပါ။ Assistant က သင်၏အသံအစား သင့်ကလေး၏အသံကို မှတ်ယူရန် မိုက်နှင့်ဝေးရာတွင် တိုးတိုးပြောပါ။</translation>
@@ -7194,7 +7188,6 @@
 <translation id="7898725031477653577">အမြဲတမ်း ဘာသာပြန်ရန်</translation>
 <translation id="7901405293566323524">ဖုန်းပင်မ</translation>
 <translation id="7903290522161827520">ဘရောင်ဇာ အစိတ်အပိုင်းများ ရှာနေပါသလား။ ဝင်ကြည့်ရန်</translation>
-<translation id="7903345046358933331">စာမျက်နှာသည် မတုံ့ပြန်တော့ပါ။ တုံ့ပြန်လာမှာကို စောင့်ပါ သို့မဟုတ် ၎င်းကို ပိတ်လိုက်ပါ။</translation>
 <translation id="7903429136755645827">ဂိမ်းထိန်းချုပ်ခလုတ်များကို စိတ်ကြိုက်လုပ်ရန် နှိပ်ပါ</translation>
 <translation id="7903742244674067440">ဤအသိအမှတ်ပြုလက်မှတ် အာဏာပိုင်များ၏ အထောက်အထားအဖြစ် အသိအမှတ်ပြုလက်မှတ်များ သင့်ထံတွင် ရှိပါသည်</translation>
 <translation id="7903925330883316394">ဝန်ဆောင်မှုလုပ်ငန်းများ- <ph name="UTILITY_TYPE" /></translation>
@@ -8108,6 +8101,7 @@
 <translation id="8780123805589053431">Google မှ ပုံအကြောင်းအရာများ ရယူရန်</translation>
 <translation id="8780443667474968681">အသံဖြင့် ရှာဖွေခြင်းကို ပိတ်ထားသည်။</translation>
 <translation id="8781834595282316166">အုပ်စုတွင် တဘ်အသစ်ထည့်ခြင်း</translation>
+<translation id="8781980678064919987">အဖုံးကို ပိတ်လိုက်သည့်အခါ စက်ပိတ်လိုက်ရန်</translation>
 <translation id="8782565991310229362">Kiosk အပလီကေးရှင်း စတင်မှု ပယ်ဖျက်လိုက်ပါသည်။</translation>
 <translation id="8783834180813871000">ဘလူးတုသ် တွဲချိတ်ရန်ကုဒ်ကို ထည့်ပြီး Return သို့မဟုတ် Enter ကို နှိပ်ပါ။</translation>
 <translation id="8784626084144195648">ပျမ်းမျှ အမှိုက်ပုံး</translation>
@@ -8172,7 +8166,6 @@
 <translation id="8846132060409673887">ဤကွန်ပျူတာကို ထုတ်လုပ်သူနှင့် မော်ဒယ်နံပါတ်တို့ကို ကြည့်ရန်</translation>
 <translation id="8846163936679269230">eSIM ပရိုဖိုင်များ ပြင်ဆင်သတ်မှတ်ရန်</translation>
 <translation id="8846239054091760429">မိုနိုအသံ၊ စတင်မှု၊ ‘တိုက်ရိုက်စာတန်း’ နှင့် အခြား</translation>
-<translation id="8847523528195140327">အဖုံးပိတ်လိုက်သည့်အခါ ထွက်ရန်</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">ဖျောက်ထားသည်</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> ဟု အမည်ပေးထားသော eSIM ပရိုဖိုင်ကို မဖယ်ရှားတော့ရန်</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb
index 00e0da8..b80fe13 100644
--- a/chrome/app/resources/generated_resources_ne.xtb
+++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -559,7 +559,6 @@
 <translation id="1536754031901697553">विच्छेद गर्दै...</translation>
 <translation id="1537254971476575106">फुल स्क्रिन म्याग्निफायर</translation>
 <translation id="15373452373711364">ठुलो माउस कर्सर</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> ले <ph name="ORIGIN" /> मा भएका सामग्री रिड गर्ने र ती सामग्री परिवर्तन गर्ने अनुमति माग्दै छ</translation>
 <translation id="1540605929960647700">डेमो मोड सक्षम पार्नुहोस्</translation>
 <translation id="1541346352678737112">कुनै पनि नेटवर्क फेला परेन</translation>
 <translation id="1542137295869176367">तपाईंको साइन इन डेटा परिवर्तन गर्न सकिएन</translation>
@@ -719,7 +718,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> मा रहेको <ph name="USERNAME" /> का युजरनेम तथा पासवर्डहरू</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> थप्न सकिएन</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> बाँकी छ</translation>
-<translation id="1678794218766467608">स्लिप मोड अन भएका बेला वा कभर बन्द भएका बेला लक गरियोस्</translation>
 <translation id="1679068421605151609">विकासकर्ता उपकरणहरू</translation>
 <translation id="1679810534535368772">तपाईं साँच्चिकै बाहिर निस्कन चाहनुहुन्छ?</translation>
 <translation id="167983332380191032">व्यवस्थापन सेवाले HTTP त्रुटि पठायो।</translation>
@@ -847,7 +845,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> कहिल्यै नदेखाइयोस्</translation>
 <translation id="1794791083288629568">हामीलाई यस समस्याको समाधान गर्नमा मद्दत गर्न प्रतिक्रिया पठाउनुहोस्।</translation>
 <translation id="1795214765651529549">क्लासिक प्रयोग गर्नुहोस्</translation>
-<translation id="1796105431091975902">आफूले हाल्न चाहेको Ansible प्लेबुक चयन गर्नुहोस्</translation>
 <translation id="1796588414813960292">जुन सुविधा चल्न ध्वनि चाहिन्छ ती सुविधाले काम गर्ने छैनन्</translation>
 <translation id="1797117170091578105">आफ्नो Chromebook को किबोर्ड प्रयोग गरी खेल्नुहोस्। तपाईं निश्चित कार्यहरू गर्नका लागि कीहरू कस्टमाइज गर्न सक्नुहुन्छ।</translation>
 <translation id="1800502858278951817">कुनै पनि एक्स्टेन्सनले <ph name="SITE_NAME" /> रिड गर्ने तथा बदल्ने अनुमति मागेको छैन</translation>
@@ -912,6 +909,7 @@
 <translation id="1842766183094193446">तपाईंले डेमो मोड सक्षम पार्न चाहनुभएकै हो?</translation>
 <translation id="1845727111305721124">ध्वनि प्ले गर्ने अनुमति दिइएका साइटहरू</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> चालु गर्न कन्ट्रोल-क्लिक गर्नुहोस्</translation>
+<translation id="1848219224579402567">लिड बन्द गरिएको बेला साइन आउट गर्नुहोस्‌</translation>
 <translation id="184862733444771842">सुविधासम्बन्धी अनुरोध</translation>
 <translation id="1849016657376805933">कुनै पनि HID डिभाइस</translation>
 <translation id="1849186935225320012">यस पृष्ठसँग MIDI  डिभाइसहरूको पूर्ण नियन्त्रण छ।</translation>
@@ -1019,7 +1017,6 @@
 <translation id="1941553344801134989">संस्करण: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">की म्यापिङ देखाउनुहोस्</translation>
 <translation id="1942128823046546853">सबै वेबसाइटमा भएका तपाईंका सबै डेटा पढ्न तथा बदल्न</translation>
-<translation id="1942600407708803723">कभर बन्द गरिएको बेला बन्द गर्नुहोस्</translation>
 <translation id="1944528062465413897">ब्लुटुथबाट जोडा बनाउन प्रयोग गर्नु पर्ने कोड:</translation>
 <translation id="1944921356641260203">अपडेट फेला पर्‍यो</translation>
 <translation id="1947136734041527201">तपाईंले यो सेटिङ अन गर्नुभयो भने तपाईं आफूले पहिचान सेवा प्रदायकबाट प्राप्त गरेको खाता प्रयोग गरी वेबसाइटहरूमा साइन इन गर्न सक्नुहुन्छ</translation>
@@ -1708,6 +1705,7 @@
 <translation id="2568774940984945469">इनफोबर कन्टेनर</translation>
 <translation id="2571655996835834626">कुकी, JavaScript, प्लग-इन, भूस्थान, माइक्रोफोन र क्यामेरा जस्ता सुविधाहरूमाथि वेबसाइटको पहुँच नियन्त्रण गर्ने आफ्ना सेटिङहरू परिवर्तन गर्नुहोस्।</translation>
 <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> मा पढ्ने-मात्र अनुमति प्रदान गरिएको छ।</translation>
+<translation id="2573276323521243649">अवतार चयन गर्ने पेजबाट अघिल्लो पेजमा फर्कनुहोस्</translation>
 <translation id="2573417407488272418">अपग्रेड गर्नुअघि एप तथा फाइलहरू ब्याकअप गरेर "फाइलहरू &gt; मेरा फाइलहरू" मा राख्नुहोस्।</translation>
 <translation id="2573831315551295105">निम्न कार्य गर्नका निम्ति स्विच असाइन गर्नुहोस्: “<ph name="ACTION" />”</translation>
 <translation id="2575247648642144396">जब एक्स्टेन्सनले हालको पृष्ठमा कार्य गर्न सक्छ तब यो प्रतिमालाई देख्न सकिनेछ। प्रतिमामा क्लिक गरेर वा <ph name="EXTENSION_SHORTCUT" /> लाई थिचेर यो एक्स्टेन्सन प्रयोग गर्नुहोस्।</translation>
@@ -3083,7 +3081,6 @@
 <translation id="389901847090970821">किबोर्ड चयन गर्नुहोस्</translation>
 <translation id="3900966090527141178">पासवर्डहरू निर्यात गर्नुहोस्</translation>
 <translation id="3903187154317825986">अन्तर्निर्मित किबोर्ड</translation>
-<translation id="3903191712482985591">प्लेबुक हाल्नुहोस्</translation>
 <translation id="3904326018476041253">लोकेसन सर्भिस</translation>
 <translation id="3904849010307028014">तपाईंले कुनै खातामा नियमित रूपमा साइन इन गर्नेलगायतका कुनै साइटमार्फत गर्ने गतिविधिका आधारमा उक्त साइटले तपाईंको ब्राउजरका हकमा ट्रस्ट टोकन जारी गर्न सक्छ। त्यसपछि तपाईंले खोल्ने अन्य साइटहरूले ट्रस्ट टोकन वैध छ कि छैन भनी जाँच्छन् र वैध ट्रस्ट टोकन फेला पारे भने ती साइटहरूले तपाईंलाई बटका रूपमा नभई व्यक्तिका रूपमा व्यवहार गर्ने बढी सम्भावना हुन्छ।</translation>
 <translation id="3905761538810670789">एप मर्मत गर्नुहोस्</translation>
@@ -5027,7 +5024,6 @@
 <translation id="5827733057563115968">आउँदो शब्दको पूर्वानुमान</translation>
 <translation id="5828545842856466741">प्रोफाइल हाल्नुहोस्...</translation>
 <translation id="5828633471261496623">प्रिन्ट गर्दै...</translation>
-<translation id="5828797982387013521">प्लेबुक चयन गर्नुहोस्</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> खोल्न सकिएन</translation>
 <translation id="5830720307094128296">पृष्ठलाई यसको &amp;रूपमा बचत गर्नुहोस्...</translation>
 <translation id="5832813618714645810">प्रोफाइलहरू</translation>
@@ -5918,7 +5914,6 @@
 <translation id="6686665106869989887">यो ट्याब दायाँतिर सारियो</translation>
 <translation id="6686817083349815241">तपाईंको पासवर्ड वचत गर्नुहोस्</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> नदेखिने पार्नुहोस्</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> मा भएका सामग्री रिड गर्ने र ती सामग्री परिवर्तन गर्ने अनुमति मागिँदै छ:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> लाई कम्प्युटर भएको ठाउँमा बोलाउनुहोस्। आवाजको मोडेल बनाउन तपाईंको बच्चाले कम्प्युटरको स्क्रिनबाट केही वाक्यांशहरू पढ्नु पर्ने हुन्छ।
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" /> लाई वाक्यांश पढ्न सहयोग चाहिन्छ भने तपाईंले बोलेको कुरा दोहोर्‍याउन लगाउनुहोस्। सहायकले तपाईंको आवाज नभई तपाईंको बच्चाको आवाज चिनोस् भन्नाका लागि माइकको विपरीत दिशातिर फर्केर कानेखुसी गर्नुहोस्।</translation>
@@ -6400,6 +6395,7 @@
 <translation id="7138678301420049075">अन्य</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> ले तपाईंको डिभाइसको माइक्रोफोन प्रयोग गरिरहेको छ</translation>
 <translation id="7141105143012495934">साइन इन असफल भयो किनभने तपाईँका खाता विवरणहरू पुनःप्राप्त गर्न सकेन। कृपया तपाईँको प्रशासकसँग सम्पर्क गर्नुहोस् वा फेरि प्रयास गर्नुहोस्।</translation>
+<translation id="7141844554192012199">जाँच गर्नुहोस्</translation>
 <translation id="7144878232160441200">पुन: प्रयास गर्नुहोस्</translation>
 <translation id="7149839598364933473">यो डिभाइसमा <ph name="DEVICE_OS" /> चलाउनुहोस्।</translation>
 <translation id="7149893636342594995">पछिल्ला २४ घन्टा</translation>
@@ -7177,7 +7173,6 @@
 <translation id="7898725031477653577">सधैं अनुवाद गर्नुहोस्</translation>
 <translation id="7901405293566323524">फोन हब</translation>
 <translation id="7903290522161827520">ब्राउजरका कम्पोनेन्टहरू खोज्दै हुनुहुन्छ? यहाँ जानुहोस्</translation>
-<translation id="7903345046358933331">पृष्ठ अनुत्तरदायी भएको छ । तपाईंले यो उत्तरदायी हुञ्जेल प्रतिक्षा गर्न सक्नुहुन्छ वा यसलाई बन्द गर्न सक्नुहुन्छ ।</translation>
 <translation id="7903429136755645827">आफ्ना गेम कन्ट्रोलहरू कस्टमाइज गर्न क्लिक गर्नुहोस्</translation>
 <translation id="7903742244674067440">तपाईँसँग फाइलमा यी प्रमाणपत्रका प्रधिकरणहरूको पहिचान गर्ने प्रमाणपत्रहरू छन्</translation>
 <translation id="7903925330883316394">उपयोगिता: <ph name="UTILITY_TYPE" /></translation>
@@ -8091,6 +8086,7 @@
 <translation id="8780123805589053431">Google बाट छविका विवरणहरू प्राप्त गर्नुहोस्</translation>
 <translation id="8780443667474968681">आवाजमार्फत खोजी गर्ने सुविधा निष्क्रिय पारिएको छ।</translation>
 <translation id="8781834595282316166">समूहमा नयाँ ट्याब थप्नुहोस्</translation>
+<translation id="8781980678064919987">लिड बन्द गरिएको बेला बन्द गर्नुहोस्</translation>
 <translation id="8782565991310229362">कियस्क एप्लिकेसन लन्च रद्द गरियो।</translation>
 <translation id="8783834180813871000">ब्लुटुथ प्रयोग गरी जोडा बनाउने कोड टाइप गर्नुहोस्, त्यसपछि Return वा Enter थिच्नुहोस्।</translation>
 <translation id="8784626084144195648">भाँडोको औसत</translation>
@@ -8155,7 +8151,6 @@
 <translation id="8846132060409673887">यो कम्प्युटरका निर्माता र मोडेल पढ्नुहोस्</translation>
 <translation id="8846163936679269230">eSIM प्रोफाइलहरू रिसेट गर्नुहोस्</translation>
 <translation id="8846239054091760429">मोनो अडियो, स्टार्टअप, लाइभ क्याप्सन र अन्य सुविधाहरू</translation>
-<translation id="8847523528195140327">कभर बन्द गरिएको बेला साइन आउट गर्नुहोस्</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">लुकाइएको</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> नामक eSIM प्रोफाइल हटाउने कार्य रद्द गर्नुहोस्</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index b55e32b..fbe3c939 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">Verbinding verbreken...</translation>
 <translation id="1537254971476575106">Volledig scherm vergroten</translation>
 <translation id="15373452373711364">Grote muisaanwijzer</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> vraagt toestemming om <ph name="ORIGIN" /> te lezen en te wijzigen</translation>
 <translation id="1540605929960647700">Demomodus aanzetten</translation>
 <translation id="1541346352678737112">Geen netwerk gevonden</translation>
 <translation id="1542137295869176367">Je inloggegevens kunnen niet worden geüpdatet</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022">Inloggegevens voor <ph name="USERNAME" /> op <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Kan <ph name="EXTENSION_TYPE_PARAMETER" /> niet toevoegen</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> resterend</translation>
-<translation id="1678794218766467608">Vergrendelen in slaapmodus of als de klep is gesloten</translation>
 <translation id="1679068421605151609">Ontwikkelaarstools</translation>
 <translation id="1679810534535368772">Weet je zeker dat je het scherm wilt afsluiten?</translation>
 <translation id="167983332380191032">Beheerservice heeft HTTP-fout verzonden.</translation>
@@ -850,7 +848,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> nooit bekijken</translation>
 <translation id="1794791083288629568">Feedback sturen om ons te helpen dit probleem op te lossen.</translation>
 <translation id="1795214765651529549">Klassiek thema gebruiken</translation>
-<translation id="1796105431091975902">Selecteer een Ansible-playbook om toe te voegen</translation>
 <translation id="1796588414813960292">Functies die afhankelijk zijn van geluid, werken niet</translation>
 <translation id="1797117170091578105">Speel met het toetsenbord van je Chromebook. Je kunt toetsen aan specifieke acties toewijzen.</translation>
 <translation id="1800502858278951817">Er zijn geen extensies die toestemming hebben gevraagd om <ph name="SITE_NAME" /> te lezen en te wijzigen</translation>
@@ -915,6 +912,7 @@
 <translation id="1842766183094193446">Weet je zeker dat je de demomodus wilt aanzetten?</translation>
 <translation id="1845727111305721124">Toestemming om geluid af te spelen</translation>
 <translation id="1846308012215045257">Ctrl-klik om <ph name="PLUGIN_NAME" /> uit te voeren</translation>
+<translation id="1848219224579402567">Uitloggen wanneer de klep wordt gesloten</translation>
 <translation id="184862733444771842">Functieverzoek</translation>
 <translation id="1849016657376805933">Elk HID-apparaat</translation>
 <translation id="1849186935225320012">Deze pagina heeft volledig beheer van MIDI-apparaten.</translation>
@@ -1022,7 +1020,6 @@
 <translation id="1941553344801134989">Versie: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Toewijzing van toetsen tonen</translation>
 <translation id="1942128823046546853">Al je gegevens op alle websites lezen en wijzigen</translation>
-<translation id="1942600407708803723">Uitzetten als de klep wordt gesloten</translation>
 <translation id="1944528062465413897">Bluetooth-koppelingscode:</translation>
 <translation id="1944921356641260203">Update gevonden</translation>
 <translation id="1947136734041527201">Hiermee kun je inloggen bij websites met het account dat je hebt bij een identiteitsservice</translation>
@@ -2552,6 +2549,7 @@
 <translation id="3406290648907941085">Toestemming om virtualreality-apparaten en -gegevens te gebruiken</translation>
 <translation id="3406396172897554194">Zoeken op taal of naam van invoermethode</translation>
 <translation id="3406605057700382950">&amp;Bookmarkbalk bekijken</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 wachtwoord geïmporteerd naar Google Wachtwoordmanager voor <ph name="USER_EMAIL" />}other{{NUM_PASSWORDS} wachtwoorden geïmporteerd naar Google Wachtwoordmanager voor <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">Ga naar selectie</translation>
 <translation id="3413122095806433232">CA-uitgevers: <ph name="LOCATION" /></translation>
@@ -3085,7 +3083,6 @@
 <translation id="389901847090970821">Toetsenbord selecteren</translation>
 <translation id="3900966090527141178">Wachtwoorden exporteren</translation>
 <translation id="3903187154317825986">Geïntegreerd toetsenbord</translation>
-<translation id="3903191712482985591">Playbook toevoegen</translation>
 <translation id="3904326018476041253">Locatieservices</translation>
 <translation id="3904849010307028014">Op basis van je interactie met een site, zoals vaak inloggen op een account, kan die site een Trust Token naar je browser sturen. Later kunnen andere bezochte sites checken op tokens. Als ze een geldig Trust Token vinden, is het waarschijnlijker dat je voor een persoon wordt aangezien dan voor een bot.</translation>
 <translation id="3905761538810670789">App repareren</translation>
@@ -3735,6 +3732,7 @@
 <translation id="4541123282641193691">Kan je account niet verifiëren. Probeer het opnieuw of start je Chromebook opnieuw op.</translation>
 <translation id="4541662893742891060">Kan geen verbinding maken met dit profiel. Neem contact op met je provider voor technische support.</translation>
 <translation id="4541706525461326392">Profiel verwijderen. Dit kan een paar minuten duren.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 wachtwoord geïmporteerd naar Google Wachtwoordmanager op dit apparaat}other{{NUM_PASSWORDS} wachtwoorden geïmporteerd naar Google Wachtwoordmanager op dit apparaat}}</translation>
 <translation id="4542520061254486227">Je gegevens voor <ph name="WEBSITE_1" /> en <ph name="WEBSITE_2" /> lezen</translation>
 <translation id="4543778593405494224">Certificaatbeheer</translation>
 <translation id="4544174279960331769">Standaard blauwe avatar</translation>
@@ -5025,7 +5023,6 @@
 <translation id="5827733057563115968">Woordvoorspelling</translation>
 <translation id="5828545842856466741">Profiel toevoegen...</translation>
 <translation id="5828633471261496623">Bezig met afdrukken....</translation>
-<translation id="5828797982387013521">Playbook selecteren</translation>
 <translation id="5830205393314753525">Kan <ph name="APP_NAME" /> niet openen</translation>
 <translation id="5830720307094128296">Pagina opslaan &amp;als...</translation>
 <translation id="5832813618714645810">Profielen</translation>
@@ -5915,7 +5912,6 @@
 <translation id="6686665106869989887">Tabblad naar rechts verplaatst</translation>
 <translation id="6686817083349815241">Je wachtwoord opslaan</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> verbergen</translation>
-<translation id="6688391094668641513">Verzoek om <ph name="ORIGIN" /> te lezen en te wijzigen:</translation>
 <translation id="6689714331348768690">Vraag <ph name="SUPERVISED_USER_NAME" /> om naar de computer te komen. Je kind leest een paar zinnen op dit scherm voor om een eigen spraakmodel te maken.
     <ph name="BR" />
 Als <ph name="SUPERVISED_USER_NAME" /> hulp nodig heeft bij het lezen, laat je kind jou dan nazeggen. Fluister weg van de microfoon zodat de Assistent de stem van je kind leert herkennen in plaats van die van jou.</translation>
@@ -6216,6 +6212,7 @@
 <translation id="6968288415730398122">Geef je wachtwoord op om de schermvergrendeling te configureren</translation>
 <translation id="6969047215179982698">Dichtbij delen uitzetten</translation>
 <translation id="6970480684834282392">Opstarttype</translation>
+<translation id="6970543303783413625">Kan wachtwoorden niet importeren. Je kunt maximaal <ph name="COUNT" /> wachtwoorden tegelijk importeren.</translation>
 <translation id="6970856801391541997">Specifieke pagina's afdrukken</translation>
 <translation id="6970861306198150268">Zorg dat je je huidige wachtwoord voor deze site opslaat</translation>
 <translation id="6972180789171089114">Audio/video</translation>
@@ -6448,6 +6445,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Pagina afsluiten}other{Pagina's afsluiten}}</translation>
 <translation id="7207457272187520234">Stuur gebruiks- en diagnostische gegevens. Dit apparaat stuurt momenteel automatisch diagnostische, apparaat- en app-gebruiksgegevens naar Google. Deze gegevens kunnen worden gebruikt om de systeem- en app-stabiliteit te verbeteren en andere optimalisaties mogelijk te maken. Daarnaast zijn bepaalde verzamelde gegevens nuttig voor Google-apps en -partners, zoals Android-ontwikkelaars. Deze instelling wordt afgedwongen door de eigenaar. Als je de instelling voor aanvullende Web- en app-activiteit hebt aangezet, kunnen deze gegevens worden opgeslagen in je Google-account.</translation>
 <translation id="7207631048330366454">Apps zoeken</translation>
+<translation id="7210471695184432500">Selecteer een csv-bestand om wachtwoorden op dit apparaat te importeren naar Google Wachtwoordmanager</translation>
 <translation id="7210499381659830293">Printers via extensie</translation>
 <translation id="7211783048245131419">Er is nog geen schakelaar toegewezen</translation>
 <translation id="7212097698621322584">Voer je huidige pincode in om deze te wijzigen. Als je je pincode niet weet, moet je de beveiligingssleutel resetten en vervolgens een nieuwe pincode maken.</translation>
@@ -7169,7 +7167,6 @@
 <translation id="7898725031477653577">Altijd vertalen</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Zoek je browsercomponenten? Ga naar</translation>
-<translation id="7903345046358933331">De pagina reageert niet meer. Je kunt wachten tot de pagina reageert of de pagina sluiten.</translation>
 <translation id="7903429136755645827">Klik om je gamebediening aan te passen</translation>
 <translation id="7903742244674067440">Je hebt certificaten waarmee deze certificeringsinstanties worden geïdentificeerd</translation>
 <translation id="7903925330883316394">Hulpprogramma: <ph name="UTILITY_TYPE" /></translation>
@@ -7505,6 +7502,7 @@
 <translation id="8206859287963243715">Mobiel</translation>
 <translation id="8208216423136871611">Niet opslaan</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Nieuwe melding}other{# nieuwe meldingen}}</translation>
+<translation id="821119981794423735">Selecteer een csv-bestand om wachtwoorden te importeren naar Google Wachtwoordmanager voor <ph name="USER_EMAIL" /></translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Download wordt uitgevoerd}other{Downloads worden uitgevoerd}}</translation>
 <translation id="8213449224684199188">Fotomodus geopend</translation>
 <translation id="8214489666383623925">Open bestand...</translation>
@@ -8084,6 +8082,7 @@
 <translation id="8780123805589053431">Afbeeldingsbeschrijvingen ophalen van Google</translation>
 <translation id="8780443667474968681">Gesproken zoekopdracht is uitgezet.</translation>
 <translation id="8781834595282316166">Nieuw tabblad in groep</translation>
+<translation id="8781980678064919987">Uitzetten wanneer de klep wordt gesloten</translation>
 <translation id="8782565991310229362">Starten van kiosk-app geannuleerd.</translation>
 <translation id="8783834180813871000">Typ de bluetooth-koppelingscode en druk op Return of Enter.</translation>
 <translation id="8784626084144195648">Gemiddelde van gegroepeerde gegevens</translation>
@@ -8148,7 +8147,6 @@
 <translation id="8846132060409673887">De fabrikant en het model van deze computer lezen</translation>
 <translation id="8846163936679269230">E-simkaartprofielen resetten</translation>
 <translation id="8846239054091760429">Monogeluid, opstarten, Live ondertiteling en meer</translation>
-<translation id="8847523528195140327">Uitloggen als de klep wordt gesloten</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Verborgen</translation>
 <translation id="8849219423513870962">Verwijdering van e-simkaartprofiel <ph name="PROFILE_NAME" /> annuleren</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 8bea37e8..b2c8e0c 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">Kobler fra …</translation>
 <translation id="1537254971476575106">Lupe for hele skjermen</translation>
 <translation id="15373452373711364">Stor markør</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> ber om å få lese og endre <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Slå på demomodus</translation>
 <translation id="1541346352678737112">Fant ingen nettverk</translation>
 <translation id="1542137295869176367">Påloggingsinformasjonen din kunne ikke oppdateres</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022">Legitimasjonsdetaljer for <ph name="USERNAME" /> på <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Kan ikke legge til <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> igjen</translation>
-<translation id="1678794218766467608">Lås i hvilemodus eller når dekselet lukkes</translation>
 <translation id="1679068421605151609">Utviklerverktøy</translation>
 <translation id="1679810534535368772">Er du sikker på at du vil avslutte?</translation>
 <translation id="167983332380191032">Administrasjonstjenesten sendte en HTTP-feil.</translation>
@@ -856,7 +854,6 @@
 <translation id="1794051631868188691">Vis aldri <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Send tilbakemelding så vi kan prøve å løse problemet.</translation>
 <translation id="1795214765651529549">Bruk klassisk</translation>
-<translation id="1796105431091975902">Velg Ansible-playbooken du vil legge til</translation>
 <translation id="1796588414813960292">Funksjoner som krever lyd, kommer ikke til å virke</translation>
 <translation id="1797117170091578105">Spill med Chromebook-tastaturet. Du kan tilpasse taster til bestemte handlinger.</translation>
 <translation id="1800502858278951817">Ingen utvidelser har bedt om å få lese eller endre <ph name="SITE_NAME" /></translation>
@@ -921,6 +918,7 @@
 <translation id="1842766183094193446">Er du sikker på at du vil slå på demomodus?</translation>
 <translation id="1845727111305721124">Nettsteder som har lov til å spille av lyd</translation>
 <translation id="1846308012215045257">Control-klikk for å kjøre <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Logg av når maskinen lukkes</translation>
 <translation id="184862733444771842">Funksjonsforespørsel</translation>
 <translation id="1849016657376805933">Hvilken som helst HID-enhet</translation>
 <translation id="1849186935225320012">Denne siden har full kontroll over MIDI-enheter.</translation>
@@ -1028,7 +1026,6 @@
 <translation id="1941553344801134989">Versjon: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Vis tastetilordninger</translation>
 <translation id="1942128823046546853">lese og endre alle dataene dine på alle nettsteder</translation>
-<translation id="1942600407708803723">Slå av når dekselet lukkes</translation>
 <translation id="1944528062465413897">Bluetooth-sammenkoblingskode</translation>
 <translation id="1944921356641260203">En oppdatering ble funnet</translation>
 <translation id="1947136734041527201">Lar deg logge på nettsteder med kontoer du har hos identitetstjenester</translation>
@@ -1720,6 +1717,7 @@
 <translation id="2568774940984945469">Beholder for inforad</translation>
 <translation id="2571655996835834626">Endre innstillingene som styrer nettsteders tilgang til elementer som informasjonskapsler, JavaScript, programtillegg, geolokalisering, mikrofon, kamera osv.</translation>
 <translation id="2572032849266859634">Skrivebeskyttet tilgang til <ph name="VOLUME_NAME" /> er innvilget.</translation>
+<translation id="2573276323521243649">Tilbake fra siden for valg av brukerbilde</translation>
 <translation id="2573417407488272418">Sikkerhetskopier apper og filer til Filer &gt; Mine filer før oppgraderingen.</translation>
 <translation id="2573831315551295105">Tilordne bryter for «<ph name="ACTION" />»</translation>
 <translation id="2575247648642144396">Dette ikonet vises når utvidelsen kan brukes på den gjeldende siden. Aktivér utvidelsen ved å klikke på ikonet eller trykke på <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3094,7 +3092,6 @@
 <translation id="389901847090970821">Velg tastatur</translation>
 <translation id="3900966090527141178">Eksportér passord</translation>
 <translation id="3903187154317825986">Innebygd tastatur</translation>
-<translation id="3903191712482985591">Legg til playbook</translation>
 <translation id="3904326018476041253">Stedstjenester</translation>
 <translation id="3904849010307028014">Basert på hvordan du samhandler med et bestemt nettsted (f.eks. hvis du pleier å logge på med en konto), kan nettstedet utstede et tillitstoken til nettleseren din. Hvis andre nettsteder du besøker, senere ser etter og finner et gyldig tillitstoken, er det større sannsynlighet for at de behandler deg som et menneske og ikke en robot.</translation>
 <translation id="3905761538810670789">Reparer appen</translation>
@@ -5036,7 +5033,6 @@
 <translation id="5827733057563115968">Forslag til neste ord</translation>
 <translation id="5828545842856466741">Legg til profil…</translation>
 <translation id="5828633471261496623">Skriver ut …</translation>
-<translation id="5828797982387013521">Velg veiledning</translation>
 <translation id="5830205393314753525">Kan ikke åpne <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">L&amp;agre side som</translation>
 <translation id="5832813618714645810">Profiler</translation>
@@ -5928,7 +5924,6 @@
 <translation id="6686665106869989887">Fanen er flyttet til høyre</translation>
 <translation id="6686817083349815241">Lagre passordet ditt</translation>
 <translation id="6687079240787935001">Skjul <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Ber om å få lese og endre <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Be <ph name="SUPERVISED_USER_NAME" /> om å komme til datamaskinen. Barnet ditt skal lese noen fraser på denne skjermen for å lage stemmemodellen sin.
     <ph name="BR" />
     Hvis <ph name="SUPERVISED_USER_NAME" /> trenger hjelp med å lese, kan du få barnet til å gjenta etter deg. Hvisk bort fra mikrofonen, slik at assistenten lærer seg barnets stemme og ikke din.</translation>
@@ -6410,6 +6405,7 @@
 <translation id="7138678301420049075">Annet</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> bruker mikrofonen din</translation>
 <translation id="7141105143012495934">Påloggingen mislyktes fordi kontoopplysningene dine ikke kunne hentes ut. Kontakt administratoren din, eller prøv på nytt.</translation>
+<translation id="7141844554192012199">Sjekk</translation>
 <translation id="7144878232160441200">Prøv på nytt</translation>
 <translation id="7149839598364933473">Konverter denne enheten til en <ph name="DEVICE_OS" />-enhet.</translation>
 <translation id="7149893636342594995">Siste døgn</translation>
@@ -7186,7 +7182,6 @@
 <translation id="7898725031477653577">Oversett alltid</translation>
 <translation id="7901405293566323524">Telefonstyring</translation>
 <translation id="7903290522161827520">Ser du etter nettleserkomponenter? Gå til</translation>
-<translation id="7903345046358933331">Siden svarer ikke. Du kan vente til den svarer eller lukke den.</translation>
 <translation id="7903429136755645827">Klikk for å tilpasse spillkontrollene dine</translation>
 <translation id="7903742244674067440">Du har registrerte sertifikater som identifiserer disse sertifikatinstansene</translation>
 <translation id="7903925330883316394">Verktøy: <ph name="UTILITY_TYPE" /></translation>
@@ -8101,6 +8096,7 @@
 <translation id="8780123805589053431">Få bildebeskrivelser fra Google</translation>
 <translation id="8780443667474968681">Talesøk er slått av.</translation>
 <translation id="8781834595282316166">Ny fane i gruppen</translation>
+<translation id="8781980678064919987">Slå av maskinen når den lukkes</translation>
 <translation id="8782565991310229362">Oppstart av kiosk-appen er avbrutt.</translation>
 <translation id="8783834180813871000">Skriv inn Bluetooth-sammenkoblingskoden, og trykk på Retur eller Enter.</translation>
 <translation id="8784626084144195648">Gjennomsnitt av grupperte data</translation>
@@ -8165,7 +8161,6 @@
 <translation id="8846132060409673887">Les om datamaskinens produsent og modell</translation>
 <translation id="8846163936679269230">Tilbakestill e-SIM-profiler</translation>
 <translation id="8846239054091760429">Monolyd, oppstart, direkteteksting med mer</translation>
-<translation id="8847523528195140327">Logg ut når dekselet lukkes</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Skjult</translation>
 <translation id="8849219423513870962">Avbryt fjerning av e-SIM-profilen <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index 0b55af6..3186487 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -559,7 +559,6 @@
 <translation id="1536754031901697553">ସଂଯୋଗ ବିଚ୍ଛିନ୍ନ ହେଉଛି...</translation>
 <translation id="1537254971476575106">ପୂର୍ଣ୍ଣସ୍କ୍ରିନ୍‌ ମ୍ୟାଗ୍ନିଫାୟର୍</translation>
 <translation id="15373452373711364">ବଡ଼ ମାଉସ୍‍ କର୍ସର୍‌</translation>
-<translation id="1539630663098418038"><ph name="ORIGIN" /> ପଢ଼ିବା ଏବଂ ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ <ph name="EXTENSIONS_REQUESTING_ACCESS" /> ଅନୁରୋଧ କରୁଛି</translation>
 <translation id="1540605929960647700">ଡେମୋ ମୋଡ୍ ସକ୍ଷମ କରନ୍ତୁ</translation>
 <translation id="1541346352678737112">କୌଣସି ନେଟୱାର୍କ ମିଳିଲା ନାହିଁ</translation>
 <translation id="1542137295869176367">ଆପଣଙ୍କ ସାଇନ-ଇନ ଡାଟାକୁ ଅପଡେଟ କରାଯାଇପାରିଲା ନାହିଁ</translation>
@@ -721,7 +720,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" />ରେ <ph name="USERNAME" /> ପାଇଁ କ୍ରେଡେନସିଆଲର ବିବରଣୀ</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" />କୁ ଯୋଗ କରିପାରିବେ ନାହିଁ</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ବାକି ଅଛି</translation>
-<translation id="1678794218766467608">ସ୍ଲିପ ମୋଡରେ କିମ୍ବା କଭର ବନ୍ଦ ଥିଲେ ଲକ କରନ୍ତୁ</translation>
 <translation id="1679068421605151609">ଡେଭେଲପର୍ ଟୁଲ୍</translation>
 <translation id="1679810534535368772">ଆପଣ ନିଶ୍ଚିତ ରୂପେ ବାହାରିବାକୁ ଚାହୁଁଛନ୍ତି କି?</translation>
 <translation id="167983332380191032">ପରିଚାଳନା ସେବା HTTP ତ୍ରୁଟି ପଠାଇଛନ୍ତି</translation>
@@ -849,7 +847,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" />କୁ କେବେ ବି ଦେଖାନ୍ତୁ ନାହିଁ</translation>
 <translation id="1794791083288629568">ଏହି ସମସ୍ୟାକୁ ସମାଧାନ କରିବାରେ ଆମକୁ ସାହାଯ୍ୟ କରିବାକୁ ମତାମତ ପଠାନ୍ତୁ।</translation>
 <translation id="1795214765651529549">କ୍ଲାସିକ୍ ବ୍ୟବହାର କରନ୍ତୁ</translation>
-<translation id="1796105431091975902">ଯୋଗ କରିବା ପାଇଁ ଏକ Ansible Playbook ଚୟନ କରନ୍ତୁ</translation>
 <translation id="1796588414813960292">ସାଉଣ୍ଡ ଆବଶ୍ୟକ କରୁଥିବା ଫିଚରଗୁଡ଼ିକ କାମ କରିବ ନାହିଁ</translation>
 <translation id="1797117170091578105">ଆପଣଙ୍କ Chromebook କୀବୋର୍ଡ ବ୍ୟବହାର କରି ପ୍ଲେ କରନ୍ତୁ। ଆପଣ ନିର୍ଦ୍ଦିଷ୍ଟ କାର୍ଯ୍ୟଗୁଡ଼ିକ ପାଇଁ କୀଗୁଡ଼ିକୁ କଷ୍ଟମାଇଜ କରିପାରିବେ।</translation>
 <translation id="1800502858278951817">କୌଣସି ଏକ୍ସଟେନସନ <ph name="SITE_NAME" />କୁ ପଢ଼ିବା ଏବଂ ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ ଅନୁରୋଧ କରିନାହିଁ</translation>
@@ -912,6 +909,7 @@
 <translation id="1842766183094193446">ଆପଣ କ’ଣ ସୁନିଶ୍ଚିତ ଯେ ଆପଣ ଡେମୋ ମୋଡ୍‌ ସକ୍ଷମ କରିବାକୁ ଚାହୁଁଛନ୍ତି?</translation>
 <translation id="1845727111305721124">ସାଉଣ୍ଡ ଚଲାଇବାକୁ ଅନୁମତି ଦିଆଯାଇଛି</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" />କୁ ଚଲାଇବା ପାଇଁ Controlକୁ ଦବାଇ ଧରି କ୍ଲିକ୍ କରନ୍ତୁ</translation>
+<translation id="1848219224579402567">ଲିଡ୍ ବନ୍ଦ ହେବା ପରେ ସାଇନ୍ ଆଉଟ୍ କରନ୍ତୁ</translation>
 <translation id="184862733444771842">ଫିଚର୍ ପାଇଁ ଅନୁରୋଧ</translation>
 <translation id="1849016657376805933">ଯେ କୌଣସି HID ଡିଭାଇସ</translation>
 <translation id="1849186935225320012">ଏହି ପୃଷ୍ଠା ପାଖରେ MIDI ଡିଭାଇସ୍‌ଗୁଡ଼ିକ ଉପରେ ପୂର୍ଣ୍ଣ ନିୟନ୍ତ୍ରଣ ଅଛି।</translation>
@@ -1019,7 +1017,6 @@
 <translation id="1941553344801134989">ସଂସ୍କରଣ: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">କୀ ମ୍ୟାପିଂ ଦେଖାନ୍ତୁ</translation>
 <translation id="1942128823046546853">ସମସ୍ତ ୱେବସାଇଟରେ ଆପଣଙ୍କ ସବୁ ଡାଟା ପଢ଼ି ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation>
-<translation id="1942600407708803723">କଭର୍ ବନ୍ଦ ହେବା ପରେ ବନ୍ଦ କରନ୍ତୁ</translation>
 <translation id="1944528062465413897">ବ୍ଲୁଟୁଥ୍ ପେୟାରିଂ କୋଡ୍:</translation>
 <translation id="1944921356641260203">ଅପ୍‌ଡେଟ୍‍ ମିଳିଲା</translation>
 <translation id="1947136734041527201">ଏକ ପରିଚୟ ପ୍ରଦାନ କରୁଥିବା ସେବା ସହିତ ଆପଣଙ୍କର ଆକାଉଣ୍ଟ ବ୍ୟବହାର କରି ଆପଣଙ୍କୁ ୱେବସାଇଟରେ ସାଇନ ଇନ କରିବାକୁ ଦିଏ</translation>
@@ -3083,7 +3080,6 @@
 <translation id="389901847090970821">କୀ'ବୋର୍ଡ୍ ଚୟନ କରନ୍ତୁ</translation>
 <translation id="3900966090527141178">ପାସ୍‍ୱର୍ଡଗୁଡ଼ିକ ଏକ୍ସପୋର୍ଟ କରନ୍ତୁ</translation>
 <translation id="3903187154317825986">ବିଲ୍ଟ-ଇନ୍ କୀବୋର୍ଡ</translation>
-<translation id="3903191712482985591">Playbook ଯୋଗ କରନ୍ତୁ</translation>
 <translation id="3904326018476041253">ଲୋକେସନ୍ ସେବାଗୁଡ଼ିକ</translation>
 <translation id="3904849010307028014">ନିୟମିତ ଭାବେ ଏକ ଆକାଉଣ୍ଟରେ ସାଇନ ଇନ କରିବା ପରି, ଏକ ସାଇଟ ସହ ଆପଣଙ୍କ ଇଣ୍ଟରାକ୍ସନ ଆଧାରରେ, ସେହି ସାଇଟ ଆପଣଙ୍କ ବ୍ରାଉଜରକୁ ଏକ ଟ୍ରଷ୍ଟ ଟୋକନ ଦେଇପାରିବ। ପରେ, ଯଦି ଆପଣ ଭିଜିଟ କରୁଥିବା ଅନ୍ୟ ସାଇଟଗୁଡ଼ିକ ଏକ ବୈଧ ଟ୍ରଷ୍ଟ ଟୋକନ ପାଇଁ ଯାଞ୍ଚ କରି ତାହା ପାଏ, ତେବେ ସେଗୁଡ଼ିକ ଆପଣଙ୍କ ସହ ଏକ ବୋଟ ପରିବର୍ତ୍ତେ ଜଣେ ବ୍ୟକ୍ତି ଭାବରେ ଆଚରଣ କରିବାର ଅଧିକ ସମ୍ଭାବନା ଅଛି।</translation>
 <translation id="3905761538810670789">ଆପ୍ ମରାମତି କରନ୍ତୁ</translation>
@@ -5026,7 +5022,6 @@
 <translation id="5827733057563115968">ପରବର୍ତ୍ତୀ ଶବ୍ଦ ପୂର୍ବାନୁମାନ</translation>
 <translation id="5828545842856466741">ପ୍ରୋଫାଇଲ୍ ଯୋଗ କରନ୍ତୁ...</translation>
 <translation id="5828633471261496623">ପ୍ରିଣ୍ଟିଂ...</translation>
-<translation id="5828797982387013521">ପ୍ଲେବୁକ ଚୟନ କରନ୍ତୁ</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" />କୁ ଖୋଲା ଯାଇପାରିବ ନାହିଁ</translation>
 <translation id="5830720307094128296">&amp;ଏହି ଭାବେ ପୃଷ୍ଠା ସେଭ୍ କରନ୍ତୁ...</translation>
 <translation id="5832813618714645810">ପ୍ରୋଫାଇଲଗୁଡ଼ିକ</translation>
@@ -5919,7 +5914,6 @@
 <translation id="6686665106869989887">ଡାହାଣକୁ ଟାବ୍ ମୁଭ୍ କରାଯାଇଛି</translation>
 <translation id="6686817083349815241">ଆପଣଙ୍କର ପାସ୍‍ୱାର୍ଡ ସେଭ୍ କରନ୍ତୁ</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" />କୁ ଲୁଚାନ୍ତୁ</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" />କୁ ପଢ଼ିବା ଏବଂ ସେଥିରେ ପରିବର୍ତ୍ତନ କରିବା ପାଇଁ ଅନୁରୋଧ କରାଯାଉଛି:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" />କୁ କମ୍ପ୍ୟୁଟର ବ୍ୟବହାର କରିବାକୁ କୁହ। ଆପଣଙ୍କ ପିଲା ତା'ର ଭଏସ୍ ମଡେଲ୍ ତିଆରି କରିବା ପାଇଁ ଏହି ସ୍କ୍ରିନରେ କିଛି ବାକ୍ୟାଂଶ ପଢ଼ିବ।
     <ph name="BR" />
 ଯଦି ପଢ଼ିବା ପାଇଁ <ph name="SUPERVISED_USER_NAME" /> ସାହାଯ୍ୟ ଆବଶ୍ୟକ କରେ, ତେବେ ଆପଣ ପଢ଼ିଲା ପରେ ଆପଣଙ୍କ ପିଲାକୁ ତାହା ରିପିଟ୍ କରିବାକୁ ଦିଅନ୍ତୁ। ମାଇକଠାରୁ ଦୂରରେ ରହି ଧୀର ସ୍ୱରରେ କୁହନ୍ତୁ ଯାହାଫଳରେ Assistant ଆପଣଙ୍କ ପରିବର୍ତ୍ତେ ଆପଣଙ୍କ ପିଲାର ଭଏସକୁ ଚିହ୍ନିବା ଶିଖିଥାଏ।</translation>
@@ -7177,7 +7171,6 @@
 <translation id="7898725031477653577">ସର୍ବଦା ଅନୁବାଦ କରନ୍ତୁ</translation>
 <translation id="7901405293566323524">ଫୋନ୍ ହବ୍</translation>
 <translation id="7903290522161827520">ବ୍ରାଉଜର କମ୍ପୋନେଣ୍ଟଗୁଡ଼ିକୁ ଖୋଜୁଛନ୍ତି କି? ଭିଜିଟ କରନ୍ତୁ</translation>
-<translation id="7903345046358933331">ପୃଷ୍ଠାଟି ପ୍ରତିକ୍ରିୟାରହିତ ହୋ‍ଇଛି ଆପଣ ଏହାର ପ୍ରତିକ୍ରିୟା ଦେବା ପର୍ଯ୍ୟନ୍ତ ଅପେକ୍ଷା କରିପାରିବେ କିମ୍ବା ଏହାକୁ ବନ୍ଦ କରିପାରିବେ।</translation>
 <translation id="7903429136755645827">ଆପଣଙ୍କ ଗେମ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକୁ କଷ୍ଟମାଇଜ କରିବା ପାଇଁ କ୍ଲିକ କରନ୍ତୁ</translation>
 <translation id="7903742244674067440">ଫାଇଲ୍‌ରେ ଆପଣଙ୍କର ସାର୍ଟିଫିକେଟ୍‌ ଅଛି ଯାହା ଏହି ସାର୍ଟିଫିକେଟ୍‌ଗୁଡ଼ିକର ପ୍ରାଧିକରଣ ଚିହ୍ନଟ କରିଥାଏ</translation>
 <translation id="7903925330883316394">ଉପଯୋଗିତାଗୁଡିକ: <ph name="UTILITY_TYPE" /></translation>
@@ -8090,6 +8083,7 @@
 <translation id="8780123805589053431">Googleରୁ ଛବିର ଡେସ୍କ୍ରିପସନ୍‌ଗୁଡ଼ିକ ପ୍ରାପ୍ତ କରନ୍ତୁ</translation>
 <translation id="8780443667474968681">ଭଏସ୍‌ ସନ୍ଧାନ ବନ୍ଦ କରାଯାଇଛି।</translation>
 <translation id="8781834595282316166">ଗୋଷ୍ଠୀରେ ନୂଆ ଟାବ୍</translation>
+<translation id="8781980678064919987">ଲିଡ୍ ବନ୍ଦ ହେବା ପରେ ବନ୍ଦ କରନ୍ତୁ</translation>
 <translation id="8782565991310229362">କିଓସ୍କ ଆପ୍ଲିକେସନ୍ ଲଞ୍ଚକୁ ବାତିଲ୍ କରାଯାଇଛି।</translation>
 <translation id="8783834180813871000">ବ୍ଲୁଟୁଥ୍ ପେୟାରିଂ କୋଡ୍ ଟାଇପ୍ କରିବା ପରେ ରିଟର୍ନ କିମ୍ୱା ଏଣ୍ଟର୍ ଦାବନ୍ତୁ।</translation>
 <translation id="8784626084144195648">ବିନ୍ କରାଯାଇଥିବା ହାର</translation>
@@ -8154,7 +8148,6 @@
 <translation id="8846132060409673887">ଏହି କମ୍ପ୍ୟୁଟର୍‍‍ର ନିର୍ମାତା ଓ ମଡେଲ୍ ବିଷୟରେ ପଢ଼ନ୍ତୁ</translation>
 <translation id="8846163936679269230">eSIM ପ୍ରୋଫାଇଲଗୁଡ଼ିକୁ ରିସେଟ୍ କରନ୍ତୁ</translation>
 <translation id="8846239054091760429">ମନୋ ଅଡିଓ, ଷ୍ଟାର୍ଟଅପ, ଲାଇଭ କ୍ୟାପସନ ଏବଂ ଆହୁରି ଅନେକ କିଛି</translation>
-<translation id="8847523528195140327">କଭର୍ ବନ୍ଦ ଥିଲେ ସାଇନ୍ ଆଉଟ୍ କରନ୍ତୁ</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">ଲୁକ୍କାୟିତ</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> ନାମକ eSIM ପ୍ରୋଫାଇଲକୁ କାଢ଼ିଦେବାର ପ୍ରକ୍ରିୟାକୁ ବାତିଲ୍ କରନ୍ତୁ</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb
index 530f2c2..d9a593c2 100644
--- a/chrome/app/resources/generated_resources_pa.xtb
+++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -564,7 +564,6 @@
 <translation id="1536754031901697553">ਡਿਸਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…</translation>
 <translation id="1537254971476575106">ਪੂਰੀ-ਸਕ੍ਰੀਨ ਵਿਸਤਾਰਕ</translation>
 <translation id="15373452373711364">ਵੱਡਾ ਮਾਊਸ ਕਰਸਰ</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> <ph name="ORIGIN" /> ਨੂੰ ਪੜ੍ਹਨ ਅਤੇ ਬਦਲਣ ਦੀ ਬੇਨਤੀ ਕਰ ਰਿਹਾ ਹੈ</translation>
 <translation id="1540605929960647700">ਡੈਮੋ ਮੋਡ ਚਾਲੂ ਕਰੋ</translation>
 <translation id="1541346352678737112">ਕੋਈ ਨੈੱਟਵਰਕ ਨਹੀਂ ਮਿਲਿਆ</translation>
 <translation id="1542137295869176367">ਤੁਹਾਡੇ ਸਾਈਨ-ਇਨ ਡਾਟੇ ਨੂੰ ਅੱਪਡੇਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ</translation>
@@ -726,7 +725,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> 'ਤੇ <ph name="USERNAME" /> ਦੇ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਵੇਰਵੇ</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> ਨੂੰ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ਬਾਕੀ</translation>
-<translation id="1678794218766467608">ਸਲੀਪ ਮੋਡ ਵਿੱਚ ਜਾਂ ਕਵਰ ਬੰਦ ਹੋਣ 'ਤੇ ਲਾਕ ਕਰੋ</translation>
 <translation id="1679068421605151609">ਵਿਕਾਸਕਾਰ ਟੂਲਾਂ</translation>
 <translation id="1679810534535368772">ਕੀ ਪੱਕਾ ਤੁਸੀਂ ਬਾਹਰ ਜਾਣਾ ਚਾਹੁੰਦੇ ਹੋ?</translation>
 <translation id="167983332380191032">ਪ੍ਰਬੰਧਨ ਸੇਵਾ ਨੇ HTTP ਗੜਬੜ ਕੋਡ ਭੇਜਿਆ।</translation>
@@ -862,7 +860,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> ਕਦੇ ਨਾ ਦਿਖਾਓ</translation>
 <translation id="1794791083288629568">ਇਸ ਸਮੱਸਿਆ ਨੂੰ ਠੀਕ ਕਰਨ ਵਿੱਚ ਸਾਡੀ ਮਦਦ ਕਰਨ ਲਈ ਪ੍ਰਤੀਕਰਮ ਭੇਜੋ।</translation>
 <translation id="1795214765651529549">ਕਲਾਸਿਕ ਵਰਤੋ</translation>
-<translation id="1796105431091975902">ਸ਼ਾਮਲ ਕਰਨ ਲਈ Ansible ਪਲੇਬੁੱਕ ਨੂੰ ਚੁਣੋ</translation>
 <translation id="1796588414813960292">ਜਿਨ੍ਹਾਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਧੁਨੀ ਦੀ ਲੋੜ ਹੈ ਉਹ ਕੰਮ ਨਹੀਂ ਕਰਨਗੀਆਂ</translation>
 <translation id="1797117170091578105">ਆਪਣੇ Chromebook ਦੇ ਕੀ-ਬੋਰਡ ਦੀ ਵਰਤੋਂ ਕਰ ਕੇ ਖੇਡੋ। ਤੁਸੀਂ ਕਾਰਵਾਈਆਂ ਨੂੰ ਨਿਰਧਾਰਿਤ ਕਰਨ ਲਈ ਕੁੰਜੀਆਂ ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰ ਸਕਦੇ ਹੋ।</translation>
 <translation id="1800502858278951817">ਕਿਸੇ ਵੀ ਐਕਸਟੈਂਸ਼ਨ ਨੇ <ph name="SITE_NAME" /> ਨੂੰ ਪੜ੍ਹਨ ਅਤੇ ਬਦਲਣ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਹੈ</translation>
@@ -927,6 +924,7 @@
 <translation id="1842766183094193446">ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਡੈਮੋ ਮੋਡ ਨੂੰ ਚਾਲੂ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?</translation>
 <translation id="1845727111305721124">ਧੁਨੀ ਵਜਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਹੈ</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> ਚਲਾਉਣ ਲਈ Control ਦੱਬ ਕੇ ਕਲਿੱਕ ਕਰੋ</translation>
+<translation id="1848219224579402567">ਢੱਕਣ ਬੰਦ ਹੋਣ 'ਤੇ ਸਾਈਨ-ਆਊਟ ਹੋਵੋ</translation>
 <translation id="184862733444771842">ਵਿਸ਼ੇਸ਼ਤਾ ਲਈ ਬੇਨਤੀ</translation>
 <translation id="1849016657376805933">ਕੋਈ ਵੀ HID ਡੀਵਾਈਸ</translation>
 <translation id="1849186935225320012">ਇਸ ਸਫ਼ੇ ਦਾ MIDI ਡਿਵਾਈਸਾਂ ਤੇ ਪੂਰਾ ਨਿਯੰਤਰਣ ਹੈ।</translation>
@@ -1035,7 +1033,6 @@
 <translation id="1941553344801134989">ਵਰਜਨ: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">ਕੁੰਜੀ ਦੀ ਮੈਪਿੰਗ ਦਿਖਾਓ</translation>
 <translation id="1942128823046546853">ਸਾਰੀਆਂ ਵੈੱਬਸਾਈਟਾਂ 'ਤੇ ਆਪਣਾ ਸਾਰਾ ਡਾਟਾ ਪੜ੍ਹੋ ਅਤੇ ਬਦਲੋ</translation>
-<translation id="1942600407708803723">ਕਵਰ ਬੰਦ ਹੋਣ 'ਤੇ ਬੰਦ ਕਰੋ</translation>
 <translation id="1944528062465413897">ਬਲੂਟੁੱਥ ਜੋੜਾਬੱਧਕਰਨ ਕੋਡ:</translation>
 <translation id="1944921356641260203">ਅੱਪਡੇਟ ਮਿਲਿਆ</translation>
 <translation id="1947136734041527201">ਤੁਹਾਨੂੰ ਉਸ ਖਾਤੇ ਨਾਲ ਵੈੱਬਸਾਈਟਾਂ ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰਨ ਦਿੰਦਾ ਹੈ ਜਿਸਦੀ ਵਰਤੋਂ ਤੁਸੀਂ ਪਛਾਣ ਸੰਬੰਧੀ ਸੇਵਾ ਨਾਲ ਕਰਦੇ ਹੋ</translation>
@@ -1727,6 +1724,7 @@
 <translation id="2568774940984945469">ਇੰਫੋਬਾਰ ਕੰਟੇਨਰ</translation>
 <translation id="2571655996835834626">ਆਪਣੀਆਂ ਉਹ ਸੈਟਿੰਗਾਂ ਬਦਲੋ ਜੋ ਕੁਕੀਜ਼, JavaScript, ਪਲੱਗਇਨਾਂ, ਭੂਗੋਲਿਕ-ਟਿਕਾਣਾ, ਮਾਈਕ੍ਰੋਫ਼ੋਨ, ਕੈਮਰਾ ਆਦਿ ਵਰਗੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰਨ ਵਾਲੀਆਂ ਵੈੱਬਸਾਈਟਾਂ ਨੂੰ ਕੰਟਰੋਲ ਕਰਦੀਆਂ ਹਨ।</translation>
 <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> ਤੱਕ ਰੀਡ-ਓਨਲੀ ਪਹੁੰਚ ਦੀ ਅਨੁਮਤੀ ਦਿੱਤੀ ਗਈ ਹੈ।</translation>
+<translation id="2573276323521243649">ਅਵਤਾਰ ਚੁਣਨ ਵਾਲੇ ਪੰਨੇ ਤੋਂ ਵਾਪਸ ਜਾਓ</translation>
 <translation id="2573417407488272418">ਅੱਪਗ੍ਰੇਡ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਐਪਾਂ ਅਤੇ ਫ਼ਾਈਲਾਂ ਦਾ 'ਫ਼ਾਈਲਾਂ &gt; ਮੇਰੀਆਂ ਫ਼ਾਈਲਾਂ' 'ਤੇ ਬੈਕਅੱਪ ਲਓ।</translation>
 <translation id="2573831315551295105">“<ph name="ACTION" />” ਲਈ ਸਵਿੱਚ ਜ਼ਿੰਮੇ ਲਗਾਓ</translation>
 <translation id="2575247648642144396">ਇਹ ਪ੍ਰਤੀਕ ਉਦੋਂ ਦਿਖਾਈ ਦੇਵੇਗਾ ਜਦੋਂ ਐਕਸਟੈਂਸ਼ਨ ਮੌਜੂਦਾ ਪੰਨੇ 'ਤੇ ਕਾਰਵਾਈ ਕਰ ਸਕਦੀ ਹੈ। ਪ੍ਰਤੀਕ 'ਤੇ ਕਲਿੱਕ ਕਰਕੇ ਜਾਂ <ph name="EXTENSION_SHORTCUT" /> ਨੂੰ ਦਬਾ ਕੇ ਇਹ ਐਕਸਟੈਂਸ਼ਨ ਵਰਤੋ।</translation>
@@ -3100,7 +3098,6 @@
 <translation id="389901847090970821">ਕੀ-ਬੋਰਡ ਚੁਣੋ</translation>
 <translation id="3900966090527141178">ਪਾਸਵਰਡਾਂ ਨੂੰ ਨਿਰਯਾਤ ਕਰੋ</translation>
 <translation id="3903187154317825986">ਬਿਲਟ-ਇਨ ਕੀ-ਬੋਰਡ</translation>
-<translation id="3903191712482985591">ਪਲੇਬੁੱਕ ਸ਼ਾਮਲ ਕਰੋ</translation>
 <translation id="3904326018476041253">ਟਿਕਾਣਾ ਸੇਵਾਵਾਂ</translation>
 <translation id="3904849010307028014">ਕਿਸੇ ਸਾਈਟ ਨਾਲ ਤੁਹਾਡੀ ਅੰਤਰਕਿਰਿਆ ਦੇ ਆਧਾਰ 'ਤੇ, ਜਿਵੇਂ ਕਿ ਕਿਸੇ ਖਾਤੇ ਵਿੱਚ ਨਿਯਮਿਤ ਤੌਰ 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਨਾ, ਉਹ ਸਾਈਟ ਤੁਹਾਡੇ ਬ੍ਰਾਊਜ਼ਰ 'ਤੇ ਟਰੱਸਟ ਟੋਕਨ ਜਾਰੀ ਕਰ ਸਕਦੀ ਹੈ। ਬਾਅਦ ਵਿੱਚ, ਜੇ ਹੋਰ ਸਾਈਟਾਂ ਜਿਨ੍ਹਾਂ 'ਤੇ ਤੁਸੀਂ ਜਾਂਦੇ ਹੋ ਉਹ ਕਿਸੇ ਵੈਧ ਟਰੱਸਟ ਟੋਕਨ ਦੀ ਜਾਂਚ ਕਰ ਕੇ ਉਸਨੂੰ ਲੱਭਦੀਆਂ ਹਨ, ਤਾਂ ਉਨ੍ਹਾਂ ਵੱਲੋਂ ਤੁਹਾਡੇ ਨਾਲ ਵਿਅਕਤੀ ਦੀ ਤਰ੍ਹਾਂ ਅਤੇ ਨਾ ਕਿ ਬੋਟ ਦੀ ਤਰ੍ਹਾਂ ਪੇਸ਼ ਆਉਣ ਦੀ ਜ਼ਿਆਦਾ ਸੰਭਾਵਨਾ ਹੈ।</translation>
 <translation id="3905761538810670789">ਐਪ ਰਿਪੇਅਰ ਕਰੋ</translation>
@@ -5046,7 +5043,6 @@
 <translation id="5827733057563115968">ਅਗਲੇ ਸ਼ਬਦ ਦਾ ਪੂਰਵ-ਅਨੁਮਾਨ</translation>
 <translation id="5828545842856466741">ਪ੍ਰੋਫਾਈਲ ਸ਼ਾਮਲ ਕਰੋ...</translation>
 <translation id="5828633471261496623">ਪ੍ਰਿੰਟ ਕਰ ਰਿਹਾ ਹੈ...</translation>
-<translation id="5828797982387013521">ਪਲੇਬੁੱਕ ਚੁਣੋ</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ</translation>
 <translation id="5830720307094128296">ਪੰਨੇ ਨੂੰ ਇਸ ਵਜੋਂ &amp;ਰੱਖਿਅਤ ਕਰੋ...</translation>
 <translation id="5832813618714645810">ਪ੍ਰੋਫਾਈਲਾਂ</translation>
@@ -5940,7 +5936,6 @@
 <translation id="6686665106869989887">ਟੈਬ ਨੂੰ ਸੱਜੇ ਪਾਸੇ ਲਿਜਾਇਆ ਗਿਆ</translation>
 <translation id="6686817083349815241">ਆਪਣਾ ਪਾਸਵਰਡ ਰੱਖਿਅਤ ਕਰੋ</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> ਲੁਕਾਓ</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> ਨੂੰ ਪੜ੍ਹਨ ਅਤੇ ਬਦਲਣ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> ਨੂੰ ਕੰਪਿਊਟਰ 'ਤੇ ਆਉਣ ਲਈ ਕਹੋ। ਤੁਹਾਡਾ ਬੱਚਾ ਆਪਣਾ ਅਵਾਜ਼ੀ ਮਾਡਲ ਬਣਾਉਣ ਲਈ ਇਸ ਸਕ੍ਰੀਨ 'ਤੇ ਕੁਝ ਵਾਕਾਂਸ਼ ਪੜ੍ਹੇਗਾ।
     <ph name="BR" />
     
@@ -6423,6 +6418,7 @@
 <translation id="7138678301420049075">ਹੋਰ</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> ਤੁਹਾਡੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ ਹੈ</translation>
 <translation id="7141105143012495934">ਸਾਈਨ-ਇਨ ਅਸਫਲ ਹੋਇਆ ਕਿਉਂਕਿ ਤੁਹਾਡੇ ਖਾਤੇ ਦਾ ਵੇਰਵਿਆਂ ਨੂੰ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ ਜਾਂ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation>
+<translation id="7141844554192012199">ਜਾਂਚ ਕਰੋ</translation>
 <translation id="7144878232160441200">ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ</translation>
 <translation id="7149839598364933473">ਇਸ ਡੀਵਾਈਸ ਨੂੰ <ph name="DEVICE_OS" /> ਡੀਵਾਈਸ ਵਿੱਚ ਬਦਲੋ।</translation>
 <translation id="7149893636342594995">ਪਿਛਲੇ 24 ਘੰਟੇ</translation>
@@ -7199,7 +7195,6 @@
 <translation id="7898725031477653577">ਹਮੇਸ਼ਾਂ ਅਨੁਵਾਦ ਕਰੋ</translation>
 <translation id="7901405293566323524">ਫ਼ੋਨ ਹੱਬ</translation>
 <translation id="7903290522161827520">ਕੀ ਬ੍ਰਾਊਜ਼ਰ ਤੱਤਾਂ ਨੂੰ ਲੱਭ ਰਹੇ ਹੋ? ਇੱਥੇ ਜਾਓ</translation>
-<translation id="7903345046358933331">ਪੰਨਾ ਅਨਰਿਸਪੋਂਸਿਵ ਹੋ ਗਿਆ ਹੈ। ਤਸੀਂ ਇਸ ਦੇ ਰਿਸਪੋਂਸਿਵ ਹੋਣ ਤੱਕ ਉਡੀਕ ਸਕਦੇ ਹੋ ਜਾਂ ਇਸ ਨੂੰ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ।</translation>
 <translation id="7903429136755645827">ਆਪਣੀ ਗੇਮ ਦੇ ਕੰਟਰੋਲਾਂ ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ</translation>
 <translation id="7903742244674067440">ਤੁਹਾਡੇ ਕੋਲ ਫ਼ਾਈਲ 'ਤੇ ਅਜਿਹੇ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਹਨ ਜੋ ਇਹਨਾਂ ਪ੍ਰਮਾਣ-ਪੱਤਰਾਂ ਦਾ ਇਖਤਿਆਰੀਕਰਨ ਕਰਦੇ ਹਨ</translation>
 <translation id="7903925330883316394">ਉਪਯੋਗਤਾ: <ph name="UTILITY_TYPE" /></translation>
@@ -8114,6 +8109,7 @@
 <translation id="8780123805589053431">Google ਤੋਂ ਚਿੱਤਰ ਵਰਣਨ ਪ੍ਰਾਪਤ ਕਰੋ</translation>
 <translation id="8780443667474968681">ਅਵਾਜ਼ੀ ਖੋਜ ਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ।</translation>
 <translation id="8781834595282316166">ਗਰੁੱਪ ਵਿੱਚ ਨਵੀਂ ਟੈਬ</translation>
+<translation id="8781980678064919987">ਢੱਕਣ ਬੰਦ ਹੋਣ 'ਤੇ ਬੰਦ ਕਰੋ</translation>
 <translation id="8782565991310229362">ਕਿਓਸਕ ਐਪਲੀਕੇਸ਼ਨ ਲਾਂਚ ਰੱਦ ਕੀਤਾ।</translation>
 <translation id="8783834180813871000">ਬਲੂਟੁੱਥ ਦਾ ਜੋੜਾਬੱਧਕਰਨ ਕੋਡ ਟਾਈਪ ਕਰੋ ਫਿਰ 'ਵਾਪਸ ਜਾਓ' ਜਾਂ 'ਦਾਖਲ ਕਰੋ' ਨੂੰ ਦਬਾਓ।</translation>
 <translation id="8784626084144195648">Binned Average</translation>
@@ -8178,7 +8174,6 @@
 <translation id="8846132060409673887">ਇਸ ਕੰਪਿਊਟਰ ਦੇ ਨਿਰਮਾਤਾ ਅਤੇ ਮਾਡਲ ਸੰਬੰਧੀ ਜਾਣਕਾਰੀ ਪੜ੍ਹੋ</translation>
 <translation id="8846163936679269230">ਈ-ਸਿਮ ਪ੍ਰੋਫਾਈਲਾਂ ਨੂੰ ਰੀਸੈੱਟ ਕਰੋ</translation>
 <translation id="8846239054091760429">ਮੋਨੋ ਆਡੀਓ, ਸ਼ੁਰੂਆਤ, ਲਾਈਵ ਸੁਰਖੀਆਂ ਅਤੇ ਹੋਰ ਬਹੁਤ ਕੁਝ</translation>
-<translation id="8847523528195140327">ਕਵਰ ਬੰਦ ਹੋਣ 'ਤੇ ਸਾਈਨ-ਆਊਟ ਕਰੋ</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">ਲੁਕੀ ਹੋਈ</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> ਨਾਮਕ ਈ-ਸਿਮ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਹਟਾਉਣਾ ਰੱਦ ਕਰੋ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 1f01819..1977e5a0 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -562,7 +562,6 @@
 <translation id="1536754031901697553">Rozłączam...</translation>
 <translation id="1537254971476575106">Lupa pełnego ekranu</translation>
 <translation id="15373452373711364">Duży kursor myszy</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> prosi o uprawnienia do odczytywania i modyfikowania strony <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Włącz tryb demonstracyjny</translation>
 <translation id="1541346352678737112">Nie znaleziono sieci</translation>
 <translation id="1542137295869176367">Nie udało się zaktualizować Twoich danych logowania</translation>
@@ -724,7 +723,6 @@
 <translation id="1676902103953506022">Szczegóły danych logowania użytkownika <ph name="USERNAME" /> w domenie <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Nie można dodać elementu <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Pozostało <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Blokuj w trybie uśpienia i po zamknięciu pokrywy</translation>
 <translation id="1679068421605151609">Narzędzia dla deweloperów</translation>
 <translation id="1679810534535368772">Czy na pewno chcesz zakończyć?</translation>
 <translation id="167983332380191032">Usługa zarządzania wysłała błędny kod HTTP.</translation>
@@ -852,7 +850,6 @@
 <translation id="1794051631868188691">Nigdy tego nie pokazuj (<ph name="MERCHANT" />)</translation>
 <translation id="1794791083288629568">Wyślij opinię, by pomóc nam rozwiązać ten problem.</translation>
 <translation id="1795214765651529549">Użyj motywu klasycznego</translation>
-<translation id="1796105431091975902">Wybierz playbook Ansible, który chcesz dodać</translation>
 <translation id="1796588414813960292">Funkcje, które wymagają dźwięku, nie będą działać</translation>
 <translation id="1797117170091578105">Graj przy użyciu klawiatury Chromebooka. Możesz dostosować klawisze do konkretnych działań.</translation>
 <translation id="1800502858278951817">Żadne rozszerzenia nie prosiły o uprawnienie do odczytywania i modyfikowania witryny <ph name="SITE_NAME" /></translation>
@@ -913,6 +910,7 @@
 <translation id="1842766183094193446">Czy na pewno chcesz włączyć tryb demonstracyjny?</translation>
 <translation id="1845727111305721124">Zezwolono na odtwarzanie dźwięku</translation>
 <translation id="1846308012215045257">Naciśnij klawisz Control i kliknij, by uruchomić wtyczkę <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Wyloguj, gdy pokrywa jest zamknięta</translation>
 <translation id="184862733444771842">Prośba o dodanie funkcji</translation>
 <translation id="1849016657376805933">Dowolne urządzenie HID</translation>
 <translation id="1849186935225320012">Ta strona ma pełny dostęp do sterowania urządzeniami MIDI.</translation>
@@ -1020,7 +1018,6 @@
 <translation id="1941553344801134989">Wersja <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Pokaż mapowanie klawiszy</translation>
 <translation id="1942128823046546853">Odczytywanie i zmienianie wszystkich Twoich danych we wszystkich witrynach</translation>
-<translation id="1942600407708803723">Wyłącz po zamknięciu pokrywy</translation>
 <translation id="1944528062465413897">Kod parowania Bluetooth:</translation>
 <translation id="1944921356641260203">Znaleziono aktualizację</translation>
 <translation id="1947136734041527201">Umożliwia logowanie się w witrynach za pomocą Twojego konta u dostawcy tożsamości.</translation>
@@ -1698,6 +1695,7 @@
 <translation id="2568774940984945469">Kontener paska informacji</translation>
 <translation id="2571655996835834626">Możesz zmienić swoje ustawienia kontrolujące dostęp witryn internetowych do plików cookie, kodu JavaScript, wtyczek, geolokalizacji, mikrofonu, kamery itd.</translation>
 <translation id="2572032849266859634">Uprawnienia tylko do odczytu dysku <ph name="VOLUME_NAME" /> zostały przyznane.</translation>
+<translation id="2573276323521243649">Powrót ze strony wyboru awatara</translation>
 <translation id="2573417407488272418">Przed aktualizacją zapisz kopie zapasowe aplikacji i plików tutaj: Pliki &gt; Moje pliki.</translation>
 <translation id="2573831315551295105">Przypisz przełącznik do czynności „<ph name="ACTION" />”</translation>
 <translation id="2575247648642144396">Ta ikona będzie widoczna, gdy rozszerzenie będzie mogło działać na bieżącej stronie. Użyj tego rozszerzenia, klikając ikonę lub naciskając <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3072,7 +3070,6 @@
 <translation id="389901847090970821">Wybierz klawiaturę</translation>
 <translation id="3900966090527141178">Eksportuj hasła</translation>
 <translation id="3903187154317825986">Klawiatura wbudowana</translation>
-<translation id="3903191712482985591">Dodaj playbook</translation>
 <translation id="3904326018476041253">Usługi lokalizacyjne</translation>
 <translation id="3904849010307028014">Na podstawie Twoich interakcji z witryną, na przykład regularnego logowania się na konto, może ona wystawić token zaufania do Twojej przeglądarki. Jeśli później inne odwiedzane przez Ciebie witryny znajdą ważny token zaufania, z większym prawdopodobieństwem uznają Cię za człowieka, a nie bota.</translation>
 <translation id="3905761538810670789">Napraw aplikację</translation>
@@ -5016,7 +5013,6 @@
 <translation id="5827733057563115968">Przewidywanie następnego wyrazu</translation>
 <translation id="5828545842856466741">Dodaj profil…</translation>
 <translation id="5828633471261496623">Trwa drukowanie...</translation>
-<translation id="5828797982387013521">Wybierz playbook</translation>
 <translation id="5830205393314753525">Nie można otworzyć aplikacji <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Zapisz stronę &amp;jako...</translation>
 <translation id="5832813618714645810">Profile</translation>
@@ -5912,7 +5908,6 @@
 <translation id="6686665106869989887">Karta została przesunięta w prawo</translation>
 <translation id="6686817083349815241">Zapisz hasło</translation>
 <translation id="6687079240787935001">Ukryj: <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Prośby o uprawnienia do odczytywania i modyfikowania strony <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Niech <ph name="SUPERVISED_USER_NAME" /> podejdzie teraz do komputera. Poproś dziecko o przeczytanie kilku wyrażeń z ekranu. Jest to konieczne, aby można było utworzyć model jego głosu.
     <ph name="BR" />
     Jeśli <ph name="SUPERVISED_USER_NAME" /> potrzebuje pomocy w czytaniu, niech powtarza za Tobą. Mów szeptem z dala od mikrofonu, aby Asystent nauczył się głosu dziecka, a nie Twojego.</translation>
@@ -6392,6 +6387,7 @@
 <translation id="7138678301420049075">Inne</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> używa Twojego mikrofonu</translation>
 <translation id="7141105143012495934">Nie udało się zalogować, bo nie można pobrać informacji o koncie. Skontaktuj się z administratorem lub spróbuj ponownie.</translation>
+<translation id="7141844554192012199">Sprawdzanie</translation>
 <translation id="7144878232160441200">Spróbuj jeszcze raz</translation>
 <translation id="7149839598364933473">Przekonwertuj to urządzenie na urządzenie z systemem operacyjnym <ph name="DEVICE_OS" />.</translation>
 <translation id="7149893636342594995">Ostatnie 24 godziny</translation>
@@ -7169,7 +7165,6 @@
 <translation id="7898725031477653577">Zawsze tłumacz</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Szukasz komponentów przeglądarki? Wejdź na</translation>
-<translation id="7903345046358933331">Ta strona nie odpowiada. Możesz zaczekać, aż zacznie odpowiadać, lub ją zamknąć.</translation>
 <translation id="7903429136755645827">Kliknij, aby dostosować elementy sterujące gry</translation>
 <translation id="7903742244674067440">Masz zapisane certyfikaty, które umożliwiają identyfikację tych urzędów certyfikacji</translation>
 <translation id="7903925330883316394">Narzędzie: <ph name="UTILITY_TYPE" /></translation>
@@ -8086,6 +8081,7 @@
 <translation id="8780123805589053431">Pobieraj opisy obrazów z Google</translation>
 <translation id="8780443667474968681">Wyszukiwanie głosowe zostało wyłączone.</translation>
 <translation id="8781834595282316166">Nowa karta w grupie</translation>
+<translation id="8781980678064919987">Wyłącz, gdy pokrywa jest zamknięta</translation>
 <translation id="8782565991310229362">Uruchamianie aplikacji kiosku zostało anulowane.</translation>
 <translation id="8783834180813871000">Wpisz kod parowania Bluetooth i naciśnij Return lub Enter.</translation>
 <translation id="8784626084144195648">Średnia w przedziale</translation>
@@ -8150,7 +8146,6 @@
 <translation id="8846132060409673887">Odczytywanie producenta i modelu tego komputera</translation>
 <translation id="8846163936679269230">Zresetuj profile eSIM</translation>
 <translation id="8846239054091760429">Dźwięk mono, uruchamianie, napisy na żywo i inne funkcje</translation>
-<translation id="8847523528195140327">Wyloguj po zamknięciu pokrywy</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Ukryte</translation>
 <translation id="8849219423513870962">Anuluj usunięcie profilu eSIM o nazwie <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 7c9b7f9..a4ff3e4 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -564,7 +564,6 @@
 <translation id="1536754031901697553">Desconectando…</translation>
 <translation id="1537254971476575106">Lupa de tela cheia</translation>
 <translation id="15373452373711364">Cursor grande do mouse</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> está solicitando permissão para leitura e mudar <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Ativar modo de demonstração</translation>
 <translation id="1541346352678737112">Nenhuma rede encontrada</translation>
 <translation id="1542137295869176367">Não foi possível atualizar os dados de login</translation>
@@ -726,7 +725,6 @@
 <translation id="1676902103953506022">Detalhes de credenciais de <ph name="USERNAME" /> em <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Não é possível adicionar <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> restante(s)</translation>
-<translation id="1678794218766467608">Bloquear no modo de espera ou quando a tampa estiver fechada</translation>
 <translation id="1679068421605151609">Ferramentas para desenvolvedores</translation>
 <translation id="1679810534535368772">Quer mesmo sair?</translation>
 <translation id="167983332380191032">O serviço de gerenciamento enviou um erro de HTTP.</translation>
@@ -862,7 +860,6 @@
 <translation id="1794051631868188691">Nunca mostrar <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Envie um feedback para nos ajudar a corrigir esse problema.</translation>
 <translation id="1795214765651529549">Usar "Clássico"</translation>
-<translation id="1796105431091975902">Selecionar playbook Ansible para adicionar</translation>
 <translation id="1796588414813960292">Os recursos que precisam de som não funcionarão</translation>
 <translation id="1797117170091578105">Jogue com o teclado do Chromebook. Você pode personalizar quais teclas vão realizar ações específicas.</translation>
 <translation id="1800502858278951817">Nenhuma extensão solicitou a leitura ou mudança de <ph name="SITE_NAME" /></translation>
@@ -927,6 +924,7 @@
 <translation id="1842766183094193446">Tem certeza de que quer ativar o modo de demonstração?</translation>
 <translation id="1845727111305721124">Permitir a reprodução de sons</translation>
 <translation id="1846308012215045257">Aperte Ctrl e clique para executar o plug-in <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Sair quando a tampa for fechada</translation>
 <translation id="184862733444771842">Solicitação de recurso</translation>
 <translation id="1849016657376805933">Qualquer dispositivo HID</translation>
 <translation id="1849186935225320012">Esta página tem controle total de dispositivos MIDI.</translation>
@@ -1035,7 +1033,6 @@
 <translation id="1941553344801134989">Versão: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Mostrar mapa de atalhos</translation>
 <translation id="1942128823046546853">Ler e mudar seus dados em qualquer site</translation>
-<translation id="1942600407708803723">Desligar quando a capa for fechada</translation>
 <translation id="1944528062465413897">Código de pareamento Bluetooth:</translation>
 <translation id="1944921356641260203">Atualização encontrada</translation>
 <translation id="1947136734041527201">Permite fazer login em sites usando a conta que você tem com um serviço de identidade</translation>
@@ -1727,6 +1724,7 @@
 <translation id="2568774940984945469">Recipiente da barra de informações</translation>
 <translation id="2571655996835834626">Alterar configurações que controlam o acesso de sites a recursos como cookies, JavaScript, plug-ins, geolocalização, microfone, câmera etc.</translation>
 <translation id="2572032849266859634">Foi concedido acesso apenas de leitura a <ph name="VOLUME_NAME" />.</translation>
+<translation id="2573276323521243649">Voltar da página de seleção de avatar</translation>
 <translation id="2573417407488272418">Faça backup de apps e arquivos em "Arquivos &gt; Meus arquivos" antes do upgrade.</translation>
 <translation id="2573831315551295105">Atribuir "<ph name="ACTION" />" a um interruptor</translation>
 <translation id="2575247648642144396">Este ícone ficará visível quando a extensão puder agir na página atual. Para usar essa extensão, clique no ícone ou pressione <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3102,7 +3100,6 @@
 <translation id="389901847090970821">Selecionar teclado</translation>
 <translation id="3900966090527141178">Exportar senhas</translation>
 <translation id="3903187154317825986">Teclado integrado</translation>
-<translation id="3903191712482985591">Adicionar playbook</translation>
 <translation id="3904326018476041253">Serviços de localização</translation>
 <translation id="3904849010307028014">Baseado na sua interação com um site, como fazer login em uma conta com frequência, o site pode emitir um token de confiança para o navegador. Se outros sites que você visitar verificarem e encontrarem um token de confiança válido, é mais provável que eles tratem você como uma pessoa e não como um robô.</translation>
 <translation id="3905761538810670789">Reparar app</translation>
@@ -5049,7 +5046,6 @@
 <translation id="5827733057563115968">Previsão da palavra seguinte</translation>
 <translation id="5828545842856466741">Adicionar perfil…</translation>
 <translation id="5828633471261496623">Imprimindo...</translation>
-<translation id="5828797982387013521">Selecionar manual</translation>
 <translation id="5830205393314753525">Não foi possível abrir o app <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Salvar página &amp;como...</translation>
 <translation id="5832813618714645810">Perfis</translation>
@@ -5943,7 +5939,6 @@
 <translation id="6686665106869989887">A guia foi movida para a direita</translation>
 <translation id="6686817083349815241">Salvar sua senha</translation>
 <translation id="6687079240787935001">Ocultar <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Solicitação para ler e mudar <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Peça para <ph name="SUPERVISED_USER_NAME" /> vir até o computador. A criança lerá algumas frases na tela para criar um modelo de voz.
     <ph name="BR" />
     Se <ph name="SUPERVISED_USER_NAME" /> precisar de ajuda para ler, peça para essa criança repetir o que você disser. Sussurre longe do microfone para que o Google Assistente reconheça voz dela, e não a sua.</translation>
@@ -6425,6 +6420,7 @@
 <translation id="7138678301420049075">Outro</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> está usando o microfone</translation>
 <translation id="7141105143012495934">O login falhou porque não foi possível recuperar detalhes da sua conta. Entre em contato com o administrador ou tente novamente.</translation>
+<translation id="7141844554192012199">Check-up</translation>
 <translation id="7144878232160441200">Tentar novamente</translation>
 <translation id="7149839598364933473">Converter este dispositivo para usar o <ph name="DEVICE_OS" />.</translation>
 <translation id="7149893636342594995">Últimas 24 horas</translation>
@@ -7202,7 +7198,6 @@
 <translation id="7898725031477653577">Sempre traduzir do</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Procurando componentes do navegador? Acesse</translation>
-<translation id="7903345046358933331">A página deixou de responder. Espere até ela voltar a responder ou feche-a.</translation>
 <translation id="7903429136755645827">Clique para personalizar os controles do jogo</translation>
 <translation id="7903742244674067440">Você tem certificados no arquivo que identificam estas autoridades de certificação</translation>
 <translation id="7903925330883316394">Utilitário: <ph name="UTILITY_TYPE" /></translation>
@@ -8118,6 +8113,7 @@
 <translation id="8780123805589053431">Ver descrições de imagens do Google</translation>
 <translation id="8780443667474968681">A pesquisa por voz foi desativada.</translation>
 <translation id="8781834595282316166">Nova guia no grupo</translation>
+<translation id="8781980678064919987">Desligar quando a tampa estiver fechada</translation>
 <translation id="8782565991310229362">A inicialização do aplicativo de quiosque foi cancelada.</translation>
 <translation id="8783834180813871000">Digite o código de pareamento do Bluetooth e pressione "Voltar" ou "Enter".</translation>
 <translation id="8784626084144195648">Média de pré-processamento</translation>
@@ -8182,7 +8178,6 @@
 <translation id="8846132060409673887">Ler as informações sobre o fabricante e modelo deste computador</translation>
 <translation id="8846163936679269230">Redefinir perfis do eSIM</translation>
 <translation id="8846239054091760429">Áudio mono, inicialização, Legenda instantânea e muito mais</translation>
-<translation id="8847523528195140327">Sair quando a capa for fechada</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Oculto</translation>
 <translation id="8849219423513870962">Cancelar a remoção do perfil <ph name="PROFILE_NAME" /> do eSIM</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index e08bbe0..44a8a34 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -275,6 +275,7 @@
 <translation id="125220115284141797">Predefinidas</translation>
 <translation id="1252987234827889034">Ocorreu um erro do perfil</translation>
 <translation id="1254593899333212300">Ligação direta à Internet</translation>
+<translation id="1257336506558170607">Exportar certificado selecionado</translation>
 <translation id="1258491128795710625">Novidades</translation>
 <translation id="1259152067760398571">A verificação de segurança foi efetuada ontem.</translation>
 <translation id="1260451001046713751">Permitir sempre pop-ups e redirecionamentos de <ph name="HOST" /></translation>
@@ -560,7 +561,6 @@
 <translation id="1536754031901697553">A desligar…</translation>
 <translation id="1537254971476575106">Lupa de ecrã inteiro</translation>
 <translation id="15373452373711364">Cursor do rato grande</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> está a pedir para ler e alterar <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Ativar o modo de demonstração</translation>
 <translation id="1541346352678737112">Nenhuma rede encontrada</translation>
 <translation id="1542137295869176367">Não foi possível atualizar os seus dados de início de sessão</translation>
@@ -722,7 +722,6 @@
 <translation id="1676902103953506022">Detalhes das credenciais de <ph name="USERNAME" /> em <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Não é possível adicionar <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> restante(s)</translation>
-<translation id="1678794218766467608">Bloquear no modo de suspensão ou quando a tampa é fechada</translation>
 <translation id="1679068421605151609">Ferramentas do Programador</translation>
 <translation id="1679810534535368772">Tem a certeza de que pretende sair?</translation>
 <translation id="167983332380191032">Ocorreu um erro com o HTTP enviado pelo serviço de gestão.</translation>
@@ -850,7 +849,6 @@
 <translation id="1794051631868188691">Nunca mostrar <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Envie-nos comentários para nos ajudar a corrigir este problema.</translation>
 <translation id="1795214765651529549">Utilizar tema clássico</translation>
-<translation id="1796105431091975902">Selecione um guia interativo do Ansible para adicionar</translation>
 <translation id="1796588414813960292">As funcionalidades que necessitam de som não funcionarão</translation>
 <translation id="1797117170091578105">Jogue com o teclado do Chromebook. Pode personalizar as teclas para ações específicas.</translation>
 <translation id="1800502858278951817">Nenhuma extensão pediu para ler e alterar <ph name="SITE_NAME" /></translation>
@@ -915,6 +913,7 @@
 <translation id="1842766183094193446">Tem a certeza de que pretende ativar o modo de demonstração?</translation>
 <translation id="1845727111305721124">Com autorização para reproduzir som</translation>
 <translation id="1846308012215045257">Clique e prima a tecla Ctrl em simultâneo para executar o <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Terminar sessão quando a tampa for fechada</translation>
 <translation id="184862733444771842">Pedido de funcionalidade</translation>
 <translation id="1849016657376805933">Qualquer dispositivo HID</translation>
 <translation id="1849186935225320012">Esta página tem controlo total sobre dispositivos MIDI.</translation>
@@ -1022,7 +1021,6 @@
 <translation id="1941553344801134989">Versão: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Mostrar mapeamento de teclas</translation>
 <translation id="1942128823046546853">Ler e alterar todos os seus dados em todos os Websites</translation>
-<translation id="1942600407708803723">Encerrar quando a tampa for fechada</translation>
 <translation id="1944528062465413897">Código de sincronização de Bluetooth:</translation>
 <translation id="1944921356641260203">Atualização encontrada</translation>
 <translation id="1947136734041527201">Permite-lhe iniciar sessão em Websites com a conta que tem num serviço de identidade</translation>
@@ -3087,7 +3085,6 @@
 <translation id="389901847090970821">Selecionar teclado</translation>
 <translation id="3900966090527141178">Exportar palavras-passe</translation>
 <translation id="3903187154317825986">Teclado incorporado</translation>
-<translation id="3903191712482985591">Adicione um guia interativo</translation>
 <translation id="3904326018476041253">Serviços de localização</translation>
 <translation id="3904849010307028014">Com base na sua interação com um site, como iniciar sessão regularmente numa conta, esse site pode emitir um símbolo fidedigno para o seu navegador. Posteriormente, se outros sites que visitar verificarem e encontrarem um símbolo fidedigno válido, é mais provável que tratem o utilizador como uma pessoa e não como um bot.</translation>
 <translation id="3905761538810670789">Reparar aplicação</translation>
@@ -5033,7 +5030,6 @@
 <translation id="5827733057563115968">Previsão da palavra seguinte</translation>
 <translation id="5828545842856466741">Adicionar perfil…</translation>
 <translation id="5828633471261496623">A imprimir...</translation>
-<translation id="5828797982387013521">Selecionar guia interativo</translation>
 <translation id="5830205393314753525">Não é possível abrir a app <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Guard&amp;ar Página Como...</translation>
 <translation id="5832813618714645810">Perfis</translation>
@@ -5925,7 +5921,6 @@
 <translation id="6686665106869989887">Separador movido para a direita</translation>
 <translation id="6686817083349815241">Guardar a sua palavra-passe</translation>
 <translation id="6687079240787935001">Ocultar <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">A pedir para ler e alterar <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Peça a <ph name="SUPERVISED_USER_NAME" /> para se dirigir ao computador A criança vai ler algumas expressões neste ecrã para criar o respetivo modelo de voz.
     <ph name="BR" />
     Se <ph name="SUPERVISED_USER_NAME" /> precisar de ajuda na leitura, peça-lhe que repita consigo. Afaste-se do microfone para que o Assistente aprenda a voz da criança em vez da sua.</translation>
@@ -7185,7 +7180,6 @@
 <translation id="7898725031477653577">Traduzir sempre</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Está à procura dos componentes do navegador? Visite</translation>
-<translation id="7903345046358933331">A página deixou de responder. Pode esperar pela respetiva resposta ou fechá-la.</translation>
 <translation id="7903429136755645827">Clicar para personalizar os controlos de jogos</translation>
 <translation id="7903742244674067440">Tem certificados em arquivo que identificam estas autoridades de certificação</translation>
 <translation id="7903925330883316394">Utilitário: <ph name="UTILITY_TYPE" /></translation>
@@ -8100,6 +8094,7 @@
 <translation id="8780123805589053431">Obter descrições de imagens a partir do Google</translation>
 <translation id="8780443667474968681">A pesquisa por voz foi desativada.</translation>
 <translation id="8781834595282316166">Novo separador no grupo</translation>
+<translation id="8781980678064919987">Encerrar quando a tampa for fechada</translation>
 <translation id="8782565991310229362">A iniciação da app de quiosque foi cancelada.</translation>
 <translation id="8783834180813871000">Introduza o código de sincronização de Bluetooth e, em seguida, prima Enter.</translation>
 <translation id="8784626084144195648">Média arquivada</translation>
@@ -8164,7 +8159,6 @@
 <translation id="8846132060409673887">Consultar o fabricante e modelo deste computador</translation>
 <translation id="8846163936679269230">Repor perfis do eSIM</translation>
 <translation id="8846239054091760429">Áudio mono, arranque, Legendas instantâneas e mais</translation>
-<translation id="8847523528195140327">Terminar sessão quando a tampa for fechada</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Oculto</translation>
 <translation id="8849219423513870962">Cancelar remoção do perfil eSIM com o nome <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index afb02e5b..14db484 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -561,7 +561,6 @@
 <translation id="1536754031901697553">Se deconectează...</translation>
 <translation id="1537254971476575106">Lupă de ecran complet</translation>
 <translation id="15373452373711364">Cursor de mouse mare</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> solicită citirea și modificarea <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Activează modul demonstrativ</translation>
 <translation id="1541346352678737112">Nu s-a găsit nicio rețea</translation>
 <translation id="1542137295869176367">Datele de conectare nu au putut fi actualizate</translation>
@@ -723,7 +722,6 @@
 <translation id="1676902103953506022">Detalii privind datele de conectare pentru <ph name="USERNAME" /> de pe <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Nu s-a putut adăuga <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Timp rămas: <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Blochează în modul inactiv sau când capacul este închis</translation>
 <translation id="1679068421605151609">Instrumente pentru dezvoltatori</translation>
 <translation id="1679810534535368772">Sigur dorești să ieși?</translation>
 <translation id="167983332380191032">Serviciul de administrare a trimis o eroare HTTP.</translation>
@@ -851,7 +849,6 @@
 <translation id="1794051631868188691">Nu afișa niciodată <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Trimite feedback pentru a contribui la remedierea problemei.</translation>
 <translation id="1795214765651529549">Folosește tema clasică</translation>
-<translation id="1796105431091975902">Selectează un set de îndrumare Ansible de adăugat</translation>
 <translation id="1796588414813960292">Opțiunile care au nevoie de sunet nu vor funcționa</translation>
 <translation id="1797117170091578105">Joacă-te folosind tastatura Chromebookului. Poți personaliza cheile în funcție de anumite acțiuni.</translation>
 <translation id="1800502858278951817">Nicio extensie nu a solicitat să citească și să modifice <ph name="SITE_NAME" /></translation>
@@ -916,6 +913,7 @@
 <translation id="1842766183094193446">Sigur vrei să activezi modul demonstrativ?</translation>
 <translation id="1845727111305721124">Au permisiunea de a reda sunet</translation>
 <translation id="1846308012215045257">Dă control-clic pentru a rula <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Când capacul este închis: deconectare</translation>
 <translation id="184862733444771842">Solicitarea unei funcții</translation>
 <translation id="1849016657376805933">Orice dispozitiv HID</translation>
 <translation id="1849186935225320012">Această pagină are control complet asupra dispozitivelor MIDI.</translation>
@@ -1023,7 +1021,6 @@
 <translation id="1941553344801134989">Versiune: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Afișează maparea tastelor</translation>
 <translation id="1942128823046546853">să citească și să modifice toate datele de pe toate site-urile</translation>
-<translation id="1942600407708803723">Când capacul este închis: oprire</translation>
 <translation id="1944528062465413897">Cod de asociere prin Bluetooth:</translation>
 <translation id="1944921356641260203">A fost găsită o actualizare</translation>
 <translation id="1947136734041527201">Îți dă posibilitatea să te conectezi pe site-uri folosind contul creat într-un serviciu de identitate</translation>
@@ -3087,7 +3084,6 @@
 <translation id="389901847090970821">Selectează tastatura</translation>
 <translation id="3900966090527141178">Exportă parolele</translation>
 <translation id="3903187154317825986">Tastatură integrată</translation>
-<translation id="3903191712482985591">Adaugă un set de îndrumare</translation>
 <translation id="3904326018476041253">Servicii de localizare</translation>
 <translation id="3904849010307028014">Pe baza interacțiunii tale cu un site, de exemplu, conectarea frecventă la un cont, acel site poate să emită un Trust Token pentru browserul tău. Mai târziu, dacă alte site-uri pe care le accesezi verifică și găsesc un Trust Token valid, există mai multe șanse să te trateze ca pe o persoană, nu ca pe o aplicație bot.</translation>
 <translation id="3905761538810670789">Repară aplicația</translation>
@@ -5032,7 +5028,6 @@
 <translation id="5827733057563115968">Predicția cuvântului următor</translation>
 <translation id="5828545842856466741">Adaugă un profil...</translation>
 <translation id="5828633471261496623">Se printează...</translation>
-<translation id="5828797982387013521">Selectează setul de îndrumare</translation>
 <translation id="5830205393314753525">Nu se poate deschide <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Salvează pagina c&amp;a...</translation>
 <translation id="5832813618714645810">Profiluri</translation>
@@ -5926,7 +5921,6 @@
 <translation id="6686665106869989887">Fila a fost mutată spre dreapta</translation>
 <translation id="6686817083349815241">Salvați parola</translation>
 <translation id="6687079240787935001">Ascunde <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Se solicită citirea și modificarea <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Solicită-i lui <ph name="SUPERVISED_USER_NAME" /> să vină la computer. Copilul tău va citi câteva expresii de pe acest ecran pentru crearea propriului model vocal.
     <ph name="BR" />
     Dacă <ph name="SUPERVISED_USER_NAME" /> are nevoie de ajutor la citire, spune-i să repete după tine. Șoptește la distanță de microfon, astfel încât Asistentul să învețe vocea copilului, nu pe a ta.</translation>
@@ -7185,7 +7179,6 @@
 <translation id="7898725031477653577">Tradu întotdeauna</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Cauți componentele browserului? Accesează</translation>
-<translation id="7903345046358933331">Pagina a devenit inactivă. Poți aștepta să devină activă sau o poți închide.</translation>
 <translation id="7903429136755645827">Dă clic pentru a personaliza comenzile jocului</translation>
 <translation id="7903742244674067440">Ai certificate stocate care identifică aceste autorități de certificare</translation>
 <translation id="7903925330883316394">Utilitar: <ph name="UTILITY_TYPE" /></translation>
@@ -8101,6 +8094,7 @@
 <translation id="8780123805589053431">Descarcă descrierile imaginii de la Google</translation>
 <translation id="8780443667474968681">Căutarea vocală a fost dezactivată.</translation>
 <translation id="8781834595282316166">Filă nouă în grup</translation>
+<translation id="8781980678064919987">Când capacul este închis: oprire</translation>
 <translation id="8782565991310229362">Lansarea aplicațiilor de tip chioșc a fost anulată.</translation>
 <translation id="8783834180813871000">Introdu codul de asociere prin Bluetooth, apoi apasă pe Revino sau pe Enter.</translation>
 <translation id="8784626084144195648">Medie limitată</translation>
@@ -8165,7 +8159,6 @@
 <translation id="8846132060409673887">Citește producătorul și modelul acestui computer</translation>
 <translation id="8846163936679269230">Resetează profiluri eSIM</translation>
 <translation id="8846239054091760429">Audio mono, pornire, Subtitrări live și altele</translation>
-<translation id="8847523528195140327">Când capacul este închis: deconectare</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Ascuns</translation>
 <translation id="8849219423513870962">Anulează eliminarea profilului eSIM numit <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 9db2038..e7d7053 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -562,7 +562,6 @@
 <translation id="1536754031901697553">Отключение...</translation>
 <translation id="1537254971476575106">Полноэкранная лупа</translation>
 <translation id="15373452373711364">Большой курсор мыши</translation>
-<translation id="1539630663098418038">Расширение "<ph name="EXTENSIONS_REQUESTING_ACCESS" />" запрашивает доступ на чтение и изменение данных сайта <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Демонстрационный режим</translation>
 <translation id="1541346352678737112">Сеть не найдена</translation>
 <translation id="1542137295869176367">Не удалось обновить ваши учетные данные.</translation>
@@ -724,7 +723,6 @@
 <translation id="1676902103953506022">Учетные данные пользователя <ph name="USERNAME" /> в домене <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Невозможно добавить <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Ещё <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Блокировать при переходе в спящий режим и закрытии крышки</translation>
 <translation id="1679068421605151609">Инструменты разработчика</translation>
 <translation id="1679810534535368772">Закрыть страницу?</translation>
 <translation id="167983332380191032">От сервиса управления получен недействительный код HTTP.</translation>
@@ -852,7 +850,6 @@
 <translation id="1794051631868188691">Никогда не показывать корзину "<ph name="MERCHANT" />"</translation>
 <translation id="1794791083288629568">Отправить отзыв, чтобы помочь устранить ошибку</translation>
 <translation id="1795214765651529549">Использовать классическую тему</translation>
-<translation id="1796105431091975902">Выберите сценарий Ansible</translation>
 <translation id="1796588414813960292">Функции, которые используют звук, не будут работать</translation>
 <translation id="1797117170091578105">Играйте с помощью клавиатуры Chromebook. Клавиши можно настроить таким образом, чтобы они отвечали за выполнение определенных действий.</translation>
 <translation id="1800502858278951817">Ни одно расширение не запрашивало разрешение на чтение и изменение данных сайта <ph name="SITE_NAME" /></translation>
@@ -917,6 +914,7 @@
 <translation id="1842766183094193446">Включить демонстрационный режим?</translation>
 <translation id="1845727111305721124">Разрешить сайтам воспроизводить звук</translation>
 <translation id="1846308012215045257">Чтобы запустить плагин "<ph name="PLUGIN_NAME" />", нажмите кнопку мыши, удерживая Ctrl.</translation>
+<translation id="1848219224579402567">Выйти из системы, когда крышка закрыта</translation>
 <translation id="184862733444771842">Запрос на добавление функции</translation>
 <translation id="1849016657376805933">Любое HID-устройство</translation>
 <translation id="1849186935225320012">Эта страница имеет полный контроль над устройствами MIDI.</translation>
@@ -1024,7 +1022,6 @@
 <translation id="1941553344801134989">Версия: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Показать привязку клавиш</translation>
 <translation id="1942128823046546853">Просмотр и изменение ваших данных на всех сайтах.</translation>
-<translation id="1942600407708803723">Завершить работу, когда обложка закрыта</translation>
 <translation id="1944528062465413897">Код Bluetooth-подключения:</translation>
 <translation id="1944921356641260203">Найдено обновление</translation>
 <translation id="1947136734041527201">Позволяет выполнять вход на сайтах через сервисы подтверждения личности.</translation>
@@ -1713,6 +1710,7 @@
 <translation id="2568774940984945469">Контейнер панели информации</translation>
 <translation id="2571655996835834626">Изменение настроек доступа сайтов к файлам cookie, JavaScript, плагинам, геоданным, микрофону, камере и другим функциям</translation>
 <translation id="2572032849266859634">Предоставлен доступ к тому <ph name="VOLUME_NAME" /> (только чтение).</translation>
+<translation id="2573276323521243649">Вернуться на предыдущую страницу</translation>
 <translation id="2573417407488272418">Перед обновлением сохраните резервные копии приложений и файлов в папке "Файлы &gt; Мои файлы".</translation>
 <translation id="2573831315551295105">Назначьте переключатель для действия "<ph name="ACTION" />"</translation>
 <translation id="2575247648642144396">Значок будет отображаться, если расширение может работать на загруженной странице. Активируйте его, нажав на значок или с помощью комбинации клавиш <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3087,7 +3085,6 @@
 <translation id="389901847090970821">Выберите раскладку клавиатуры</translation>
 <translation id="3900966090527141178">Экспорт паролей</translation>
 <translation id="3903187154317825986">Встроенная клавиатура</translation>
-<translation id="3903191712482985591">Добавьте сценарий</translation>
 <translation id="3904326018476041253">Сервисы геолокации</translation>
 <translation id="3904849010307028014">Сайт может предоставить вашему браузеру токен доверия в зависимости от ваших действий, в частности если вы регулярно входите в свой аккаунт. Если в дальнейшем другие посещаемые вами сайты найдут у вас действительный токен доверия, им будет проще убедиться, что вы человек, а не бот.</translation>
 <translation id="3905761538810670789">Восстановить приложение</translation>
@@ -5032,7 +5029,6 @@
 <translation id="5827733057563115968">Подсказка следующего слова</translation>
 <translation id="5828545842856466741">Добавить профиль…</translation>
 <translation id="5828633471261496623">Печать...</translation>
-<translation id="5828797982387013521">Выбрать сценарий</translation>
 <translation id="5830205393314753525">Не удалось открыть приложение "<ph name="APP_NAME" />"</translation>
 <translation id="5830720307094128296">Сохранить страницу как...</translation>
 <translation id="5832813618714645810">Профили</translation>
@@ -5930,7 +5926,6 @@
 <translation id="6686665106869989887">Вкладка перемещена вправо</translation>
 <translation id="6686817083349815241">Сохранить пароль</translation>
 <translation id="6687079240787935001">Скрыть <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Запрос на чтение и изменение данных сайта <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Попросите пользователя <ph name="SUPERVISED_USER_NAME" /> подойти к компьютеру. Чтобы создать образец голоса, ребенку будет нужно прочитать вслух несколько фраз на экране.
     <ph name="BR" />
     Если <ph name="SUPERVISED_USER_NAME" /> не может читать самостоятельно, предложите повторять за вами. Произносите слова шепотом, отвернувшись от микрофона, чтобы Ассистент запомнил голос ребенка, а не ваш.</translation>
@@ -6412,6 +6407,7 @@
 <translation id="7138678301420049075">Другое</translation>
 <translation id="7139627972753429585">Приложение "<ph name="APP_NAME" />" использует микрофон</translation>
 <translation id="7141105143012495934">Ошибка входа: не удалось получить данные аккаунта. Обратитесь к администратору или повторите попытку.</translation>
+<translation id="7141844554192012199">Проверка паролей</translation>
 <translation id="7144878232160441200">Повторить</translation>
 <translation id="7149839598364933473">Установить <ph name="DEVICE_OS" /> на устройстве</translation>
 <translation id="7149893636342594995">Последние 24 часа</translation>
@@ -7188,7 +7184,6 @@
 <translation id="7898725031477653577">Всегда переводить</translation>
 <translation id="7901405293566323524">Управление телефоном</translation>
 <translation id="7903290522161827520">Ищете компоненты браузера? Перейдите на страницу</translation>
-<translation id="7903345046358933331">Страница перестала отвечать на запросы. Вы можете подождать от нее ответа или закрыть.</translation>
 <translation id="7903429136755645827">Нажмите, чтобы настроить управление игрой</translation>
 <translation id="7903742244674067440">У вас есть сертификаты, которые идентифицируют эти центры сертификации</translation>
 <translation id="7903925330883316394">Утилита: <ph name="UTILITY_TYPE" /></translation>
@@ -8106,6 +8101,7 @@
 <translation id="8780123805589053431">Получать описания изображений от Google</translation>
 <translation id="8780443667474968681">Голосовой поиск отключен.</translation>
 <translation id="8781834595282316166">Добавить новую вкладку в группу</translation>
+<translation id="8781980678064919987">Завершать работу при закрытии крышки</translation>
 <translation id="8782565991310229362">Запуск киоск-приложения был отменен.</translation>
 <translation id="8783834180813871000">Введите код Bluetooth-подключения и нажмите Ввод.</translation>
 <translation id="8784626084144195648">Среднее по группам</translation>
@@ -8170,7 +8166,6 @@
 <translation id="8846132060409673887">Доступ к информации о производителе и модели компьютера</translation>
 <translation id="8846163936679269230">Сбросить профили eSIM</translation>
 <translation id="8846239054091760429">Монофонический звук, автоматические субтитры, звуки при включении и не только</translation>
-<translation id="8847523528195140327">Выйти из системы, когда обложка закрыта</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Скрытые</translation>
 <translation id="8849219423513870962">Отменить удаление профиля eSIM с именем "<ph name="PROFILE_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb
index 27b67802..b71dd76 100644
--- a/chrome/app/resources/generated_resources_si.xtb
+++ b/chrome/app/resources/generated_resources_si.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">විසන්ධි වෙමින්…</translation>
 <translation id="1537254971476575106">පූර්ණ තිර විශාලකය</translation>
 <translation id="15373452373711364">විශාල මවුස කර්සරය</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> <ph name="ORIGIN" /> කියවීමට සහ වෙනස් කිරීමට ඉල්ලමින්</translation>
 <translation id="1540605929960647700">ආදර්ශන ප්‍රකාරය සබල කරන්න</translation>
 <translation id="1541346352678737112">ජාලයක් හමු නොවිණි</translation>
 <translation id="1542137295869176367">ඔබගේ පුරනය-වීමේ දත්ත යාවත්කාලීන කළ නොහැකි විය</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> හි <ph name="USERNAME" /> සඳහා මුරපදය</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> එක් කළ නොහැක</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ඉතිරිය</translation>
-<translation id="1678794218766467608">නිද්‍රා ප්‍රකාරයේ හෝ කවරය වසා ඇති විට අගුළු දමන්න</translation>
 <translation id="1679068421605151609">සංවර්ධක මෙවලම්</translation>
 <translation id="1679810534535368772">ඔබට පිට වීමට අවශ්‍ය බව ඔබට තහවුරුද?</translation>
 <translation id="167983332380191032">කළමනාකරණ සේවාව HTTP දෝෂය යවා ඇත.</translation>
@@ -850,7 +848,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> කිසි විටක නොපෙන්වන්න</translation>
 <translation id="1794791083288629568">අපට මෙම ගැටලුව විසඳීමට උදවු වීමට ප්‍රතිපෝෂණ එවන්න.</translation>
 <translation id="1795214765651529549">පැරණි එක භාවිත කරන්න</translation>
-<translation id="1796105431091975902">එක් කිරීමට Ansible අත්පොතක් තෝරන්න</translation>
 <translation id="1796588414813960292">හඬ අවශ්‍ය විශේෂාංග ක්‍රියා නොකරනු ඇත</translation>
 <translation id="1797117170091578105">ඔබගේ Chromebook යතුරු පුවරුව භාවිතයෙන් ක්‍රීඩා කරන්න. ඔබට විශේෂිත ක්‍රියා සඳහා යතුරු අභිරුචිකරණය කළ හැකිය.</translation>
 <translation id="1800502858278951817">දිගු <ph name="SITE_NAME" /> කියවීමට සහ වෙනස් කිරීමට ඉල්ලා නැත</translation>
@@ -915,6 +912,7 @@
 <translation id="1842766183094193446">ඔබට ආදර්ශන ප්‍රකාරය සබල කිරීමට අවශ්‍ය බව සහතිකද?</translation>
 <translation id="1845727111305721124">හඬ වාදනය කිරීමට ඉඩ දේ</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> ධාවනය කිරීමට පාලන-ක්ලික් කරන්න</translation>
+<translation id="1848219224579402567">පියන වසා ඇති විට වරන්න</translation>
 <translation id="184862733444771842">විශේෂාංග ඉල්ලීම</translation>
 <translation id="1849016657376805933">ඕනෑම HID උපාංගයක්</translation>
 <translation id="1849186935225320012">මෙම පිටුවට MIDI උපාංගවල සම්පූර්ණ පාලනය තිබේ.</translation>
@@ -1023,7 +1021,6 @@
 <translation id="1941553344801134989">අනුවාදය: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">යතුරු අනුරූපණය පෙන්වන්න</translation>
 <translation id="1942128823046546853">සියලු වෙබ් අඩවිවල ඔබගේ සියලු දත්ත කියවන්න සහ වෙනස් කරන්න</translation>
-<translation id="1942600407708803723">ආවරණය වසා ඇති විට වසා දමන්න</translation>
 <translation id="1944528062465413897">බ්ලූටූත් යුගලන කේතය:</translation>
 <translation id="1944921356641260203">යාවත්කාලීන හමු විණි</translation>
 <translation id="1947136734041527201">ඔබට අනන්‍යතා සේවාවක් සමඟ ඇති ගිණුම භාවිතයෙන් වෙබ් අඩවි වෙත පිරීමට ඉඩ දෙයි</translation>
@@ -1715,6 +1712,7 @@
 <translation id="2568774940984945469">තොරතුරු තීරු බහාලුම</translation>
 <translation id="2571655996835834626">කුකී, ජාවාස්ක්‍රිප්ට්, පේනු මෘදුකාංග, භූ ස්ථානය, මයික්‍රොෆෝනය, කැමරා ආදි විශේෂාංග සඳහා වෙබ් අඩවිවල ප්‍රවේශය පාලන කරන ඔබගේ සැකසීම් වෙනස් කරන්න.</translation>
 <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> වෙත කියවීමට-පමණයි ප්‍රවේශය ලබා දී ඇත.</translation>
+<translation id="2573276323521243649">නියුරුව තේරීමේ පිටුවෙන් ආපසු</translation>
 <translation id="2573417407488272418">උත්ශ්‍රේණි කිරීමට පෙර යෙදුම් සහ ගොනු Files &gt; මගේ ගොනු වෙත උපස්ථ කරන්න.</translation>
 <translation id="2573831315551295105">“<ph name="ACTION" />” සඳහා ස්විචය පවරන්න</translation>
 <translation id="2575247648642144396">දිගුවට වත්මන් පිටුවේ ක්‍රියා කළ හැකි විට මෙම අයිකනය පෙනෙනු ඇත. අයිකනය මත ක්ලික් කිරීමෙන් හෝ <ph name="EXTENSION_SHORTCUT" /> එබීමෙන් මෙම දිගුව භාවිතා කරන්න.</translation>
@@ -2555,6 +2553,7 @@
 <translation id="3406290648907941085">අතථ්‍ය යථාර්ථ උපාංග සහ දත්ත භාවිත කිරීමට ඉඩ දේ</translation>
 <translation id="3406396172897554194">භාෂාව හෝ ආදාන නම අනුව සොයන්න</translation>
 <translation id="3406605057700382950">පිටු සලකුණු තීරුව &amp;පෙන්වන්න</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{<ph name="USER_EMAIL" /> සඳහා Google මුරපද කළමනාකරු වෙත 1 මුරපදයක් ආයාත කෙරිණි}one{<ph name="USER_EMAIL" /> සඳහා Google මුරපද කළමනාකරු වෙත මුරපද {NUM_PASSWORDS}ක් ආයාත කෙරිණි}other{<ph name="USER_EMAIL" /> සඳහා Google මුරපද කළමනාකරු වෙත මුරපද {NUM_PASSWORDS}ක් ආයාත කෙරිණි}}</translation>
 <translation id="3409785640040772790">සිතියම්</translation>
 <translation id="3412265149091626468">තෝරාගැනීමට පනින්න</translation>
 <translation id="3413122095806433232">CA නිකුත්කරුවන්: <ph name="LOCATION" /></translation>
@@ -3089,7 +3088,6 @@
 <translation id="389901847090970821">යතුරු පුවරුව තෝරන්න</translation>
 <translation id="3900966090527141178">මුරපද නිර්යාත කරන්න</translation>
 <translation id="3903187154317825986">තිළැලි යතුරුපුවරුව</translation>
-<translation id="3903191712482985591">අත්පොත එක් කරන්න</translation>
 <translation id="3904326018476041253">ස්ථානීය සේවා</translation>
 <translation id="3904849010307028014">ගිණුමකට නිතර පිරීම වැනි, අඩවියක් සමඟ ඔබගේ අන්තර්ක්‍රියා මත පදනම්ව, එම අඩවියට ඔබගේ බ්‍රවුසරයට විශ්වාස ටෝකනයක් නිකුත් කළ හැකිය. පසුව, ඔබ පිවිසෙන අනෙකුත් අඩවි පරීක්ෂා කර වලංගු විශ්වාස ටෝකනයක් සොයා ගන්නේ නම්, ඔවුන් ඔබට සලකනු ලබන්නේ බොට් කෙනෙකු ලෙස නොව පුද්ගලයෙකු ලෙසය.</translation>
 <translation id="3905761538810670789">යෙදුම අලුත්වැඩියා කරන්න</translation>
@@ -3740,6 +3738,7 @@
 <translation id="4541123282641193691">ඔබගේ ගිණුම සත්‍යාපනය කළ නොහැකි විය. නැවත උත්සාහ කරන්න හෝ ඔබගේ Chromebook යළි අරඹන්න.</translation>
 <translation id="4541662893742891060">මෙම පැතිකඩට සම්බන්ධ වීමට නොහැකිය. තාක්ෂණික සහාය සඳහා, කරුණාකර ඔබගේ වාහකය අමතන්න.</translation>
 <translation id="4541706525461326392">පැතිකඩ ඉවත් කරමින්. මෙයට මිනිත්තු කිහිපයක් ගත විය හැකිය.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{මෙම උපාංගයෙහි Google මුරපද කළමනාකරු වෙත 1 මුරපදයක් ආයාත කෙරිණි}one{මෙම උපාංගයෙහි Google මුරපද කළමනාකරු වෙත මුරපද {NUM_PASSWORDS}ක් ආයාත කෙරිණි}other{මෙම උපාංගයෙහි Google මුරපද කළමනාකරු වෙත මුරපද {NUM_PASSWORDS}ක් ආයාත කෙරිණි}}</translation>
 <translation id="4542520061254486227"><ph name="WEBSITE_1" /> සහ <ph name="WEBSITE_2" /> හි ඔබගේ දත්ත කියවන්න</translation>
 <translation id="4543778593405494224">සහතික කළමනාකරු</translation>
 <translation id="4544174279960331769">පෙරනිමි නිල් නියුරුව</translation>
@@ -5034,7 +5033,6 @@
 <translation id="5827733057563115968">ඊළඟ වචනය පුරෝකථනය කිරීම</translation>
 <translation id="5828545842856466741">පැතිකඩ එක් කරන්න...</translation>
 <translation id="5828633471261496623">මුද්‍රණය වේ...</translation>
-<translation id="5828797982387013521">අත්පොත තෝරන්න</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> විවෘත කළ නොහැකිය</translation>
 <translation id="5830720307094128296">&amp;ලෙස පිටුව සුරකින්න...</translation>
 <translation id="5832813618714645810">පැතිකඩවල්</translation>
@@ -5926,7 +5924,6 @@
 <translation id="6686665106869989887">ටැබය දකුණට ගෙන යන ලදි</translation>
 <translation id="6686817083349815241">ඔබේ මුරපදය සුරකින්න</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> සඟවන්න</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> කියවීමට සහ වෙනස් කිරීමට ඉල්ලීම:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" />ගෙන් පරිගණකයට එන ලෙස ඉල්ලන්න ඔබගේ දරුවාගේ කටහඬ ආකෘතිය තැනීමට ඔබගේ දරුවා මෙම තිරයේ වැකිකඩවල් කිහිපයක් කියවනු ඇත.
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" /> හට කියවීම සම්බන්ධව උදවු අවශ්‍ය නම්, ඔබගේ දරුවා ලවා ඔබට පසු කියවන්න. මයික් එකට ඈතින් මුමුණන්න, එවිට සහායක ඔබගේ කටහඬ වෙනුවට ඔබගේ දරුවාගේ කටහඬ ඉගෙන ගනී.</translation>
@@ -6228,6 +6225,7 @@
 <translation id="6968288415730398122">තිර අගුල වින්‍යාස කිරීමට ඔබගේ මුරපදය ඇතුළු කරන්න</translation>
 <translation id="6969047215179982698">ළඟ බෙදා ගැනීම අක්‍රිය කරන්න</translation>
 <translation id="6970480684834282392">ස්ටාටප් වර්ගය</translation>
+<translation id="6970543303783413625">මුරපද ආයාත කිරීමට නොහැක. ඔබට වරකට මුරපද <ph name="COUNT" />ක් දක්වා පමණක් ආයාත කළ හැක.</translation>
 <translation id="6970856801391541997">නිශ්චිත පිටු මුද්‍රණය කරන්න</translation>
 <translation id="6970861306198150268">මෙම වෙබ් අඩවිය සඳහා ඔබ ඔබේ වර්තමාන මුරපදය සුරකින බව සහතික කර ගන්න</translation>
 <translation id="6972180789171089114">ශ්‍රව්‍ය/වීඩියෝ</translation>
@@ -6407,6 +6405,7 @@
 <translation id="7138678301420049075">වෙනත්</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> ඔබේ මයික්‍රෆෝනය භාවිත කරමින්</translation>
 <translation id="7141105143012495934">ඔබේ ගිණුම් විස්තර යළි ලබා ගැනීමට නොහැකි වූ බැවින් පිරීම අසාර්ථකයි. කරුණාකර ඔබගේ පරිපාලක අමතන්න නැතහොත් නැවත උත්සාහ කරන්න.</translation>
+<translation id="7141844554192012199">පරීක්ෂාව</translation>
 <translation id="7144878232160441200">නැවත උත්සහ කරන්න</translation>
 <translation id="7149839598364933473">මෙම උපාංගය <ph name="DEVICE_OS" /> උපාංගයකට පරිවර්තනය කරන්න.</translation>
 <translation id="7149893636342594995">පසුගිය පැය 24</translation>
@@ -6459,6 +6458,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{පිටවීමේ පිටුව}one{පිටවීමේ පිටු}other{පිටවීමේ පිටු}}</translation>
 <translation id="7207457272187520234">භාවිත සහ දෝෂ නිර්ණ දත්ත යවන්න. මෙම උපාංගය ස්වයංක්‍රියව රෝග විනිශ්චය, උපාංග සහ යෙදුම් භාවිත දත්ත Google වෙත යවයි. මෙය පද්ධති සහ යෙදුම් ස්ථායිතාවට සහ අනෙකුත් වැඩිදියුණු කිරීම්වලට උදවු කරයි. සමහර එකතු කළ දත්ත Google යෙදුම්වලට සහ Android සංවර්ධකයින් වැනි හවුල්කරුවන්ට ද උදවු කරති. මෙම සැකසීම හිමිකරු විසින් බලාත්මක කෙරේ. ඔබේ අමතර වෙබ් සහ යෙදුම් ක්‍රියාකාරකම් සැකසීම සක්‍රීය නම්, මෙම දත්ත ඔබේ Google ගිණුුමට සුරකිනු ලැබේ.</translation>
 <translation id="7207631048330366454">යෙදුම් සොයන්න</translation>
+<translation id="7210471695184432500">මෙම උපාංගයෙහි Google මුරපද කළමනාකරු වෙත මුරපද ආයාත කිරීම සඳහා, CSV ගොනුවක් තෝරන්න</translation>
 <translation id="7210499381659830293">දිගු මුද්‍රක</translation>
 <translation id="7211783048245131419">තවම ස්විචයක් පවරා නැත</translation>
 <translation id="7212097698621322584">එය වෙනස් කිරීමට ඔබේ රහස් අංකය ඇතුළත් කරන්න. ඔබ ඔබේ රහස් අංකය නොදන්නෙහි නම්, ඔබ ආරක්‍ෂක යතුර යළි සකසා, නව රහස් අංකයක් සෑදිය යුතු ය.</translation>
@@ -7181,7 +7181,6 @@
 <translation id="7898725031477653577">සැමවිටම පරිවර්තනය කරන්න</translation>
 <translation id="7901405293566323524">දුරකථන මධ්‍යස්ථානය</translation>
 <translation id="7903290522161827520">බ්‍රවුසර සංරචක සඳහා සොයන්නේද? පිවිසෙන්න</translation>
-<translation id="7903345046358933331">පිටුව ප්‍රතිචාර නොදක්වයි. ඔබට එය ප්‍රතිචාර දක්වන තෙක් රැඳී සිටීමට හෝ වසා දැමීමට හැකිය.</translation>
 <translation id="7903429136755645827">ඔබගේ ක්‍රීඩා පාලන අභිරුචිකරණය කිරීමට ක්ලික් කරන්න</translation>
 <translation id="7903742244674067440">මෙම සහතික බලධාරීන් හඳුනා ගන්නා සහතික ගොනුව තුළ ඔබට තිබේ</translation>
 <translation id="7903925330883316394">උපයෝගිතා: <ph name="UTILITY_TYPE" /></translation>
@@ -7516,6 +7515,7 @@
 <translation id="8206859287963243715">සෙලියුලර්</translation>
 <translation id="8208216423136871611">සුරකින්න එපා</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{නව දැනුම්දීම}one{නව දැනුම්දීම් #}other{නව දැනුම්දීම් #}}</translation>
+<translation id="821119981794423735"><ph name="USER_EMAIL" /> සඳහා Google මුරපද කළමනාකරු වෙත මුරපද ආයාත කිරීමට, CSV ගොනුවක් තෝරන්න</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{බාගැනීම ක්‍රියාවේ පවතියි}one{බාගැනීම් ක්‍රියාවේ පවතියි}other{බාගැනීම් ක්‍රියාවේ පවතියි}}</translation>
 <translation id="8213449224684199188">ඡායාරූප ප්‍රකාරය ඇතුළු කෙරිණි</translation>
 <translation id="8214489666383623925">ගොනුව විවෘත කරන්න...</translation>
@@ -8095,6 +8095,7 @@
 <translation id="8780123805589053431">Google වෙතින් රූප විස්තර ලබා ගන්න</translation>
 <translation id="8780443667474968681">හඬ සෙවීම ක්‍රියා විරහිත කර ඇත.</translation>
 <translation id="8781834595282316166">කණ්ඩායම තුළ නව පටිත්ත</translation>
+<translation id="8781980678064919987">පියන වසා ඇති විට බලය ක්‍රියාවිරහිත කරන්න</translation>
 <translation id="8782565991310229362">Kiosk යෙදුම දියත් කිරීම අවලංගු කරන ලදි.</translation>
 <translation id="8783834180813871000">බ්ලූටූත් යුගල කිරීමේ කේතය ටයිප් කරන්න සහ ඉන් පසු ආපසු එම හෝ ඇතුළු කිරීම ඔබන්න</translation>
 <translation id="8784626084144195648">ඉවතලූ සාමාන්‍යය</translation>
@@ -8159,7 +8160,6 @@
 <translation id="8846132060409673887">මෙම උපාංගයේ නිෂ්පාදකයා සහ මාදිලිය කියවන්න</translation>
 <translation id="8846163936679269230">eSIM පැතකඩවල් යළි සකසන්න</translation>
 <translation id="8846239054091760429">ඒකල ශ්‍රව්‍ය, ඇරඹුම, සජීවී සිරස්තල, සහ තවත් දේ</translation>
-<translation id="8847523528195140327">ආවරණය වැසුණු විට වරන්න</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">සඟවා ඇත</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> නම් වූ eSIM පැතිකඩ ඉවත් කිරීම අවලංගු කරන්න</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 6e1926fe..3b5c4091 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -562,7 +562,6 @@
 <translation id="1536754031901697553">Odpája sa...</translation>
 <translation id="1537254971476575106">Lupa celej obrazovky</translation>
 <translation id="15373452373711364">Veľký kurzor myši</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> žiada o povolenie čítať a vykonávať zmeny na <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Povolenie režimu ukážky</translation>
 <translation id="1541346352678737112">Nebola nájdená žiadna sieť</translation>
 <translation id="1542137295869176367">Vaše prihlasovacie údaje sa nepodarilo aktualizovať</translation>
@@ -724,7 +723,6 @@
 <translation id="1676902103953506022">Prihlasovacie údaje používateľa <ph name="USERNAME" /> v doméne <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Rozšírenie <ph name="EXTENSION_TYPE_PARAMETER" /> sa nedá pridať</translation>
 <translation id="1677472565718498478">Zostávajúci čas: <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Zamykať v režime spánku alebo po zavretí krytu</translation>
 <translation id="1679068421605151609">Nástroje pre vývojárov</translation>
 <translation id="1679810534535368772">Naozaj chcete túto obrazovku ukončiť?</translation>
 <translation id="167983332380191032">Služba správy odoslala chybu protokolu HTTP.</translation>
@@ -852,7 +850,6 @@
 <translation id="1794051631868188691">Nikdy nezobrazovať predajcu <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Odoslať spätnú väzbu, ktorá nám pomôže pri riešení tohto problému</translation>
 <translation id="1795214765651529549">Použiť klasický</translation>
-<translation id="1796105431091975902">Výber príručky Ansible na pridanie</translation>
 <translation id="1796588414813960292">Funkcie vyžadujúce zvuk nebudú podporované</translation>
 <translation id="1797117170091578105">Hrajte pomocou klávesnice Chromebooku. Klávesy si môžete prispôsobiť pre konkrétne akcie.</translation>
 <translation id="1800502858278951817">O čítanie a zmenu webu <ph name="SITE_NAME" /> nepožiadali žiadne rozšírenia</translation>
@@ -917,6 +914,7 @@
 <translation id="1842766183094193446">Naozaj chcete povoliť režim ukážky?</translation>
 <translation id="1845727111305721124">Môže prehrávať zvuk</translation>
 <translation id="1846308012215045257">Doplnok <ph name="PLUGIN_NAME" /> spustíte súčasným stlačením tlačidla Ctrl a kliknutím</translation>
+<translation id="1848219224579402567">Pri zavretí krytu sa odhlásiť</translation>
 <translation id="184862733444771842">Žiadosť o funkciu</translation>
 <translation id="1849016657376805933">Všetky zariadenia HID</translation>
 <translation id="1849186935225320012">Táto stránka má úplnú kontrolu nad zariadeniami MIDI.</translation>
@@ -1024,7 +1022,6 @@
 <translation id="1941553344801134989">Verzia: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Zobrazovať pridelenie klávesov</translation>
 <translation id="1942128823046546853">Čítať a meniť všetky vaše údaje na všetkých weboch</translation>
-<translation id="1942600407708803723">Po zavretí krytu vypnúť</translation>
 <translation id="1944528062465413897">Párovací kód Bluetooth:</translation>
 <translation id="1944921356641260203">Je k dispozícii aktualizácia</translation>
 <translation id="1947136734041527201">Umožňuje vám prihlásiť sa na weboch účtom, ktorý ste si zriadili prostredníctvom služby identity</translation>
@@ -3087,7 +3084,6 @@
 <translation id="389901847090970821">Výber klávesnice</translation>
 <translation id="3900966090527141178">Exportovanie hesiel</translation>
 <translation id="3903187154317825986">Vstavaná klávesnica</translation>
-<translation id="3903191712482985591">Pridanie príručky</translation>
 <translation id="3904326018476041253">Služby určovania polohy</translation>
 <translation id="3904849010307028014">Na základe vašej interakcie s určitým webom, ako je pravidelné prihlasovanie sa do účtu, môže daný web vydať vášmu prehliadaču token dôveryhodnosti. Ak neskôr ďalšie weby, ktoré navštívite, skontrolujú a nájdu platný token dôveryhodnosti, budú vás s vyššou pravdepodobnosťou považovať za osobu a nie robota.</translation>
 <translation id="3905761538810670789">Opraviť aplikáciu</translation>
@@ -5032,7 +5028,6 @@
 <translation id="5827733057563115968">Predvídanie ďalšieho slova</translation>
 <translation id="5828545842856466741">Pridať profil…</translation>
 <translation id="5828633471261496623">Prebieha tlač...</translation>
-<translation id="5828797982387013521">Vybrať príručku</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> sa nedá otvoriť</translation>
 <translation id="5830720307094128296">Uložiť stránku &amp;ako...</translation>
 <translation id="5832813618714645810">Profily</translation>
@@ -5928,7 +5923,6 @@
 <translation id="6686665106869989887">Karta bola presunutá doprava</translation>
 <translation id="6686817083349815241">Uloženie hesla</translation>
 <translation id="6687079240787935001">Skryť <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Žiada o povolenie čítať a vykonávať zmeny na <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Požiadajte dieťa <ph name="SUPERVISED_USER_NAME" />, aby prišlo k počítaču. Prečíta niekoľko fráz na tejto obrazovke a vytvorí tak model svojho hlasu.
     <ph name="BR" />
     Ak bude dieťa <ph name="SUPERVISED_USER_NAME" /> potrebovať pomôcť s čítaním, požiadajte, aby opakovalo po vás. Pošepkajte mu to mimo mikrofónu, aby sa Asistent naučil hlas vášho dieťa, nie váš.</translation>
@@ -7186,7 +7180,6 @@
 <translation id="7898725031477653577">Vždy prekladať</translation>
 <translation id="7901405293566323524">Telefónne centrum</translation>
 <translation id="7903290522161827520">Hľadáte komponenty prehliadača? Prejdite na</translation>
-<translation id="7903345046358933331">Stránka prestala reagovať. Môžete počkať, kým začne reagovať, alebo ju ukončite.</translation>
 <translation id="7903429136755645827">Kliknutím prispôsobte ovládanie hry</translation>
 <translation id="7903742244674067440">V súbore máte certifikáty, ktoré identifikujú tieto certifikačné autority</translation>
 <translation id="7903925330883316394">Pomôcka: <ph name="UTILITY_TYPE" /></translation>
@@ -8103,6 +8096,7 @@
 <translation id="8780123805589053431">Získavať popisy obrázkov od Googlu</translation>
 <translation id="8780443667474968681">Hlasové vyhľadávanie bolo vypnuté</translation>
 <translation id="8781834595282316166">Nová karta v skupine</translation>
+<translation id="8781980678064919987">Pri zavretí krytu vypnúť</translation>
 <translation id="8782565991310229362">Spustenie aplikácie pre režim kiosku sa zrušilo.</translation>
 <translation id="8783834180813871000">Zadajte párovací kód Bluetooth a potom stlačte Return alebo Enter.</translation>
 <translation id="8784626084144195648">Vyhladený priemer</translation>
@@ -8167,7 +8161,6 @@
 <translation id="8846132060409673887">Prečítať informácie o výrobcovi a modeli tohto zariadenia</translation>
 <translation id="8846163936679269230">Resetovanie profilov eSIM</translation>
 <translation id="8846239054091760429">Zvuk mono, spustenie, živý prepis a ďalšie možnosti</translation>
-<translation id="8847523528195140327">Pri zavretí krytu sa odhlásiť</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Skryté</translation>
 <translation id="8849219423513870962">Zrušiť odstránenie profilu eSIM karty s názvom <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 54cee45..be50bdcf 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -566,7 +566,6 @@
 <translation id="1536754031901697553">Prekinjanje povezave ...</translation>
 <translation id="1537254971476575106">Celozaslonska lupa</translation>
 <translation id="15373452373711364">Velik miškin kazalec</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> zahteva branje in spreminjanje mesta <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Omogočanje predstavitvenega načina</translation>
 <translation id="1541346352678737112">Ni omrežja</translation>
 <translation id="1542137295869176367">Podatkov za prijavo ni bilo mogoče posodobiti.</translation>
@@ -728,7 +727,6 @@
 <translation id="1676902103953506022">Podrobnosti o poverilnicah za uporabniško ime <ph name="USERNAME" /> v domeni <ph name="DOMAIN" />.</translation>
 <translation id="1677306805708094828">Ni mogoče dodati tega: <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Še <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Zaklepanje v načinu spanja ali ko je pokrov zaprt</translation>
 <translation id="1679068421605151609">Razvijalska orodja</translation>
 <translation id="1679810534535368772">Ali ste prepričani, da želite zapreti?</translation>
 <translation id="167983332380191032">Storitev upravljanja je poslala napako HTTP.</translation>
@@ -864,7 +862,6 @@
 <translation id="1794051631868188691">Nikoli ne pokaži: <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Pošiljanje povratnih informacij zaradi odpravljanja te težave.</translation>
 <translation id="1795214765651529549">Uporabi klasično</translation>
-<translation id="1796105431091975902">Izberite Ansible Playbook za dodajanje</translation>
 <translation id="1796588414813960292">Funkcije, ki potrebujejo zvok, ne bodo delovale.</translation>
 <translation id="1797117170091578105">Igrajte s tipkovnico Chromebooka. Tipke lahko prilagodite določenim dejanjem.</translation>
 <translation id="1800502858278951817">Nobena razširitev ni zahtevala branja in spreminjanja spletnega mesta <ph name="SITE_NAME" /></translation>
@@ -929,6 +926,7 @@
 <translation id="1842766183094193446">Ali ste prepričani, da želite omogočiti predstavitveni način?</translation>
 <translation id="1845727111305721124">Dovoljeno je predvajanje zvoka</translation>
 <translation id="1846308012215045257">Pridržite tipko »control« in kliknite za zagon vtičnika <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Odjava, ko je pokrov zaprt</translation>
 <translation id="184862733444771842">Zahteva za funkcijo</translation>
 <translation id="1849016657376805933">Katera koli naprava HID</translation>
 <translation id="1849186935225320012">To spletno mesto ima popolni nadzor nad napravami MIDI.</translation>
@@ -1037,7 +1035,6 @@
 <translation id="1941553344801134989">Različica: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Prikaz dodelitve tipk</translation>
 <translation id="1942128823046546853">Branje in spreminjanje vseh vaših podatkov na vseh spletnih mestih</translation>
-<translation id="1942600407708803723">Zaustavitev, ko je pokrov zaprt</translation>
 <translation id="1944528062465413897">Koda za seznanitev prek Bluetootha:</translation>
 <translation id="1944921356641260203">Najdena je bila posodobitev</translation>
 <translation id="1947136734041527201">Omogoča prijavo na spletnih mestih z računom, ki ga imate pri storitvi za identiteto.</translation>
@@ -3104,7 +3101,6 @@
 <translation id="389901847090970821">Izbira tipkovnice</translation>
 <translation id="3900966090527141178">Izvoz gesel</translation>
 <translation id="3903187154317825986">Vgrajena tipkovnica</translation>
-<translation id="3903191712482985591">Dodajte Ansible Playbook</translation>
 <translation id="3904326018476041253">Lokacijske storitve</translation>
 <translation id="3904849010307028014">Glede na interakcijo s spletnim mestom, kot je redno prijavljanje v račun, lahko to spletno mesto brskalniku izda žeton zaupanja. Če pozneje druga spletna mesta, ki jih obiščete, iščejo in poiščejo veljaven žeton zaupanja, vas bodo verjetneje obravnavala kot osebo, ne pa bot.</translation>
 <translation id="3905761538810670789">Popravi aplikacijo</translation>
@@ -5052,7 +5048,6 @@
 <translation id="5827733057563115968">Predvidevanje naslednje besede</translation>
 <translation id="5828545842856466741">Dodajanje profila …</translation>
 <translation id="5828633471261496623">Tiskanje ...</translation>
-<translation id="5828797982387013521">Izbira Playbooka</translation>
 <translation id="5830205393314753525">Aplikacije <ph name="APP_NAME" /> ni mogoče odpreti</translation>
 <translation id="5830720307094128296">Shrani stran &amp;kot ...</translation>
 <translation id="5832813618714645810">Profili</translation>
@@ -5950,7 +5945,6 @@
 <translation id="6686665106869989887">Zavihek je premaknjen desno.</translation>
 <translation id="6686817083349815241">Shranite geslo</translation>
 <translation id="6687079240787935001">Skrij <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Zahtevanje branja in spreminjanja mesta <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Prosite otroka <ph name="SUPERVISED_USER_NAME" />, naj pride k računalniku. Otrok bo prebral nekaj besednih zvez na zaslonu zaradi ustvarjanja glasovnega modela.
     <ph name="BR" />
     Če <ph name="SUPERVISED_USER_NAME" /> potrebuje pomoč pri branju, naj otrok ponovi za vami. Šepetajte proč od mikrofona, da se bo Pomočnik naučil otrokovega glasu, ne pa vašega.</translation>
@@ -7210,7 +7204,6 @@
 <translation id="7898725031477653577">Vedno prevedi</translation>
 <translation id="7901405293566323524">Središče za telefone</translation>
 <translation id="7903290522161827520">Ali iščete komponente brskalnika? Obiščite</translation>
-<translation id="7903345046358933331">Stran se je nehala odzivati. Lahko počakate, da se začne odzivati, ali pa jo zaprete.</translation>
 <translation id="7903429136755645827">Kliknite, če želite prilagoditi kontrolnike za igro.</translation>
 <translation id="7903742244674067440">V datoteki so potrdila, ki identificirajo te overitelje potrdil</translation>
 <translation id="7903925330883316394">Pripomoček: <ph name="UTILITY_TYPE" /></translation>
@@ -8128,6 +8121,7 @@
 <translation id="8780123805589053431">Pridobivanje opisov slik iz Googla</translation>
 <translation id="8780443667474968681">Glasovno iskanje je izklopljeno.</translation>
 <translation id="8781834595282316166">Novi zavihek v skupini</translation>
+<translation id="8781980678064919987">Zaustavitev, ko je pokrov zaprt</translation>
 <translation id="8782565991310229362">Zagon aplikacije Kiosk je preklican.</translation>
 <translation id="8783834180813871000">Vnesite kodo za seznanjanje za Bluetooth in nato pritisnite Return ali Enter.</translation>
 <translation id="8784626084144195648">Kvantizacijsko povprečje</translation>
@@ -8192,7 +8186,6 @@
 <translation id="8846132060409673887">Dostop do podatkov o proizvajalcu in modelu računalnika</translation>
 <translation id="8846163936679269230">Ponastavitev profilov za eSIM</translation>
 <translation id="8846239054091760429">Mono zvok, zagon, samodejni podnapisi in drugo.</translation>
-<translation id="8847523528195140327">Odjava, ko je pokrov zaprt</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Skrito</translation>
 <translation id="8849219423513870962">Prekliči odstranitev profila za eSIM z imenom <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb
index 3a0af80..4a9de9b 100644
--- a/chrome/app/resources/generated_resources_sq.xtb
+++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -557,7 +557,6 @@
 <translation id="1536754031901697553">Po shkëputet...</translation>
 <translation id="1537254971476575106">Zmadhuesi i ekranit të plotë</translation>
 <translation id="15373452373711364">Kursor i madh</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> po kërkon të lexohet dhe të ndryshohet <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Aktivizo modalitetin e demonstrimit</translation>
 <translation id="1541346352678737112">Nuk u gjet asnjë rrjet</translation>
 <translation id="1542137295869176367">Të dhënat e tua të identifikimit nuk mund të përditësoheshin</translation>
@@ -719,7 +718,6 @@
 <translation id="1676902103953506022">Detajet e kredencialeve për <ph name="USERNAME" /> në <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Nuk mund të shtohet kjo <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Koha e mbetur <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Kyçe në modalitetin "në gjumë" ose kur mbyllet kapaku</translation>
 <translation id="1679068421605151609">Mjetet e zhvilluesit</translation>
 <translation id="1679810534535368772">Je i sigurt që dëshiron të dalësh?</translation>
 <translation id="167983332380191032">Shërbimi i menaxhimit dërgoi një gabim të protokollit HTTP.</translation>
@@ -847,7 +845,6 @@
 <translation id="1794051631868188691">Mos shfaq asnjëherë <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Dërgo komente për të na ndihmuar ta rregullojmë këtë problem.</translation>
 <translation id="1795214765651529549">Përdor temën klasike</translation>
-<translation id="1796105431091975902">Zgjidh një udhëzues të Ansible për ta shtuar</translation>
 <translation id="1796588414813960292">Veçoritë që kanë nevojë për tingujt nuk do të funksionojnë</translation>
 <translation id="1797117170091578105">Luaj duke përdorur tastierën e Chromebook. Mund t'i personalizosh tastet për veprime specifike.</translation>
 <translation id="1800502858278951817">Asnjë shtesë nuk ka kërkuar që të lexojë dhe të ndryshojë <ph name="SITE_NAME" /></translation>
@@ -912,6 +909,7 @@
 <translation id="1842766183094193446">Je i sigurt për aktivizimin e modalitetit të demonstrimit?</translation>
 <translation id="1845727111305721124">Lejohen të luajnë tinguj</translation>
 <translation id="1846308012215045257">Kliko "kontroll" për të ekzekutuar <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Dil nga llogaria kur mbyllet kapaku</translation>
 <translation id="184862733444771842">Kërkesë për funksione</translation>
 <translation id="1849016657376805933">Çdo pajisje HID</translation>
 <translation id="1849186935225320012">Kjo faqe ka kontroll të plotë të pajisjeve MIDI.</translation>
@@ -1019,7 +1017,6 @@
 <translation id="1941553344801134989">Versioni: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Shfaq organizimin e tasteve</translation>
 <translation id="1942128823046546853">Lexo dhe ndrysho të gjitha të dhënat e tua në të gjitha sajtet e uebit</translation>
-<translation id="1942600407708803723">Fike kur mbyllet kapaku</translation>
 <translation id="1944528062465413897">Kodi i çiftimit të Bluetooth-it:</translation>
 <translation id="1944921356641260203">U gjet një përditësim</translation>
 <translation id="1947136734041527201">Të lejon që të identifikohesh në sajtet e uebit duke përdorur llogarinë që ke një shërbim identiteti</translation>
@@ -1822,7 +1819,7 @@
 <translation id="2687407218262674387">Kushtet e shërbimit të Google</translation>
 <translation id="2687621393791886981">Më pyet më vonë</translation>
 <translation id="2688196195245426394">Gabim gjatë regjistrimit të pajisjes në server: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="2688734475209947648">Nuk është nevoja ta kujtosh këtë fjalëkalim. Ai do të ruhet te "Menaxheri i fjalëkalimeve" i Google për <ph name="ACCOUNT" />.</translation>
+<translation id="2688734475209947648">Nuk është nevoja ta kujtosh këtë fjalëkalim. Ai do të ruhet te "Menaxheri i fjalëkalimeve i Google" për <ph name="ACCOUNT" />.</translation>
 <translation id="2690024944919328218">Shfaq opsionet e gjuhës</translation>
 <translation id="2691385045260836588">Modeli</translation>
 <translation id="2691440343905273290">Ndrysho cilësimet e hyrjes</translation>
@@ -2549,6 +2546,7 @@
 <translation id="3406290648907941085">Lejohen të përdorin të dhënat dhe pajisjet e realitetit virtual</translation>
 <translation id="3406396172897554194">Kërko sipas gjuhës ose emrit të hyrjes</translation>
 <translation id="3406605057700382950">&amp;Shfaq shiritin e faqeshënuesve</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{1 fjalëkalim u importua te "Menaxheri i fjalëkalimeve i Google" për <ph name="USER_EMAIL" />}other{{NUM_PASSWORDS} fjalëkalime u importuan te "Menaxheri i fjalëkalimeve i Google" për <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Hartat</translation>
 <translation id="3412265149091626468">Kalo te përzgjedhja</translation>
 <translation id="3413122095806433232">Lëshuesit e autoritetit të certifikimit: <ph name="LOCATION" /></translation>
@@ -3082,7 +3080,6 @@
 <translation id="389901847090970821">Zgjidh tastierën</translation>
 <translation id="3900966090527141178">Eksporto fjalëkalimet</translation>
 <translation id="3903187154317825986">Tastiera e integruar</translation>
-<translation id="3903191712482985591">Shto udhëzuesin</translation>
 <translation id="3904326018476041253">Shërbimet e vendndodhjes</translation>
 <translation id="3904849010307028014">Bazuar në ndërveprimin tënd me një sajt, si p.sh. identifikimi i vazhdueshëm në një llogari, ai sajt mund të lëshojë një kod besimi për shfletuesin tënd. Më vonë, nëse sajtet e tjera që viziton kontrollojnë ose gjejnë një kod të vlefshëm besimi, ka më shumë gjasa që ato të të trajtojnë si një person dhe jo robot.</translation>
 <translation id="3905761538810670789">Riparo aplikacionin</translation>
@@ -3733,6 +3730,7 @@
 <translation id="4541123282641193691">Llogaria jote nuk mund të verifikohej. Provo sërish ose rinise pajisjen Chromebook.</translation>
 <translation id="4541662893742891060">Nuk mund të lidhet me këtë profil. Për mbështetje teknike, kontakto me operatorin tënd celular.</translation>
 <translation id="4541706525461326392">Profili po hiqet. Kjo mund të zgjasë disa minuta.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{1 fjalëkalim u importua te "Menaxheri i fjalëkalimeve i Google" në këtë pajisje}other{{NUM_PASSWORDS} fjalëkalime u importuan te "Menaxheri i fjalëkalimeve i Google" në këtë pajisje}}</translation>
 <translation id="4542520061254486227">Lexo të dhënat e tua në <ph name="WEBSITE_1" /> dhe <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Menaxheri i certifikatave</translation>
 <translation id="4544174279960331769">Avatari i parazgjedhur blu</translation>
@@ -4043,7 +4041,7 @@
 <translation id="4842976633412754305">Kjo faqe po përpiqet të ngarkojë skripte nga burime të paverifikuara.</translation>
 <translation id="4844333629810439236">Tastiera të tjera</translation>
 <translation id="484462545196658690">Automatike</translation>
-<translation id="4844633725025837809">Për siguri shtesë, enkripto fjalëkalimet në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve" të Google</translation>
+<translation id="4844633725025837809">Për siguri shtesë, enkripto fjalëkalimet në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve të Google"</translation>
 <translation id="4846628405149428620">Zgjidh se ku mund t'i ruajë ndryshimet ky sajt</translation>
 <translation id="4846680374085650406">Po ndjek rekomandimin e administratorit për këtë cilësim.</translation>
 <translation id="4848191975108266266">"Ok Google" e "Asistentit të Google"</translation>
@@ -4369,7 +4367,7 @@
 <translation id="5177549709747445269">Po përdor të dhënat celulare</translation>
 <translation id="5178667623289523808">Gjej të mëparshmin</translation>
 <translation id="5181140330217080051">Po shkarkon</translation>
-<translation id="5181172023548002891">Te "Menaxheri i fjalëkalimeve" të Google për <ph name="ACCOUNT" /></translation>
+<translation id="5181172023548002891">Te "Menaxheri i fjalëkalimeve të Google" për <ph name="ACCOUNT" /></translation>
 <translation id="5184063094292164363">Paneli i &amp;JavaScript</translation>
 <translation id="5184209580557088469">Një biletë me këtë emër përdoruesi ekziston tashmë</translation>
 <translation id="5184662919967270437">Po përditëson pajisjen</translation>
@@ -5026,7 +5024,6 @@
 <translation id="5827733057563115968">Parashikimi i fjalës tjetër</translation>
 <translation id="5828545842856466741">Shto profil...</translation>
 <translation id="5828633471261496623">Po printon...</translation>
-<translation id="5828797982387013521">Zgjidh udhëzuesin</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> nuk mund të hapet</translation>
 <translation id="5830720307094128296">Ruaje faqen &amp;si...</translation>
 <translation id="5832813618714645810">Profilet</translation>
@@ -5463,7 +5460,7 @@
 <translation id="6243774244933267674">Serveri është jashtë shërbimit</translation>
 <translation id="6244245036423700521">Importo skedarin ONC</translation>
 <translation id="6246790815526961700">Ngarko nga pajisja</translation>
-<translation id="6247557882553405851">"Menaxheri i fjalëkalimeve" i Google</translation>
+<translation id="6247557882553405851">Menaxheri i fjalëkalimeve i Google</translation>
 <translation id="6247620186971210352">Nuk u gjet asnjë aplikacion</translation>
 <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation>
 <translation id="6247802389331535091">Sistemi: <ph name="ARC_PROCESS_NAME" /></translation>
@@ -5742,11 +5739,11 @@
         <ph name="FILE_INFO" />
         <ph name="EVENT_NAME" /></translation>
 <translation id="6519689855001245063">Po kontrollon përshtatshmërinë</translation>
-<translation id="6520087076882753524">Mund të shikosh dhe të menaxhosh fjalëkalimet e ruajtura në "Menaxherin e fjalëkalimeve" të Google</translation>
+<translation id="6520087076882753524">Mund të shikosh dhe të menaxhosh fjalëkalimet e ruajtura në "Menaxherin e fjalëkalimeve të Google"</translation>
 <translation id="6520876759015997832">Rezultati i kërkimit <ph name="LIST_POSITION" /> nga <ph name="LIST_SIZE" />: <ph name="SEARCH_RESULT_TEXT" />. Shtyp Enter për të naviguar te seksioni.</translation>
 <translation id="6521214596282732365">Sajtet zakonisht përdorin fonte në mënyrë që të mund të krijosh përmbajtje në saktësi të lartë me vegla grafike dhe dizajni në linjë</translation>
 <translation id="6523303810310758032">Kur ti fshin historikun tënd të shfletimit — të gjithë ose për një sajt specifik — mund të fshish gjithashtu informacionet e lidhura me matjet. Shiko <ph name="BEGIN_LINK" />historikun tënd të shfletimit<ph name="END_LINK" /></translation>
-<translation id="6523574494641144162">"Menaxheri i fjalëkalimeve" i Google nuk mund t'i ruante këto fjalëkalime në "Llogarinë tënde të Google". Mund t'i ruash ato në këtë pajisje.</translation>
+<translation id="6523574494641144162">"Menaxheri i fjalëkalimeve i Google" nuk mund t'i ruante këto fjalëkalime në "Llogarinë tënde të Google". Mund t'i ruash ato në këtë pajisje.</translation>
 <translation id="6524735478670290456">Si i përdorim këto të dhëna:</translation>
 <translation id="652492607360843641">Je lidhur me një rrjet <ph name="NETWORK_TYPE" />.</translation>
 <translation id="6527303717912515753">Ndaj</translation>
@@ -5827,9 +5824,9 @@
 <translation id="6595187330192059106">Bllokoje gjithmonë <ph name="HOST" /> që të mos ketë kontroll të plotë mbi pajisjet MIDI.</translation>
 <translation id="6595408197871512625">{COUNT,plural, =1{Fjalëkalimi i komprometuar u ndryshua me sukses.
 
-Ke edhe # fjalëkalim tjetër të komprometuar. "Menaxheri i fjalëkalimeve" i Google rekomandon ta kontrollosh këtë fjalëkalim tani.}other{Fjalëkalimi i komprometuar u ndryshua me sukses.
+Ke edhe # fjalëkalim tjetër të komprometuar. "Menaxheri i fjalëkalimeve i Google" rekomandon ta kontrollosh këtë fjalëkalim tani.}other{Fjalëkalimi i komprometuar u ndryshua me sukses.
 
-Ke edhe # fjalëkalime të tjera të komprometuara. "Menaxheri i fjalëkalimeve" i Google rekomandon t'i kontrollosh këto fjalëkalime tani.}}</translation>
+Ke edhe # fjalëkalime të tjera të komprometuara. "Menaxheri i fjalëkalimeve i Google" rekomandon t'i kontrollosh këto fjalëkalime tani.}}</translation>
 <translation id="6596325263575161958">Opsionet e enkriptimit</translation>
 <translation id="6596816719288285829">Adresa e IP-së</translation>
 <translation id="6597017209724497268">Shembuj</translation>
@@ -5918,7 +5915,6 @@
 <translation id="6686665106869989887">Skeda u zhvendos djathtas</translation>
 <translation id="6686817083349815241">Ruaje fjalëkalimin</translation>
 <translation id="6687079240787935001">Fshih <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Po kërkohet të lexohet dhe të ndryshohet <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Kërkoji <ph name="SUPERVISED_USER_NAME" /> që të vijë te kompjuteri. Fëmija yt do të lexojë disa fraza në këtë ekran për të krijuar modelin e vet të zërit.
     <ph name="BR" />
     Nëse <ph name="SUPERVISED_USER_NAME" /> ka nevojë për ndihmë për të lexuar, kërkoji fëmijës ta përsëritë pas teje. Pëshpëriti larg mikrofonit që "Asistenti" të mësojë zërin e fëmijës tënd në vend të zërit tënd.</translation>
@@ -6220,6 +6216,7 @@
 <translation id="6968288415730398122">Fut fjalëkalimin për të konfiguruar kyçjen e ekranit</translation>
 <translation id="6969047215179982698">Çaktivizo "Ndarjen në afërsi"</translation>
 <translation id="6970480684834282392">Lloji i nisjes</translation>
+<translation id="6970543303783413625">Fjalëkalimet nuk mund të importohen. Mund të importosh vetëm deri në <ph name="COUNT" /> fjalëkalime në të njëjtën kohë.</translation>
 <translation id="6970856801391541997">Printo faqet specifike</translation>
 <translation id="6970861306198150268">Sigurohu që po ruan fjalëkalimin aktual për këtë sajt</translation>
 <translation id="6972180789171089114">Audio/Video</translation>
@@ -6451,6 +6448,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Dil nga faqja}other{Dil nga faqet}}</translation>
 <translation id="7207457272187520234">Dërgo të dhënat e përdorimit dhe të diagnostikimit. Aktualisht kjo pajisje po dërgon automatikisht te Google të dhënat e diagnostikimit dhe të përdorimit të pajisjes dhe të aplikacioneve. Këto do të ndihmojnë për qëndrueshmërinë e sistemit dhe të aplikacioneve dhe për përmirësime të tjera. Disa të dhëna të përmbledhura do të ndihmojnë po ashtu aplikacionet dhe partnerët e Google, si p.sh. zhvilluesit e Android. Ky cilësim zbatohet nga zotëruesi. Nëse cilësimi i "Aktivitetit shtesë të uebit dhe të aplikacioneve" është i aktivizuar, këto të dhëna mund të ruhen në "Llogarinë tënde të Google".</translation>
 <translation id="7207631048330366454">Kërko për aplikacione</translation>
+<translation id="7210471695184432500">Për të importuar fjalëkalimet te "Menaxheri i fjalëkalimeve i Google" në këtë pajisje, zgjidh një skedar CSV</translation>
 <translation id="7210499381659830293">Printerët e shtesës</translation>
 <translation id="7211783048245131419">Nuk është caktuar ende asnjë çelës</translation>
 <translation id="7212097698621322584">Fut kodin PIN aktual për ta ndryshuar. Nëse nuk e di kodin PIN, duhet të rivendosësh çelësin e sigurisë, dhe më pas të krijosh një kod të ri PIN.</translation>
@@ -6918,7 +6916,7 @@
 <translation id="7665082356120621510">Rezervo madhësinë</translation>
 <translation id="7665369617277396874">Shto një llogari</translation>
 <translation id="7668002322287525834">{NUM_WEEKS,plural, =1{Ktheje pajisjen <ph name="DEVICE_TYPE" /> brenda {NUM_WEEKS} jave}other{Ktheje pajisjen <ph name="DEVICE_TYPE" /> brenda {NUM_WEEKS} javësh}}</translation>
-<translation id="7668423670802040666">Në "Menaxherin e fjalëkalimeve" të Google për <ph name="ACCOUNT" /></translation>
+<translation id="7668423670802040666">Në "Menaxherin e fjalëkalimeve të Google" për <ph name="ACCOUNT" /></translation>
 <translation id="7668648754769651616">Veçoritë e qasshmërisë e bëjnë më të lehtë përdorimin e pajisjes sate. Për t'u qasur te "Cilësimet e shpejta", zgjidh kohën në fund të ekranit.</translation>
 <translation id="7669825497510425694">{NUM_ATTEMPTS,plural, =1{Kodi PIN është i pasaktë. Të ka mbetur një përpjekje.}other{Kodi PIN është i pasaktë. Të kanë mbetur # përpjekje.}}</translation>
 <translation id="7670434942695515800">Për performancën më të mirë, përmirësoje në versionin më të fundit. Rekomandohet të rezervosh skedarët, në rast se përmirësimi nuk mund të kryhet. Pasi të fillojë përmirësimi, Linux do të fiket. Ruaj skedarët e hapur para se të vazhdosh. <ph name="LINK_START" />Mëso më shumë<ph name="LINK_END" /></translation>
@@ -7173,7 +7171,6 @@
 <translation id="7898725031477653577">Përkthe gjithmonë</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Po kërkon për komponentët e shfletuesit? Vizito</translation>
-<translation id="7903345046358933331">Faqja nuk po reagon. Mund të presësh deri sa të reagojë ose mund ta mbyllësh.</translation>
 <translation id="7903429136755645827">Kliko për të personalizuar kontrollet e lojës</translation>
 <translation id="7903742244674067440">Ke certifikata në skedar që identifikojnë këto autoritete të certifikatave</translation>
 <translation id="7903925330883316394">Softueri ndihmës: <ph name="UTILITY_TYPE" /></translation>
@@ -7325,7 +7322,7 @@
 <translation id="8041089156583427627">Dërgo komentet</translation>
 <translation id="8041267120753677077">Transmeto aplikacionet e telefonit tënd</translation>
 <translation id="8042142357103597104">Transparenca e tekstit</translation>
-<translation id="8042331986490021244">Fjalëkalimet enkriptohen në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve" të Google</translation>
+<translation id="8042331986490021244">Fjalëkalimet enkriptohen në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve të Google"</translation>
 <translation id="8044262338717486897"><ph name="LINUX_APP_NAME" /> nuk përgjigjet.</translation>
 <translation id="8044899503464538266">I ngadaltë</translation>
 <translation id="8045253504249021590">Sinkronizimi është ndaluar nëpërmjet "Panelit të Google".</translation>
@@ -7508,6 +7505,7 @@
 <translation id="8206859287963243715">Rrjeti celular</translation>
 <translation id="8208216423136871611">Mos e ruaj</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Njoftim i ri}other{# ‏njoftime të reja}}</translation>
+<translation id="821119981794423735">Për të importuan fjalëkalimet te "Menaxheri i fjalëkalimeve i Google" për <ph name="USER_EMAIL" />, zgjidh një skedar CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Shkarkimi është në vazhdim}other{Shkarkimet janë në vazhdim}}</translation>
 <translation id="8213449224684199188">Kalove te modaliteti i fotografisë</translation>
 <translation id="8214489666383623925">Hap skedarin...</translation>
@@ -8086,6 +8084,7 @@
 <translation id="8780123805589053431">Merr përshkrimet e imazhit nga Google</translation>
 <translation id="8780443667474968681">Kërkimi me zë është çaktivizuar.</translation>
 <translation id="8781834595282316166">Skedë e re në grup</translation>
+<translation id="8781980678064919987">Fike kur mbyllet kapaku</translation>
 <translation id="8782565991310229362">Hapja e aplikacionit "kioskë" u anulua.</translation>
 <translation id="8783834180813871000">Shkruaj kodin e çiftimit të Bluetooth-it, pastaj shtyp "Kthehu" ose "Hyr"</translation>
 <translation id="8784626084144195648">Mesatarja e reduktimit</translation>
@@ -8150,7 +8149,6 @@
 <translation id="8846132060409673887">Lexo informacionet për prodhuesin dhe modelin e këtij kompjuteri</translation>
 <translation id="8846163936679269230">Rivendos profilet e kartës eSIM</translation>
 <translation id="8846239054091760429">Audioja mono, nisja, "Titrat në çast" etj.</translation>
-<translation id="8847523528195140327">Dil nga llogaria kur mbyllet kapaku</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">E fshehur</translation>
 <translation id="8849219423513870962">Anulo heqjen e profilit të kartës eSIM me emrin <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index c4bd3d3..531a5256 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -559,7 +559,6 @@
 <translation id="1536754031901697553">Veza se prekida...</translation>
 <translation id="1537254971476575106">Lupa za ceo ekran</translation>
 <translation id="15373452373711364">Veliki kursor</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> traži da čita i menja sajt <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Omogućite režim demonstracije</translation>
 <translation id="1541346352678737112">Nije pronađena nijedna mreža</translation>
 <translation id="1542137295869176367">Ažuriranje podataka za prijavljivanje nije uspelo</translation>
@@ -721,7 +720,6 @@
 <translation id="1676902103953506022">Detalji akreditiva za korisnika <ph name="USERNAME" /> na <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Nismo uspeli da dodamo: <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> je preostalo</translation>
-<translation id="1678794218766467608">Zaključaj u režimu spavanja ili kada je poklopac zatvoren</translation>
 <translation id="1679068421605151609">Alatke za programere</translation>
 <translation id="1679810534535368772">Želite li stvarno da izađete?</translation>
 <translation id="167983332380191032">Usluga upravljanja je poslala HTTP grešku.</translation>
@@ -849,7 +847,6 @@
 <translation id="1794051631868188691">Nikada ne prikazuj korpu prodavca <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Šalji povratne informacije kao pomoć za rešavanje ovog problema.</translation>
 <translation id="1795214765651529549">Koristi klasičnu</translation>
-<translation id="1796105431091975902">Izaberite Ansible vodič za dodavanje</translation>
 <translation id="1796588414813960292">Funkcije kojima treba zvuk neće raditi</translation>
 <translation id="1797117170091578105">Igrajte pomoću Chromebook tastature. Možete da prilagodite tastere određenim radnjama.</translation>
 <translation id="1800502858278951817">Nijedan dodatak nije zatražio da čita i menja <ph name="SITE_NAME" /></translation>
@@ -914,6 +911,7 @@
 <translation id="1842766183094193446">Želite li stvarno da omogućite režim demonstracije?</translation>
 <translation id="1845727111305721124">Dozvoljeno im je da puštaju zvuk</translation>
 <translation id="1846308012215045257">Kliknite i zadržite taster Control da biste pokrenuli <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Odjavi me kad se poklopac zatvori</translation>
 <translation id="184862733444771842">Zahtev za funkciju</translation>
 <translation id="1849016657376805933">Bilo koji HID uređaj</translation>
 <translation id="1849186935225320012">Ova stranica u potpunosti kontroliše MIDI uređaje.</translation>
@@ -1021,7 +1019,6 @@
 <translation id="1941553344801134989">Verzija: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Prikaži mapiranje tastera</translation>
 <translation id="1942128823046546853">da čita i menja sve vaše podatke na svim veb-sajtovima</translation>
-<translation id="1942600407708803723">Isključi se kada se poklopac zatvori</translation>
 <translation id="1944528062465413897">Kôd za uparivanje sa Bluetooth uređajem:</translation>
 <translation id="1944921356641260203">Ažuriranje je pronađeno</translation>
 <translation id="1947136734041527201">Omogućava vam da se prijavljujete na veb-sajtove pomoću naloga koji imate u usluzi za identitet</translation>
@@ -1710,6 +1707,7 @@
 <translation id="2568774940984945469">Kontejner trake sa informacijama</translation>
 <translation id="2571655996835834626">Promenite podešavanja koja kontrolišu pristup veb-sajtova funkcijama kao što su kolačići, JavaScript, dodatne komponente, geolociranje, mikrofon, kamera itd.</translation>
 <translation id="2572032849266859634">Odobren je pristup za <ph name="VOLUME_NAME" /> samo za čitanje.</translation>
+<translation id="2573276323521243649">Vratite se sa stranice za izbor avatara</translation>
 <translation id="2573417407488272418">Napravite rezervnu kopiju aplikacija i fajlova u odeljku Fajlovi &gt; Moji fajlovi pre nego što nadogradite.</translation>
 <translation id="2573831315551295105">Dodelite prekidač za radnju <ph name="ACTION" /></translation>
 <translation id="2575247648642144396">Ova ikona će biti vidljiva kada dodatak bude mogao da funkcioniše na trenutnoj stranici. Koristite ovaj dodatak klikom na ikonu ili pritiskom na <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3084,7 +3082,6 @@
 <translation id="389901847090970821">Izaberite tastaturu</translation>
 <translation id="3900966090527141178">Izvezite lozinke</translation>
 <translation id="3903187154317825986">Ugrađena tastatura</translation>
-<translation id="3903191712482985591">Dodajte vodič</translation>
 <translation id="3904326018476041253">Usluge lokacije</translation>
 <translation id="3904849010307028014">Taj sajt može da izda pouzdan token za pregledač na osnovu vaše interakcije sa sajtom, poput redovnog prijavljivanja na nalog. Ako drugi sajtovi koje posećujete kasnije potraže i pronađu važeći pouzdani token, veća je verovatnoća da će vas tretirati kao osobu, a ne kao robota.</translation>
 <translation id="3905761538810670789">Popravi aplikaciju</translation>
@@ -5029,7 +5026,6 @@
 <translation id="5827733057563115968">Predviđanje sledeće reči</translation>
 <translation id="5828545842856466741">Dodaj profil…</translation>
 <translation id="5828633471261496623">Štampanje...</translation>
-<translation id="5828797982387013521">Izaberite vodič</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" />: otvaranje nije uspelo</translation>
 <translation id="5830720307094128296">Sačuvaj stranicu &amp;kao...</translation>
 <translation id="5832813618714645810">Profili</translation>
@@ -5925,7 +5921,6 @@
 <translation id="6686665106869989887">Kartica je premeštena nadesno</translation>
 <translation id="6686817083349815241">Sačuvajte lozinku</translation>
 <translation id="6687079240787935001">Sakrij <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Zahtev za čitanje i menjanje za <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Pozovite dete <ph name="SUPERVISED_USER_NAME" /> da dođe do računara. Dete će pročitati nekoliko fraza na ovom ekranu da bismo napravili glasovni model.
     <ph name="BR" />
     Ako je detetu <ph name="SUPERVISED_USER_NAME" /> potrebna pomoć sa čitanjem, neka ponavlja za vama. Šapućite dalje od mikrofona da bi Pomoćnik naučio detetov, a ne vaš glas.</translation>
@@ -6407,6 +6402,7 @@
 <translation id="7138678301420049075">Drugo</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> koristi mikrofon</translation>
 <translation id="7141105143012495934">Prijavljivanje nije uspelo jer nismo uspeli da preuzmemo detalje o nalogu. Kontaktirajte administratora ili pokušajte ponovo.</translation>
+<translation id="7141844554192012199">Proveri</translation>
 <translation id="7144878232160441200">Probaj ponovo</translation>
 <translation id="7149839598364933473">Pretvorite ovaj uređaj u <ph name="DEVICE_OS" /> uređaj.</translation>
 <translation id="7149893636342594995">Poslednja 24 sata</translation>
@@ -7183,7 +7179,6 @@
 <translation id="7898725031477653577">Uvek prevodi</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Tražite komponente pregledača? Posetite</translation>
-<translation id="7903345046358933331">Stranica je prestala da se odaziva. Možete da sačekate da počne da se odaziva ili da je zatvorite.</translation>
 <translation id="7903429136755645827">Kliknite da biste prilagodili kontrole za igre</translation>
 <translation id="7903742244674067440">Imate sačuvane sertifikate koji identifikuju ove autoritete za izdavanje sertifikata</translation>
 <translation id="7903925330883316394">Pomoćni proces: <ph name="UTILITY_TYPE" /></translation>
@@ -8100,6 +8095,7 @@
 <translation id="8780123805589053431">Preuzimaj opise slika sa Google-a</translation>
 <translation id="8780443667474968681">Glasovna pretraga je isključena.</translation>
 <translation id="8781834595282316166">Nova kartica u grupi</translation>
+<translation id="8781980678064919987">Isključi se kad se poklopac zatvori</translation>
 <translation id="8782565991310229362">Pokretanje kiosk aplikacije je otkazano.</translation>
 <translation id="8783834180813871000">Unesite kôd za uparivanje za Bluetooth, pa pritisnite Return ili Enter.</translation>
 <translation id="8784626084144195648">Prosek agregacije</translation>
@@ -8164,7 +8160,6 @@
 <translation id="8846132060409673887">Pročitajte proizvođača i model ovog računara</translation>
 <translation id="8846163936679269230">Resetujte eSIM profile</translation>
 <translation id="8846239054091760429">Mono zvuk, pokretanje, titl uživo i drugo</translation>
-<translation id="8847523528195140327">Odjavi me kada se poklopac zatvori</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Skriveno</translation>
 <translation id="8849219423513870962">Otkažite uklanjanje eSIM profila <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index f0eabfbf..5639e983 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -559,7 +559,6 @@
 <translation id="1536754031901697553">Веза се прекида...</translation>
 <translation id="1537254971476575106">Лупа за цео екран</translation>
 <translation id="15373452373711364">Велики курсор</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> тражи да чита и мења сајт <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Омогућите режим демонстрације</translation>
 <translation id="1541346352678737112">Није пронађена ниједна мрежа</translation>
 <translation id="1542137295869176367">Ажурирање података за пријављивање није успело</translation>
@@ -721,7 +720,6 @@
 <translation id="1676902103953506022">Детаљи акредитива за корисника <ph name="USERNAME" /> на <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Нисмо успели да додамо: <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> је преостало</translation>
-<translation id="1678794218766467608">Закључај у режиму спавања или када је поклопац затворен</translation>
 <translation id="1679068421605151609">Алатке за програмере</translation>
 <translation id="1679810534535368772">Желите ли стварно да изађете?</translation>
 <translation id="167983332380191032">Услуга управљања је послала HTTP грешку.</translation>
@@ -849,7 +847,6 @@
 <translation id="1794051631868188691">Никада не приказуј корпу продавца <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Шаљи повратне информације као помоћ за решавање овог проблема.</translation>
 <translation id="1795214765651529549">Користи класичну</translation>
-<translation id="1796105431091975902">Изаберите Ansible водич за додавање</translation>
 <translation id="1796588414813960292">Функције којима треба звук неће радити</translation>
 <translation id="1797117170091578105">Играјте помоћу Chromebook тастатуре. Можете да прилагодите тастере одређеним радњама.</translation>
 <translation id="1800502858278951817">Ниједан додатак није затражио да чита и мења <ph name="SITE_NAME" /></translation>
@@ -914,6 +911,7 @@
 <translation id="1842766183094193446">Желите ли стварно да омогућите режим демонстрације?</translation>
 <translation id="1845727111305721124">Дозвољено им је да пуштају звук</translation>
 <translation id="1846308012215045257">Кликните и задржите тастер Control да бисте покренули <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Одјави ме кад се поклопац затвори</translation>
 <translation id="184862733444771842">Захтев за функцију</translation>
 <translation id="1849016657376805933">Било који HID уређај</translation>
 <translation id="1849186935225320012">Ова страница у потпуности контролише MIDI уређаје.</translation>
@@ -1021,7 +1019,6 @@
 <translation id="1941553344801134989">Верзија: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Прикажи мапирање тастера</translation>
 <translation id="1942128823046546853">да чита и мења све ваше податке на свим веб-сајтовима</translation>
-<translation id="1942600407708803723">Искључи се када се поклопац затвори</translation>
 <translation id="1944528062465413897">Кôд за упаривање са Bluetooth уређајем:</translation>
 <translation id="1944921356641260203">Ажурирање је пронађено</translation>
 <translation id="1947136734041527201">Омогућава вам да се пријављујете на веб-сајтове помоћу налога који имате у услузи за идентитет</translation>
@@ -1710,6 +1707,7 @@
 <translation id="2568774940984945469">Контејнер траке са информацијама</translation>
 <translation id="2571655996835834626">Промените подешавања која контролишу приступ веб-сајтова функцијама као што су колачићи, JavaScript, додатне компоненте, геолоцирање, микрофон, камера итд.</translation>
 <translation id="2572032849266859634">Одобрен је приступ за <ph name="VOLUME_NAME" /> само за читање.</translation>
+<translation id="2573276323521243649">Вратите се са странице за избор аватара</translation>
 <translation id="2573417407488272418">Направите резервну копију апликација и фајлова у одељку Фајлови &gt; Моји фајлови пре него што надоградите.</translation>
 <translation id="2573831315551295105">Доделите прекидач за радњу <ph name="ACTION" /></translation>
 <translation id="2575247648642144396">Ова икона ће бити видљива када додатак буде могао да функционише на тренутној страници. Користите овај додатак кликом на икону или притиском на <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3084,7 +3082,6 @@
 <translation id="389901847090970821">Изаберите тастатуру</translation>
 <translation id="3900966090527141178">Извезите лозинке</translation>
 <translation id="3903187154317825986">Уграђена тастатура</translation>
-<translation id="3903191712482985591">Додајте водич</translation>
 <translation id="3904326018476041253">Услуге локације</translation>
 <translation id="3904849010307028014">Тај сајт може да изда поуздан токен за прегледач на основу ваше интеракције са сајтом, попут редовног пријављивања на налог. Ако други сајтови које посећујете касније потраже и пронађу важећи поуздани токен, већа је вероватноћа да ће вас третирати као особу, а не као робота.</translation>
 <translation id="3905761538810670789">Поправи апликацију</translation>
@@ -5029,7 +5026,6 @@
 <translation id="5827733057563115968">Предвиђање следеће речи</translation>
 <translation id="5828545842856466741">Додај профил…</translation>
 <translation id="5828633471261496623">Штампање...</translation>
-<translation id="5828797982387013521">Изаберите водич</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" />: отварање није успело</translation>
 <translation id="5830720307094128296">Сачувај страницу &amp;као...</translation>
 <translation id="5832813618714645810">Профили</translation>
@@ -5925,7 +5921,6 @@
 <translation id="6686665106869989887">Картица је премештена надесно</translation>
 <translation id="6686817083349815241">Сачувајте лозинку</translation>
 <translation id="6687079240787935001">Сакриј <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Захтев за читање и мењање за <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Позовите дете <ph name="SUPERVISED_USER_NAME" /> да дође до рачунара. Дете ће прочитати неколико фраза на овом екрану да бисмо направили гласовни модел.
     <ph name="BR" />
     Ако је детету <ph name="SUPERVISED_USER_NAME" /> потребна помоћ са читањем, нека понавља за вама. Шапућите даље од микрофона да би Помоћник научио дететов, а не ваш глас.</translation>
@@ -6407,6 +6402,7 @@
 <translation id="7138678301420049075">Друго</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> користи микрофон</translation>
 <translation id="7141105143012495934">Пријављивање није успело јер нисмо успели да преузмемо детаље о налогу. Контактирајте администратора или покушајте поново.</translation>
+<translation id="7141844554192012199">Провери</translation>
 <translation id="7144878232160441200">Пробај поново</translation>
 <translation id="7149839598364933473">Претворите овај уређај у <ph name="DEVICE_OS" /> уређај.</translation>
 <translation id="7149893636342594995">Последња 24 сата</translation>
@@ -7183,7 +7179,6 @@
 <translation id="7898725031477653577">Увек преводи</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Тражите компоненте прегледача? Посетите</translation>
-<translation id="7903345046358933331">Страница је престала да се одазива. Можете да сачекате да почне да се одазива или да је затворите.</translation>
 <translation id="7903429136755645827">Кликните да бисте прилагодили контроле за игре</translation>
 <translation id="7903742244674067440">Имате сачуване сертификате који идентификују ове ауторитете за издавање сертификата</translation>
 <translation id="7903925330883316394">Помоћни процес: <ph name="UTILITY_TYPE" /></translation>
@@ -8100,6 +8095,7 @@
 <translation id="8780123805589053431">Преузимај описе слика са Google-а</translation>
 <translation id="8780443667474968681">Гласовна претрага је искључена.</translation>
 <translation id="8781834595282316166">Нова картица у групи</translation>
+<translation id="8781980678064919987">Искључи се кад се поклопац затвори</translation>
 <translation id="8782565991310229362">Покретање киоск апликације је отказано.</translation>
 <translation id="8783834180813871000">Унесите кôд за упаривање за Bluetooth, па притисните Return или Enter.</translation>
 <translation id="8784626084144195648">Просек агрегације</translation>
@@ -8164,7 +8160,6 @@
 <translation id="8846132060409673887">Прочитајте произвођача и модел овог рачунара</translation>
 <translation id="8846163936679269230">Ресетујте eSIM профиле</translation>
 <translation id="8846239054091760429">Моно звук, покретање, титл уживо и друго</translation>
-<translation id="8847523528195140327">Одјави ме када се поклопац затвори</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Скривено</translation>
 <translation id="8849219423513870962">Откажите уклањање eSIM профила <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 4090d53e..79280e8 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">Kopplar från …</translation>
 <translation id="1537254971476575106">Helskärmsförstorare</translation>
 <translation id="15373452373711364">Stor muspekare</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> begär att få läsa och ändra <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Aktivera demoläge</translation>
 <translation id="1541346352678737112">Inga nätverk hittades</translation>
 <translation id="1542137295869176367">Det gick inte att uppdatera inloggningsuppgifterna</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">Användaruppgifter för <ph name="USERNAME" /> på <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Det går inte att lägga till <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> kvar</translation>
-<translation id="1678794218766467608">Lås i viloläge eller när locket stängs</translation>
 <translation id="1679068421605151609">Verktyg för utvecklare</translation>
 <translation id="1679810534535368772">Vill du avsluta?</translation>
 <translation id="167983332380191032">Hanteringstjänsten skickade ett HTTP-fel.</translation>
@@ -861,7 +859,6 @@
 <translation id="1794051631868188691">Visa aldrig <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Skicka feedback som hjälper oss att åtgärda problemet.</translation>
 <translation id="1795214765651529549">Använd klassiskt</translation>
-<translation id="1796105431091975902">Välj en Ansible Playbook att lägga till</translation>
 <translation id="1796588414813960292">Funktioner som kräver ljud slutar fungera</translation>
 <translation id="1797117170091578105">Spela med tangentbordet på Chromebook. Du kan tilldela tangenter specifika funktioner.</translation>
 <translation id="1800502858278951817">Inga tillägg har begärt behörighet att läsa och ändra <ph name="SITE_NAME" /></translation>
@@ -926,6 +923,7 @@
 <translation id="1842766183094193446">Vill du aktivera demoläget?</translation>
 <translation id="1845727111305721124">Får spela upp ljud</translation>
 <translation id="1846308012215045257">Kontroll-klicka för att köra <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Logga ut när locket stängs</translation>
 <translation id="184862733444771842">Förslag till ny funktion</translation>
 <translation id="1849016657376805933">Alla HID-enheter</translation>
 <translation id="1849186935225320012">Den här sidan har fullständig kontroll över MIDI-enheter.</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">Version <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Visa tangentmappning</translation>
 <translation id="1942128823046546853">Läsa och ändra all din data på alla webbplatser</translation>
-<translation id="1942600407708803723">Stäng av när fodralet stängs</translation>
 <translation id="1944528062465413897">Kopplingskod för Bluetooth:</translation>
 <translation id="1944921356641260203">En uppdatering hittades</translation>
 <translation id="1947136734041527201">Låter dig logga in på webbplatser med kontot du har hos en identitetstjänst</translation>
@@ -1726,6 +1723,7 @@
 <translation id="2568774940984945469">Infobar-behållare</translation>
 <translation id="2571655996835834626">Ändra inställningar som styr webbplatsers tillgång till funktioner som cookies, JavaScript, pluginprogram, geografisk plats, mikrofon, kamera osv.</translation>
 <translation id="2572032849266859634">Skrivskyddad åtkomst till <ph name="VOLUME_NAME" /> har beviljats.</translation>
+<translation id="2573276323521243649">Tillbaka från sidan för val av avatar</translation>
 <translation id="2573417407488272418">Säkerhetskopiera appar och filer till Filer &gt; Mina filer före uppgraderingen.</translation>
 <translation id="2573831315551295105">Tilldela brytare för <ph name="ACTION" /></translation>
 <translation id="2575247648642144396">Den här ikonen visas när tillägget kan aktiveras för den aktuella sidan. Använd tillägget genom att klicka på ikonen eller genom att trycka på <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -3100,7 +3098,6 @@
 <translation id="389901847090970821">Välj tangentbord</translation>
 <translation id="3900966090527141178">Exportera lösenord</translation>
 <translation id="3903187154317825986">Inbyggt tangentbord</translation>
-<translation id="3903191712482985591">Lägg till Playbook</translation>
 <translation id="3904326018476041253">Platstjänster</translation>
 <translation id="3904849010307028014">En webbplats kan utfärda en förtroendetoken till din webbläsare utifrån dina interaktioner med webbplatsen, till exempel att du regelbundet loggar in på ett konto. Om andra webbplatser du besöker sedan söker efter och hittar en giltig förtroendetoken så ökar sannolikheten att du behandlas som en person och inte som en bot.</translation>
 <translation id="3905761538810670789">Reparera appen</translation>
@@ -5046,7 +5043,6 @@
 <translation id="5827733057563115968">Förslag på nästa ord</translation>
 <translation id="5828545842856466741">Lägg till profil …</translation>
 <translation id="5828633471261496623">Skriver ut...</translation>
-<translation id="5828797982387013521">Välj handbok</translation>
 <translation id="5830205393314753525">Det går inte att öppna <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Spara &amp;sida som...</translation>
 <translation id="5832813618714645810">Profiler</translation>
@@ -5938,7 +5934,6 @@
 <translation id="6686665106869989887">Fliken flyttades åt höger</translation>
 <translation id="6686817083349815241">Spara lösenordet</translation>
 <translation id="6687079240787935001">Dölj <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Begär att få läsa och ändra <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Be <ph name="SUPERVISED_USER_NAME" /> att komma till datorn. Röstmodellen skapas genom att barnet läser upp några fraser på skärmen.
     <ph name="BR" />
     Om <ph name="SUPERVISED_USER_NAME" /> behöver hjälp med att läsa låter du honom elle henne upprepa det du säger. Vänd dig bort från mikrofonen och viska så att assistenten lär sig barnets röst i stället för din.</translation>
@@ -6420,6 +6415,7 @@
 <translation id="7138678301420049075">Övrigt</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> använder mikrofonen</translation>
 <translation id="7141105143012495934">Inloggningen misslyckades eftersom det inte gick att hämta dina kontouppgifter. Kontakta administratören eller försök igen.</translation>
+<translation id="7141844554192012199">Kontroll</translation>
 <translation id="7144878232160441200">Försök igen</translation>
 <translation id="7149839598364933473">Konvertera den här enheten till en <ph name="DEVICE_OS" />-enhet.</translation>
 <translation id="7149893636342594995">Senaste 24 timmarna</translation>
@@ -7197,7 +7193,6 @@
 <translation id="7898725031477653577">Översätt alltid</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Letar du efter webbläsarens komponenter? Besök</translation>
-<translation id="7903345046358933331">Sidan har slutat svara. Du kan vänta tills den svarar eller stänga den.</translation>
 <translation id="7903429136755645827">Klicka för att anpassa dina spelkontroller</translation>
 <translation id="7903742244674067440">Du har sparade certifikat som identifierar dessa certifikatutfärdare</translation>
 <translation id="7903925330883316394">Verktyg: <ph name="UTILITY_TYPE" /></translation>
@@ -8112,6 +8107,7 @@
 <translation id="8780123805589053431">Hämta bildbeskrivningar från Google</translation>
 <translation id="8780443667474968681">Röstsökning har inaktiverats.</translation>
 <translation id="8781834595282316166">Ny flik i grupp</translation>
+<translation id="8781980678064919987">Stäng av när locket stängs</translation>
 <translation id="8782565991310229362">Starten av kioskappen avbröts.</translation>
 <translation id="8783834180813871000">Ange kopplingskoden för Bluetooth och tryck på Retur.</translation>
 <translation id="8784626084144195648">Fackmedelvärde</translation>
@@ -8176,7 +8172,6 @@
 <translation id="8846132060409673887">Läsa information om datorns tillverkare och modell</translation>
 <translation id="8846163936679269230">Återställ eSIM-profiler</translation>
 <translation id="8846239054091760429">Monoljud, start, Live Caption med mera</translation>
-<translation id="8847523528195140327">Logga ut när fodralet stängs</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Dold</translation>
 <translation id="8849219423513870962">Avbryt borttagning av eSIM-profilen som heter <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index a4acd575..a497989 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">Inatenganisha...</translation>
 <translation id="1537254971476575106">Kikuzaji cha skrini nzima</translation>
 <translation id="15373452373711364">Kishale kikubwa cha kipanya</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> inaomba kusoma na kubadilisha<ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Washa hali ya onyesho</translation>
 <translation id="1541346352678737112">Hakuna mtandao uliopatikana</translation>
 <translation id="1542137295869176367">Imeshindwa kusasisha data yako ya kuingia katika akaunti</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022">Maelezo ya kitambulisho kwa ajili ya <ph name="USERNAME" /> kwenye <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Huruhusiwi kuweka <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Zimesalia <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Funga kifaa kikiwa katika hali tuli au kifuniko kikiwa kimefungwa</translation>
 <translation id="1679068421605151609">Zana za Wasadini Programu</translation>
 <translation id="1679810534535368772">Una uhakika kuwa ungependa kufunga?</translation>
 <translation id="167983332380191032">Huduma ya usimamizi ilituma hitilafu ya HTTP.</translation>
@@ -858,7 +856,6 @@
 <translation id="1794051631868188691">Usionyeshe <ph name="MERCHANT" /> tena</translation>
 <translation id="1794791083288629568">Tuma maoni ili utusaidie kutatua tatizo hili.</translation>
 <translation id="1795214765651529549">Tumia ya Kawaida</translation>
-<translation id="1796105431091975902">Chagua Mwongozo wa Ansible ili uweke</translation>
 <translation id="1796588414813960292">Vipengele vinavyohitaji sauti havitafanya kazi</translation>
 <translation id="1797117170091578105">Cheza ukitumia kibodi ya Chromebook. Unaweza kuweka mapendeleo kwenye vitufe ili vitumike kwa vitendo mahususi.</translation>
 <translation id="1800502858278951817">Hakuna viendelezi vilivyoomba kusoma na kubadilisha <ph name="SITE_NAME" /></translation>
@@ -923,6 +920,7 @@
 <translation id="1842766183094193446">Una hakika kuwa ungependa kuwasha hali ya onyesho?</translation>
 <translation id="1845727111305721124">Zinazoruhusiwa kucheza sauti</translation>
 <translation id="1846308012215045257">Shikilia kitufe cha 'Control' ukibofya programu jalizi ya <ph name="PLUGIN_NAME" /> ili kuitimia</translation>
+<translation id="1848219224579402567">Ondoka kwenye akaunti kifuniko kikiwa kimefungwa</translation>
 <translation id="184862733444771842">Ombi la Kipengele</translation>
 <translation id="1849016657376805933">Kifaa chochote cha HID</translation>
 <translation id="1849186935225320012">Ukurasa huu una udhibiti kamili wa vifaa vya MIDI.</translation>
@@ -1030,7 +1028,6 @@
 <translation id="1941553344801134989">Toleo: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Onyesha uambatishaji kitendo kwenye kitufe</translation>
 <translation id="1942128823046546853">Kusoma na kurekebisha data yako yote kwenye tovuti zote</translation>
-<translation id="1942600407708803723">Izime kifuniko kikifungwa</translation>
 <translation id="1944528062465413897">Msimbo wa kuoanisha Bluetooth:</translation>
 <translation id="1944921356641260203">Sasisho imepatikana</translation>
 <translation id="1947136734041527201">Inakuwezesha kuingia katika akaunti za tovuti kwa kutumia akaunti uliyonayo kwenye huduma za utambulisho</translation>
@@ -1723,6 +1720,7 @@
 <translation id="2568774940984945469">Hifadhi ya Upau wa Maelezo</translation>
 <translation id="2571655996835834626">Badilisha mipangilio yako inayodhibiti idhini ya tovuti kufikia vipengele kama vile vidakuzi, JavaScript, programu-jalizi, kutambulisha mahali, maikrofoni, kamera n.k.</translation>
 <translation id="2572032849266859634">Idhini ya kufikia kusoma tu kwenye <ph name="VOLUME_NAME" /> imeruhusiwa.</translation>
+<translation id="2573276323521243649">Ondoka kwenye ukurasa wa kuchagua ishara</translation>
 <translation id="2573417407488272418">Hifadhi nakala za programu na faili kwenye Faili &gt; Faili zangu kabla ya kupata toleo jipya.</translation>
 <translation id="2573831315551295105">Kabidhi swichi ya “<ph name="ACTION" />”</translation>
 <translation id="2575247648642144396">Aikoni hii itaonekana wakati kiendelezi kitakapoweza kufanya kazi kwenye ukurasa wa sasa. Tumia kiendelezi hiki kwa kubofya aikoni au kwa kubonyeza <ph name="EXTENSION_SHORTCUT" />.</translation>
@@ -2563,6 +2561,7 @@
 <translation id="3406290648907941085">Zinazoruhusiwa kutumia data na vifaa vya uhalisia pepe</translation>
 <translation id="3406396172897554194">Tafuta kulingana na lugha au mbinu ya kuingiza data</translation>
 <translation id="3406605057700382950">&amp;Onyesha upau alamisho</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{Nenosiri 1 limepakiwa kwenye Kidhibiti cha Manenosiri cha Google cha <ph name="USER_EMAIL" />}other{Manenosiri {NUM_PASSWORDS} yamepakiwa kwenye Kidhibiti cha Manenosiri cha <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Ramani</translation>
 <translation id="3412265149091626468">Ruka hadi Iliyochaguliwa</translation>
 <translation id="3413122095806433232">Watoaji Vyeti wa Kati:<ph name="LOCATION" /></translation>
@@ -3096,7 +3095,6 @@
 <translation id="389901847090970821">Chagua kibodi</translation>
 <translation id="3900966090527141178">Hamisha manenosiri</translation>
 <translation id="3903187154317825986">Kibodi iliyojumuishwa</translation>
-<translation id="3903191712482985591">Weka mwongozo</translation>
 <translation id="3904326018476041253">Huduma za Mahali</translation>
 <translation id="3904849010307028014">Kulingana na matumizi yako ya tovuti, kama vile kuingia katika akaunti mara kwa mara, tovuti hiyo inaweza kutoa tokeni ya uaminifu kwenye kivinjari chako. Baadaye, iwapo tovuti nyingine unazotembelea zitakagua na kukuta tokeni halisi ya uaminifu, kuna uwezekano mkubwa zikakuchukulia kama mtu na si roboti.</translation>
 <translation id="3905761538810670789">Karabati programu</translation>
@@ -3746,6 +3744,7 @@
 <translation id="4541123282641193691">Imeshindwa kuthibitisha akaunti yako. Tafadhali jaribu tena au zima kisha uwashe Chromebook yako.</translation>
 <translation id="4541662893742891060">Imeshindwa kuunganisha kwenye wasifu huu. Wasiliana na mtoa huduma wako ili upate usaidizi wa kiufundi.</translation>
 <translation id="4541706525461326392">Inaondoa wasifu. Hatua hii inaweza kuchukua dakika kadhaa.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{Nenosiri 1 limepakiwa kwenye Kidhibiti cha Manenosiri katika kifaa hiki}other{Manenosiri {NUM_PASSWORDS} yamepakiwa kwenye Kidhibiti cha Manenosiri katika kifaa hiki}}</translation>
 <translation id="4542520061254486227">Soma data yako kwenye <ph name="WEBSITE_1" /> na <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Kidhibiti cha cheti</translation>
 <translation id="4544174279960331769">Ishara chaguomsingi ya samawati</translation>
@@ -5039,7 +5038,6 @@
 <translation id="5827733057563115968">Utabiri wa neno linalofuata</translation>
 <translation id="5828545842856466741">Ongeza wasifu...</translation>
 <translation id="5828633471261496623">Inachapisha...</translation>
-<translation id="5828797982387013521">Chagua mwongozo</translation>
 <translation id="5830205393314753525">Huwezi kufungua <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Hifadhi Ukurasa K&amp;ama...</translation>
 <translation id="5832813618714645810">Wasifu</translation>
@@ -5931,7 +5929,6 @@
 <translation id="6686665106869989887">Kichupo kimewekwa kulia</translation>
 <translation id="6686817083349815241">Hifadhi nenosiri lako</translation>
 <translation id="6687079240787935001">Ficha <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Inaomba idhini ya kusoma na kubadilisha <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Mwombe <ph name="SUPERVISED_USER_NAME" /> aje kwenye kompyuta. Mtoto wako atasoma vifungu vichache kwenye skrini hii ili arekodi muundo wake wa sauti.
     <ph name="BR" />
     Iwapo <ph name="SUPERVISED_USER_NAME" /> anahitaji usaidizi wa kusoma, msomee kisha arudie baada yako. Zungumza kwa sauti ya chini mbali na maikrofoni ili programu ya Mratibu ijifunze sauti ya mtoto wako badala ya sauti yako.</translation>
@@ -6233,6 +6230,7 @@
 <translation id="6968288415730398122">Weka nenosiri lako ili uweke mipangilio ya kufunga skrini</translation>
 <translation id="6969047215179982698">Zima Uhamishaji wa Karibu</translation>
 <translation id="6970480684834282392">Aina ya kuanzisha</translation>
+<translation id="6970543303783413625">Imeshindwa kupakia manenosiri. Unaweza tu kupakia hadi manenosiri <ph name="COUNT" /> kwa wakati mmoja.</translation>
 <translation id="6970856801391541997">Chapisha Kurasa Mahsusi</translation>
 <translation id="6970861306198150268">Hakikisha kwamba unahifadhi nenosiri la sasa unalotumia kwenye tovuti hii</translation>
 <translation id="6972180789171089114">Sauti/Video</translation>
@@ -6412,6 +6410,7 @@
 <translation id="7138678301420049075">Nyingine</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> inatumia maikrofoni yako</translation>
 <translation id="7141105143012495934">Haikufaulu kuingia katika akaunti kwa sababu maelezo ya akaunti yako hayakupatikana. Tafadhali wasiliana na msimamizi wako au jaribu tena.</translation>
+<translation id="7141844554192012199">Kagua</translation>
 <translation id="7144878232160441200">Jaribu tena</translation>
 <translation id="7149839598364933473">Geuza kifaa hiki kiwe kifaa kinachotumia <ph name="DEVICE_OS" />.</translation>
 <translation id="7149893636342594995">Saa 24 zilizopita</translation>
@@ -6464,6 +6463,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Funga ukurasa}other{Funga kurasa}}</translation>
 <translation id="7207457272187520234">Tuma data ya matumizi na uchunguzi. Kwa sasa, kifaa hiki kinatuma kiotomatiki data ya uchunguzi na matumizi ya programu na kifaa kwa Google. Maelezo haya yatatusaidia kuboresha uthabiti wa programu na mfumo na maboresho mengine. Baadhi ya maelezo yaliyojumlishwa pia yatasaidia programu na washirika wa Google kama vile wasanidi programu za Android. Mipangilio hii hutekelezwa na mmiliki. Ikiwa umewasha mipangilio ya historia ya Shughuli za ziada kwenye Wavuti na Programu, huenda data hii itahifadhiwa kwenye Akaunti yako ya Google.</translation>
 <translation id="7207631048330366454">Tafuta programu</translation>
+<translation id="7210471695184432500">Ili upakie manenosiri kwenye Kidhibiti cha Manenosiri cha Google katika kifaa hiki, chagua faili ya CSV</translation>
 <translation id="7210499381659830293">Printa za viendelezi</translation>
 <translation id="7211783048245131419">Bado hujakabidhi swichi yoyote</translation>
 <translation id="7212097698621322584">Weka PIN yako ya sasa ili uibadilishe. Ikiwa hujui PIN yako, utahitaji kubadilisha ufunguo wako wa usalama, kisha uunde PIN mpya.</translation>
@@ -7189,7 +7189,6 @@
 <translation id="7898725031477653577">Tafsiri kila wakati</translation>
 <translation id="7901405293566323524">Kitovu cha Simu</translation>
 <translation id="7903290522161827520">Je, unatafuta vipengele vya kivinjari? Tembelea</translation>
-<translation id="7903345046358933331">Ukurasa haufanyi kazi. Unaweza kusubiri uanze kufanya kazi au uufunge.</translation>
 <translation id="7903429136755645827">Bofya ili kuweka mapendeleo ya vidhibiti vya mchezo wako</translation>
 <translation id="7903742244674067440">Una vyeti kwenye faili vinavyotambua mamlaka ya vyeti hivi</translation>
 <translation id="7903925330883316394">Kitumizi: <ph name="UTILITY_TYPE" /></translation>
@@ -7525,6 +7524,7 @@
 <translation id="8206859287963243715">Simu ya Mkononi</translation>
 <translation id="8208216423136871611">Usihifadhi</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Arifa mpya}other{Arifa # mpya}}</translation>
+<translation id="821119981794423735">Ili upakie manenosiri katika Kidhibiti cha Manenosiri cha Google kwenye <ph name="USER_EMAIL" />, chagua faili ya CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Inaendelea kupakua}other{Inaendelea kupakua}}</translation>
 <translation id="8213449224684199188">Umeweka hali ya picha</translation>
 <translation id="8214489666383623925">Fungua Faili...</translation>
@@ -8103,6 +8103,7 @@
 <translation id="8780123805589053431">Pata ufafanuzi wa picha kutoka Google</translation>
 <translation id="8780443667474968681">Kipengele cha kutafuta kwa kutamka kimezimwa.</translation>
 <translation id="8781834595282316166">Kichupo Kipya katika Kikundi</translation>
+<translation id="8781980678064919987">Zima kifuniko kikiwa kimefungwa</translation>
 <translation id="8782565991310229362">Uzinduzi wa programu ya kioski umeghairiwa.</translation>
 <translation id="8783834180813871000">Andika msimbo wa kuoanisha Bluetooth kisha ubonyeze Return au Enter.</translation>
 <translation id="8784626084144195648">Wastani wa Uwekaji Pamoja</translation>
@@ -8167,7 +8168,6 @@
 <translation id="8846132060409673887">Soma maelezo ya mtengenezaji na muundo wa kompyuta hii</translation>
 <translation id="8846163936679269230">Weka upya wasifu wa eSIM</translation>
 <translation id="8846239054091760429">Sauti moja, wakati wa kuwaka, Manukuu Papo Hapo na zaidi</translation>
-<translation id="8847523528195140327">Ondoka kwenye akaunti kifuniko kikifungwa</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Kimefichwa</translation>
 <translation id="8849219423513870962">Ghairi uondoaji wa wasifu wa eSIM unaoitwa <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 5ef88f9..c2d92105 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">துண்டிக்கிறது...</translation>
 <translation id="1537254971476575106">முழுத்திரைப் பெரிதாக்கி</translation>
 <translation id="15373452373711364">பெரிய மவுஸ் இடஞ்சுட்டி</translation>
-<translation id="1539630663098418038"><ph name="ORIGIN" /> தளத்தில் உள்ளவற்றைப் படிக்கவும் மாற்றவும் <ph name="EXTENSIONS_REQUESTING_ACCESS" /> கோருகிறது</translation>
 <translation id="1540605929960647700">டெமோ பயன்முறையை இயக்கவும்</translation>
 <translation id="1541346352678737112">நெட்வொர்க் எதுவும் கிடைக்கவில்லை</translation>
 <translation id="1542137295869176367">உங்கள் உள்நுழைவுத் தரவைப் புதுப்பிக்க முடியவில்லை</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> தளத்தில் <ph name="USERNAME" /> கணக்கிற்கான அனுமதிச் சான்று விவரங்கள்</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> ஐச் சேர்க்க முடியாது</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> மணி நேரம்</translation>
-<translation id="1678794218766467608">உறக்கப் பயன்முறையின்போது அல்லது கவர் மூடப்பட்டால் லாக் செய்</translation>
 <translation id="1679068421605151609">டெவெலப்பர் கருவிகள்</translation>
 <translation id="1679810534535368772">உறுதியாக வெளியேற வேண்டுமா?</translation>
 <translation id="167983332380191032">நிர்வாகச் சேவை தவறான HTTP குறியீட்டை அனுப்பியது.</translation>
@@ -861,7 +859,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> பொருட்களைக் காட்ட வேண்டாம்</translation>
 <translation id="1794791083288629568">இந்தச் சிக்கலைத் தீர்ப்பதற்கு உதவ, கருத்தை அனுப்பவும்.</translation>
 <translation id="1795214765651529549">கிளாசிக்கைப் பயன்படுத்து</translation>
-<translation id="1796105431091975902">நீங்கள் சேர்க்க விரும்பும் Ansible பிளேபுக்கைத் தேர்ந்தெடுங்கள்</translation>
 <translation id="1796588414813960292">ஒலியுடன் இயங்கும் அம்சங்கள் செயல்படாது</translation>
 <translation id="1797117170091578105">உங்கள் Chromebook கீபோர்டைப் பயன்படுத்தி விளையாடுங்கள். குறிப்பிட்ட செயல்களுக்கு பட்டன்களைப் பிரத்தியேகமாக்கலாம்.</translation>
 <translation id="1800502858278951817"><ph name="SITE_NAME" /> தளத்தில் உள்ளவற்றைப் படிக்கவும் மாற்றவும் எந்த நீட்டிப்பும் அனுமதி கோரவில்லை</translation>
@@ -926,6 +923,7 @@
 <translation id="1842766183094193446">டெமோ பயன்முறையை இயக்க விரும்புகிறீர்களா?</translation>
 <translation id="1845727111305721124">ஒலியை இயக்க அனுமதிக்கப்பட்டுள்ள தளங்கள்</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" />ஐ இயக்க, கண்ட்ரோலைப் பிடித்து, கிளிக் செய்யவும்</translation>
+<translation id="1848219224579402567">மூடியிருக்கும் போது, வெளியேறு</translation>
 <translation id="184862733444771842">அம்சத்திற்கான கோரிக்கை</translation>
 <translation id="1849016657376805933">அனைத்து HID சாதனங்களுக்கும்</translation>
 <translation id="1849186935225320012">இந்தப் பக்கத்திற்கு MIDI சாதனங்களுக்கான முழுக் கட்டுப்பாடு உள்ளது.</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">பதிப்பு: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">பட்டன் ஒதுக்கீட்டைக் காட்டு</translation>
 <translation id="1942128823046546853">எல்லா இணையதளங்களிலும் உள்ள உங்களின் அனைத்துத் தரவையும் படிக்கலாம் திருத்தலாம்</translation>
-<translation id="1942600407708803723">கவர் மூடியிருக்கும்போது நிறுத்து</translation>
 <translation id="1944528062465413897">புளூடூத் இணைத்தல் குறியீடு:</translation>
 <translation id="1944921356641260203">புதுப்பிப்பு உள்ளது</translation>
 <translation id="1947136734041527201">அடையாளச் சரிபார்ப்புச் சேவையில் உள்ள கணக்கைப் பயன்படுத்தி இணையதளங்களில் உள்நுழைய உங்களை அனுமதிக்கும்</translation>
@@ -1726,6 +1723,7 @@
 <translation id="2568774940984945469">தகவல்பட்டி கொள்கலன்</translation>
 <translation id="2571655996835834626">குக்கீகள், JavaScript, செருகுநிரல்கள், புவிஇருப்பிடம், மைக்ரோஃபோன் கேமரா போன்ற இணையதளத்தின் அம்சங்களுக்கான அணுகலைக் கட்டுப்படுத்தும் அமைப்புகளை மாற்றலாம்</translation>
 <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> இல் படிப்பதற்கு மட்டுமான அணுகல் வழங்கப்பட்டது.</translation>
+<translation id="2573276323521243649">தோற்றப் படம் தேர்ந்தெடுக்கும் பக்கத்திலிருந்து பின்செல்லும்</translation>
 <translation id="2573417407488272418">மேம்படுத்தலுக்கு முன் ஆப்ஸையும் ஃபைல்களையும் ஃபைல்கள் &gt; எனது ஃபைல்கள் என்பதில் காப்புப் பிரதி எடுக்கவும்.</translation>
 <translation id="2573831315551295105">“<ph name="ACTION" />” என்பதற்கு ஸ்விட்ச்சை ஒதுக்குங்கள்</translation>
 <translation id="2575247648642144396">நீட்டிப்பானது தற்போதைய பக்கத்தில் செயல்படும்போது, இந்த ஐகான் தெரியும். ஐகானில் கிளிக் செய்து அல்லது <ph name="EXTENSION_SHORTCUT" /> ஐ அழுத்தி இந்த நீட்டிப்பைப் பயன்படுத்துக.</translation>
@@ -2566,6 +2564,7 @@
 <translation id="3406290648907941085">விர்ச்சுவல் ரியாலிட்டியையும் தரவையும் பயன்படுத்த அனுமதிக்கப்பட்டுள்ள தளங்கள்</translation>
 <translation id="3406396172897554194">மொழி அல்லது உள்ளீட்டு முறையின் பெயர் மூலம் தேடலாம்</translation>
 <translation id="3406605057700382950">புக்மார்க்ஸ் பட்டியைக் &amp;காட்டு</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{<ph name="USER_EMAIL" /> கணக்கிற்கான 1 கடவுச்சொல் Google Password Managerரில் ஏற்றப்பட்டது}other{<ph name="USER_EMAIL" /> கணக்கிற்கான {NUM_PASSWORDS} கடவுச்சொற்கள் Google Password Managerரில் ஏற்றப்பட்டன}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">தேர்வுக்கு செல்</translation>
 <translation id="3413122095806433232">CA வழங்குநர்கள்: <ph name="LOCATION" /></translation>
@@ -3099,7 +3098,6 @@
 <translation id="389901847090970821">கீபோர்டைத் தேர்ந்தெடுக்கவும்</translation>
 <translation id="3900966090527141178">கடவுச்சொற்களை ஏற்று</translation>
 <translation id="3903187154317825986">உள்ளமைந்த கீபோர்டு</translation>
-<translation id="3903191712482985591">பிளேபுக்கைச் சேர்த்தல்</translation>
 <translation id="3904326018476041253">இருப்பிடச் சேவைகள்</translation>
 <translation id="3904849010307028014">ஒரு தளத்தில் நீங்கள் மேற்கொள்ளும் செயல்பாட்டைப் பொறுத்து அந்தத் தளம் ஒரு டிரஸ்ட் டோக்கனை உங்கள் உலாவிக்கு அனுப்பலாம். உதாரணமாக, ஒரு கணக்கில் வழக்கமாக உள்நுழைதல். அதன்பிறகு, நீங்கள் பார்க்கும் பிற தளங்கள் சரியான டிரஸ்ட் டோக்கனைத் தேடிக் கண்டறிந்தால் அவை உங்களை ரோபோவாகக் கருதாமல் நபராகக் கருத அதிக வாய்ப்புள்ளது.</translation>
 <translation id="3905761538810670789">ஆப்ஸை பழுதுநீக்கு</translation>
@@ -3751,6 +3749,7 @@
 <translation id="4541123282641193691">கணக்கைச் சரிபார்க்க முடியவில்லை. மீண்டும் முயலவும் அல்லது Chromebookகை மீண்டும் தொடங்கவும்.</translation>
 <translation id="4541662893742891060">இந்தச் சுயவிவரத்துடன் இணைக்க முடியவில்லை. தொழில்நுட்ப உதவியைப் பெற, உங்கள் மொபைல் நெட்வொர்க் நிறுவனத்தைத் தொடர்புகொள்ளவும்.</translation>
 <translation id="4541706525461326392">நெட்வொர்க் சுயவிவரத்தை அகற்றுகிறது. இதற்குச் சில நிமிடங்கள் ஆகலாம்.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{இந்தச் சாதனத்தில் உள்ள Google Password Managerரில் 1 கடவுச்சொல் ஏற்றப்பட்டது}other{இந்தச் சாதனத்தில் உள்ள Google Password Managerரில் {NUM_PASSWORDS} கடவுச்சொற்கள் ஏற்றப்பட்டன}}</translation>
 <translation id="4542520061254486227">உங்கள் தரவை <ph name="WEBSITE_1" /> மற்றும் <ph name="WEBSITE_2" /> இல் படிக்கவும்</translation>
 <translation id="4543778593405494224">சான்றிதழ் நிர்வாகி</translation>
 <translation id="4544174279960331769">இயல்பு நீலநிறத் தோற்றப்படம்</translation>
@@ -5045,7 +5044,6 @@
 <translation id="5827733057563115968">அடுத்த சொல் கணிப்பு</translation>
 <translation id="5828545842856466741">சுயவிவரத்தைச் சேர்...</translation>
 <translation id="5828633471261496623">அச்சிடுகிறது...</translation>
-<translation id="5828797982387013521">பிளேபுக்கைத் தேர்ந்தெடு</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> ஆப்ஸைத் திறக்க முடியவில்லை</translation>
 <translation id="5830720307094128296">பக்கத்தை &amp;இவ்வாறு சேமி...</translation>
 <translation id="5832813618714645810">சுயவிவரங்கள்</translation>
@@ -5937,7 +5935,6 @@
 <translation id="6686665106869989887">தாவல் வலதுபுறம் நகர்த்தப்பட்டது</translation>
 <translation id="6686817083349815241">உங்கள் கடவுச்சொல்லைச் சேமிக்கவும்</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> ஐ மறை</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> தளத்தில் உள்ளவற்றைப் படிக்கவும் மாற்றவும் அனுமதி கோருகிறது:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> ஐக் கம்ப்யூட்டருக்கு அருகில் வருமாறு கூறவும். குரல் மாதிரியை உருவாக்க இந்தத் திரையில் உள்ள சில சொற்றொடர்களை உங்கள் பிள்ளை வாசிக்க வேண்டும்.
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" />க்கு வாசிக்க உதவி தேவை எனில் நீங்கள் கூறுவதைத் திருப்பிக் கூறுமாறு அவரிடம் சொல்லவும். Assistant உங்கள் குரலைப் பதிவு செய்யாமல் உங்கள் பிள்ளையின் குரலைப் பதிவு செய்யும் வகையில் மைக்கில் இருந்து விலகி மெதுவாகப் பேசவும்.</translation>
@@ -6239,6 +6236,7 @@
 <translation id="6968288415730398122">திரைப் பூட்டை உள்ளமைக்க, கடவுச்சொல்லை உள்ளிடவும்</translation>
 <translation id="6969047215179982698">’அருகிலுள்ளவற்றுடன் பகிர்தல்’ அம்சத்தை முடக்கு</translation>
 <translation id="6970480684834282392">தொடங்கப்படும் வகை</translation>
+<translation id="6970543303783413625">கடவுச்சொற்களை ஏற்ற முடியவில்லை. ஒரே சமயத்தில் அதிகபட்சம் <ph name="COUNT" /> கடவுச்சொற்களை மட்டுமே ஏற்ற முடியும்.</translation>
 <translation id="6970856801391541997">குறிப்பிட்ட பக்கங்களை அச்சிடு</translation>
 <translation id="6970861306198150268">இந்தத் தளத்திற்கான புதிய கடவுச்சொல்லை மறக்காமல் சேமிக்கவும்</translation>
 <translation id="6972180789171089114">ஆடியோ/வீடியோ</translation>
@@ -6418,6 +6416,7 @@
 <translation id="7138678301420049075">மற்றவை</translation>
 <translation id="7139627972753429585">உங்கள் மைக்ரோஃபோனை <ph name="APP_NAME" /> பயன்படுத்துகிறது</translation>
 <translation id="7141105143012495934">உங்கள் கணக்கு விவரங்களை மீட்டெடுக்க முடியாததால் உள்நுழைவு தோல்வியானது. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும் அல்லது மீண்டும் முயலவும்.</translation>
+<translation id="7141844554192012199">சரிபார்</translation>
 <translation id="7144878232160441200">மீண்டும் முயற்சி செய்க</translation>
 <translation id="7149839598364933473">இந்தச் சாதனத்தை <ph name="DEVICE_OS" /> சாதனமாக மாற்றலாம்.</translation>
 <translation id="7149893636342594995">கடந்த 24 மணிநேரம்</translation>
@@ -6470,6 +6469,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{பக்கத்திலிருந்து வெளியேறு}other{பக்கங்களிலிருந்து வெளியேறு}}</translation>
 <translation id="7207457272187520234">உபயோகம் மற்றும் பிழை கண்டறிதல் தரவை அனுப்பவும். பிழை கண்டறிதல் தரவு, சாதனம் மற்றும் ஆப்ஸ் உபயோகத் தரவு போன்றவற்றை இந்தச் சாதனம் தற்போது Googleளுக்குத் தானாக அனுப்புகிறது. இது சிஸ்டம் மற்றும் ஆப்ஸின் நிலைத்தன்மையை மேம்படுத்தவும் பிற மேம்பாடுகளைச் செய்யவும் உதவும். ஒருங்கிணைக்கப்பட்ட சில தரவு, Google ஆப்ஸுக்கும் Android டெவெலப்பர்கள் போன்ற கூட்டாளர்களுக்கும் உதவும். உரிமையாளர் இந்த அமைப்பைச் செயல்படுத்தியுள்ளார். கூடுதல் ’இணையம் &amp; ஆப்ஸ் செயல்பாடு’ அமைப்பு இயக்கப்பட்டிருந்தால், இந்தத் தரவு உங்கள் Google கணக்கில் சேமிக்கப்படக்கூடும்.</translation>
 <translation id="7207631048330366454">ஆப்ஸில் தேடுக</translation>
+<translation id="7210471695184432500">இந்தச் சாதனத்தில் Google Password Managerரில் கடவுச்சொற்களை ஏற்ற, CSV ஃபைலைத் தேர்ந்தெடுக்கவும்</translation>
 <translation id="7210499381659830293">நீட்டிப்பு பிரிண்டர்கள்</translation>
 <translation id="7211783048245131419">இதுவரை எந்த ஸ்விட்சும் ஒதுக்கப்படவில்லை</translation>
 <translation id="7212097698621322584">தற்போதைய பின்னை மாற்ற அதை உள்ளிடவும். பின் தெரியவில்லை என்றால் புதிய பின்னை உருவாக்க பாதுகாப்பு விசையை மீட்டமைக்க வேண்டும்.</translation>
@@ -7194,7 +7194,6 @@
 <translation id="7898725031477653577">எப்போதும் மொழிபெயர்</translation>
 <translation id="7901405293566323524">மொபைல் ஹப்</translation>
 <translation id="7903290522161827520">உலாவிக் காம்பனென்ட்டுகளைத் தேடுகிறீர்களா? இந்தத் தளத்திற்குச் செல்க</translation>
-<translation id="7903345046358933331">பக்கம் பதிலளிக்கவில்லை. பதிலளிக்கும் வரை நீங்கள் காத்திருக்கலாம் அல்லது அதை மூடி விடலாம்.</translation>
 <translation id="7903429136755645827">கேம் கண்ட்ரோல்களைப் பிரத்தியேகமாக்க கிளிக் செய்யவும்</translation>
 <translation id="7903742244674067440">இந்தச் சான்றிதழ் அங்கீகரிப்பாளர்களை அடையாளங்காணும் சான்றிதழ்கள் ஃபைலில் உள்ளன</translation>
 <translation id="7903925330883316394">கருவி: <ph name="UTILITY_TYPE" /></translation>
@@ -7530,6 +7529,7 @@
 <translation id="8206859287963243715">செல்லுலர்</translation>
 <translation id="8208216423136871611">சேமிக்காதே</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{புதிய அறிவிப்பு}other{# புதிய அறிவிப்புகள்}}</translation>
+<translation id="821119981794423735"><ph name="USER_EMAIL" /> கணக்கிற்கான கடவுச்சொற்களை Google Password Managerரில் ஏற்ற, CSV ஃபைலைத் தேர்ந்தெடுக்கவும்</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{பதிவிறக்கம் செயலில் உள்ளது}other{பதிவிறக்கங்கள் செயலில் உள்ளன}}</translation>
 <translation id="8213449224684199188">படப் பயன்முறைக்குச் சென்றது</translation>
 <translation id="8214489666383623925">ஃபைலைத் திற...</translation>
@@ -8108,6 +8108,7 @@
 <translation id="8780123805589053431">பட விவரங்களை Googleளிலிருந்து பெறுக</translation>
 <translation id="8780443667474968681">குரல் தேடல் முடக்கப்பட்டுள்ளது.</translation>
 <translation id="8781834595282316166">குழுவில் புதிய தாவல்</translation>
+<translation id="8781980678064919987">மூடியிருக்கும் போது, சாதனத்தை நிறுத்து</translation>
 <translation id="8782565991310229362">Kiosk ஆப்ஸின் துவக்கம் ரத்தானது.</translation>
 <translation id="8783834180813871000">புளூடூத் இணைத்தல் குறியீட்டை உள்ளிட்டு Return அல்லது Enterரை அழுத்தவும்.</translation>
 <translation id="8784626084144195648">குப்பைக்கு நகர்த்தப்பட்டதன் சராசரி</translation>
@@ -8172,7 +8173,6 @@
 <translation id="8846132060409673887">இந்தக் கம்ப்யூட்டரின் உற்பத்தியாளர் பற்றிய தகவலையும் மாடலையும் படிக்கலாம்</translation>
 <translation id="8846163936679269230">eSIM சுயவிவரங்களை மீட்டமை</translation>
 <translation id="8846239054091760429">மோனோ ஆடியோ, ஸ்டார்ட்-அப், உடனடி வசனம் மற்றும் பல</translation>
-<translation id="8847523528195140327">கவர் மூடியிருக்கும்போது வெளியேறு</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">மறைக்கப்பட்டுள்ளது</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> என்ற eSIM சுயவிவரத்தை அகற்றுவதை ரத்துசெய்யும்</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 7c089e4a..98c2ca8 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">డిస్‌కనెక్ట్ చేస్తోంది...</translation>
 <translation id="1537254971476575106">ఫుల్-స్క్రీన్‌‌ మాగ్నిఫైయర్</translation>
 <translation id="15373452373711364">పెద్ద మౌస్ కర్సర్</translation>
-<translation id="1539630663098418038"><ph name="ORIGIN" /> లో చదవడానికి, మార్చడానికి <ph name="EXTENSIONS_REQUESTING_ACCESS" /> రిక్వెస్ట్ చేస్తోంది</translation>
 <translation id="1540605929960647700">డెమో మోడ్‌ని ప్రారంభించండి</translation>
 <translation id="1541346352678737112">నెట్‌వర్క్ ఏదీ కనుగొనబడలేదు</translation>
 <translation id="1542137295869176367">మీ సైన్-ఇన్ డేటాను అప్‌డేట్ చేయడం సాధ్యం కాలేదు</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" />‌లో <ph name="USERNAME" />‌కు సంబంధించిన ఆధారాల వివరాలు</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" />ను జోడించడం సాధ్యం కాలేదు</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> మిగిలి ఉంది</translation>
-<translation id="1678794218766467608">స్లీప్ మోడ్‌లో లేదా కవర్ మూసివేయబడినప్పుడు లాక్ చేయండి</translation>
 <translation id="1679068421605151609">డెవలపర్ టూల్స్</translation>
 <translation id="1679810534535368772">మీరు ఖచ్చితంగా నిష్క్రమించాలనుకుంటున్నారా?</translation>
 <translation id="167983332380191032">నిర్వహణ సేవ HTTP ఎర్రర్‌ని పంపింది.</translation>
@@ -860,7 +858,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" />ను ఎప్పుడూ చూపవద్దు</translation>
 <translation id="1794791083288629568">ఈ సమస్యను పరిష్కరించడంలో మాకు సహాయం చేయడానికి అభిప్రాయాన్ని పంపుతుంది.</translation>
 <translation id="1795214765651529549">క్లాసిక్‌ను ఉపయోగించు</translation>
-<translation id="1796105431091975902">జోడించడానికి Ansible గైడ్‌లైన్ కిట్‌ని ఎంచుకోండి</translation>
 <translation id="1796588414813960292">సౌండ్ అవసరం అయ్యే ఫీచర్‌లు పని చేయవు</translation>
 <translation id="1797117170091578105">మీ Chromebook కీబోర్డ్‌ను ఉపయోగించి ప్లే చేయండి. మీరు నిర్దిష్ట చర్యల కోసం కీలను అనుకూలంగా మార్చవచ్చు.</translation>
 <translation id="1800502858278951817"><ph name="SITE_NAME" />ను చదవడానికి, మార్చడానికి ఎక్స్‌టెన్షన్‌లు ఏవీ రిక్వెస్ట్ చేయలేదు</translation>
@@ -925,6 +922,7 @@
 <translation id="1842766183094193446">మీరు ఖచ్చితంగా డెమో మోడ్‌ని ప్రారంభించాలనుకుంటున్నారా?</translation>
 <translation id="1845727111305721124">శబ్దాన్ని ప్లే చేయడానికి అనుమతించబడింది</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" />ను అమలు చేయడానికి కంట్రోల్ నొక్కి, క్లిక్ చేయండి</translation>
+<translation id="1848219224579402567">మూత మూసి ఉన్నప్పుడు సైన్ అవుట్ చేయండి</translation>
 <translation id="184862733444771842">ఫీచర్ రిక్వెస్ట్</translation>
 <translation id="1849016657376805933">ఏదైనా HID పరికరం</translation>
 <translation id="1849186935225320012">ఈ పేజీ MIDI పరికరాలకు పూర్తి నియంత్రణను కలిగి ఉంది.</translation>
@@ -1033,7 +1031,6 @@
 <translation id="1941553344801134989">వెర్షన్: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">కీ మ్యాపింగ్‌ను చూడండి</translation>
 <translation id="1942128823046546853">అన్ని వెబ్‌సైట్‌లలో మీ మొత్తం డేటాను చదవడం, మార్చడం</translation>
-<translation id="1942600407708803723">కవర్ మూసి ఉన్నప్పుడు షట్ డౌన్ స్థితికి వెళ్లు</translation>
 <translation id="1944528062465413897">బ్లూటూత్ పెయిరింగ్ కోడ్:</translation>
 <translation id="1944921356641260203">అప్‌డేట్ కనుగొనబడింది</translation>
 <translation id="1947136734041527201">గుర్తింపు సర్వీసులతో మీకు ఉన్న ఖాతాను ఉపయోగించి వెబ్‌సైట్‌లకు సైన్ ఇన్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది</translation>
@@ -3100,7 +3097,6 @@
 <translation id="389901847090970821">కీబోర్డ్‌ను ఎంచుకోండి</translation>
 <translation id="3900966090527141178">పాస్‌వర్డ్‌లను ఎగుమతి చేయండి</translation>
 <translation id="3903187154317825986">బిల్ట్-ఇన్ కీబోర్డ్</translation>
-<translation id="3903191712482985591">గైడ్‌లైన్ కిట్‌ను జోడించండి</translation>
 <translation id="3904326018476041253">లొకేషన్ సర్వీస్‌లు</translation>
 <translation id="3904849010307028014">తరచుగా మీరు ఖాతాకు సైన్ ఇన్ చేయడం వంటి సైట్‌తో మీ ఇంటరాక్షన్ ఆధారంగా, ఆ సైట్ మీ బ్రౌజర్‌కు విశ్వసనీయ టోకెన్‌ను జారీ చేయవచ్చు. తర్వాత, మీరు సందర్శించే ఇతర సైట్‌లు చెక్ చేసి, చెల్లుబాటయ్యే విశ్వసనీయ టోకెన్‌ను కనుగొంటే, వారు మిమ్మల్ని బాట్‌గా కాకుండా ఒక వ్యక్తిగా పరిగణించే అవకాశం ఎక్కువగా ఉంటుంది.</translation>
 <translation id="3905761538810670789">యాప్‌ను సరి చేయి</translation>
@@ -5046,7 +5042,6 @@
 <translation id="5827733057563115968">తదుపరి పద సూచన</translation>
 <translation id="5828545842856466741">ప్రొఫైల్‌ను జోడించండి...</translation>
 <translation id="5828633471261496623">ముద్రిస్తోంది...</translation>
-<translation id="5828797982387013521">గైడ్‌లైన్ కిట్‌ను ఎంచుకోండి</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" />‌ను తెరవడం సాధ్యపడదు</translation>
 <translation id="5830720307094128296">&amp;లాగా పేజీని సేవ్ చేయి...</translation>
 <translation id="5832813618714645810">ప్రొఫైళ్లు</translation>
@@ -5938,7 +5933,6 @@
 <translation id="6686665106869989887">ట్యాబ్ కుడి వైపునకు తరలించబడింది</translation>
 <translation id="6686817083349815241">మీ పాస్‌వర్డ్‌ను సేవ్ చేయండి</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" />ను దాచు</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> లో చదవడానికి, మార్చడానికి రిక్వెస్ట్ చేస్తోంది:</translation>
 <translation id="6689714331348768690">కంప్యూటర్‌కు దగ్గరలో ఉండమని <ph name="SUPERVISED_USER_NAME" />ను అడగండి. మీ చిన్నారి వారి వాయిస్ మోడల్‌ను క్రియేట్ చేయడానికి ఈ స్క్రీన్‌పై ఉన్న కొన్ని ఫ్రేజ్‌లను చదువుతారు.
     <ph name="BR" />
     ఒకవేళ <ph name="SUPERVISED_USER_NAME" />కు చదవడంలో సహాయం కావాలంటే మీతో పాటు చిన్నారిని చదివేలా చేయండి. మైక్‌కు దూరంగా మాట్లాడండి, తద్వారా మీ వాయిస్‌కు బదులుగా Assistant మీ చిన్నారి వాయిస్‌ను గ్రహిస్తుంది.</translation>
@@ -7197,7 +7191,6 @@
 <translation id="7898725031477653577">ఎల్లప్పుడూ అనువదించు</translation>
 <translation id="7901405293566323524">ఫోన్ హబ్</translation>
 <translation id="7903290522161827520">బ్రౌజర్ భాగాల కోసం వెతుకుతున్నారా? సందర్శించండి</translation>
-<translation id="7903345046358933331">పేజీ ప్రతిస్పందించడం లేదు. మీరు అది ప్రతిస్పందించే వరకు వేచి ఉండవచ్చు లేదా దాన్ని మూసివేయవచ్చు.</translation>
 <translation id="7903429136755645827">మీ గేమ్ కంట్రోల్స్‌ను అనుకూలంగా మార్చడానికి క్లిక్ చేయండి</translation>
 <translation id="7903742244674067440">మీకు ఫైల్‌లో ఈ ప్రమాణపత్రం అధికారాలను గుర్తించే ప్రమాణపత్రాలు ఉన్నాయి</translation>
 <translation id="7903925330883316394">యుటిలిటీ: <ph name="UTILITY_TYPE" /></translation>
@@ -8109,6 +8102,7 @@
 <translation id="8780123805589053431">Google నుండి చిత్ర వివరణలను పొందండి</translation>
 <translation id="8780443667474968681">వాయిస్ శోధన ఆపివేయబడింది.</translation>
 <translation id="8781834595282316166">గ్రూప్‌లో కొత్త ట్యాబ్</translation>
+<translation id="8781980678064919987">మూత మూసినప్పుడు షట్ డౌన్ చేయండి</translation>
 <translation id="8782565991310229362">కియోస్క్ యాప్ అమలు రద్దు చేయబడింది.</translation>
 <translation id="8783834180813871000">బ్లూటూత్ పెయిరింగ్ కోడ్‌ను టైప్ చేసి, ఆపై Return లేదా Enter నొక్కండి.</translation>
 <translation id="8784626084144195648">బిన్ చేయబడిన సగటు</translation>
@@ -8173,7 +8167,6 @@
 <translation id="8846132060409673887">ఈ కంప్యూటర్ తయారీదారు పేరు మరియు మోడల్‌కి సంబంధించిన సమాచారాన్ని చదవగలుగుతుంది</translation>
 <translation id="8846163936679269230">eSIM ప్రొఫైళ్లను రీసెట్ చేయండి</translation>
 <translation id="8846239054091760429">మోనో ఆడియో, స్టార్టప్, లైవ్ క్యాప్షన్, మరెన్నో</translation>
-<translation id="8847523528195140327">కవర్ మూసి ఉన్నప్పుడు సైన్ అవుట్ స్థితికి వెళ్లు</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">దాచబడింది</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> పేరు గల eSIM ప్రొఫైల్ తీసివేతను రద్దు చేయండి</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 4059c26..af8d2612 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">กำลังยกเลิกการเชื่อมต่อ...</translation>
 <translation id="1537254971476575106">แว่นขยายทั้งหน้าจอ</translation>
 <translation id="15373452373711364">เคอร์เซอร์เมาส์ขนาดใหญ่</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> กำลังขออ่านและเปลี่ยนแปลง <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">เปิดใช้โหมดสาธิต</translation>
 <translation id="1541346352678737112">ไม่พบเครือข่าย</translation>
 <translation id="1542137295869176367">อัปเดตข้อมูลการลงชื่อเข้าใช้ไม่ได้</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022">รายละเอียดข้อมูลเข้าสู่ระบบสำหรับ <ph name="USERNAME" /> ใน <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">เพิ่ม<ph name="EXTENSION_TYPE_PARAMETER" />ไม่ได้</translation>
 <translation id="1677472565718498478">ใช้ได้อีก <ph name="TIME" /></translation>
-<translation id="1678794218766467608">ล็อกในโหมดสลีปหรือเมื่อปิดฝา</translation>
 <translation id="1679068421605151609">เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์</translation>
 <translation id="1679810534535368772">คุณแน่ใจไหมว่าต้องการออก</translation>
 <translation id="167983332380191032">บริการการจัดการแสดงข้อผิดพลาด HTTP</translation>
@@ -850,7 +848,6 @@
 <translation id="1794051631868188691">ไม่ต้องแสดง <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">ส่งความคิดเห็นเพื่อช่วยเราแก้ไขปัญหานี้</translation>
 <translation id="1795214765651529549">ใช้แบบคลาสสิก</translation>
-<translation id="1796105431091975902">เลือก Ansible Playbook ที่จะเพิ่ม</translation>
 <translation id="1796588414813960292">ฟีเจอร์ที่ต้องใช้เสียงจะไม่ทำงาน</translation>
 <translation id="1797117170091578105">เล่นโดยใช้แป้นพิมพ์ Chromebook คุณปรับแต่งแป้นให้กับการทำงานที่เจาะจงได้</translation>
 <translation id="1800502858278951817">ไม่มีส่วนขยายที่ขออ่านและเปลี่ยนแปลง <ph name="SITE_NAME" /></translation>
@@ -915,6 +912,7 @@
 <translation id="1842766183094193446">คุณแน่ใจไหมว่าต้องการเปิดใช้โหมดสาธิต</translation>
 <translation id="1845727111305721124">ได้รับอนุญาตให้เล่นเสียง</translation>
 <translation id="1846308012215045257">กด Control และคลิกเพื่อเรียกใช้ <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">ออกจากระบบเมื่อปิดฝา</translation>
 <translation id="184862733444771842">คำขอฟีเจอร์</translation>
 <translation id="1849016657376805933">อุปกรณ์ HID ทั้งหมด</translation>
 <translation id="1849186935225320012">หน้านี้มีสิทธิ์ควบคุมอุปกรณ์ MIDI เต็มรูปแบบ</translation>
@@ -1022,7 +1020,6 @@
 <translation id="1941553344801134989">เวอร์ชัน: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">แสดงการแมปคีย์</translation>
 <translation id="1942128823046546853">อ่านและเปลี่ยนแปลงข้อมูลทั้งหมดของคุณในทุกเว็บไซต์</translation>
-<translation id="1942600407708803723">ปิดเครื่องเมื่อปิดเคส</translation>
 <translation id="1944528062465413897">รหัสการจับคู่บลูทูธ</translation>
 <translation id="1944921356641260203">พบการอัปเดต</translation>
 <translation id="1947136734041527201">ช่วยให้ลงชื่อเข้าใช้เว็บไซต์ได้ผ่านบัญชีที่คุณมีด้วยบริการระบุตัวตน</translation>
@@ -3086,7 +3083,6 @@
 <translation id="389901847090970821">เลือกแป้นพิมพ์</translation>
 <translation id="3900966090527141178">ส่งออกรหัสผ่าน</translation>
 <translation id="3903187154317825986">แป้นพิมพ์ในตัว</translation>
-<translation id="3903191712482985591">เพิ่ม Playbook</translation>
 <translation id="3904326018476041253">บริการตำแหน่ง</translation>
 <translation id="3904849010307028014">เว็บไซต์จะออกโทเค็นความน่าเชื่อถือให้กับเบราว์เซอร์โดยพิจารณาจากการโต้ตอบของคุณกับเว็บไซต์ เช่น การลงชื่อเข้าใช้บัญชีตามปกติ ภายหลัง เมื่อเว็บไซต์อื่นที่คุณเข้าชมตรวจพบโทเค็นความน่าเชื่อถือที่ถูกต้อง เว็บไซต์นั้นจะถือว่าคุณเป็นมนุษย์ไม่ใช่บ็อต</translation>
 <translation id="3905761538810670789">ซ่อมแอป</translation>
@@ -5029,7 +5025,6 @@
 <translation id="5827733057563115968">การคาดคะเนคำถัดไป</translation>
 <translation id="5828545842856466741">เพิ่มโปรไฟล์...</translation>
 <translation id="5828633471261496623">กำลังพิมพ์...</translation>
-<translation id="5828797982387013521">เลือก Playbook</translation>
 <translation id="5830205393314753525">เปิด <ph name="APP_NAME" /> ไม่ได้</translation>
 <translation id="5830720307094128296">บันทึกหน้าเ&amp;ป็น...</translation>
 <translation id="5832813618714645810">โปรไฟล์</translation>
@@ -5920,7 +5915,6 @@
 <translation id="6686665106869989887">แท็บถูกย้ายไปทางขวา</translation>
 <translation id="6686817083349815241">บันทึกรหัสผ่าน</translation>
 <translation id="6687079240787935001">ซ่อน<ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">กำลังขออ่านและเปลี่ยนแปลง <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">ขอให้ <ph name="SUPERVISED_USER_NAME" /> มาที่คอมพิวเตอร์ บุตรหลานจะได้อ่านข้อความ 2-3 วลีบนหน้าจอนี้เพื่อสร้างรูปแบบเสียงของตน
     <ph name="BR" />
     หาก <ph name="SUPERVISED_USER_NAME" /> ยังอ่านหนังสือไม่คล่อง ให้บุตรหลานอ่านตามคุณ ให้คุณอ่านเบาๆ และห่างจากไมค์ เพื่อให้ Assistant จดจำเสียงของบุตรหลานไม่ใช่เสียงของคุณ</translation>
@@ -7179,7 +7173,6 @@
 <translation id="7898725031477653577">แปลทุกครั้ง</translation>
 <translation id="7901405293566323524">ฮับโทรศัพท์</translation>
 <translation id="7903290522161827520">หากต้องการดูคอมโพเนนต์ของเบราว์เซอร์ โปรดไปที่</translation>
-<translation id="7903345046358933331">หน้าไม่ตอบสนอง คุณสามารถรอจนกระทั่งหน้าตอบสนอง หรือปิดหน้านั้น</translation>
 <translation id="7903429136755645827">คลิกเพื่อปรับแต่งการควบคุมเกม</translation>
 <translation id="7903742244674067440">คุณมีใบรับรองของไฟล์ซึ่งระบุตัวตนของผู้ออกใบรับรองเหล่านี้</translation>
 <translation id="7903925330883316394">ยูทิลิตี: <ph name="UTILITY_TYPE" /></translation>
@@ -8094,6 +8087,7 @@
 <translation id="8780123805589053431">รับคำอธิบายรูปภาพจาก Google</translation>
 <translation id="8780443667474968681">ปิดการค้นหาด้วยเสียงแล้ว</translation>
 <translation id="8781834595282316166">แท็บใหม่ในกลุ่ม</translation>
+<translation id="8781980678064919987">ปิดเครื่องเมื่อปิดฝา</translation>
 <translation id="8782565991310229362">การเรียกใช้แอปพลิเคชันคีออสก์ถูกยกเลิก</translation>
 <translation id="8783834180813871000">พิมพ์รหัสการจับคู่บลูทูธแล้วกด Return หรือ Enter</translation>
 <translation id="8784626084144195648">เฉลี่ยรวม</translation>
@@ -8158,7 +8152,6 @@
 <translation id="8846132060409673887">ดูผู้ผลิตและรุ่นของคอมพิวเตอร์เครื่องนี้</translation>
 <translation id="8846163936679269230">รีเซ็ตโปรไฟล์ eSIM</translation>
 <translation id="8846239054091760429">เสียงโมโน, เสียงเมื่อเริ่มต้นระบบ, คำบรรยายสด และอื่นๆ</translation>
-<translation id="8847523528195140327">ออกจากระบบเมื่อปิดเคส</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">ซ่อน</translation>
 <translation id="8849219423513870962">ยกเลิกการลบโปรไฟล์ eSIM ที่มีชื่อว่า <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index ffeb32d8..d04c134f 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">Bağlantı kesiliyor...</translation>
 <translation id="1537254971476575106">Tam ekran büyüteci</translation>
 <translation id="15373452373711364">Büyük fare imleci</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" />, <ph name="ORIGIN" /> sitesini okuyup değiştirmek istiyor</translation>
 <translation id="1540605929960647700">Demo modunu etkinleştir</translation>
 <translation id="1541346352678737112">Ağ bulunamadı</translation>
 <translation id="1542137295869176367">Oturum açma verileriniz güncellenemedi</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022"><ph name="USERNAME" /> adlı kullanıcı için <ph name="DOMAIN" /> alanındaki kimlik bilgisi ayrıntıları</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> eklenemiyor</translation>
 <translation id="1677472565718498478">Kalan süre: <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Uyku modundayken veya kapak kapalıyken kilitle</translation>
 <translation id="1679068421605151609">Geliştirici Araçları</translation>
 <translation id="1679810534535368772">Çıkmak istediğinizden emin misiniz?</translation>
 <translation id="167983332380191032">Yönetim hizmeti HTTP hatası gönderdi.</translation>
@@ -850,7 +848,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> adlı satıcıyı asla gösterme</translation>
 <translation id="1794791083288629568">Bu sorunu düzeltmemize yardımcı olmak için geri bildirim gönderin.</translation>
 <translation id="1795214765651529549">Klasik Temayı Kullan</translation>
-<translation id="1796105431091975902">Eklenecek bir Ansible başucu kitabı seçme</translation>
 <translation id="1796588414813960292">Ses kullanılmasını gerektiren özellikler çalışmaz</translation>
 <translation id="1797117170091578105">Chromebook klavyenizi kullanarak oynayın. Tuşları, belirli işlemler için özelleştirebilirsiniz.</translation>
 <translation id="1800502858278951817">Hiçbir uzantı <ph name="SITE_NAME" /> sitesini okuyup değiştirmek istemedi</translation>
@@ -915,6 +912,7 @@
 <translation id="1842766183094193446">Demo modunu etkinleştirmek istediğinizden emin misiniz?</translation>
 <translation id="1845727111305721124">Ses çalmasına izin verilen siteler</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> eklentisini çalıştırmak için Control tuşuyla birlikte tıklayın</translation>
+<translation id="1848219224579402567">Kapak kapatıldığında oturumu kapat</translation>
 <translation id="184862733444771842">Özellik İsteği</translation>
 <translation id="1849016657376805933">Tüm HID cihazları</translation>
 <translation id="1849186935225320012">Bu sayfa MIDI cihazları üzerinde tam denetime sahip.</translation>
@@ -1022,7 +1020,6 @@
 <translation id="1941553344801134989">Sürüm: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Tuş eşlemeyi göster</translation>
 <translation id="1942128823046546853">Web sitelerindeki tüm verilerinizi okuma ve değiştirme</translation>
-<translation id="1942600407708803723">Kapak kapatıldığında gücü kapat</translation>
 <translation id="1944528062465413897">Bluetooth eşleme kodu:</translation>
 <translation id="1944921356641260203">Güncelleme bulundu</translation>
 <translation id="1947136734041527201">Bir kimlik hizmetindeki hesabınızı kullanarak web sitelerinde oturum açmanızı sağlar</translation>
@@ -3083,7 +3080,6 @@
 <translation id="389901847090970821">Klavye seçin</translation>
 <translation id="3900966090527141178">Şifreleri dışa aktarın</translation>
 <translation id="3903187154317825986">Yerleşik klavye</translation>
-<translation id="3903191712482985591">Başucu kitabı ekleyin</translation>
 <translation id="3904326018476041253">Konum Hizmetleri</translation>
 <translation id="3904849010307028014">Bir siteyle olan etkileşiminize (ör. düzenli olarak bir hesapta oturum açmak) göre bu site, tarayıcınıza bir güven jetonu gönderebilir. Ziyaret ettiğiniz diğer siteler daha sonra geçerli bir güven jetonu arayıp bulursa bu sitelerin sizi bot yerine gerçek bir kişi olarak kabul etmesi daha olasıdır.</translation>
 <translation id="3905761538810670789">Uygulamayı onar</translation>
@@ -5029,7 +5025,6 @@
 <translation id="5827733057563115968">Sonraki kelime tahmini</translation>
 <translation id="5828545842856466741">Profil ekle...</translation>
 <translation id="5828633471261496623">Yazdırılıyor...</translation>
-<translation id="5828797982387013521">Başucu kitabı seç</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> açılamıyor</translation>
 <translation id="5830720307094128296">Sayfayı &amp;Farklı Kaydet...</translation>
 <translation id="5832813618714645810">Profiller</translation>
@@ -5921,7 +5916,6 @@
 <translation id="6686665106869989887">Sekme sağa taşındı</translation>
 <translation id="6686817083349815241">Şifrenizi kaydedin</translation>
 <translation id="6687079240787935001">Gizle: <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> sitesini okuyup değiştirmek istiyor:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> kullanıcısının bilgisayara gelmesini isteyin. Çocuğunuz, ses modelini oluşturmak için bu ekrandaki birkaç ifadeyi okuyacaktır.
     <ph name="BR" />
     <ph name="SUPERVISED_USER_NAME" />, okuma konusunda yardıma ihtiyaç duyuyorsa ifadeleri siz okuduktan sonra çocuğunuza tekrar ettirin. Asistan'ın, sizin sesiniz yerine çocuğunuzun sesini öğrenmesi için mikrofondan uzakta fısıldayarak konuşun.</translation>
@@ -7179,7 +7173,6 @@
 <translation id="7898725031477653577">Her zaman çevir</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Tarayıcı bileşenlerini mi arıyorsunuz? Şu adresi ziyaret edin:</translation>
-<translation id="7903345046358933331">Sayfa yanıt vermiyor. Yanıt vermesini bekleyebilir veya kapatabilirsiniz.</translation>
 <translation id="7903429136755645827">Oyun denetimlerinizi özelleştirmek için tıklayın</translation>
 <translation id="7903742244674067440">Dosyada şu sertifika yetkililerini tanımlayan sertifikalarınız var</translation>
 <translation id="7903925330883316394">Yardımcı Program: <ph name="UTILITY_TYPE" /></translation>
@@ -8094,6 +8087,7 @@
 <translation id="8780123805589053431">Google'dan resim açıklamaları al</translation>
 <translation id="8780443667474968681">Sesli arama özelliği kapatıldı.</translation>
 <translation id="8781834595282316166">Grupta Yeni Sekme</translation>
+<translation id="8781980678064919987">Kapak kapatıldığında gücü kapat</translation>
 <translation id="8782565991310229362">Kiosk uygulaması başlatma iptal edildi.</translation>
 <translation id="8783834180813871000">Bluetoth eşleme kodunu yazıp Return veya Enter tuşuna basın.</translation>
 <translation id="8784626084144195648">Gruplu Ortalama</translation>
@@ -8158,7 +8152,6 @@
 <translation id="8846132060409673887">Bu bilgisayarın üreticisini ve modelini okuma</translation>
 <translation id="8846163936679269230">eSIM profillerini sıfırlayın</translation>
 <translation id="8846239054091760429">Mono ses, başlangıç, Canlı Altyazı ve daha fazlası</translation>
-<translation id="8847523528195140327">Kapak kapatıldığında oturumu kapat</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Gizli</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> adlı eSIM profilinin kaldırılmasını iptal et</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 5e5668f..bbbafe43 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -566,7 +566,6 @@
 <translation id="1536754031901697553">Від’єднання…</translation>
 <translation id="1537254971476575106">Лупа для всього екрана</translation>
 <translation id="15373452373711364">Великий курсор миші</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> подає запит на читання й зміну сайту <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Увімкніть демонстраційний режим</translation>
 <translation id="1541346352678737112">Мережу не знайдено</translation>
 <translation id="1542137295869176367">Не вдалось оновити дані для входу</translation>
@@ -728,7 +727,6 @@
 <translation id="1676902103953506022">Облікові дані користувача <ph name="USERNAME" /> у домені <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Не вдається додати <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Залишилося <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Блокувати під час переходу в режим сну або закриття кришки</translation>
 <translation id="1679068421605151609">Інструменти для розробників</translation>
 <translation id="1679810534535368772">Вийти?</translation>
 <translation id="167983332380191032">Сервіс керування надіслав помилку HTTP.</translation>
@@ -864,7 +862,6 @@
 <translation id="1794051631868188691">Ніколи не показувати продавця <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Надіслати відгук, щоб допомогти нам вирішити цю проблему.</translation>
 <translation id="1795214765651529549">Вибрати класичну тему</translation>
-<translation id="1796105431091975902">Вибрати посібник правил Ansible, який потрібно додати</translation>
 <translation id="1796588414813960292">Функції, яким потрібен звук, не працюватимуть</translation>
 <translation id="1797117170091578105">Грайте за допомогою клавіатури Chromebook. Ви можете налаштувати клавіші для певних дій.</translation>
 <translation id="1800502858278951817">Жодне розширення не подавало запит на читання й зміну сайту <ph name="SITE_NAME" /></translation>
@@ -929,6 +926,7 @@
 <translation id="1842766183094193446">Увімкнути демонстраційний режим?</translation>
 <translation id="1845727111305721124">Дозволено відтворювати звуки</translation>
 <translation id="1846308012215045257">Натисніть клавішу Control, щоб запустити плагін <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Виходити з облікового запису, коли кришка закрита</translation>
 <translation id="184862733444771842">Запит на додавання функції</translation>
 <translation id="1849016657376805933">Усі пристрої HID</translation>
 <translation id="1849186935225320012">Ця сторінка повністю контролює пристрої MIDI.</translation>
@@ -1037,7 +1035,6 @@
 <translation id="1941553344801134989">Версія: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Показати прив’язку клавіш</translation>
 <translation id="1942128823046546853">Читати та змінювати всі ваші дані на всіх веб-сайтах</translation>
-<translation id="1942600407708803723">Завершувати роботу, коли кришка закрита</translation>
 <translation id="1944528062465413897">Код підключення через Bluetooth:</translation>
 <translation id="1944921356641260203">Знайдено оновлення</translation>
 <translation id="1947136734041527201">Дає змогу входити на веб-сайти, використовуючи обліковий запис сервісу ідентифікації</translation>
@@ -3103,7 +3100,6 @@
 <translation id="389901847090970821">Виберіть клавіатуру</translation>
 <translation id="3900966090527141178">Експортувати паролі</translation>
 <translation id="3903187154317825986">Вбудована клавіатура</translation>
-<translation id="3903191712482985591">Додати посібник</translation>
 <translation id="3904326018476041253">Геолокація</translation>
 <translation id="3904849010307028014">На основі ваших дій, зокрема регулярного входу в обліковий запис, сайт може призначити вашому веб-переглядачу маркер довіри. Після цього інші відвідувані вами сайти, які знаходитимуть дійсний маркер довіри, з більшою ймовірністю розпізнаватимуть вас як людину, а не бота.</translation>
 <translation id="3905761538810670789">Відновити додаток</translation>
@@ -5047,7 +5043,6 @@
 <translation id="5827733057563115968">Передбачення наступного слова</translation>
 <translation id="5828545842856466741">Додати профіль…</translation>
 <translation id="5828633471261496623">Друк...</translation>
-<translation id="5828797982387013521">Вибрати посібник правил</translation>
 <translation id="5830205393314753525">Не вдалося відкрити додаток <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Зберегти сторінку &amp;як...</translation>
 <translation id="5832813618714645810">Профілі</translation>
@@ -5944,7 +5939,6 @@
 <translation id="6686665106869989887">Вкладку переміщено праворуч</translation>
 <translation id="6686817083349815241">Зберегти пароль</translation>
 <translation id="6687079240787935001">Сховати <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Запит на читання та зміну сайту <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Нехай <ph name="SUPERVISED_USER_NAME" /> підійде до комп’ютера. Ваша дитина зачитає декілька фраз на екрані, щоб створити зразок голосу.
     <ph name="BR" />
     Якщо <ph name="SUPERVISED_USER_NAME" /> ще не дуже добре читає, нехай повторює за вами. Шепочіть фрази не в мікрофон, щоб Асистент запам’ятав голос дитини, а не ваш.</translation>
@@ -7203,7 +7197,6 @@
 <translation id="7898725031477653577">Завжди перекладати</translation>
 <translation id="7901405293566323524">Телефонний центр</translation>
 <translation id="7903290522161827520">Шукаєте компоненти веб-переглядача? Перейдіть на сторінку</translation>
-<translation id="7903345046358933331">Сторінка перестала відповідати. Зачекайте, доки вона почне відповідати, або закрийте її.</translation>
 <translation id="7903429136755645827">Натисніть, щоб налаштувати елементи керування іграми</translation>
 <translation id="7903742244674067440">У вас є сертифікати, які ідентифікують ці центри сертифікації</translation>
 <translation id="7903925330883316394">Службовий додаток: <ph name="UTILITY_TYPE" /></translation>
@@ -8121,6 +8114,7 @@
 <translation id="8780123805589053431">Отримати описи зображень від Google</translation>
 <translation id="8780443667474968681">Голосовий пошук вимкнено.</translation>
 <translation id="8781834595282316166">Нова вкладка в групі</translation>
+<translation id="8781980678064919987">Завершувати роботу, коли кришка закрита</translation>
 <translation id="8782565991310229362">Скасовано запуск програми для терміналів.</translation>
 <translation id="8783834180813871000">Введіть код підключення через Bluetooth і натисніть Return або Enter.</translation>
 <translation id="8784626084144195648">Сукупне середнє значення</translation>
@@ -8185,7 +8179,6 @@
 <translation id="8846132060409673887">Показувати виробника й модель цього комп’ютера</translation>
 <translation id="8846163936679269230">Скинути профілі eSIM-карти</translation>
 <translation id="8846239054091760429">Монофонічне аудіо, звуки під час запуску й субтитри</translation>
-<translation id="8847523528195140327">Виходити з облікового запису, коли кришка закрита</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Приховано</translation>
 <translation id="8849219423513870962">Скасувати видалення профілю eSIM-карти під назвою "<ph name="PROFILE_NAME" />"</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb
index 4b23f3a..284ef8d 100644
--- a/chrome/app/resources/generated_resources_ur.xtb
+++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">منقطع کیا جا رہا ہے...</translation>
 <translation id="1537254971476575106">پوری اسکرین مکبّر</translation>
 <translation id="15373452373711364">بڑا ماؤس کرسر</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> <ph name="ORIGIN" /> کو پڑھنے اور تبدیل کرنے کی درخواست کر رہا ہے</translation>
 <translation id="1540605929960647700">ڈیمو موڈ فعال کریں</translation>
 <translation id="1541346352678737112">کوئی نیٹ ورک نہیں ملا</translation>
 <translation id="1542137295869176367">آپ کا سائن ان ڈیٹا اپ ڈیٹ نہیں ہو سکا</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> پر <ph name="USERNAME" /> کیلئے اسناد کی تفصیلات</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> شامل نہیں کی جا سکتی</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> باقی</translation>
-<translation id="1678794218766467608">سلیپ وضع میں یا کور بند ہونے پر مقفل کریں</translation>
 <translation id="1679068421605151609">ڈویلپر ٹولز</translation>
 <translation id="1679810534535368772">کیا آپ واقعی باہر نکلنا چاہتے ہیں؟</translation>
 <translation id="167983332380191032">‏مینیجمنٹ سروس نے HTTP خرابی بھیجی۔</translation>
@@ -850,7 +848,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> کبھی نہ دکھائیں</translation>
 <translation id="1794791083288629568">اس مسئلے کو حل کرنے میں ہماری مدد کیلئے تاثرات بھیجیں۔</translation>
 <translation id="1795214765651529549">کلاسک استعمال کریں</translation>
-<translation id="1796105431091975902">‏شامل کرنے کے لیے ایک Ansible پلے بُک منتخب کریں</translation>
 <translation id="1796588414813960292">وہ خصوصیات کام نہیں کریں گی جن کیلئے آواز کی ضرورت ہوتی ہے</translation>
 <translation id="1797117170091578105">‏اپنا Chromebook کی بورڈ استعمال کر کے کھیلیں۔ آپ مخصوص کاروائیوں کے لیے کلیدوں کو حسب ضرورت بنا سکتے ہیں۔</translation>
 <translation id="1800502858278951817">کسی بھی ایکسٹینشن نے <ph name="SITE_NAME" /> کو پڑھنے اور تبدیل کرنے کی درخواست نہیں کی ہے</translation>
@@ -915,6 +912,7 @@
 <translation id="1842766183094193446">کیا آپ واقعی ڈیمو موڈ فعال کرنا چاہتے ہیں؟</translation>
 <translation id="1845727111305721124">آواز چلانے کی اجازت ہے</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> چلانے کیلئے کنٹرول دبا کر کلک کریں</translation>
+<translation id="1848219224579402567">لِڈ بند ہونے پر سائن آؤٹ کریں</translation>
 <translation id="184862733444771842">خصوصیت کی درخواست</translation>
 <translation id="1849016657376805933">‏کوئی بھی HID آلہ</translation>
 <translation id="1849186935225320012">‏اس صفحہ کو MIDI آلات پر مکمل کنٹرول ہے۔</translation>
@@ -1022,7 +1020,6 @@
 <translation id="1941553344801134989">ورژن: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">کلید کی نقشہ سازی دکھائیں</translation>
 <translation id="1942128823046546853">سبھی ویب سائٹس پر اپنا سبھی ڈیٹا پڑھیں اور تبدیل کریں</translation>
-<translation id="1942600407708803723">کوَر بند ہونے پر شٹ ڈاؤن کریں</translation>
 <translation id="1944528062465413897">بلوٹوتھ جوڑا بنانے کا کوڈ:</translation>
 <translation id="1944921356641260203">اپ ڈیٹ ملا</translation>
 <translation id="1947136734041527201">آپ کو اس اکاؤنٹ کا استعمال کرتے ہوئے ویب سائٹس میں سائن ان کرنے دیتا ہے جن کی شناختی سروس آپ کے پاس ہے</translation>
@@ -3088,7 +3085,6 @@
 <translation id="389901847090970821">کی بورڈ منتخب کریں</translation>
 <translation id="3900966090527141178">پاس ورڈز برآمد کریں</translation>
 <translation id="3903187154317825986">پہلے سے شامل کی بورڈ</translation>
-<translation id="3903191712482985591">پلے بُک شامل کریں</translation>
 <translation id="3904326018476041253">مقام کی سروسز</translation>
 <translation id="3904849010307028014">کسی سائٹ کے ساتھ آپ کے تعامل کی بنیاد پر، جیسے کہ کسی اکاؤنٹ میں باقاعدگی سے سائن ان کرنے سے وہ سائٹ آپ کے براؤزر کے لیے ٹرسٹ ٹوکن جاری کر سکتی ہے۔ بعد میں، اگر آپ دیگر سائٹس کو ملاحظہ کرتے ہیں تو وہ ایک درست ٹرسٹ ٹوکن چیک کرتی ہیں اور اس کے حاصل ہونے پر ان کا آپ کے ساتھ ایک شخص کی طرح سلوک کرنے کا زیادہ امکان ہوتا ہے نہ کہ بوٹ کی طرح۔</translation>
 <translation id="3905761538810670789">ایپ کو درست کریں</translation>
@@ -5032,7 +5028,6 @@
 <translation id="5827733057563115968">اگلے لفظ کی پیشن گوئی</translation>
 <translation id="5828545842856466741">پروفائل شامل کریں...</translation>
 <translation id="5828633471261496623">پرنٹ کیا جا رہا ہے…</translation>
-<translation id="5828797982387013521">پلے بُک منتخب کریں</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> نہیں کھل سکتی</translation>
 <translation id="5830720307094128296">صفحہ محفوظ کریں &amp;بطور…</translation>
 <translation id="5832813618714645810">پروفائلز</translation>
@@ -5924,7 +5919,6 @@
 <translation id="6686665106869989887">ٹیب دائیں طرف منتقل کیا گیا</translation>
 <translation id="6686817083349815241">اپنا پاس ورڈ محفوظ کریں</translation>
 <translation id="6687079240787935001"><ph name="MODULE_TITLE" /> چھپائیں</translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> پڑھنے اور تبدیل کرنے کی درخواست کی جا رہی ہے:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> کو کمپیوٹر پر آنے کیلئے کہیں۔ آپ کا بچہ اپنا صوتی ماڈل تخلیق کرنے کیلئے اس اسکرین پر کچھ فقرے پڑھے گا۔
     <ph name="BR" />
     اگر <ph name="SUPERVISED_USER_NAME" /> کو پڑھنے میں مدد کی ضرورت ہو تو بچے کو اپنے بعد فقرے دہرانے کو کہیں۔ مائیک سے دور آہستہ سے بولیں، تاکہ اسسٹنٹ آپ کے بجائے آپ کے بچے کی آواز سن سکے۔</translation>
@@ -7183,7 +7177,6 @@
 <translation id="7898725031477653577">ہمیشہ ترجمہ کریں</translation>
 <translation id="7901405293566323524">فون کا ہب</translation>
 <translation id="7903290522161827520">براؤزر کے اجزاء تلاش کر رہے ہیں؟ ملاحظہ کریں</translation>
-<translation id="7903345046358933331">صفحہ جواب نہیں دے رہا ہے۔ آپ اس کے جواب دینے کا انتظار کر سکتے ہیں یا اسے بند کر سکتے ہیں۔</translation>
 <translation id="7903429136755645827">اپنے گیم کنٹرولز کو حسب ضرورت بنانے کے لیے کلک کریں</translation>
 <translation id="7903742244674067440">آپ کے پاس ان سرٹیفیکیٹ اتھارٹی کی شناخت کرنے والی فائل پر سرٹیفیکیٹس ہیں</translation>
 <translation id="7903925330883316394">یوٹیلٹی: <ph name="UTILITY_TYPE" /></translation>
@@ -8097,6 +8090,7 @@
 <translation id="8780123805589053431">‏Google سے تصویر کی تفصیلات حاصل کریں</translation>
 <translation id="8780443667474968681">صوتی تلاش بند کر دی گئی ہے۔</translation>
 <translation id="8781834595282316166">گروپ میں نیا ٹیب</translation>
+<translation id="8781980678064919987">لِڈ بند ہونے پر بند کریں</translation>
 <translation id="8782565991310229362">کیوسک ایپلیکیشن کی شروعات منسوخ ہو گئی۔</translation>
 <translation id="8783834180813871000">‏بلوٹوتھ جوڑا بنانے کا کوڈ ٹائپ کریں پھر Return یا Enter دبائیں۔</translation>
 <translation id="8784626084144195648">بنڈ اوسط</translation>
@@ -8161,7 +8155,6 @@
 <translation id="8846132060409673887">اس کمپیوٹر کے مینوفیکچرر اور ماڈل کو پڑھیں</translation>
 <translation id="8846163936679269230">‏eSIM پروفائلز کو ری سیٹ کریں</translation>
 <translation id="8846239054091760429">مونو آڈیو، اسٹارٹ اپ، لائیو کیپشن، اور بہت کچھ</translation>
-<translation id="8847523528195140327">کوَر بند ہونے پر سائن آؤٹ کریں</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">پوشیدہ</translation>
 <translation id="8849219423513870962">‏<ph name="PROFILE_NAME" /> نام والی eSIM پروفائل کو ہٹانا منسوخ کریں</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb
index 6f5ffb9..c06cefb 100644
--- a/chrome/app/resources/generated_resources_uz.xtb
+++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -558,7 +558,6 @@
 <translation id="1536754031901697553">Uzilmoqda…</translation>
 <translation id="1537254971476575106">Butun ekran rejimidagi lupa</translation>
 <translation id="15373452373711364">Sichqonchaning katta kursori</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> kengaytmasi <ph name="ORIGIN" /> sayti maʼlumotlarini oʻqish va oʻzgartirish uchun ruxsat soʻramoqda</translation>
 <translation id="1540605929960647700">Demo rejimni yoqish</translation>
 <translation id="1541346352678737112">Hech qanday tarmoq topilmadi</translation>
 <translation id="1542137295869176367">Kirish maʼlumotlaringiz yangilanmadi</translation>
@@ -720,7 +719,6 @@
 <translation id="1676902103953506022"><ph name="DOMAIN" /> domenidagi <ph name="USERNAME" /> hisobi paroli</translation>
 <translation id="1677306805708094828"><ph name="EXTENSION_TYPE_PARAMETER" /> kiritilmadi</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> qoldi</translation>
-<translation id="1678794218766467608">Kutish rejimida yoki muqovasi yopilganda qulflang</translation>
 <translation id="1679068421605151609">Dasturchi vositalari</translation>
 <translation id="1679810534535368772">Haqiqatan ham chiqmoqchimisiz?</translation>
 <translation id="167983332380191032">Boshqaruv xizmatidan yaroqsiz HTTP kod qabul qilindi.</translation>
@@ -848,7 +846,6 @@
 <translation id="1794051631868188691"><ph name="MERCHANT" /> hech qachon chiqarilmasin</translation>
 <translation id="1794791083288629568">Muammoni bartaraf etishga yordam beruvchi fikrlar yuborish.</translation>
 <translation id="1795214765651529549">Klassik mavzu ishlatilsin</translation>
-<translation id="1796105431091975902">Kiritiladigan Ansible Pleybukni tanlang</translation>
 <translation id="1796588414813960292">Ovozdan foydalanadigan funksiyalar ishlamaydi</translation>
 <translation id="1797117170091578105">Chromebook klaviaturasi bilan oʻynang. Muayyan amallar uchun tugmalarni moslashtirishingiz mumkin.</translation>
 <translation id="1800502858278951817">Hech qaysi kengaytma <ph name="SITE_NAME" /> saytini oʻqish va oʻzgartirishga ruxsat olishga urinmagan</translation>
@@ -913,6 +910,7 @@
 <translation id="1842766183094193446">Demo rejim yoqilsinmi?</translation>
 <translation id="1845727111305721124">Ovoz ijro etishga ruxsat berilgan</translation>
 <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> plaginini ishga tushirish uchun CTRL tugmasini bosib turgan holda sichqoncha tugmasini bosing</translation>
+<translation id="1848219224579402567">Qurilma yopilganda tizimdan chiqilsin</translation>
 <translation id="184862733444771842">Yangi funksiya talabi</translation>
 <translation id="1849016657376805933">Istalgan HID qurilma</translation>
 <translation id="1849186935225320012">Bu sahifa MIDI qurilmalarini to‘liq boshqaradi.</translation>
@@ -1021,7 +1019,6 @@
 <translation id="1941553344801134989">Versiya: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Tugmalarning tayinlanishini chiqarish</translation>
 <translation id="1942128823046546853">Barcha saytlardagi maʼlumotlaringizni oʻqish va oʻzgartirish</translation>
-<translation id="1942600407708803723">Muqova yopilganda ishni yakunlash</translation>
 <translation id="1944528062465413897">Bluetooth orqali ulanish kodi:</translation>
 <translation id="1944921356641260203">Yangilanish topildi</translation>
 <translation id="1947136734041527201">Saytlarda hisobga mavjud shaxsni tasdiqlash usuli bilan kirish imkonini beradi</translation>
@@ -3088,7 +3085,6 @@
 <translation id="389901847090970821">Klaviaturani tanlang</translation>
 <translation id="3900966090527141178">Parollarni eksport qilish</translation>
 <translation id="3903187154317825986">Ichki klaviatura</translation>
-<translation id="3903191712482985591">Pleybukni kiritish</translation>
 <translation id="3904326018476041253">Joylashuvni aniqlash xizmatlari</translation>
 <translation id="3904849010307028014">Doim hisobga kirish kabi saytdagi harakatlaringiz asosida sayt brauzerga ishonch tokenini taqdim qilishi mumkin. Keyinroq siz ochadigan boshqa saytlar ishonch tokeni yaroqliligini tekshirish orqali sizning bot emas shaxs ekanligingizni aniqlay oladi.</translation>
 <translation id="3905761538810670789">Ilovani ta’mirlash</translation>
@@ -5034,7 +5030,6 @@
 <translation id="5827733057563115968">Keyingi soʻzni taklif qilish</translation>
 <translation id="5828545842856466741">Profil kiritish...</translation>
 <translation id="5828633471261496623">Chop etilmoqda...</translation>
-<translation id="5828797982387013521">Pleybukni tanlash</translation>
 <translation id="5830205393314753525"><ph name="APP_NAME" /> ochilmadi</translation>
 <translation id="5830720307094128296">Sahifani &amp;saqlab olish...</translation>
 <translation id="5832813618714645810">Profillar</translation>
@@ -5926,7 +5921,6 @@
 <translation id="6686665106869989887">Varaq oʻngga olindi</translation>
 <translation id="6686817083349815241">Parolni saqlash</translation>
 <translation id="6687079240787935001">Berkitish: <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513"><ph name="ORIGIN" /> sayt maʼlumotlarini oʻqish va oʻzgartirish soʻrovi:</translation>
 <translation id="6689714331348768690"><ph name="SUPERVISED_USER_NAME" /> kompyuter oldiga kelsin. Farzandingiz uchun ovoz modelini yaratish uchun u ekrandagi bir nechta iborani oʻqishi kerak.
     <ph name="BR" />
     Agar <ph name="SUPERVISED_USER_NAME" /> hali oʻqiy olmasa, iboralarni ortingizdan qaytarsin. Mikrofondan uzoqroq gapiring vs Assistent farzandingiz ovozini siznikidan ajrata oladi.</translation>
@@ -7185,7 +7179,6 @@
 <translation id="7898725031477653577">Har doim tarjima qilinsin</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">Brauzer komponentlarini qidiryapsizmi? Bu sahifaga kiring</translation>
-<translation id="7903345046358933331">Quyidagi sahifa javob bermayapti. Uning javob berishini kutishingiz yoki uni majburan yopishingiz mumkin.</translation>
 <translation id="7903429136755645827">Oʻyin boshqaruvlarini moslashtirish uchun bosing</translation>
 <translation id="7903742244674067440">Sizda quyidagi sertifikatlash markazlari haqiqiyligini tasdiqlovchi sertifikatlar bor</translation>
 <translation id="7903925330883316394">Vosita: <ph name="UTILITY_TYPE" /></translation>
@@ -8099,6 +8092,7 @@
 <translation id="8780123805589053431">Rasmlarni tavsiflash (Google orqali)</translation>
 <translation id="8780443667474968681">Ovozli qidiruv o‘chiq.</translation>
 <translation id="8781834595282316166">Joriy guruhda yangi varaq ochish</translation>
+<translation id="8781980678064919987">Qurilma yopilganda ishni yakunlash</translation>
 <translation id="8782565991310229362">Kiosk ilovasi ishga tushirilishi bekor qilindi.</translation>
 <translation id="8783834180813871000">Bluetooth ulanish kodini kiriting va keyin Return yoki Enter tugmasini bosing.</translation>
 <translation id="8784626084144195648">Guruhlar bo‘yicha o‘rtachasi</translation>
@@ -8163,7 +8157,6 @@
 <translation id="8846132060409673887">Kompyuter ishlab chiqaruvchisi va modeli haqidagi axborotni olish</translation>
 <translation id="8846163936679269230">eSIM profillarini asliga qaytarish</translation>
 <translation id="8846239054091760429">Mono audio, boshlanishi, Jonli izoh va boshqalar</translation>
-<translation id="8847523528195140327">Muqova yopilganda hisobdan chiqish</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Yashirin</translation>
 <translation id="8849219423513870962"><ph name="PROFILE_NAME" /> nomli eSIM profilini olib tashlashni bekor qilish</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 665cda8e..0836b97 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">Đang ngắt kết nối...</translation>
 <translation id="1537254971476575106">Phóng to toàn bộ màn hình</translation>
 <translation id="15373452373711364">Con trỏ chuột lớn</translation>
-<translation id="1539630663098418038"><ph name="EXTENSIONS_REQUESTING_ACCESS" /> đang yêu cầu đọc và thay đổi <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Bật chế độ minh họa</translation>
 <translation id="1541346352678737112">Không tìm thấy mạng</translation>
 <translation id="1542137295869176367">Không thể cập nhật dữ liệu đăng nhập của bạn</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">Thông tin xác thực của <ph name="USERNAME" /> trên <ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Không thể thêm <ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">Còn <ph name="TIME" /></translation>
-<translation id="1678794218766467608">Khoá ở chế độ ngủ hoặc khi đóng nắp</translation>
 <translation id="1679068421605151609">Công cụ dành cho nhà phát triển</translation>
 <translation id="1679810534535368772">Bạn có chắc chắn muốn thoát không?</translation>
 <translation id="167983332380191032">Lỗi HTTP do dịch vụ quản lý gửi</translation>
@@ -861,7 +859,6 @@
 <translation id="1794051631868188691">Không bao giờ hiển thị <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Gửi phản hồi để giúp chúng tôi khắc phục sự cố này.</translation>
 <translation id="1795214765651529549">Sử dụng chủ đề Cổ điển</translation>
-<translation id="1796105431091975902">Chọn để thêm Ansible Playbook</translation>
 <translation id="1796588414813960292">Các tính năng cần dùng âm thanh sẽ không hoạt động</translation>
 <translation id="1797117170091578105">Chơi bằng bàn phím Chromebook. Bạn có thể tùy chỉnh các phím cho các thao tác cụ thể.</translation>
 <translation id="1800502858278951817">Không có tiện ích nào yêu cầu cấp quyền đọc và thay đổi <ph name="SITE_NAME" /></translation>
@@ -926,6 +923,7 @@
 <translation id="1842766183094193446">Bạn có chắc chắn muốn bật chế độ minh họa không?</translation>
 <translation id="1845727111305721124">Được phép phát âm thanh</translation>
 <translation id="1846308012215045257">Giữ Control khi nhấp để chạy <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Đăng xuất khi đóng nắp</translation>
 <translation id="184862733444771842">Yêu cầu về tính năng</translation>
 <translation id="1849016657376805933">Thiết bị HID bất kỳ</translation>
 <translation id="1849186935225320012">Trang này có quyền kiểm soát toàn bộ thiết bị MIDI.</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">Phiên bản: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Hiện ánh xạ khóa</translation>
 <translation id="1942128823046546853">Đọc và thay đổi tất cả dữ liệu của bạn trên mọi trang web</translation>
-<translation id="1942600407708803723">Tắt máy khi đóng nắp màn hình</translation>
 <translation id="1944528062465413897">Mã ghép nối Bluetooth:</translation>
 <translation id="1944921356641260203">Đã tìm thấy bản cập nhật</translation>
 <translation id="1947136734041527201">Cho phép bạn đăng nhập vào các trang web bằng tài khoản có dịch vụ nhận dạng</translation>
@@ -2567,6 +2564,7 @@
 <translation id="3406290648907941085">Được phép sử dụng dữ liệu và thiết bị thực tế ảo</translation>
 <translation id="3406396172897554194">Tìm kiếm theo ngôn ngữ hoặc tên phương thức nhập</translation>
 <translation id="3406605057700382950">&amp;Hiển thị thanh dấu trang</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{Đã nhập 1 mật khẩu vào Trình quản lý mật khẩu của Google cho <ph name="USER_EMAIL" />}other{Đã nhập {NUM_PASSWORDS} mật khẩu vào Trình quản lý mật khẩu của Google cho <ph name="USER_EMAIL" />}}</translation>
 <translation id="3409785640040772790">Maps</translation>
 <translation id="3412265149091626468">Chuyển tới Phần lựa chọn</translation>
 <translation id="3413122095806433232">Nhà cung cấp CA: <ph name="LOCATION" /></translation>
@@ -3100,7 +3098,6 @@
 <translation id="389901847090970821">Chọn bàn phím</translation>
 <translation id="3900966090527141178">Xuất mật khẩu</translation>
 <translation id="3903187154317825986">Bàn phím tích hợp</translation>
-<translation id="3903191712482985591">Thêm Playbook</translation>
 <translation id="3904326018476041253">Dịch vụ vị trí</translation>
 <translation id="3904849010307028014">Dựa trên tương tác của bạn với một trang web (chẳng hạn như thường xuyên đăng nhập vào một tài khoản), trang web đó có thể phát hành một mã thông báo tin cậy cho trình duyệt của bạn. Sau đó, nếu các trang web khác bạn truy cập cũng kiểm tra và tìm thấy một mã thông báo tin cậy hợp lệ, thì khả năng cao là các trang web đó sẽ xác định bạn là một người thực chứ không phải một bot.</translation>
 <translation id="3905761538810670789">Sửa ứng dụng</translation>
@@ -3752,6 +3749,7 @@
 <translation id="4541123282641193691">Không thể xác minh tài khoản của bạn. Vui lòng thử lại hoặc khởi động lại Chromebook.</translation>
 <translation id="4541662893742891060">Không thể kết nối với hồ sơ này. Nếu cần hỗ trợ kỹ thuật, hãy liên hệ với nhà mạng của bạn.</translation>
 <translation id="4541706525461326392">Đang xóa hồ sơ. Quá trình này có thể mất vài phút.</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{Đã nhập 1 mật khẩu vào Trình quản lý mật khẩu của Google trên thiết bị này}other{Đã nhập {NUM_PASSWORDS} mật khẩu vào Trình quản lý mật khẩu của Google trên thiết bị này}}</translation>
 <translation id="4542520061254486227">Đọc dữ liệu của bạn trên <ph name="WEBSITE_1" /> và <ph name="WEBSITE_2" /></translation>
 <translation id="4543778593405494224">Trình quản lý chứng chỉ</translation>
 <translation id="4544174279960331769">Hình đại diện màu xanh lam mặc định</translation>
@@ -5045,7 +5043,6 @@
 <translation id="5827733057563115968">Dự đoán từ tiếp theo</translation>
 <translation id="5828545842856466741">Thêm hồ sơ...</translation>
 <translation id="5828633471261496623">Đang in...</translation>
-<translation id="5828797982387013521">Chọn cẩm nang</translation>
 <translation id="5830205393314753525">Không thể mở <ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Lưu Trang &amp;Dưới dạng...</translation>
 <translation id="5832813618714645810">Hồ sơ</translation>
@@ -5487,7 +5484,7 @@
 <translation id="6247708409970142803"><ph name="PERCENTAGE" />%</translation>
 <translation id="6247802389331535091">Hệ thống: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="624789221780392884">Bản cập nhật đã sẵn sàng</translation>
-<translation id="6248988683584659830">Tìm kiếm trong phần cài đặt</translation>
+<translation id="6248988683584659830">Tìm chế độ cài đặt</translation>
 <translation id="6249200942125593849">Quản lý chế độ a11y</translation>
 <translation id="6250186368828697007">Khi bạn chia sẻ màn hình, thông tin chi tiết sẽ bị ẩn</translation>
 <translation id="6251870443722440887">Quản lý GDI</translation>
@@ -5937,7 +5934,6 @@
 <translation id="6686665106869989887">Đã di chuyển thẻ sang phải</translation>
 <translation id="6686817083349815241">Lưu mật khẩu của bạn</translation>
 <translation id="6687079240787935001">Ẩn <ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Đang yêu cầu đọc và thay đổi <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Yêu cầu <ph name="SUPERVISED_USER_NAME" /> đến bên máy tính. Con bạn sẽ đọc một vài cụm từ trên màn hình này để tạo ra mẫu giọng nói của con bạn.
     <ph name="BR" />
     Nếu <ph name="SUPERVISED_USER_NAME" /> cần trợ giúp về việc đọc, thì hãy để con bạn lặp lại theo bạn. Thì thầm cách xa micrô để Trợ lý nhận biết giọng nói của con bạn thay vì giọng nói của bạn.</translation>
@@ -6239,6 +6235,7 @@
 <translation id="6968288415730398122">Nhập mật khẩu của bạn để định cấu hình khóa màn hình</translation>
 <translation id="6969047215179982698">Tắt tính năng Chia sẻ lân cận</translation>
 <translation id="6970480684834282392">Kiểu khởi động</translation>
+<translation id="6970543303783413625">Không nhập được mật khẩu. Mỗi lần, bạn chỉ có thể nhập tối đa <ph name="COUNT" /> mật khẩu.</translation>
 <translation id="6970856801391541997">In các trang cụ thể</translation>
 <translation id="6970861306198150268">Đảm bảo rằng bạn đang lưu mật khẩu hiện tại cho trang web này</translation>
 <translation id="6972180789171089114">Âm thanh/video</translation>
@@ -6471,6 +6468,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{Thoát khỏi trang}other{Thoát khỏi các trang}}</translation>
 <translation id="7207457272187520234">Gửi dữ liệu chẩn đoán và dữ liệu về mức sử dụng. Thiết bị này hiện tự động gửi dữ liệu chẩn đoán, dữ liệu về thiết bị và mức sử dụng ứng dụng cho Google. Những thông tin này sẽ giúp tăng độ ổn định của hệ thống và ứng dụng cũng như cải thiện các mặt khác. Một số dữ liệu tổng hợp cũng sẽ hữu ích cho các ứng dụng và đối tác của Google, chẳng hạn như những nhà phát triển Android. Tùy chọn cài đặt này do chủ sở hữu thực thi. Nếu bạn bật tùy chọn cài đặt Hoạt động trên web và ứng dụng bổ sung, thì dữ liệu này có thể được lưu vào Tài khoản Google của bạn.</translation>
 <translation id="7207631048330366454">Tìm kiếm ứng dụng</translation>
+<translation id="7210471695184432500">Để nhập mật khẩu vào Trình quản lý mật khẩu của Google trên thiết bị này, hãy chọn một tệp CSV</translation>
 <translation id="7210499381659830293">Máy in tiện ích</translation>
 <translation id="7211783048245131419">Bạn chưa gán công tắc nào</translation>
 <translation id="7212097698621322584">Nhập mã PIN hiện tại của bạn để thay đổi. Nếu không nhớ mã PIN, thì bạn cần đặt lại khóa bảo mật rồi tạo mã PIN mới.</translation>
@@ -7195,7 +7193,6 @@
 <translation id="7898725031477653577">Luôn dịch</translation>
 <translation id="7901405293566323524">Trung tâm điều khiển điện thoại</translation>
 <translation id="7903290522161827520">Bạn đang tìm các thành phần trình duyệt? Hãy truy cập</translation>
-<translation id="7903345046358933331">Trang không hồi đáp. Bạn có thể chờ trang hồi đáp hoặc đóng trang.</translation>
 <translation id="7903429136755645827">Nhấp để tùy chỉnh các nút điều khiển trong trò chơi</translation>
 <translation id="7903742244674067440">Bạn có các chứng chỉ trên tệp có thể nhận dạng các tổ chức cấp chứng chỉ này</translation>
 <translation id="7903925330883316394">Tiện ích: <ph name="UTILITY_TYPE" /></translation>
@@ -7531,6 +7528,7 @@
 <translation id="8206859287963243715">Di động</translation>
 <translation id="8208216423136871611">Không lưu</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{Thông báo mới}other{# thông báo mới}}</translation>
+<translation id="821119981794423735">Để nhập mật khẩu vào Trình quản lý mật khẩu của Google cho <ph name="USER_EMAIL" />, hãy chọn một tệp CSV</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{Đang tải xuống}other{Đang tải xuống}}</translation>
 <translation id="8213449224684199188">Đã chuyển sang chế độ ảnh</translation>
 <translation id="8214489666383623925">Mở Tệp...</translation>
@@ -8109,6 +8107,7 @@
 <translation id="8780123805589053431">Lấy nội dung mô tả hình ảnh từ Google</translation>
 <translation id="8780443667474968681">Tính năng tìm kiếm bằng giọng nói đã bị tắt.</translation>
 <translation id="8781834595282316166">Thẻ mới trong nhóm</translation>
+<translation id="8781980678064919987">Tắt máy khi đóng nắp</translation>
 <translation id="8782565991310229362">Đã hủy chạy ứng dụng kiosk.</translation>
 <translation id="8783834180813871000">Nhập mã ghép nối Bluetooth, sau đó nhấn phím Return hoặc Enter.</translation>
 <translation id="8784626084144195648">Trung bình phân tổ</translation>
@@ -8173,7 +8172,6 @@
 <translation id="8846132060409673887">Đọc thông tin về nhà sản xuất và kiểu máy của máy tính này</translation>
 <translation id="8846163936679269230">Đặt lại hồ sơ eSIM</translation>
 <translation id="8846239054091760429">Âm thanh đơn âm, âm thanh khi khởi động, phụ đề trực tiếp và các tính năng khác</translation>
-<translation id="8847523528195140327">Đăng xuất khi đóng nắp màn hình</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">Đã ẩn</translation>
 <translation id="8849219423513870962">Hủy thao tác xóa hồ sơ eSIM có tên <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index d7238a7..d45666b3 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -555,7 +555,6 @@
 <translation id="1536754031901697553">正在断开连接…</translation>
 <translation id="1537254971476575106">全屏放大镜</translation>
 <translation id="15373452373711364">大号鼠标光标</translation>
-<translation id="1539630663098418038">“<ph name="EXTENSIONS_REQUESTING_ACCESS" />”正在请求读取和更改 <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">启用演示模式</translation>
 <translation id="1541346352678737112">找不到网络</translation>
 <translation id="1542137295869176367">无法更新您的登录数据</translation>
@@ -717,7 +716,6 @@
 <translation id="1676902103953506022"><ph name="USERNAME" /> 在 <ph name="DOMAIN" /> 上的凭据详情</translation>
 <translation id="1677306805708094828">无法添加<ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">电量尚余 <ph name="TIME" /></translation>
-<translation id="1678794218766467608">在睡眠模式下或合盖后锁定</translation>
 <translation id="1679068421605151609">开发者工具</translation>
 <translation id="1679810534535368772">确定要退出吗?</translation>
 <translation id="167983332380191032">管理服务向您发送了一项 HTTP 错误。</translation>
@@ -845,7 +843,6 @@
 <translation id="1794051631868188691">永不显示<ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">发送反馈,以协助我们解决此问题。</translation>
 <translation id="1795214765651529549">使用经典主题背景</translation>
-<translation id="1796105431091975902">选择要添加的 Ansible Playbook</translation>
 <translation id="1796588414813960292">所有需要使用声音的功能都将无法正常运行</translation>
 <translation id="1797117170091578105">使用 Chromebook 键盘玩游戏。您可以为特定操作自定义按键。</translation>
 <translation id="1800502858278951817">没有任何扩展程序曾请求读取和更改 <ph name="SITE_NAME" /> 数据</translation>
@@ -910,6 +907,7 @@
 <translation id="1842766183094193446">确定要启用演示模式吗?</translation>
 <translation id="1845727111305721124">允许播放声音</translation>
 <translation id="1846308012215045257">按住 Ctrl 键的同时点击即可运行 <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">在盖被合上之后退出</translation>
 <translation id="184862733444771842">功能请求</translation>
 <translation id="1849016657376805933">任何 HID 设备</translation>
 <translation id="1849186935225320012">此页面可以完全控制 MIDI 设备。</translation>
@@ -1015,7 +1013,6 @@
 <translation id="1941553344801134989">版本:<ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">显示按键映射</translation>
 <translation id="1942128823046546853">读取和更改您在所有网站上的数据</translation>
-<translation id="1942600407708803723">合盖后关机</translation>
 <translation id="1944528062465413897">蓝牙配对码:</translation>
 <translation id="1944921356641260203">发现更新</translation>
 <translation id="1947136734041527201">允许您使用您在身份服务中注册的帐号登录网站</translation>
@@ -1703,6 +1700,7 @@
 <translation id="2568774940984945469">信息栏容器</translation>
 <translation id="2571655996835834626">更改您用于控制以下权限的设置:网站对 Cookie、JavaScript、插件、地理位置信息、麦克风、摄像头等功能的使用权限。</translation>
 <translation id="2572032849266859634">已授予对 <ph name="VOLUME_NAME" />的只读权限。</translation>
+<translation id="2573276323521243649">从头像选择页面返回</translation>
 <translation id="2573417407488272418">在升级之前,将应用和文件备份到“文件”&gt;“我的文件”。</translation>
 <translation id="2573831315551295105">为“<ph name="ACTION" />”操作分配开关</translation>
 <translation id="2575247648642144396">仅当此扩展程序能够对当前网页采取操作时,该图标才会显示。要使用此扩展程序,请点击该图标或按 <ph name="EXTENSION_SHORTCUT" />。</translation>
@@ -3077,7 +3075,6 @@
 <translation id="389901847090970821">选择键盘</translation>
 <translation id="3900966090527141178">导出密码</translation>
 <translation id="3903187154317825986">内置键盘</translation>
-<translation id="3903191712482985591">添加 Playbook</translation>
 <translation id="3904326018476041253">位置信息服务</translation>
 <translation id="3904849010307028014">网站可以根据您与其进行的互动(例如定期登录帐号)向您的浏览器颁发信任令牌。之后,如果您访问的其他网站检查并找到有效的信任令牌,就更有可能将您视为真人而非机器人。</translation>
 <translation id="3905761538810670789">修复应用</translation>
@@ -5017,7 +5014,6 @@
 <translation id="5827733057563115968">下一字词预测</translation>
 <translation id="5828545842856466741">添加个人资料…</translation>
 <translation id="5828633471261496623">正在打印...</translation>
-<translation id="5828797982387013521">选择 playbook</translation>
 <translation id="5830205393314753525">无法打开<ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">将页面存储为(&amp;A)...</translation>
 <translation id="5832813618714645810">个人资料</translation>
@@ -5908,7 +5904,6 @@
 <translation id="6686665106869989887">此标签页已移至右侧</translation>
 <translation id="6686817083349815241">保存您的密码</translation>
 <translation id="6687079240787935001">隐藏<ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">正在请求读取和更改 <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">请让<ph name="SUPERVISED_USER_NAME" />面对计算机。您的孩子将会读出此屏幕上的一些短语以创建其语音模型。
     <ph name="BR" />
     如果<ph name="SUPERVISED_USER_NAME" />有阅读障碍,请让孩子跟着您读。记得要远离麦克风轻声耳语,以便 Google 助理能够了解您孩子(而非您)的语音。</translation>
@@ -6390,6 +6385,7 @@
 <translation id="7138678301420049075">其他</translation>
 <translation id="7139627972753429585"><ph name="APP_NAME" /> 正在使用您的麦克风</translation>
 <translation id="7141105143012495934">由于无法获取您的帐号详情,因此登录失败了。请与管理员联系或重试。</translation>
+<translation id="7141844554192012199">检查</translation>
 <translation id="7144878232160441200">重试</translation>
 <translation id="7149839598364933473">将此设备转换成一部 <ph name="DEVICE_OS" /> 设备。</translation>
 <translation id="7149893636342594995">过去 24 小时</translation>
@@ -7166,7 +7162,6 @@
 <translation id="7898725031477653577">一律翻译</translation>
 <translation id="7901405293566323524">手机中心</translation>
 <translation id="7903290522161827520">想要查看浏览器组件?请访问</translation>
-<translation id="7903345046358933331">该页面已停止响应。您可以等待该页面恢复响应,也可以将其关闭。</translation>
 <translation id="7903429136755645827">点击即可自定义您的游戏控件</translation>
 <translation id="7903742244674067440">您有证书可标识以下证书授权中心</translation>
 <translation id="7903925330883316394">实用程序:<ph name="UTILITY_TYPE" /></translation>
@@ -8081,6 +8076,7 @@
 <translation id="8780123805589053431">从 Google 获取图片说明</translation>
 <translation id="8780443667474968681">已关闭语音搜索功能。</translation>
 <translation id="8781834595282316166">在组内添加新标签页</translation>
+<translation id="8781980678064919987">在盖被合上之后关闭</translation>
 <translation id="8782565991310229362">已取消启动自助服务终端应用。</translation>
 <translation id="8783834180813871000">输入蓝牙配对码,然后按回车键。</translation>
 <translation id="8784626084144195648">按区段计算的平均值</translation>
@@ -8145,7 +8141,6 @@
 <translation id="8846132060409673887">查看此计算机的制造商和型号</translation>
 <translation id="8846163936679269230">重置 eSIM 卡配置文件</translation>
 <translation id="8846239054091760429">单声道音频、启动、实时字幕等</translation>
-<translation id="8847523528195140327">合盖后退出帐号</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">已隐藏</translation>
 <translation id="8849219423513870962">取消移除名为“<ph name="PROFILE_NAME" />”的 eSIM 卡配置文件</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb
index b2adceb..e72d760 100644
--- a/chrome/app/resources/generated_resources_zh-HK.xtb
+++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -563,7 +563,6 @@
 <translation id="1536754031901697553">正在解除連結…</translation>
 <translation id="1537254971476575106">全螢幕放大鏡</translation>
 <translation id="15373452373711364">大型滑鼠游標</translation>
-<translation id="1539630663098418038">「<ph name="EXTENSIONS_REQUESTING_ACCESS" />」正在要求讀取並變更 <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">啟用示範模式</translation>
 <translation id="1541346352678737112">找不到網絡</translation>
 <translation id="1542137295869176367">無法更新您的登入資料</translation>
@@ -725,7 +724,6 @@
 <translation id="1676902103953506022">喺 <ph name="DOMAIN" />上面顯示 <ph name="USERNAME" /> 嘅憑證詳情</translation>
 <translation id="1677306805708094828">無法新增<ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478">電量尚餘 <ph name="TIME" /></translation>
-<translation id="1678794218766467608">進入休眠模式或蓋上保護蓋時鎖定</translation>
 <translation id="1679068421605151609">開發人員工具</translation>
 <translation id="1679810534535368772">確定要離開嗎?</translation>
 <translation id="167983332380191032">裝置管理服務已傳送 HTTP 錯誤。</translation>
@@ -860,7 +858,6 @@
 <translation id="1794051631868188691">永不顯示 <ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">請提供寶貴意見,協助我們修正此問題。</translation>
 <translation id="1795214765651529549">使用經典主題</translation>
-<translation id="1796105431091975902">選取 Ansible 腳本以新增</translation>
 <translation id="1796588414813960292">需要使用音訊的功能將無法運作</translation>
 <translation id="1797117170091578105">使用 Chromebook 鍵盤玩遊戲。您可為特定動作自訂按鍵。</translation>
 <translation id="1800502858278951817">沒有擴充程式要求讀取和變更 <ph name="SITE_NAME" /></translation>
@@ -925,6 +922,7 @@
 <translation id="1842766183094193446">您確定要啟用示範模式嗎?</translation>
 <translation id="1845727111305721124">已允許播放音效</translation>
 <translation id="1846308012215045257">按住 Ctrl 鍵並按一下即可執行 <ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">蓋上螢幕時登出帳戶</translation>
 <translation id="184862733444771842">功能要求</translation>
 <translation id="1849016657376805933">任何 HID 裝置</translation>
 <translation id="1849186935225320012">這個網頁可全權控制 MIDI 裝置。</translation>
@@ -1034,7 +1032,6 @@
 <translation id="1941553344801134989">版本:<ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">顯示對應鍵</translation>
 <translation id="1942128823046546853">讀取及變更您在所有網站上的所有資料</translation>
-<translation id="1942600407708803723">蓋上機蓋時關機</translation>
 <translation id="1944528062465413897">藍牙配對碼:</translation>
 <translation id="1944921356641260203">找到更新</translation>
 <translation id="1947136734041527201">讓您使用具有身分服務的帳戶來登入網站</translation>
@@ -2567,7 +2564,7 @@
 <translation id="3406290648907941085">已允許使用虛擬實境裝置和資料</translation>
 <translation id="3406396172897554194">按語言或輸入方法名稱搜尋</translation>
 <translation id="3406605057700382950">顯示書籤列(&amp;S)</translation>
-<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{已將 1 個密碼匯入 <ph name="USER_EMAIL" /> 的 Google 密碼管理工具}other{已將 {NUM_PASSWORDS} 個密碼匯入 <ph name="USER_EMAIL" /> 的 Google 密碼管理工具}}</translation>
+<translation id="3408849592677950451">{NUM_PASSWORDS,plural, =1{已將 1 個密碼匯入 <ph name="USER_EMAIL" /> 的「Google 密碼管理工具」}other{已將 {NUM_PASSWORDS} 個密碼匯入 <ph name="USER_EMAIL" /> 的「Google 密碼管理工具」}}</translation>
 <translation id="3409785640040772790">地圖</translation>
 <translation id="3412265149091626468">跳至所選範圍</translation>
 <translation id="3413122095806433232">CA 發行者:<ph name="LOCATION" /></translation>
@@ -3101,7 +3098,6 @@
 <translation id="389901847090970821">選取鍵盤</translation>
 <translation id="3900966090527141178">匯出密碼</translation>
 <translation id="3903187154317825986">內置鍵盤</translation>
-<translation id="3903191712482985591">新增腳本</translation>
 <translation id="3904326018476041253">定位服務</translation>
 <translation id="3904849010307028014">網站可根據您與網站的互動 (例如定期登入網站),向您的瀏覽器發出信任憑證。日後,如果您瀏覽的其他網站檢查並找到有效的信任憑證,則這些網站更有可能將您視為真人,而不是機器人。</translation>
 <translation id="3905761538810670789">修復應用程式</translation>
@@ -3753,7 +3749,7 @@
 <translation id="4541123282641193691">無法驗證您的帳戶,請再試一次,或重新啟動 Chromebook。</translation>
 <translation id="4541662893742891060">無法連線至此設定檔。如需技術支援,請聯絡您的流動網絡供應商。</translation>
 <translation id="4541706525461326392">正在移除設定檔。這項操作可能需時數分鐘。</translation>
-<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{已將 1 個密碼匯入到這部裝置的 Google 密碼管理工具}other{已將 {NUM_PASSWORDS} 個密碼匯入到這部裝置的 Google 密碼管理工具}}</translation>
+<translation id="4542332958571335077">{NUM_PASSWORDS,plural, =1{已將 1 個密碼匯入此裝置的「Google 密碼管理工具」}other{已將 {NUM_PASSWORDS} 個密碼匯入此裝置的「Google 密碼管理工具」}}</translation>
 <translation id="4542520061254486227">讀取您在 <ph name="WEBSITE_1" /> 和 <ph name="WEBSITE_2" /> 上的資料</translation>
 <translation id="4543778593405494224">憑證管理員</translation>
 <translation id="4544174279960331769">預設藍色圖片</translation>
@@ -5045,7 +5041,6 @@
 <translation id="5827733057563115968">下一字預測</translation>
 <translation id="5828545842856466741">新增設定檔…</translation>
 <translation id="5828633471261496623">列印中…</translation>
-<translation id="5828797982387013521">選取 Playbook</translation>
 <translation id="5830205393314753525">無法開啟「<ph name="APP_NAME" />」</translation>
 <translation id="5830720307094128296">另存網頁(&amp;A)…</translation>
 <translation id="5832813618714645810">設定檔</translation>
@@ -5937,7 +5932,6 @@
 <translation id="6686665106869989887">分頁移咗去右邊</translation>
 <translation id="6686817083349815241">儲存您的密碼</translation>
 <translation id="6687079240787935001">隱藏<ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">正在要求讀取並變更 <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">請<ph name="SUPERVISED_USER_NAME" />坐在電腦前。您的子女將朗讀此螢幕上的一些短句,藉此建立他們的語音模型。
     <ph name="BR" />
     如果<ph name="SUPERVISED_USER_NAME" />在朗讀過程中需要協助,請讓子女跟著您朗讀。您需要遠離麥克風並降低音量,這樣「Google 助理」才能學習辨識您子女的聲音,而非您的聲音。</translation>
@@ -6472,7 +6466,7 @@
 <translation id="720715819012336933">{NUM_PAGES,plural, =1{離開網頁}other{離開網頁}}</translation>
 <translation id="7207457272187520234">傳送使用情況和診斷資料。此裝置目前會自動將診斷、裝置及應用程式的使用情況資料傳送至 Google。這可協助改善系統及應用程式的穩定性及其他功能。部分彙整資料也會用於協助 Google 應用程式與合作夥伴 (例如 Android 開發人員)。擁有者可強制執行此設定。如果已開啟其他「網絡及應用程式活動記錄」設定,系統可能會將此資料儲存至您的 Google 帳戶。</translation>
 <translation id="7207631048330366454">搜尋應用程式</translation>
-<translation id="7210471695184432500">如要將密碼匯入這部裝置的 Google 密碼管理工具,請選取 CSV 檔案</translation>
+<translation id="7210471695184432500">如要將密碼匯入此裝置的「Google 密碼管理工具」,請選取 CSV 檔案</translation>
 <translation id="7210499381659830293">擴充程式打印機</translation>
 <translation id="7211783048245131419">未指派任何按鈕</translation>
 <translation id="7212097698621322584">請輸入目前的 PIN 以進行變更。如果您不知道自己的 PIN,請重設安全密鑰,然後建立新的 PIN。</translation>
@@ -7197,7 +7191,6 @@
 <translation id="7898725031477653577">永遠翻譯</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">要查看瀏覽器組件嗎?請前往</translation>
-<translation id="7903345046358933331">網頁沒有回應。您可以等待網頁回應或關閉網頁。</translation>
 <translation id="7903429136755645827">按一下即可自訂遊戲控制項</translation>
 <translation id="7903742244674067440">您的檔案具備可以識別這些憑證授權的憑證</translation>
 <translation id="7903925330883316394">程式:<ph name="UTILITY_TYPE" /></translation>
@@ -7533,7 +7526,7 @@
 <translation id="8206859287963243715">蜂窩</translation>
 <translation id="8208216423136871611">不要儲存</translation>
 <translation id="8210398899759134986">{MUTED_NOTIFICATIONS_COUNT,plural, =1{新通知}other{# 則新通知}}</translation>
-<translation id="821119981794423735">如要將密碼匯入到 <ph name="USER_EMAIL" /> 的 Google 密碼管理工具,請選取 CSV 檔案</translation>
+<translation id="821119981794423735">如要將密碼匯入 <ph name="USER_EMAIL" /> 的「Google 密碼管理工具」,請選取 CSV 檔案</translation>
 <translation id="8212008074015601248">{NUM_DOWNLOAD,plural, =1{正在進行一項下載}other{正在進行多項下載}}</translation>
 <translation id="8213449224684199188">進入咗相片模式</translation>
 <translation id="8214489666383623925">開啟檔案…</translation>
@@ -8112,6 +8105,7 @@
 <translation id="8780123805589053431">從 Google 取得圖片說明</translation>
 <translation id="8780443667474968681">語音搜尋功能已關閉。</translation>
 <translation id="8781834595282316166">在群組中新增分頁</translation>
+<translation id="8781980678064919987">蓋上螢幕時關機</translation>
 <translation id="8782565991310229362">Kiosk 應用程式已取消執行。</translation>
 <translation id="8783834180813871000">輸入藍牙配對碼,然後按返回鍵或 Enter 鍵。</translation>
 <translation id="8784626084144195648">二進位化平均</translation>
@@ -8176,7 +8170,6 @@
 <translation id="8846132060409673887">閱讀此電腦的生產商和型號資訊</translation>
 <translation id="8846163936679269230">重設 eSIM 設定檔</translation>
 <translation id="8846239054091760429">單聲道音效、啟動、即時字幕等等</translation>
-<translation id="8847523528195140327">蓋上機蓋時登出帳戶</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">隱藏</translation>
 <translation id="8849219423513870962">取消移除叫做「<ph name="PROFILE_NAME" />」嘅 eSIM 卡設定檔</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 325b786b..2a83555 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -560,7 +560,6 @@
 <translation id="1536754031901697553">正在中斷連線…</translation>
 <translation id="1537254971476575106">全螢幕放大鏡</translation>
 <translation id="15373452373711364">大型滑鼠游標</translation>
-<translation id="1539630663098418038">「<ph name="EXTENSIONS_REQUESTING_ACCESS" />」正在要求讀取及變更 <ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">啟用示範模式</translation>
 <translation id="1541346352678737112">找不到網路</translation>
 <translation id="1542137295869176367">無法更新你的登入資料</translation>
@@ -722,7 +721,6 @@
 <translation id="1676902103953506022">在 <ph name="DOMAIN" /> 上顯示 <ph name="USERNAME" /> 的憑證詳細資料</translation>
 <translation id="1677306805708094828">無法新增<ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> 後用盡</translation>
-<translation id="1678794218766467608">進入休眠模式或蓋上保護蓋時鎖定</translation>
 <translation id="1679068421605151609">開發人員工具</translation>
 <translation id="1679810534535368772">確定要離開嗎?</translation>
 <translation id="167983332380191032">管理服務傳回了 HTTP 錯誤。</translation>
@@ -850,7 +848,6 @@
 <translation id="1794051631868188691">永不顯示「<ph name="MERCHANT" />」</translation>
 <translation id="1794791083288629568">提供意見,協助我們修正這個問題。</translation>
 <translation id="1795214765651529549">使用傳統版</translation>
-<translation id="1796105431091975902">選取要新增的 Ansible Playbook</translation>
 <translation id="1796588414813960292">需要使用音訊的功能將無法運作</translation>
 <translation id="1797117170091578105">使用 Chromebook 鍵盤玩遊戲。你可以為特定動作自訂按鍵。</translation>
 <translation id="1800502858278951817">沒有任何擴充功能要求讀取及變更 <ph name="SITE_NAME" /> 的權限</translation>
@@ -915,6 +912,7 @@
 <translation id="1842766183094193446">確定要啟用示範模式嗎?</translation>
 <translation id="1845727111305721124">可以播放音效</translation>
 <translation id="1846308012215045257">按下 Ctrl 鍵並點選即可執行「<ph name="PLUGIN_NAME" />」</translation>
+<translation id="1848219224579402567">蓋上機蓋時登出帳戶</translation>
 <translation id="184862733444771842">功能要求</translation>
 <translation id="1849016657376805933">任何 HID 裝置</translation>
 <translation id="1849186935225320012">這個網頁可完整控制 MIDI 裝置。</translation>
@@ -1022,7 +1020,6 @@
 <translation id="1941553344801134989">版本:<ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">顯示機碼對應</translation>
 <translation id="1942128823046546853">讀取及變更你在所有網站上的所有資料</translation>
-<translation id="1942600407708803723">蓋上機蓋時關機</translation>
 <translation id="1944528062465413897">藍牙配對碼:</translation>
 <translation id="1944921356641260203">找到更新</translation>
 <translation id="1947136734041527201">讓你透過身分識別服務使用你擁有的帳戶登入網站</translation>
@@ -1711,6 +1708,7 @@
 <translation id="2568774940984945469">資訊列容器</translation>
 <translation id="2571655996835834626">變更設定來管理網站對 Cookie、JavaScript、外掛程式、地理位置、麥克風、相機等功能的存取權。</translation>
 <translation id="2572032849266859634">已授予 <ph name="VOLUME_NAME" /> 的唯讀權限。</translation>
+<translation id="2573276323521243649">離開顯示圖片選項頁面</translation>
 <translation id="2573417407488272418">升級前將應用程式和檔案備份至「檔案」&gt;「我的檔案」。</translation>
 <translation id="2573831315551295105">指派代表「<ph name="ACTION" />」的外接切換裝置</translation>
 <translation id="2575247648642144396">畫面上顯示這個圖示時,表示擴充功能可在目前網頁上運作。如要啟用這項擴充功能,請按一下圖示或按下 <ph name="EXTENSION_SHORTCUT" />。</translation>
@@ -3085,7 +3083,6 @@
 <translation id="389901847090970821">選取鍵盤</translation>
 <translation id="3900966090527141178">匯出密碼</translation>
 <translation id="3903187154317825986">內建鍵盤</translation>
-<translation id="3903191712482985591">新增 Playbook</translation>
 <translation id="3904326018476041253">定位服務</translation>
 <translation id="3904849010307028014">網站可根據你與網站的互動 (例如定期登入帳戶) 情形,核發信任權杖給你的瀏覽器。在此之後,假如你造訪的其他網站查看並找到有效的信任權杖,這些網站就較有可能會判斷你是真人,而非機器人。</translation>
 <translation id="3905761538810670789">修復應用程式</translation>
@@ -5027,7 +5024,6 @@
 <translation id="5827733057563115968">下一個字詞預測</translation>
 <translation id="5828545842856466741">新增設定檔...</translation>
 <translation id="5828633471261496623">列印中...</translation>
-<translation id="5828797982387013521">選取 Playbook</translation>
 <translation id="5830205393314753525">無法開啟「<ph name="APP_NAME" />」</translation>
 <translation id="5830720307094128296">另存網頁(&amp;A)...</translation>
 <translation id="5832813618714645810">設定檔</translation>
@@ -5918,7 +5914,6 @@
 <translation id="6686665106869989887">分頁已移動到右側</translation>
 <translation id="6686817083349815241">儲存你的密碼</translation>
 <translation id="6687079240787935001">隱藏「<ph name="MODULE_TITLE" />」</translation>
-<translation id="6688391094668641513">正在要求讀取及變更 <ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">請<ph name="SUPERVISED_USER_NAME" />坐到電腦前。你的孩子將朗讀螢幕畫面上的一些短句,藉此建立他們的語音模型。
     <ph name="BR" />
     如果<ph name="SUPERVISED_USER_NAME" />在朗讀過程中需要協助,請讓孩子跟著你朗讀。你必須遠離麥克風並降低音量,這樣 Google 助理才能學習辨識你孩子的聲音,而非你的聲音。</translation>
@@ -6400,6 +6395,7 @@
 <translation id="7138678301420049075">其他</translation>
 <translation id="7139627972753429585">「<ph name="APP_NAME" />」正在使用麥克風</translation>
 <translation id="7141105143012495934">無法擷取您的帳戶詳細資料,導致登入失敗。請與您的管理員聯絡或再試一次。</translation>
+<translation id="7141844554192012199">安全檢查</translation>
 <translation id="7144878232160441200">重試</translation>
 <translation id="7149839598364933473">在這部裝置上安裝 <ph name="DEVICE_OS" />。</translation>
 <translation id="7149893636342594995">過去 24 小時</translation>
@@ -7177,7 +7173,6 @@
 <translation id="7898725031477653577">一律翻譯</translation>
 <translation id="7901405293566323524">Phone Hub</translation>
 <translation id="7903290522161827520">要查看瀏覽器元件嗎?請前往</translation>
-<translation id="7903345046358933331">網頁無回應。您可以等待網頁回應,或是直接關閉網頁。</translation>
 <translation id="7903429136755645827">按一下即可自訂遊戲控制項</translation>
 <translation id="7903742244674067440">您儲存了這些憑證授權單位的識別憑證</translation>
 <translation id="7903925330883316394">公用程式:<ph name="UTILITY_TYPE" /></translation>
@@ -8092,6 +8087,7 @@
 <translation id="8780123805589053431">從 Google 取得圖片說明</translation>
 <translation id="8780443667474968681">語音搜尋功能已停用。</translation>
 <translation id="8781834595282316166">在群組中新增分頁</translation>
+<translation id="8781980678064919987">蓋上機蓋時關機</translation>
 <translation id="8782565991310229362">Kiosk 應用程式已取消執行。</translation>
 <translation id="8783834180813871000">輸入藍牙配對碼,然後按下返回鍵或 Enter 鍵。</translation>
 <translation id="8784626084144195648">二進位化平均</translation>
@@ -8156,7 +8152,6 @@
 <translation id="8846132060409673887">閱讀這部電腦的製造商和型號資訊</translation>
 <translation id="8846163936679269230">重設 eSIM 卡設定檔</translation>
 <translation id="8846239054091760429">單聲道音訊、啟動、即時字幕等</translation>
-<translation id="8847523528195140327">蓋上機蓋時登出帳戶</translation>
 <translation id="8847988622838149491">USB</translation>
 <translation id="8849001918648564819">隱藏</translation>
 <translation id="8849219423513870962">取消移除名為「<ph name="PROFILE_NAME" />」的 eSIM 卡設定檔</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb
index 1d33575..dcfc2eff 100644
--- a/chrome/app/resources/generated_resources_zu.xtb
+++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -562,7 +562,6 @@
 <translation id="1536754031901697553">Iyanqamula...</translation>
 <translation id="1537254971476575106">Isikhulisi sesikrini esigcwele</translation>
 <translation id="15373452373711364">Isikhombisi esikhulu segundane</translation>
-<translation id="1539630663098418038">I-<ph name="EXTENSIONS_REQUESTING_ACCESS" /> icela ukufunda nokushintsha i-<ph name="ORIGIN" /></translation>
 <translation id="1540605929960647700">Nika amandla imodi yedemo</translation>
 <translation id="1541346352678737112">Ayikho inethiwekhi etholakele</translation>
 <translation id="1542137295869176367">Idatha yakho yokungena ngemvume ayikwazanga ukubuyekezwa</translation>
@@ -724,7 +723,6 @@
 <translation id="1676902103953506022">Imininingwane yezimfanelo zika-<ph name="USERNAME" /> ku-<ph name="DOMAIN" /></translation>
 <translation id="1677306805708094828">Ayikwazi ukwengeza i-<ph name="EXTENSION_TYPE_PARAMETER" /></translation>
 <translation id="1677472565718498478"><ph name="TIME" /> esele</translation>
-<translation id="1678794218766467608">Khiya kwimodi yokulala noma lapho ikhava ivaliwe</translation>
 <translation id="1679068421605151609">Amathuluzi wonjiniyela</translation>
 <translation id="1679810534535368772">Ingabe uqinisekile ukuthi ufuna ukuphuma?</translation>
 <translation id="167983332380191032">Isevisi yokuphatha ithumele iphutha le-HTTP.</translation>
@@ -860,7 +858,6 @@
 <translation id="1794051631868188691">Ungabonisi neze i-<ph name="MERCHANT" /></translation>
 <translation id="1794791083288629568">Thumela impendulo ukuze usisize silungise le nkinga.</translation>
 <translation id="1795214765651529549">Sebenzisa okwakudala</translation>
-<translation id="1796105431091975902">Khetha i-Ansible Playbook ozoyengeza</translation>
 <translation id="1796588414813960292">Izakhi ezidinga umsindo ngeke zisebenze</translation>
 <translation id="1797117170091578105">Dlala usebenzisa ikhibhodi yakho ye-Chromebook. Ungakwazi ukwenza ngendlela oyifisayo okhiye ezenzweni ezithile.</translation>
 <translation id="1800502858278951817">Azikho izandiso ezicele ukufunda nokushintsha i-<ph name="SITE_NAME" /></translation>
@@ -925,6 +922,7 @@
 <translation id="1842766183094193446">Ingabe uqinisekile ukuthi ufuna ukunika amandla imodi yedemo?</translation>
 <translation id="1845727111305721124">Ivumelekile ukudlala umsindo</translation>
 <translation id="1846308012215045257">Chofoza-ulawule ukuze uqalise i-<ph name="PLUGIN_NAME" /></translation>
+<translation id="1848219224579402567">Phuma uma i-lid ivaliwe</translation>
 <translation id="184862733444771842">Isicelo sesici</translation>
 <translation id="1849016657376805933">Noma iyiphi idivayisi ye-HID</translation>
 <translation id="1849186935225320012">Leli khasi linokulawula okugcwele kwamadivayisi we-MIDI.</translation>
@@ -1033,7 +1031,6 @@
 <translation id="1941553344801134989">Uhlobo: <ph name="APP_VERSION" /></translation>
 <translation id="1941995177877935582">Bonisa ukumepha kokhiye</translation>
 <translation id="1942128823046546853">Funda futhi ushintshe yonke idatha yakho kuwo wonke amawebhusayithi</translation>
-<translation id="1942600407708803723">Vala uma ikhava ivaliwe</translation>
 <translation id="1944528062465413897">Ikhodi yokumatanisa ye-Bluetooth:</translation>
 <translation id="1944921356641260203">Isibuyekezo sitholakale</translation>
 <translation id="1947136734041527201">Ikuvumela ukuthi ungene ngemvume kumawebhusayithi usebenzisa i-akhawunti onayo enesevisi kamazisi</translation>
@@ -3102,7 +3099,6 @@
 <translation id="389901847090970821">Khetha ikhibhodi</translation>
 <translation id="3900966090527141178">Thumela amaphasiwedi</translation>
 <translation id="3903187154317825986">Ikhibhodi eyakhelwe ngaphakathi</translation>
-<translation id="3903191712482985591">Engeza i-playbook</translation>
 <translation id="3904326018476041253">Amasevisi Endawo</translation>
 <translation id="3904849010307028014">Ngokusekelwe ekusebenzelaneni kwakho nesayithi, njengokungena njalo ku-akhawunti, lelo sayithi lingakhipha ithokheni yokwethenjwa kwibhrawuza yakho. Kamuva, uma amanye amasayithi owavakashelayo ehlola futhi ethola ithokheni elivumelekile lokwethenjwa, maningi amathuba okuthi akuphathe njengomuntu hhayi i-bot.</translation>
 <translation id="3905761538810670789">Lungisa uhlelo lokusebenza</translation>
@@ -5050,7 +5046,6 @@
 <translation id="5827733057563115968">Ukuqagela kwegama elilandelayo</translation>
 <translation id="5828545842856466741">Engeza iphrofayela...</translation>
 <translation id="5828633471261496623">Iyaphrinta...</translation>
-<translation id="5828797982387013521">Khetha i-playbook</translation>
 <translation id="5830205393314753525">Ayikwazi ukuvula i-<ph name="APP_NAME" /></translation>
 <translation id="5830720307094128296">Londoloza ikhasi njenge...</translation>
 <translation id="5832813618714645810">Amaphrofayela</translation>
@@ -5944,7 +5939,6 @@
 <translation id="6686665106869989887">Ithebhu ishone ngakwesokudla</translation>
 <translation id="6686817083349815241">Londoloza iphasiwedi yakho</translation>
 <translation id="6687079240787935001">Fihla i-<ph name="MODULE_TITLE" /></translation>
-<translation id="6688391094668641513">Icela ukufunda nokushintsha i-<ph name="ORIGIN" />:</translation>
 <translation id="6689714331348768690">Cela u-<ph name="SUPERVISED_USER_NAME" /> aze kukhompuyutha. Ingane yakho izofunda imishwana embalwa kulesi skrini ukuze idale imodeli yezwi layo.
     <ph name="BR" />
     Uma u-<ph name="SUPERVISED_USER_NAME" /> edinga usizo ngokufunda, tshela ingane yakho ukuthi iphinde lokho okushoyo. Hleba ukude nemakrofoni ukuze Umsizi azi izwi lengane yakho esikhundleni selakho.</translation>
@@ -7203,7 +7197,6 @@
 <translation id="7898725031477653577">Humusha njalo</translation>
 <translation id="7901405293566323524">Ihabhu Yefoni</translation>
 <translation id="7903290522161827520">Ufuna izingxenye ze-browser? Vakashela</translation>
-<translation id="7903345046358933331">Ikhasi alisaphenduli. Ungalilinda ukuthi liphendule noma ulivale.</translation>
 <translation id="7903429136755645827">Chofoza ukuze wenze ngendlela oyifisayo izilawuli zegeyimu yakho</translation>
 <translation id="7903742244674067440">Unezitifiketi kufayela ezikhomba lokhu kugunyazwa kwesitifiketi</translation>
 <translation id="7903925330883316394">Okusetshenziswayo: <ph name="UTILITY_TYPE" /></translation>
@@ -8118,6 +8111,7 @@
 <translation id="8780123805589053431">Thola izincazelo zesithombe kusuka ku-Google</translation>
 <translation id="8780443667474968681">Usesho lezwi luvaliwe.</translation>
 <translation id="8781834595282316166">Ithebhu entsha kuqembu</translation>
+<translation id="8781980678064919987">Vala uma i-lid ivalekile</translation>
 <translation id="8782565991310229362">Ukuqaliswa kohlelo lokusebenza lwekhiyoski kukhanseliwe.</translation>
 <translation id="8783834180813871000">Thayipha ikhodi yokumatanisa ye-bluetooth bese ucindezela okuthi Buyela noma Enter</translation>
 <translation id="8784626084144195648">Imaphakathi elibhiniwe</translation>
@@ -8182,7 +8176,6 @@
 <translation id="8846132060409673887">Funda umkhiqizi nemodeli yale khompuyutha</translation>
 <translation id="8846163936679269230">Setha kabusha amaphrofayela we-eSIM</translation>
 <translation id="8846239054091760429">Umsindo we-Mono, ukuqalisa, Okushuthwe Bukhoma, nokuningi</translation>
-<translation id="8847523528195140327">Phuma ngemvume uma ikhava ivaliwe</translation>
 <translation id="8847988622838149491">I-USB</translation>
 <translation id="8849001918648564819">Ifihliwe</translation>
 <translation id="8849219423513870962">Khansela ukukhishwa kwephrofayela ye-eSIM ebizwa <ph name="PROFILE_NAME" /></translation>
diff --git a/chrome/app/resources/google_chrome_strings_sq.xtb b/chrome/app/resources/google_chrome_strings_sq.xtb
index c3615f8..8f336c06 100644
--- a/chrome/app/resources/google_chrome_strings_sq.xtb
+++ b/chrome/app/resources/google_chrome_strings_sq.xtb
@@ -260,7 +260,7 @@
 <translation id="6169866489629082767"><ph name="PAGE_TITLE" /> - Google Chrome</translation>
 <translation id="6173637689840186878"><ph name="PAGE_TITLE" /> - Google Chrome Beta</translation>
 <translation id="6235018212288296708">Rregulli hyrës për Google Chrome për të lejuar trafikun mDNS.</translation>
-<translation id="6247557882553405851">"Menaxheri i fjalëkalimeve" i Google</translation>
+<translation id="6247557882553405851">Menaxheri i fjalëkalimeve i Google</translation>
 <translation id="6273793429163604305">Përgatitu…</translation>
 <translation id="6291089322031436445">Aplikacionet e Chrome Dev</translation>
 <translation id="6291549208091401781">Google Chrome është i instaluar tashmë për të gjithë përdoruesit në kompjuterin tënd.</translation>
@@ -269,7 +269,7 @@
 <translation id="6418662306461808273">Të kalohet te profili ekzistues i Chrome?</translation>
 <translation id="6506909944137591434">Chrome ka nevojë për lejen e kamerës për të krijuar një hartë 3D të ambientit tënd rrethues</translation>
 <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome Dev</translation>
-<translation id="659498884637196217">Në "Menaxherin e fjalëkalimeve" të Google në këtë pajisje</translation>
+<translation id="659498884637196217">Në "Menaxherin e fjalëkalimeve të Google" në këtë pajisje</translation>
 <translation id="6632473616050862500">Chrome OS Flex mundësohet nga<ph name="BEGIN_LINK_CROS_OSS" />softuerë shtesë me burim të hapur<ph name="END_LINK_CROS_OSS" />.</translation>
 <translation id="6676384891291319759">Qasu në internet</translation>
 <translation id="6679975945624592337">Lejo që Google Chrome të ekzekutohet në sfond</translation>
@@ -342,7 +342,7 @@
 <translation id="7930071585467473040">Google Chrome po përpiqet të kopjojë fjalëkalimet.</translation>
 <translation id="7951272445806340501">Chrome OS Flex ka nevojë të riniset për të zbatuar përditësimin.</translation>
 <translation id="7962410387636238736">Ky kompjuter nuk do të marrë më përditësime të Google Chrome sepse Windows XP dhe Windows Vista nuk mbështeten më</translation>
-<translation id="8005666035647241369">Te "Menaxheri i fjalëkalimeve" të Google në këtë pajisje</translation>
+<translation id="8005666035647241369">Te "Menaxheri i fjalëkalimeve të Google" në këtë pajisje</translation>
 <translation id="8008534537613507642">Instalo përsëri Chrome</translation>
 <translation id="8013993649590906847">Nëse një imazh nuk ka një përshkrim të dobishëm, Chrome do të përpiqet të të japë një përshkrim. Për të krijuar përshkrime, imazhet dërgohen te Google.</translation>
 <translation id="80471789339884597">Faleminderit që e instalove. Duhet të rinisësh të gjithë shfletuesit e tu përpara se të përdorësh <ph name="BUNDLE_NAME" />.</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp
index 0bc14d6..97af981e 100644
--- a/chrome/app/settings_strings.grdp
+++ b/chrome/app/settings_strings.grdp
@@ -652,6 +652,17 @@
   <message name="IDS_SETTINGS_PASSWORDS_NOTE_CHARACTER_COUNT_WARNING" desc="Warning for the password note when the user exceeds or is about to exceed the character limit.">
     Notes can save up to <ph name="CHARACTER_LIMIT">$1<ex>1000</ex></ph> characters.
   </message>
+  <message name="IDS_SETTINGS_PASSWORDS_TIMED_OUT" desc="Title for the dialog which shows when the password manager authentication is expired.">
+    Passwords timed out
+  </message>
+  <message name="IDS_SETTINGS_PASSWORDS_TIMED_OUT_DESCRIPTION" desc="Body text for the dialog which shows when the password manager authentication is expired.">
+    {NUM_MINS, plural,
+     =1 {To keep your passwords safe, Google Password Manager locks after 1 minute of inactivity}
+     other {To keep your passwords safe, Google Password Manager locks after {NUM_MINS} minutes of inactivity}}
+  </message>
+  <message name="IDS_SETTINGS_GOT_IT" desc="Label for the button to acknowledge the information in a dialog and dismiss it.">
+    Got it
+  </message>
   <message name="IDS_SETTINGS_ADDRESS_NONE" desc="Placeholder that is shown when there are no addresses in the list of saved addresses.">
     Saved addresses will appear here
   </message>
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_GOT_IT.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_GOT_IT.png.sha1
new file mode 100644
index 0000000..1fc511c
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_GOT_IT.png.sha1
@@ -0,0 +1 @@
+90a12cdc8052a28864491b9c599e92996ada5854
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_TIMED_OUT.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_TIMED_OUT.png.sha1
new file mode 100644
index 0000000..1fc511c
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_TIMED_OUT.png.sha1
@@ -0,0 +1 @@
+90a12cdc8052a28864491b9c599e92996ada5854
\ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_TIMED_OUT_DESCRIPTION.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_TIMED_OUT_DESCRIPTION.png.sha1
new file mode 100644
index 0000000..1fc511c
--- /dev/null
+++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_PASSWORDS_TIMED_OUT_DESCRIPTION.png.sha1
@@ -0,0 +1 @@
+90a12cdc8052a28864491b9c599e92996ada5854
\ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index fb18fec6..4df6bc5 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -6305,6 +6305,10 @@
       "enterprise/chrome_browser_main_extra_parts_enterprise.h",
       "enterprise/connectors/analysis/content_analysis_sdk_manager.cc",
       "enterprise/connectors/analysis/content_analysis_sdk_manager.h",
+      "enterprise/connectors/analysis/fake_content_analysis_sdk_client.cc",
+      "enterprise/connectors/analysis/fake_content_analysis_sdk_client.h",
+      "enterprise/connectors/analysis/fake_content_analysis_sdk_manager.cc",
+      "enterprise/connectors/analysis/fake_content_analysis_sdk_manager.h",
       "enterprise/connectors/analysis/local_binary_upload_service.cc",
       "enterprise/connectors/analysis/local_binary_upload_service.h",
       "enterprise/connectors/analysis/local_binary_upload_service_factory.cc",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index d9fcdbf..13c6173 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -777,15 +777,22 @@
 };
 
 const FeatureEntry::FeatureParam kCriticalPersistedTabDataSaveAndRestore[] = {
-    {"critical_persisted_tab_data_save_only", "false"}};
+    {"critical_persisted_tab_data_save_only", "false"},
+    {"delay_saves_until_deferred_startup", "false"}};
 const FeatureEntry::FeatureParam kCriticalPersistedTabDataSaveOnly[] = {
-    {"critical_persisted_tab_data_save_only", "true"}};
+    {"critical_persisted_tab_data_save_only", "true"},
+    {"delay_saves_until_deferred_startup", "false"}};
+const FeatureEntry::FeatureParam kDelaySavesUntilDeferredStartup[] = {
+    {"critical_persisted_tab_data_save_only", "false"},
+    {"delay_saves_until_deferred_startup", "true"}};
 
 const FeatureEntry::FeatureVariation kCriticalPersistedTabDataVariations[] = {
     {"Save and Restore", kCriticalPersistedTabDataSaveAndRestore,
      std::size(kCriticalPersistedTabDataSaveAndRestore), nullptr},
     {"Save Only", kCriticalPersistedTabDataSaveOnly,
-     std::size(kCriticalPersistedTabDataSaveOnly), nullptr}};
+     std::size(kCriticalPersistedTabDataSaveOnly), nullptr},
+    {"Delay saves until DeferredStartup", kDelaySavesUntilDeferredStartup,
+     std::size(kDelaySavesUntilDeferredStartup), nullptr}};
 
 const FeatureEntry::FeatureParam kLongScreenshot_AutoscrollDragSlow[] = {
     {"autoscroll", "1"}};
diff --git a/chrome/browser/android/customtabs/origin_verifier.cc b/chrome/browser/android/customtabs/origin_verifier.cc
index d06e031..3c0bd06 100644
--- a/chrome/browser/android/customtabs/origin_verifier.cc
+++ b/chrome/browser/android/customtabs/origin_verifier.cc
@@ -53,7 +53,9 @@
     return false;
 
   std::string package_name = ConvertJavaStringToUTF8(env, j_package_name);
-  std::string fingerprint = ConvertJavaStringToUTF8(env, j_fingerprint);
+  // TODO(swestphal): pass all fingerprints for verification.
+  std::vector<std::string> fingerprints{
+      ConvertJavaStringToUTF8(env, j_fingerprint)};
   std::string origin = ConvertJavaStringToUTF8(env, j_origin);
   std::string relationship = ConvertJavaStringToUTF8(env, j_relationship);
 
@@ -66,7 +68,7 @@
   auto* asset_link_handler_ptr = asset_link_handler.get();
 
   return asset_link_handler_ptr->CheckDigitalAssetLinkRelationshipForAndroidApp(
-      origin, relationship, fingerprint, package_name,
+      origin, relationship, std::move(fingerprints), package_name,
       base::BindOnce(&customtabs::OriginVerifier::OnRelationshipCheckComplete,
                      base::Unretained(this), std::move(asset_link_handler),
                      origin));
diff --git a/chrome/browser/android/historical_tab_saver.cc b/chrome/browser/android/historical_tab_saver.cc
index e484319e..e1f62d7 100644
--- a/chrome/browser/android/historical_tab_saver.cc
+++ b/chrome/browser/android/historical_tab_saver.cc
@@ -17,6 +17,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
 #include "chrome/browser/sessions/tab_restore_service_factory.h"
+#include "chrome/browser/tab/web_contents_state.h"
 #include "chrome/browser/ui/android/tab_model/android_live_tab_context_wrapper.h"
 #include "chrome/browser/ui/android/tab_model/tab_model.h"
 #include "chrome/browser/ui/android/tab_model/tab_model_list.h"
@@ -35,12 +36,15 @@
 // Defined in TabGroupModelFilter.java
 constexpr int kInvalidGroupId = -1;
 
-void CreateHistoricalTab(TabAndroid* tab_android) {
+void CreateHistoricalTab(
+    TabAndroid* tab_android,
+    WebContentsStateByteBuffer web_contents_state_byte_buffer) {
   if (!tab_android) {
     return;
   }
 
-  auto scoped_web_contents = ScopedWebContents::CreateForTab(tab_android);
+  auto scoped_web_contents = ScopedWebContents::CreateForTab(
+      tab_android, &web_contents_state_byte_buffer);
   if (!scoped_web_contents->web_contents()) {
     return;
   }
@@ -58,9 +62,11 @@
                                /*index=*/-1);
 }
 
-void CreateHistoricalGroup(TabModel* model,
-                           const std::u16string& group_title,
-                           std::vector<TabAndroid*> tabs) {
+void CreateHistoricalGroup(
+    TabModel* model,
+    const std::u16string& group_title,
+    std::vector<TabAndroid*> tabs,
+    std::vector<WebContentsStateByteBuffer> web_contents_state) {
   DCHECK(model);
   sessions::TabRestoreService* service =
       TabRestoreServiceFactory::GetForProfile(model->GetProfile());
@@ -79,17 +85,20 @@
       model, std::move(tabs), std::move(tab_id_to_group_id),
       std::map<tab_groups::TabGroupId, tab_groups::TabGroupVisualData>(
           {{group_id,
-            tab_groups::TabGroupVisualData(group_title, /*color=*/0)}}));
+            tab_groups::TabGroupVisualData(group_title, /*color_int=*/0)}}),
+      std::move(web_contents_state));
 
   service->CreateHistoricalGroup(&context, group_id);
   service->GroupClosed(group_id);
 }
 
-void CreateHistoricalBulkClosure(TabModel* model,
-                                 std::vector<int> android_group_ids,
-                                 std::vector<std::u16string> group_titles,
-                                 std::vector<int> per_tab_android_group_id,
-                                 std::vector<TabAndroid*> tabs) {
+void CreateHistoricalBulkClosure(
+    TabModel* model,
+    std::vector<int> android_group_ids,
+    std::vector<std::u16string> group_titles,
+    std::vector<int> per_tab_android_group_id,
+    std::vector<TabAndroid*> tabs,
+    std::vector<WebContentsStateByteBuffer> web_contents_state) {
   DCHECK(model);
   DCHECK_EQ(android_group_ids.size(), group_titles.size());
   DCHECK_EQ(per_tab_android_group_id.size(), tabs.size());
@@ -120,7 +129,8 @@
     group_id_mapping.insert({android_group_id, new_id});
 
     const std::u16string title = group_titles[i];
-    native_groups[new_id] = tab_groups::TabGroupVisualData(title, /*color=*/0);
+    native_groups[new_id] =
+        tab_groups::TabGroupVisualData(title, /*color_int=*/0);
   }
 
   // Map Android Tabs by ID to their new native tab_group::TabGroupId.
@@ -136,53 +146,93 @@
     }
   }
 
-  AndroidLiveTabContextCloseWrapper context(model, std::move(tabs),
-                                            std::move(tab_id_to_group_id),
-                                            std::move(native_groups));
+  AndroidLiveTabContextCloseWrapper context(
+      model, std::move(tabs), std::move(tab_id_to_group_id),
+      std::move(native_groups), std::move(web_contents_state));
   service->BrowserClosing(&context);
   service->BrowserClosed(&context);
 }
 
 }  // namespace
 
-ScopedWebContents::ScopedWebContents(content::WebContents* web_contents,
-                                     bool was_frozen)
-    : web_contents_(web_contents), was_frozen_(was_frozen) {}
+ScopedWebContents::ScopedWebContents(content::WebContents* unowned_web_contents)
+    : unowned_web_contents_(unowned_web_contents),
+      owned_web_contents_(nullptr) {}
+ScopedWebContents::ScopedWebContents(
+    std::unique_ptr<content::WebContents> owned_web_contents)
+    : unowned_web_contents_(nullptr),
+      owned_web_contents_(std::move(owned_web_contents)) {}
 
-ScopedWebContents::~ScopedWebContents() {
-  if (was_frozen_ && web_contents_) {
-    JNIEnv* env = base::android::AttachCurrentThread();
-    Java_HistoricalTabSaverImpl_destroyTemporaryWebContents(
-        env, web_contents_->GetJavaWebContents());
+ScopedWebContents::~ScopedWebContents() = default;
+
+content::WebContents* ScopedWebContents::web_contents() const {
+  if (!unowned_web_contents_) {
+    return owned_web_contents_.get();
+  } else {
+    return unowned_web_contents_;
   }
 }
 
 // static
 std::unique_ptr<ScopedWebContents> ScopedWebContents::CreateForTab(
-    TabAndroid* tab) {
-  bool was_frozen = false;
-  content::WebContents* contents = tab->web_contents();
-  if (!contents) {
-    JNIEnv* env = base::android::AttachCurrentThread();
-    contents = content::WebContents::FromJavaWebContents(
-        Java_HistoricalTabSaverImpl_createTemporaryWebContents(
-            env, tab->GetJavaObject()));
-    was_frozen = true;
-    // Fallback to an empty web contents in the event state restoration
-    // fails. This will just not be added to the TabRestoreService.
-    if (!contents) {
-      // This is only called on non-incognito pathways.
-      CHECK(!tab->IsIncognito());
-
-      Profile* profile = ProfileManager::GetActiveUserProfile();
-      content::WebContents::CreateParams params(profile);
-      params.initially_hidden = true;
-      params.desired_renderer_state =
-          content::WebContents::CreateParams::kNoRendererProcess;
-      contents = content::WebContents::Create(params).release();
+    TabAndroid* tab,
+    const WebContentsStateByteBuffer* web_contents_state) {
+  if (tab->web_contents()) {
+    return std::make_unique<ScopedWebContents>(tab->web_contents());
+  }
+  if (web_contents_state->state_version != -1) {
+    auto native_contents = WebContentsState::RestoreContentsFromByteBuffer(
+        const_cast<void*>(web_contents_state->byte_buffer.data()),
+        web_contents_state->byte_buffer.size(),
+        web_contents_state->state_version, true, false);
+    if (native_contents) {
+      return std::make_unique<ScopedWebContents>(std::move(native_contents));
     }
   }
-  return base::WrapUnique(new ScopedWebContents(contents, was_frozen));
+  // Fallback to an empty web contents in the event state restoration
+  // fails. This will just not be added to the TabRestoreService.
+  // This is only called on non-incognito pathways.
+  CHECK(!tab->IsIncognito());
+
+  Profile* profile = ProfileManager::GetActiveUserProfile();
+  content::WebContents::CreateParams params(profile);
+  params.initially_hidden = true;
+  params.desired_renderer_state =
+      content::WebContents::CreateParams::kNoRendererProcess;
+  return std::make_unique<ScopedWebContents>(
+      content::WebContents::Create(params));
+}
+
+WebContentsStateByteBuffer::WebContentsStateByteBuffer() = default;
+WebContentsStateByteBuffer::WebContentsStateByteBuffer(void* data,
+                                                       int size,
+                                                       int saved_state_version)
+    : byte_buffer(static_cast<char*>(data), size),
+      state_version(saved_state_version) {}
+WebContentsStateByteBuffer::~WebContentsStateByteBuffer() = default;
+
+// static
+static std::vector<WebContentsStateByteBuffer>
+AllTabsWebContentsStateByteBuffer(
+    JNIEnv* env,
+    const JavaParamRef<jobjectArray>& jbyte_buffers,
+    const JavaParamRef<jintArray>& jsaved_state_versions) {
+  std::vector<int> saved_state_versions;
+  base::android::JavaIntArrayToIntVector(env, jsaved_state_versions,
+                                         &saved_state_versions);
+  int jbyte_buffers_count = env->GetArrayLength(jbyte_buffers);
+  std::vector<WebContentsStateByteBuffer> web_contents_states(
+      jbyte_buffers_count);
+
+  for (int i = 0; i < jbyte_buffers_count; ++i) {
+    web_contents_states[i] = WebContentsStateByteBuffer(
+        env->GetDirectBufferAddress(
+            env->GetObjectArrayElement(jbyte_buffers, i)),
+        env->GetDirectBufferCapacity(
+            env->GetObjectArrayElement(jbyte_buffers, i)),
+        saved_state_versions[i]);
+  }
+  return web_contents_states;
 }
 
 // Static JNI methods.
@@ -190,8 +240,16 @@
 // static
 static void JNI_HistoricalTabSaverImpl_CreateHistoricalTab(
     JNIEnv* env,
-    const JavaParamRef<jobject>& jtab_android) {
-  CreateHistoricalTab(TabAndroid::GetNativeTab(env, jtab_android));
+    const JavaParamRef<jobject>& jtab_android,
+    const JavaParamRef<jobject>& state,
+    jint saved_state_version) {
+  void* data = env->GetDirectBufferAddress(state);
+  int size = env->GetDirectBufferCapacity(state);
+
+  WebContentsStateByteBuffer web_contents_state =
+      WebContentsStateByteBuffer(data, size, (int)saved_state_version);
+  CreateHistoricalTab(TabAndroid::GetNativeTab(env, jtab_android),
+                      std::move(web_contents_state));
 }
 
 // static
@@ -199,13 +257,23 @@
     JNIEnv* env,
     const JavaParamRef<jobject>& jtab_model,
     const JavaParamRef<jstring>& jtitle,
-    const JavaParamRef<jobjectArray>& jtabs_android) {
+    const JavaParamRef<jobjectArray>& jtabs_android,
+    const JavaParamRef<jobjectArray>& jbyte_buffers,
+    const JavaParamRef<jintArray>& jsaved_state_versions) {
   std::u16string title = base::android::ConvertJavaStringToUTF16(env, jtitle);
   auto tabs_android = TabAndroid::GetAllNativeTabs(
       env, base::android::ScopedJavaLocalRef(jtabs_android));
+  int tabs_android_count = env->GetArrayLength(jtabs_android);
+  DCHECK_EQ(tabs_android_count, env->GetArrayLength(jbyte_buffers));
+  DCHECK_EQ(tabs_android_count, env->GetArrayLength(jsaved_state_versions));
+
+  std::vector<WebContentsStateByteBuffer> web_contents_states =
+      AllTabsWebContentsStateByteBuffer(env, jbyte_buffers,
+                                        jsaved_state_versions);
   CreateHistoricalGroup(TabModelList::FindNativeTabModelForJavaObject(
                             ScopedJavaLocalRef<jobject>(env, jtab_model.obj())),
-                        title, std::move(tabs_android));
+                        title, std::move(tabs_android),
+                        std::move(web_contents_states));
 }
 
 // static
@@ -215,7 +283,9 @@
     const JavaParamRef<jintArray>& jandroid_group_ids,
     const JavaParamRef<jobjectArray>& jgroup_titles,
     const JavaParamRef<jintArray>& jper_tab_android_group_id,
-    const JavaParamRef<jobjectArray>& jtabs_android) {
+    const JavaParamRef<jobjectArray>& jtabs_android,
+    const JavaParamRef<jobjectArray>& jbyte_buffers,
+    const JavaParamRef<jintArray>& jsaved_state_versions) {
   std::vector<int> android_group_ids;
   base::android::JavaIntArrayToIntVector(env, jandroid_group_ids,
                                          &android_group_ids);
@@ -225,14 +295,21 @@
   std::vector<int> per_tab_android_group_id;
   base::android::JavaIntArrayToIntVector(env, jper_tab_android_group_id,
                                          &per_tab_android_group_id);
+  int tabs_android_count = env->GetArrayLength(jtabs_android);
+  DCHECK_EQ(tabs_android_count, env->GetArrayLength(jbyte_buffers));
+  DCHECK_EQ(tabs_android_count, env->GetArrayLength(jsaved_state_versions));
 
+  std::vector<WebContentsStateByteBuffer> web_contents_states =
+      AllTabsWebContentsStateByteBuffer(env, jbyte_buffers,
+                                        jsaved_state_versions);
   CreateHistoricalBulkClosure(
       TabModelList::FindNativeTabModelForJavaObject(
           ScopedJavaLocalRef<jobject>(env, jtab_model.obj())),
       std::move(android_group_ids), std::move(group_titles),
       std::move(per_tab_android_group_id),
       TabAndroid::GetAllNativeTabs(
-          env, base::android::ScopedJavaLocalRef(jtabs_android)));
+          env, base::android::ScopedJavaLocalRef(jtabs_android)),
+      std::move(web_contents_states));
 }
 
 }  // namespace historical_tab_saver
diff --git a/chrome/browser/android/historical_tab_saver.h b/chrome/browser/android/historical_tab_saver.h
index 69cfadd0..3d0d5ca 100644
--- a/chrome/browser/android/historical_tab_saver.h
+++ b/chrome/browser/android/historical_tab_saver.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "base/memory/raw_ptr.h"
+#include "base/pickle.h"
 
 class TabAndroid;
 namespace content {
@@ -16,6 +17,22 @@
 
 namespace historical_tab_saver {
 
+// A struct to store the WebContentsState passed down from the JNI to be
+// potentially used in restoring a frozen tab, as a byte buffer.
+struct WebContentsStateByteBuffer {
+  WebContentsStateByteBuffer();
+  ~WebContentsStateByteBuffer();
+  /**
+   * @param data WebContentsState data stored as a byte buffer.
+   * @param size Byte buffer size.
+   * @param saved_state_version Saved state version of the WebContentsState.
+   */
+  WebContentsStateByteBuffer(void* data, int size, int saved_state_version);
+
+  base::Pickle byte_buffer;
+  int state_version;
+};
+
 // A wrapper to manage a web contents of a possibly frozen tab.
 class ScopedWebContents {
  public:
@@ -24,20 +41,24 @@
   // temporary one will be created from the frozen tab's WebContentsState. If
   // the WebContents was created from a frozen tab it will be destroyed with the
   // returned object.
-  static std::unique_ptr<ScopedWebContents> CreateForTab(TabAndroid* tab);
+  static std::unique_ptr<ScopedWebContents> CreateForTab(
+      TabAndroid* tab,
+      const WebContentsStateByteBuffer* webContentsStateByteBuffer);
 
   ~ScopedWebContents();
 
   ScopedWebContents(const ScopedWebContents&) = delete;
   ScopedWebContents& operator=(const ScopedWebContents&) = delete;
 
-  content::WebContents* web_contents() const { return web_contents_; }
+  explicit ScopedWebContents(content::WebContents* unowned_web_contents);
+  explicit ScopedWebContents(
+      std::unique_ptr<content::WebContents> owned_web_contents);
+
+  content::WebContents* web_contents() const;
 
  private:
-  ScopedWebContents(content::WebContents* web_contents, bool was_frozen);
-
-  raw_ptr<content::WebContents> web_contents_;
-  bool was_frozen_;
+  raw_ptr<content::WebContents> unowned_web_contents_;
+  std::unique_ptr<content::WebContents> owned_web_contents_;
 };
 
 }  // namespace historical_tab_saver
diff --git a/chrome/browser/app_controller_mac_browsertest.mm b/chrome/browser/app_controller_mac_browsertest.mm
index 1e19a1a..115d24aa 100644
--- a/chrome/browser/app_controller_mac_browsertest.mm
+++ b/chrome/browser/app_controller_mac_browsertest.mm
@@ -744,7 +744,8 @@
 }
 
 // Tests that when a GURL is opened, it is not opened in incognito mode.
-IN_PROC_BROWSER_TEST_F(AppControllerBrowserTest, OpenInRegularBrowser) {
+IN_PROC_BROWSER_TEST_F(AppControllerBrowserTest,
+                       DISABLED_OpenInRegularBrowser) {
   ASSERT_TRUE(embedded_test_server()->Start());
   // Create an incognito browser.
   Browser* incognito_browser = CreateIncognitoBrowser(browser()->profile());
diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc
index 491c82d..750f7dde 100644
--- a/chrome/browser/apps/guest_view/web_view_browsertest.cc
+++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc
@@ -5762,12 +5762,14 @@
       embedded_test_server()->GetURL("a.test", "/iframe.html");
   auto interceptor = content::URLLoaderInterceptor::SetupRequestFailForURL(
       error_url, net::ERR_NAME_NOT_RESOLVED);
-  content::TestNavigationObserver load_observer(guest);
-  EXPECT_TRUE(
-      ExecuteScript(guest, "location.href = '" + error_url.spec() + "';"));
-  load_observer.Wait();
-  EXPECT_FALSE(load_observer.last_navigation_succeeded());
-  EXPECT_TRUE(guest->GetPrimaryMainFrame()->IsErrorDocument());
+  {
+    content::TestNavigationObserver load_observer(guest);
+    EXPECT_TRUE(
+        ExecuteScript(guest, "location.href = '" + error_url.spec() + "';"));
+    load_observer.Wait();
+    EXPECT_FALSE(load_observer.last_navigation_succeeded());
+    EXPECT_TRUE(guest->GetPrimaryMainFrame()->IsErrorDocument());
+  }
 
   // The error page's SiteInstance should require a dedicated process due to
   // error page isolation, but it should still be considered a guest and should
diff --git a/chrome/browser/ash/arc/input_overlay/actions/action.cc b/chrome/browser/ash/arc/input_overlay/actions/action.cc
index 3b3ff6b..df3dbe53 100644
--- a/chrome/browser/ash/arc/input_overlay/actions/action.cc
+++ b/chrome/browser/ash/arc/input_overlay/actions/action.cc
@@ -201,7 +201,7 @@
   return true;
 }
 
-bool IsBound(const InputElement& input_element) {
+bool IsInputBound(const InputElement& input_element) {
   return input_element.input_sources() != InputSource::IS_NONE;
 }
 
@@ -213,10 +213,10 @@
   return (input_element.input_sources() & InputSource::IS_MOUSE) != 0;
 }
 
-void Action::PrepareToBind(std::unique_ptr<InputElement> input_element) {
-  if (pending_binding_)
-    pending_binding_.reset();
-  pending_binding_ = std::move(input_element);
+void Action::PrepareToBindInput(std::unique_ptr<InputElement> input_element) {
+  if (pending_input_)
+    pending_input_.reset();
+  pending_input_ = std::move(input_element);
   auto bounds = CalculateWindowContentBounds(target_window_);
 
   if (!action_view_)
@@ -225,18 +225,18 @@
 }
 
 void Action::BindPending() {
-  if (!pending_binding_)
+  if (!pending_input_)
     return;
 
-  current_binding_.reset();
-  current_binding_ = std::move(pending_binding_);
-  DCHECK(!pending_binding_);
+  current_input_.reset();
+  current_input_ = std::move(pending_input_);
+  DCHECK(!pending_input_);
 }
 
 void Action::CancelPendingBind(const gfx::RectF& content_bounds) {
-  if (!pending_binding_)
+  if (!pending_input_)
     return;
-  pending_binding_.reset();
+  pending_input_.reset();
 
   DCHECK(action_view_);
   if (!action_view_)
@@ -245,7 +245,7 @@
 }
 
 void Action::ResetPendingBind() {
-  pending_binding_.reset();
+  pending_input_.reset();
 }
 
 void Action::RestoreToDefault(const gfx::RectF& content_bounds) {
@@ -253,9 +253,9 @@
   if (!action_view_)
     return;
 
-  if (GetCurrentDisplayedBinding() != *original_binding_) {
-    pending_binding_.reset();
-    pending_binding_ = std::make_unique<InputElement>(*original_binding_);
+  if (GetCurrentDisplayedInput() != *original_input_) {
+    pending_input_.reset();
+    pending_input_ = std::make_unique<InputElement>(*original_input_);
     action_view_->SetViewContent(BindingOption::kPending, content_bounds);
   }
   // Set to |DisplayMode::kRestore| to clear the focus even the current binding
@@ -263,17 +263,17 @@
   action_view_->SetDisplayMode(DisplayMode::kRestore);
 }
 
-const InputElement& Action::GetCurrentDisplayedBinding() {
-  DCHECK(current_binding_);
-  return pending_binding_ ? *pending_binding_ : *current_binding_;
+const InputElement& Action::GetCurrentDisplayedInput() {
+  DCHECK(current_input_);
+  return pending_input_ ? *pending_input_ : *current_input_;
 }
 
 bool Action::IsOverlapped(const InputElement& input_element) {
-  DCHECK(current_binding_);
-  if (!current_binding_)
+  DCHECK(current_input_);
+  if (!current_input_)
     return false;
-  auto& binding = GetCurrentDisplayedBinding();
-  return binding.IsOverlapped(input_element);
+  auto& input_binding = GetCurrentDisplayedInput();
+  return input_binding.IsOverlapped(input_element);
 }
 
 absl::optional<ui::TouchEvent> Action::GetTouchCanceledEvent() {
@@ -356,7 +356,7 @@
   current_position_idx_ = 0;
 }
 
-void Action::PostUnbindProcess() {
+void Action::PostUnbindInputProcess() {
   if (!action_view_)
     return;
   auto bounds = CalculateWindowContentBounds(target_window_);
@@ -370,13 +370,13 @@
 }
 
 std::unique_ptr<ActionProto> Action::ConvertToProtoIfCustomized() {
-  if (*original_binding_ == *current_binding_)
+  if (*original_input_ == *current_input_)
     return nullptr;
 
   auto proto = std::make_unique<ActionProto>();
   proto->set_id(id_);
   proto->set_allocated_input_element(
-      current_binding_->ConvertToProto().release());
+      current_input_->ConvertToProto().release());
   return proto;
 }
 
diff --git a/chrome/browser/ash/arc/input_overlay/actions/action.h b/chrome/browser/ash/arc/input_overlay/actions/action.h
index b2b4457..f7dcaca 100644
--- a/chrome/browser/ash/arc/input_overlay/actions/action.h
+++ b/chrome/browser/ash/arc/input_overlay/actions/action.h
@@ -49,7 +49,7 @@
     const base::StringPiece key_name);
 
 // Return true if the |input_element| is bound.
-bool IsBound(const InputElement& input_element);
+bool IsInputBound(const InputElement& input_element);
 // Return true if the |input_element| is bound to keyboard key.
 bool IsKeyboardBound(const InputElement& input_element);
 // Return true if the |input_element| is bound to mouse.
@@ -85,21 +85,21 @@
   // This is called if other actions take the input binding from this action.
   // |input_element| should overlap the current displayed binding. If it is
   // partially overlapped, then we only unbind the overlapped input.
-  virtual void Unbind(const InputElement& input_element) = 0;
+  virtual void UnbindInput(const InputElement& input_element) = 0;
 
   // This is called for editing the actions before change is saved. Or for
   // loading the customized data to override the default input mapping.
-  void PrepareToBind(std::unique_ptr<InputElement> input_element);
-  // Save |pending_binding_| as |current_binding_|.
+  void PrepareToBindInput(std::unique_ptr<InputElement> input_element);
+  // Save |pending_input_| as |current_input_|.
   void BindPending();
-  // Cancel |pending_binding_|.
+  // Cancel |pending_input_|.
   void CancelPendingBind(const gfx::RectF& content_bounds);
   void ResetPendingBind();
 
   // Restore the input binding back to the original binding.
   void RestoreToDefault(const gfx::RectF& content_bounds);
   // Return currently displayed input binding.
-  const InputElement& GetCurrentDisplayedBinding();
+  const InputElement& GetCurrentDisplayedInput();
   // Check if there is any overlap between |input_element| and current
   // displayed binding.
   bool IsOverlapped(const InputElement& input_element);
@@ -110,13 +110,13 @@
   void UpdateTouchDownPositions(const gfx::RectF& content_bounds,
                                 const gfx::Transform* rotation_transform);
 
-  InputElement* current_binding() const { return current_binding_.get(); }
-  InputElement* original_binding() const { return original_binding_.get(); }
-  InputElement* pending_binding() const { return pending_binding_.get(); }
-  void set_pending_binding(std::unique_ptr<InputElement> binding) {
-    if (pending_binding_)
-      pending_binding_.reset();
-    pending_binding_ = std::move(binding);
+  InputElement* current_input() const { return current_input_.get(); }
+  InputElement* original_input() const { return original_input_.get(); }
+  InputElement* pending_input() const { return pending_input_.get(); }
+  void set_pending_input(std::unique_ptr<InputElement> input) {
+    if (pending_input_)
+      pending_input_.reset();
+    pending_input_ = std::move(input);
   }
   int id() { return id_; }
   const std::string& name() { return name_; }
@@ -150,14 +150,14 @@
   void OnTouchReleased();
   void OnTouchCancelled();
   // Process after unbinding the input mapping.
-  void PostUnbindProcess();
+  void PostUnbindInputProcess();
 
   // Original input binding.
-  std::unique_ptr<InputElement> original_binding_;
+  std::unique_ptr<InputElement> original_input_;
   // Current input binding.
-  std::unique_ptr<InputElement> current_binding_;
+  std::unique_ptr<InputElement> current_input_;
   // Pending input binding. It is used during the editing before it is saved.
-  std::unique_ptr<InputElement> pending_binding_;
+  std::unique_ptr<InputElement> pending_input_;
 
   // Unique ID for each action.
   int id_ = 0;
diff --git a/chrome/browser/ash/arc/input_overlay/actions/action_move.cc b/chrome/browser/ash/arc/input_overlay/actions/action_move.cc
index 889af69..d3d3567c 100644
--- a/chrome/browser/ash/arc/input_overlay/actions/action_move.cc
+++ b/chrome/browser/ash/arc/input_overlay/actions/action_move.cc
@@ -121,25 +121,25 @@
     center_.set_x(radius);
     center_.set_y(radius);
 
-    InputElement* binding = nullptr;
+    InputElement* input_binding = nullptr;
     switch (binding_option) {
       case BindingOption::kCurrent:
-        binding = action_->current_binding();
+        input_binding = action_->current_input();
         break;
       case BindingOption::kOriginal:
-        binding = action_->original_binding();
+        input_binding = action_->original_input();
         break;
 
       case BindingOption::kPending:
-        binding = action_->pending_binding();
+        input_binding = action_->pending_input();
         break;
       default:
         NOTREACHED();
     }
-    if (!binding)
+    if (!input_binding)
       return;
 
-    auto keys = binding->keys();
+    const auto keys = input_binding->keys();
     if (labels_.empty()) {
       for (int i = 0; i < keys.size(); i++) {
         auto label =
@@ -163,21 +163,21 @@
     if (it == labels_.end())
       return;
 
-    const auto& binding = action_->GetCurrentDisplayedBinding();
-    DCHECK(binding.keys().size() == kActionMoveKeysSize);
-    std::vector<ui::DomCode> new_keys = binding.keys();
+    const auto& input_binding = action_->GetCurrentDisplayedInput();
+    DCHECK_EQ(input_binding.keys().size(), kActionMoveKeysSize);
+    std::vector<ui::DomCode> new_keys = input_binding.keys();
     new_keys[it - labels_.begin()] = code;
 
     // If there is duplicate key in its own action, take the key away from
     // previous index.
-    const int unassigned_index = binding.GetIndexOfKey(code);
+    const int unassigned_index = input_binding.GetIndexOfKey(code);
     if (unassigned_index != -1) {
       new_keys[unassigned_index] = ui::DomCode::NONE;
       labels_[unassigned_index]->SetDisplayMode(DisplayMode::kEditedUnbound);
     }
 
     auto input_element = InputElement::CreateActionMoveKeyElement(new_keys);
-    ChangeBinding(action_, action_label, std::move(input_element));
+    ChangeInputBinding(action_, action_label, std::move(input_element));
   }
 
   // TODO(cuicuiruan): Remove this for post MVP for editing |ActionMove|.
@@ -289,8 +289,8 @@
     }
     keycodes.emplace_back(key);
   }
-  original_binding_ = InputElement::CreateActionMoveKeyElement(keycodes);
-  current_binding_ = InputElement::CreateActionMoveKeyElement(keycodes);
+  original_input_ = InputElement::CreateActionMoveKeyElement(keycodes);
+  current_input_ = InputElement::CreateActionMoveKeyElement(keycodes);
 
   return true;
 }
@@ -307,8 +307,8 @@
     return false;
   }
   require_mouse_locked_ = true;
-  original_binding_ = InputElement::CreateActionMoveMouseElement(*mouse_action);
-  current_binding_ = InputElement::CreateActionMoveMouseElement(*mouse_action);
+  original_input_ = InputElement::CreateActionMoveMouseElement(*mouse_action);
+  current_input_ = InputElement::CreateActionMoveMouseElement(*mouse_action);
 
   auto* target_area = value.FindDictKey(kTargetArea);
   if (target_area) {
@@ -349,18 +349,16 @@
                               const gfx::Transform* rotation_transform,
                               std::list<ui::TouchEvent>& touch_events,
                               bool& keep_original_event) {
-  if (!IsBound(*current_binding_) ||
-      (IsKeyboardBound(*current_binding_) && !origin.IsKeyEvent()) ||
-      (IsMouseBound(*current_binding_) && !origin.IsMouseEvent()))
+  if (!IsInputBound(*current_input_) ||
+      (IsKeyboardBound(*current_input_) && !origin.IsKeyEvent()) ||
+      (IsMouseBound(*current_input_) && !origin.IsMouseEvent())) {
     return false;
-  DCHECK(
-      (IsKeyboardBound(*current_binding_) &&
-       !IsMouseBound(*current_binding_)) ||
-      (!IsKeyboardBound(*current_binding_) && IsMouseBound(*current_binding_)));
+  }
+  DCHECK_NE(IsKeyboardBound(*current_input_), IsMouseBound(*current_input_));
   LogEvent(origin);
 
   // Rewrite for key event.
-  if (IsKeyboardBound(*current_binding_)) {
+  if (IsKeyboardBound(*current_input_)) {
     auto* key_event = origin.AsKeyEvent();
     bool rewritten = RewriteKeyEvent(key_event, content_bounds,
                                      rotation_transform, touch_events);
@@ -381,7 +379,7 @@
 
 gfx::PointF ActionMove::GetUICenterPosition(const gfx::RectF& content_bounds) {
   if (original_positions().empty()) {
-    DCHECK(IsMouseBound(*current_binding_));
+    DCHECK(IsMouseBound(*current_input_));
     return gfx::PointF(content_bounds.width() / 2, content_bounds.height() / 2);
   }
   return original_positions().front().CalculatePosition(content_bounds);
@@ -391,7 +389,7 @@
     DisplayOverlayController* display_overlay_controller,
     const gfx::RectF& content_bounds) {
   std::unique_ptr<ActionView> view;
-  if (IsMouseBound(*current_binding_)) {
+  if (IsMouseBound(*current_input_)) {
     view = std::make_unique<ActionMoveMouseView>(
         this, display_overlay_controller, content_bounds);
   } else {
@@ -403,18 +401,18 @@
   return view;
 }
 
-void ActionMove::Unbind(const InputElement& input_element) {
-  if (!pending_binding_)
-    pending_binding_ = std::make_unique<InputElement>(*current_binding_);
+void ActionMove::UnbindInput(const InputElement& input_element) {
+  if (!pending_input_)
+    pending_input_ = std::make_unique<InputElement>(*current_input_);
   if (IsKeyboardBound(input_element)) {
     // It might be partially overlapped and only remove the keys overlapped.
     for (auto code : input_element.keys()) {
-      for (int i = 0; i < pending_binding_->keys().size(); i++) {
-        if (code == pending_binding_->keys()[i]) {
-          pending_binding_->SetKey(i, ui::DomCode::NONE);
+      for (int i = 0; i < pending_input_->keys().size(); i++) {
+        if (code == pending_input_->keys()[i]) {
+          pending_input_->SetKey(i, ui::DomCode::NONE);
           if (action_view_)
             action_view_->set_unbind_label_index(i);
-          PostUnbindProcess();
+          PostUnbindInputProcess();
         }
       }
     }
@@ -428,7 +426,7 @@
                                  const gfx::RectF& content_bounds,
                                  const gfx::Transform* rotation_transform,
                                  std::list<ui::TouchEvent>& rewritten_events) {
-  auto keys = current_binding_->keys();
+  auto keys = current_input_->keys();
   auto it = std::find(keys.begin(), keys.end(), key_event->code());
   if (it == keys.end())
     return false;
@@ -510,8 +508,8 @@
   DCHECK(mouse_event);
 
   auto type = mouse_event->type();
-  if (!current_binding_->mouse_types().contains(type) ||
-      current_binding_->mouse_flags() != mouse_event->flags()) {
+  if (!current_input_->mouse_types().contains(type) ||
+      current_input_->mouse_flags() != mouse_event->flags()) {
     return false;
   }
 
diff --git a/chrome/browser/ash/arc/input_overlay/actions/action_move.h b/chrome/browser/ash/arc/input_overlay/actions/action_move.h
index ec9abe1..a2380751 100644
--- a/chrome/browser/ash/arc/input_overlay/actions/action_move.h
+++ b/chrome/browser/ash/arc/input_overlay/actions/action_move.h
@@ -36,7 +36,7 @@
   std::unique_ptr<ActionView> CreateView(
       DisplayOverlayController* display_overlay_controller,
       const gfx::RectF& content_bounds) override;
-  void Unbind(const InputElement& input_element) override;
+  void UnbindInput(const InputElement& input_element) override;
 
   void set_move_distance(int move_distance) { move_distance_ = move_distance; }
   int move_distance() { return move_distance_; }
diff --git a/chrome/browser/ash/arc/input_overlay/actions/action_tap.cc b/chrome/browser/ash/arc/input_overlay/actions/action_tap.cc
index fb94870..d758b5a6 100644
--- a/chrome/browser/ash/arc/input_overlay/actions/action_tap.cc
+++ b/chrome/browser/ash/arc/input_overlay/actions/action_tap.cc
@@ -62,38 +62,38 @@
       circle_ = AddChildView(std::move(circle));
     }
 
-    InputElement* binding = nullptr;
+    InputElement* input_binding = nullptr;
     switch (binding_option) {
       case BindingOption::kCurrent:
-        binding = action_->current_binding();
+        input_binding = action_->current_input();
         break;
       case BindingOption::kOriginal:
-        binding = action_->original_binding();
+        input_binding = action_->original_input();
         break;
       case BindingOption::kPending:
-        binding = action_->pending_binding();
+        input_binding = action_->pending_input();
         break;
       default:
         NOTREACHED();
     }
-    if (!binding)
+    if (!input_binding)
       return;
 
     if (labels_.empty()) {
       // Create new action label when initializing.
-      auto label = CreateActionLabel(*binding);
+      auto label = CreateActionLabel(*input_binding);
       labels_.emplace_back(AddChildView(std::move(label)));
-    } else if (!IsBound(*binding)) {
+    } else if (!IsInputBound(*input_binding)) {
       // Action label exists but without any bindings.
       labels_[0]->SetTextActionLabel(
           std::move(GetDisplayText(ui::DomCode::NONE)));
-    } else if (IsKeyboardBound(*binding)) {
+    } else if (IsKeyboardBound(*input_binding)) {
       // Action label is bound to keyboard key.
       labels_[0]->SetTextActionLabel(
-          std::move(GetDisplayText(binding->keys()[0])));
+          std::move(GetDisplayText(input_binding->keys()[0])));
     } else {
       // Action label is bound to mouse.
-      labels_[0]->SetImageActionLabel(binding->mouse_action());
+      labels_[0]->SetImageActionLabel(input_binding->mouse_action());
     }
   }
 
@@ -104,16 +104,16 @@
       return;
 
     auto input_element = InputElement::CreateActionTapKeyElement(code);
-    ChangeBinding(action_, action_label, std::move(input_element));
+    ChangeInputBinding(action_, action_label, std::move(input_element));
   }
 
   void OnBindingToKeyboard() override {
-    const auto& binding = action_->GetCurrentDisplayedBinding();
-    if (!IsMouseBound(binding))
+    const auto& input_binding = action_->GetCurrentDisplayedInput();
+    if (!IsMouseBound(input_binding))
       return;
 
     auto input_element = std::make_unique<InputElement>();
-    action_->set_pending_binding(std::move(input_element));
+    action_->set_pending_input(std::move(input_element));
     auto bounds = CalculateWindowContentBounds(action_->target_window());
     SetViewContent(BindingOption::kPending, bounds);
   }
@@ -122,15 +122,17 @@
     DCHECK(mouse_action == kPrimaryClick || mouse_action == kSecondaryClick);
     if (mouse_action != kPrimaryClick && mouse_action != kSecondaryClick)
       return;
-    const auto& binding = action_->GetCurrentDisplayedBinding();
-    if (IsMouseBound(binding) &&
-        binding.mouse_action() == ConvertToMouseActionEnum(mouse_action)) {
+    const auto& input_binding = action_->GetCurrentDisplayedInput();
+    if (IsMouseBound(input_binding) &&
+        input_binding.mouse_action() ==
+            ConvertToMouseActionEnum(mouse_action)) {
       return;
     }
 
     auto input_element =
         InputElement::CreateActionTapMouseElement(mouse_action);
-    ChangeBinding(action_, /*action_label=*/nullptr, std::move(input_element));
+    ChangeInputBinding(action_, /*action_label=*/nullptr,
+                       std::move(input_element));
   }
 
   void OnMenuEntryPressed() override {
@@ -199,9 +201,9 @@
     LOG(ERROR) << "No/invalid key code for key tap action {" << name_ << "}.";
     return false;
   }
-  original_binding_ = InputElement::CreateActionTapKeyElement(key->first);
-  current_binding_ = InputElement::CreateActionTapKeyElement(key->first);
-  if (original_binding_->is_modifier_key())
+  original_input_ = InputElement::CreateActionTapKeyElement(key->first);
+  current_input_ = InputElement::CreateActionTapKeyElement(key->first);
+  if (original_input_->is_modifier_key())
     support_modifier_key_ = true;
   return true;
 }
@@ -217,8 +219,8 @@
                << *mouse_action;
     return false;
   }
-  original_binding_ = InputElement::CreateActionTapMouseElement(*mouse_action);
-  current_binding_ = InputElement::CreateActionTapMouseElement(*mouse_action);
+  original_input_ = InputElement::CreateActionTapMouseElement(*mouse_action);
+  current_input_ = InputElement::CreateActionTapMouseElement(*mouse_action);
   return true;
 }
 
@@ -228,18 +230,15 @@
                              const gfx::Transform* rotation_transform,
                              std::list<ui::TouchEvent>& touch_events,
                              bool& keep_original_event) {
-  if (!IsBound(*current_binding_) ||
-      (IsKeyboardBound(*current_binding_) && !origin.IsKeyEvent()) ||
-      (IsMouseBound(*current_binding_) && !origin.IsMouseEvent())) {
+  if (!IsInputBound(*current_input_) ||
+      (IsKeyboardBound(*current_input_) && !origin.IsKeyEvent()) ||
+      (IsMouseBound(*current_input_) && !origin.IsMouseEvent())) {
     return false;
   }
-  DCHECK((IsKeyboardBound(*current_binding()) &&
-          !IsMouseBound(*current_binding())) ||
-         (!IsKeyboardBound(*current_binding()) &&
-          IsMouseBound(*current_binding())));
+  DCHECK_NE(IsKeyboardBound(*current_input_), IsMouseBound(*current_input_));
   LogEvent(origin);
   // Rewrite for key event.
-  if (IsKeyboardBound(*current_binding())) {
+  if (IsKeyboardBound(*current_input())) {
     auto* key_event = origin.AsKeyEvent();
     bool rewritten =
         RewriteKeyEvent(key_event, content_bounds, rotation_transform,
@@ -271,13 +270,13 @@
   return view;
 }
 
-void ActionTap::Unbind(const InputElement& input_element) {
-  if (pending_binding_)
-    pending_binding_.reset();
-  pending_binding_ = std::make_unique<InputElement>();
+void ActionTap::UnbindInput(const InputElement& input_element) {
+  if (pending_input_)
+    pending_input_.reset();
+  pending_input_ = std::make_unique<InputElement>();
   if (action_view_)
     action_view_->set_unbind_label_index(0);
-  PostUnbindProcess();
+  PostUnbindInputProcess();
 }
 
 bool ActionTap::RewriteKeyEvent(const ui::KeyEvent* key_event,
@@ -286,7 +285,7 @@
                                 std::list<ui::TouchEvent>& rewritten_events,
                                 bool& keep_original_event) {
   DCHECK(key_event);
-  if (!IsSameDomCode(key_event->code(), current_binding_->keys()[0]))
+  if (!IsSameDomCode(key_event->code(), current_input_->keys()[0]))
     return false;
 
   // Ignore repeated key events, but consider it as processed.
@@ -315,7 +314,7 @@
         ui::PointerDetails(ui::EventPointerType::kTouch, *touch_id_));
     ui::Event::DispatcherApi(&(rewritten_events.back()))
         .set_target(target_window_);
-    if (!current_binding_->is_modifier_key()) {
+    if (!current_input_->is_modifier_key()) {
       keys_pressed_.emplace(key_event->code());
     } else {
       // For modifier keys, EventRewriterChromeOS skips release event for other
@@ -356,8 +355,8 @@
   DCHECK(mouse_event);
 
   auto type = mouse_event->type();
-  if (!current_binding_->mouse_types().contains(type) ||
-      (current_binding_->mouse_flags() & mouse_event->changed_button_flags()) ==
+  if (!current_input_->mouse_types().contains(type) ||
+      (current_input_->mouse_flags() & mouse_event->changed_button_flags()) ==
           0) {
     return false;
   }
diff --git a/chrome/browser/ash/arc/input_overlay/actions/action_tap.h b/chrome/browser/ash/arc/input_overlay/actions/action_tap.h
index 4a3d6610..32baec9 100644
--- a/chrome/browser/ash/arc/input_overlay/actions/action_tap.h
+++ b/chrome/browser/ash/arc/input_overlay/actions/action_tap.h
@@ -31,7 +31,7 @@
   std::unique_ptr<ActionView> CreateView(
       DisplayOverlayController* display_overlay_controller,
       const gfx::RectF& content_bounds) override;
-  void Unbind(const InputElement& input_element) override;
+  void UnbindInput(const InputElement& input_element) override;
 
  private:
   class ActionTapView;
diff --git a/chrome/browser/ash/arc/input_overlay/display_overlay_controller.cc b/chrome/browser/ash/arc/input_overlay/display_overlay_controller.cc
index c6569e4..36a0cf9 100644
--- a/chrome/browser/ash/arc/input_overlay/display_overlay_controller.cc
+++ b/chrome/browser/ash/arc/input_overlay/display_overlay_controller.cc
@@ -479,10 +479,10 @@
   message_ = nullptr;
 }
 
-void DisplayOverlayController::OnBindingChange(
+void DisplayOverlayController::OnInputBindingChange(
     Action* action,
     std::unique_ptr<InputElement> input_element) {
-  touch_injector_->OnBindingChange(action, std::move(input_element));
+  touch_injector_->OnInputBindingChange(action, std::move(input_element));
 }
 
 void DisplayOverlayController::OnCustomizeSave() {
diff --git a/chrome/browser/ash/arc/input_overlay/display_overlay_controller.h b/chrome/browser/ash/arc/input_overlay/display_overlay_controller.h
index cd0d2e1..29ae96b6 100644
--- a/chrome/browser/ash/arc/input_overlay/display_overlay_controller.h
+++ b/chrome/browser/ash/arc/input_overlay/display_overlay_controller.h
@@ -60,8 +60,8 @@
                       MessageType message_type);
   void RemoveEditMessage();
 
-  void OnBindingChange(Action* action,
-                       std::unique_ptr<InputElement> input_element);
+  void OnInputBindingChange(Action* action,
+                            std::unique_ptr<InputElement> input_element);
 
   // Save the changes when users press the save button after editing.
   void OnCustomizeSave();
diff --git a/chrome/browser/ash/arc/input_overlay/touch_injector.cc b/chrome/browser/ash/arc/input_overlay/touch_injector.cc
index 658bd0bf..bfd2036d 100644
--- a/chrome/browser/ash/arc/input_overlay/touch_injector.cc
+++ b/chrome/browser/ash/arc/input_overlay/touch_injector.cc
@@ -187,7 +187,7 @@
   UpdateForWindowBoundsChanged();
 }
 
-void TouchInjector::OnBindingChange(
+void TouchInjector::OnInputBindingChange(
     Action* target_action,
     std::unique_ptr<InputElement> input_element) {
   if (display_overlay_controller_)
@@ -205,9 +205,9 @@
   // Partially unbind or completely unbind the |overlapped_action| if it
   // conflicts with |input_element|.
   if (overlapped_action)
-    overlapped_action->Unbind(*input_element);
+    overlapped_action->UnbindInput(*input_element);
 
-  target_action->PrepareToBind(std::move(input_element));
+  target_action->PrepareToBindInput(std::move(input_element));
 }
 
 void TouchInjector::OnApplyPendingBinding() {
@@ -247,7 +247,7 @@
     auto input_element =
         InputElement::ConvertFromProto(action_proto.input_element());
     DCHECK(input_element);
-    OnBindingChange(action, std::move(input_element));
+    OnInputBindingChange(action, std::move(input_element));
   }
   OnApplyPendingBinding();
 }
diff --git a/chrome/browser/ash/arc/input_overlay/touch_injector.h b/chrome/browser/ash/arc/input_overlay/touch_injector.h
index adbc720d..1c22b0b 100644
--- a/chrome/browser/ash/arc/input_overlay/touch_injector.h
+++ b/chrome/browser/ash/arc/input_overlay/touch_injector.h
@@ -114,8 +114,8 @@
   // Change bindings. This could be from user editing from display overlay
   // (|mode| = DisplayMode::kEdit) or from customized protobuf data (|mode| =
   // DisplayMode::kView).
-  void OnBindingChange(Action* target_action,
-                       std::unique_ptr<InputElement> input_element);
+  void OnInputBindingChange(Action* target_action,
+                            std::unique_ptr<InputElement> input_element);
   // Apply pending binding as current binding, but don't save into the storage.
   void OnApplyPendingBinding();
   // Save customized input binding/pending binding as current binding and go
diff --git a/chrome/browser/ash/arc/input_overlay/touch_injector_unittest.cc b/chrome/browser/ash/arc/input_overlay/touch_injector_unittest.cc
index 346fb52..3a4f6004 100644
--- a/chrome/browser/ash/arc/input_overlay/touch_injector_unittest.cc
+++ b/chrome/browser/ash/arc/input_overlay/touch_injector_unittest.cc
@@ -469,13 +469,13 @@
   injector_->RegisterEventRewriter();
 
   auto* primary_action = injector_->actions()[0].get();
-  auto* primary_binding = primary_action->current_binding();
+  auto* primary_binding = primary_action->current_input();
   EXPECT_EQ(primary_binding->mouse_action(), MouseAction::PRIMARY_CLICK);
   EXPECT_TRUE(primary_binding->mouse_types().contains(ui::ET_MOUSE_PRESSED));
   EXPECT_TRUE(primary_binding->mouse_types().contains(ui::ET_MOUSE_RELEASED));
   EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, primary_binding->mouse_flags());
   auto* secondary_action = injector_->actions()[1].get();
-  auto* secondary_binding = secondary_action->current_binding();
+  auto* secondary_binding = secondary_action->current_input();
   EXPECT_EQ(secondary_binding->mouse_action(), MouseAction::SECONDARY_CLICK);
   EXPECT_TRUE(secondary_binding->mouse_types().contains(ui::ET_MOUSE_PRESSED));
   EXPECT_TRUE(secondary_binding->mouse_types().contains(ui::ET_MOUSE_RELEASED));
@@ -627,7 +627,7 @@
   EXPECT_EQ(2u, injector_->actions().size());
   injector_->RegisterEventRewriter();
   auto* hover_action = static_cast<ActionMove*>(injector_->actions()[0].get());
-  auto* hover_binding = hover_action->current_binding();
+  auto* hover_binding = hover_action->current_input();
   EXPECT_EQ(hover_binding->mouse_action(), MouseAction::HOVER_MOVE);
   EXPECT_TRUE(hover_binding->mouse_types().contains(ui::ET_MOUSE_ENTERED));
   EXPECT_TRUE(hover_binding->mouse_types().contains(ui::ET_MOUSE_MOVED));
@@ -636,7 +636,7 @@
 
   auto* right_action =
       static_cast<input_overlay::ActionMove*>(injector_->actions()[1].get());
-  auto* right_binding = right_action->current_binding();
+  auto* right_binding = right_action->current_input();
   EXPECT_EQ(right_binding->mouse_action(), MouseAction::SECONDARY_DRAG_MOVE);
   EXPECT_TRUE(right_binding->mouse_types().contains(ui::ET_MOUSE_PRESSED));
   EXPECT_TRUE(right_binding->mouse_types().contains(ui::ET_MOUSE_DRAGGED));
diff --git a/chrome/browser/ash/arc/input_overlay/ui/action_edit_menu.cc b/chrome/browser/ash/arc/input_overlay/ui/action_edit_menu.cc
index cf8a6c1..970b8c3 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/action_edit_menu.cc
+++ b/chrome/browser/ash/arc/input_overlay/ui/action_edit_menu.cc
@@ -151,11 +151,11 @@
   auto* action = anchor_view_->action();
   // It is possible that the action has no binding after customizing, such as
   // users bind the key to another action.
-  auto& binding = action->GetCurrentDisplayedBinding();
-  if (IsKeyboardBound(binding))
+  auto& input_binding = action->GetCurrentDisplayedInput();
+  if (IsKeyboardBound(input_binding))
     keyboard_key_->OnBinding();
-  if (IsMouseBound(binding)) {
-    switch (binding.mouse_action()) {
+  if (IsMouseBound(input_binding)) {
+    switch (input_binding.mouse_action()) {
       case MouseAction::PRIMARY_CLICK:
         mouse_left_->OnBinding();
         break;
diff --git a/chrome/browser/ash/arc/input_overlay/ui/action_label.cc b/chrome/browser/ash/arc/input_overlay/ui/action_label.cc
index 2189bc8..9a2eb09 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/action_label.cc
+++ b/chrome/browser/ash/arc/input_overlay/ui/action_label.cc
@@ -202,7 +202,7 @@
       SetToEditFocus();
       break;
     case DisplayMode::kEditedUnbound:
-      SetToEditUnBind();
+      SetToEditUnbindInput();
       break;
     case DisplayMode::kEditedError:
       SetToEditError();
@@ -263,7 +263,7 @@
 void ActionLabel::OnFocus() {
   SetToEditFocus();
   LabelButton::OnFocus();
-  if (IsUnbound()) {
+  if (IsInputUnbound()) {
     static_cast<ActionView*>(parent())->ShowErrorMsg(
         l10n_util::GetStringUTF8(IDS_INPUT_OVERLAY_EDIT_MISSING_BINDING), this,
         /*ax_annouce=*/false);
@@ -280,7 +280,7 @@
 }
 
 void ActionLabel::SetToViewMode() {
-  if (IsUnbound()) {
+  if (IsInputUnbound()) {
     SetVisible(false);
     return;
   }
@@ -310,7 +310,7 @@
 }
 
 void ActionLabel::SetToEditMode() {
-  if (IsUnbound())
+  if (IsInputUnbound())
     SetVisible(true);
 
   SetInstallFocusRingOnFocus(true);
@@ -343,7 +343,7 @@
   label()->SetFontList(gfx::FontList({kFontStyle}, gfx::Font::NORMAL, kFontSize,
                                      gfx::Font::Weight::BOLD));
   views::FocusRing::Get(this)->SetColorId(absl::nullopt);
-  if (IsUnbound()) {
+  if (IsInputUnbound()) {
     SetBackground(views::CreateRoundedRectBackground(kEditedUnboundBgColor,
                                                      kCornerRadiusView));
   } else {
@@ -361,7 +361,7 @@
   label()->SetFontList(gfx::FontList({kFontStyle}, gfx::Font::NORMAL, kFontSize,
                                      gfx::Font::Weight::BOLD));
   SetPreferredSize(CalculatePreferredSize());
-  if (IsUnbound()) {
+  if (IsInputUnbound()) {
     views::FocusRing::Get(this)->SetColorId(
         ui::kColorAshActionLabelFocusRingError);
     SetBackground(views::CreateRoundedRectBackground(kEditedUnboundBgColor,
@@ -379,13 +379,13 @@
       ui::kColorAshActionLabelFocusRingError);
 }
 
-void ActionLabel::SetToEditUnBind() {
+void ActionLabel::SetToEditUnbindInput() {
   SetPreferredSize(CalculatePreferredSize());
   SetBackground(views::CreateRoundedRectBackground(kEditedUnboundBgColor,
                                                    kCornerRadiusView));
 }
 
-bool ActionLabel::IsUnbound() {
+bool ActionLabel::IsInputUnbound() {
   return base::UTF16ToUTF8(GetText()) == kUnknownBind;
 }
 
diff --git a/chrome/browser/ash/arc/input_overlay/ui/action_label.h b/chrome/browser/ash/arc/input_overlay/ui/action_label.h
index 8b367506..d827142 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/action_label.h
+++ b/chrome/browser/ash/arc/input_overlay/ui/action_label.h
@@ -64,9 +64,9 @@
   // In edit mode when there is edit error.
   void SetToEditError();
   // In edit mode when the input is unbound.
-  void SetToEditUnBind();
+  void SetToEditUnbindInput();
 
-  bool IsUnbound();
+  bool IsInputUnbound();
 
   MouseAction mouse_action_ = MouseAction::NONE;
 };
diff --git a/chrome/browser/ash/arc/input_overlay/ui/action_view.cc b/chrome/browser/ash/arc/input_overlay/ui/action_view.cc
index 1d88680..9bcfc13e 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/action_view.cc
+++ b/chrome/browser/ash/arc/input_overlay/ui/action_view.cc
@@ -56,12 +56,12 @@
     return;
   if (mode == DisplayMode::kView) {
     RemoveEditButton();
-    if (!IsBound(action_->GetCurrentDisplayedBinding()))
+    if (!IsInputBound(action_->GetCurrentDisplayedInput()))
       SetVisible(false);
   }
   if (mode == DisplayMode::kEdit) {
     AddEditButton();
-    if (!IsBound(*action_->current_binding()))
+    if (!IsInputBound(*action_->current_input()))
       SetVisible(true);
   }
 
@@ -129,23 +129,26 @@
   display_overlay_controller_->RemoveEditMessage();
 }
 
-void ActionView::ChangeBinding(Action* action,
-                               ActionLabel* action_label,
-                               std::unique_ptr<InputElement> input_element) {
-  display_overlay_controller_->OnBindingChange(action,
-                                               std::move(input_element));
+void ActionView::ChangeInputBinding(
+    Action* action,
+    ActionLabel* action_label,
+    std::unique_ptr<InputElement> input_element) {
+  display_overlay_controller_->OnInputBindingChange(action,
+                                                    std::move(input_element));
   SetDisplayMode(DisplayMode::kEditedSuccess, action_label);
 }
 
 void ActionView::OnResetBinding() {
-  const auto& binding = action_->GetCurrentDisplayedBinding();
-  if (!IsBound(binding) || binding == *action_->current_binding())
+  const auto& input_binding = action_->GetCurrentDisplayedInput();
+  if (!IsInputBound(input_binding) ||
+      input_binding == *action_->current_input()) {
     return;
+  }
 
   auto input_element =
-      std::make_unique<InputElement>(*(action_->current_binding()));
-  display_overlay_controller_->OnBindingChange(action_,
-                                               std::move(input_element));
+      std::make_unique<InputElement>(*(action_->current_input()));
+  display_overlay_controller_->OnInputBindingChange(action_,
+                                                    std::move(input_element));
 }
 
 bool ActionView::ShouldShowErrorMsg(ui::DomCode code,
diff --git a/chrome/browser/ash/arc/input_overlay/ui/action_view.h b/chrome/browser/ash/arc/input_overlay/ui/action_view.h
index 30caaed..f0fb5bf 100644
--- a/chrome/browser/ash/arc/input_overlay/ui/action_view.h
+++ b/chrome/browser/ash/arc/input_overlay/ui/action_view.h
@@ -74,9 +74,9 @@
   // Change binding for |action| binding to |input_element| and set
   // |kEditedSuccess| on |action_label| if |action_label| is not nullptr.
   // Otherwise, set |kEditedSuccess| to all |ActionLabel|.
-  void ChangeBinding(Action* action,
-                     ActionLabel* action_label,
-                     std::unique_ptr<InputElement> input_element);
+  void ChangeInputBinding(Action* action,
+                          ActionLabel* action_label,
+                          std::unique_ptr<InputElement> input_element);
   // Reset binding to its previous binding before entering to the edit mode.
   void OnResetBinding();
   // Return true if it needs to show error message and also shows error message.
diff --git a/chrome/browser/ash/crosapi/crosapi_ash.cc b/chrome/browser/ash/crosapi/crosapi_ash.cc
index a14f2f6d..fed72492 100644
--- a/chrome/browser/ash/crosapi/crosapi_ash.cc
+++ b/chrome/browser/ash/crosapi/crosapi_ash.cc
@@ -95,8 +95,8 @@
 #include "chrome/browser/ash/crosapi/web_page_info_ash.h"
 #include "chrome/browser/ash/profiles/profile_helper.h"
 #include "chrome/browser/ash/remote_apps/remote_apps_manager_factory.h"
-#include "chrome/browser/ash/sync/sync_service_ash.h"
-#include "chrome/browser/ash/sync/sync_service_factory_ash.h"
+#include "chrome/browser/ash/sync/sync_mojo_service_ash.h"
+#include "chrome/browser/ash/sync/sync_mojo_service_factory_ash.h"
 #include "chrome/browser/ash/telemetry_extension/diagnostics_service_ash.h"
 #include "chrome/browser/ash/telemetry_extension/probe_service_ash.h"
 #include "chrome/browser/browser_process.h"
@@ -548,14 +548,14 @@
 
 void CrosapiAsh::BindSyncService(
     mojo::PendingReceiver<mojom::SyncService> receiver) {
-  ash::SyncServiceAsh* sync_service_ash =
-      ash::SyncServiceFactoryAsh::GetForProfile(GetAshProfile());
-  if (!sync_service_ash) {
-    // |sync_service_ash| is not always available. In particular, sync can be
-    // completely disabled via command line flags.
+  ash::SyncMojoServiceAsh* sync_mojo_service_ash =
+      ash::SyncMojoServiceFactoryAsh::GetForProfile(GetAshProfile());
+  if (!sync_mojo_service_ash) {
+    // |sync_mojo_service_ash| is not always available. In particular, sync can
+    // be completely disabled via command line flags.
     return;
   }
-  sync_service_ash->BindReceiver(std::move(receiver));
+  sync_mojo_service_ash->BindReceiver(std::move(receiver));
 }
 
 void CrosapiAsh::REMOVED_29(
diff --git a/chrome/browser/ash/dbus/dlp_files_policy_service_provider.cc b/chrome/browser/ash/dbus/dlp_files_policy_service_provider.cc
index 432d2cf..4fec4ef0 100644
--- a/chrome/browser/ash/dbus/dlp_files_policy_service_provider.cc
+++ b/chrome/browser/ash/dbus/dlp_files_policy_service_provider.cc
@@ -22,6 +22,23 @@
 
 namespace ash {
 
+namespace {
+
+// Maps dlp::FileAction proto enum to DlpWarnDialog::FilesAction enum.
+policy::DlpWarnDialog::FilesAction MapProtoToFilesAction(
+    dlp::FileAction file_action) {
+  switch (file_action) {
+    case dlp::FileAction::UPLOAD:
+    // TODO(crbug.com/1356109): Return upload FileAction.
+    case dlp::FileAction::OPEN:
+    // TODO(crbug.com/1356109): Return open FileAction.
+    case dlp::FileAction::TRANSFER:
+      return policy::DlpWarnDialog::FilesAction::kTransfer;
+  }
+}
+
+}  // namespace
+
 DlpFilesPolicyServiceProvider::DlpFilesPolicyServiceProvider() = default;
 DlpFilesPolicyServiceProvider::~DlpFilesPolicyServiceProvider() = default;
 
@@ -106,49 +123,65 @@
             "Unable to parse IsFilesTransferRestrictedRequest"));
     return;
   }
-  if (!request.has_destination_url()) {
+  if (!request.has_destination_url() && !request.has_destination_component()) {
     std::move(response_sender)
         .Run(dbus::ErrorResponse::FromMethodCall(
             method_call, DBUS_ERROR_INVALID_ARGS,
-            "Missing destination url in request"));
+            "Missing both destination url and component in request"));
     return;
   }
 
-  std::vector<GURL> source_urls;
-  for (const auto& url : request.files_sources())
-    source_urls.push_back(GURL(url));
-
-  Profile* profile = ProfileManager::GetPrimaryUserProfile();
-  DCHECK(profile);
+  std::vector<policy::DlpFilesController::FileDaemonInfo> files_info;
+  for (const auto& file : request.transferred_files()) {
+    if (!file.has_path() || !file.has_source_url()) {
+      LOG(ERROR) << "Missing file path or file source url";
+      continue;
+    }
+    files_info.emplace_back(base::FilePath(file.path()), file.source_url());
+  }
 
   policy::DlpRulesManager* rules_manager =
       policy::DlpRulesManagerFactory::GetForPrimaryProfile();
   DCHECK(rules_manager);
   policy::DlpFilesController* files_controller =
       rules_manager->GetDlpFilesController();
-
-  if (files_controller) {
-    files_controller->IsFilesTransferRestricted(
-        profile, source_urls, request.destination_url(),
-        policy::DlpWarnDialog::FilesAction::kTransfer,
-        base::BindOnce(
-            &DlpFilesPolicyServiceProvider::RespondWithRestrictedFilesTransfer,
-            weak_ptr_factory_.GetWeakPtr(), method_call,
-            std::move(response_sender)));
-  } else {
+  if (!files_controller) {
     RespondWithRestrictedFilesTransfer(method_call, std::move(response_sender),
-                                       std::vector<GURL>());
+                                       std::move(files_info));
+    return;
   }
+
+  absl::optional<policy::DlpFilesController::DlpFileDestination> destination;
+  if (request.has_destination_component()) {
+    destination.emplace(request.destination_component());
+  } else {
+    destination.emplace(request.destination_url());
+  }
+
+  policy::DlpWarnDialog::FilesAction files_action =
+      policy::DlpWarnDialog::FilesAction::kTransfer;
+  if (request.has_file_action())
+    files_action = MapProtoToFilesAction(request.file_action());
+
+  files_controller->IsFilesTransferRestricted(
+      std::move(files_info), std::move(destination.value()), files_action,
+      base::BindOnce(
+          &DlpFilesPolicyServiceProvider::RespondWithRestrictedFilesTransfer,
+          weak_ptr_factory_.GetWeakPtr(), method_call,
+          std::move(response_sender)));
 }
 
 void DlpFilesPolicyServiceProvider::RespondWithRestrictedFilesTransfer(
     dbus::MethodCall* method_call,
     dbus::ExportedObject::ResponseSender response_sender,
-    const std::vector<GURL>& restricted_sources) {
+    const std::vector<policy::DlpFilesController::FileDaemonInfo>&
+        restricted_files) {
   dlp::IsFilesTransferRestrictedResponse response_proto;
 
-  for (const auto& source : restricted_sources) {
-    response_proto.add_files_sources(source.spec());
+  for (const auto& file : restricted_files) {
+    dlp::FileMetadata* file_metadata = response_proto.add_restricted_files();
+    file_metadata->set_path(file.path.value());
+    file_metadata->set_source_url(file.source_url.spec());
   }
   std::unique_ptr<dbus::Response> response =
       dbus::Response::FromMethodCall(method_call);
diff --git a/chrome/browser/ash/dbus/dlp_files_policy_service_provider.h b/chrome/browser/ash/dbus/dlp_files_policy_service_provider.h
index e95234e..d40916d 100644
--- a/chrome/browser/ash/dbus/dlp_files_policy_service_provider.h
+++ b/chrome/browser/ash/dbus/dlp_files_policy_service_provider.h
@@ -9,11 +9,10 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "chrome/browser/ash/policy/dlp/dlp_files_controller.h"
 #include "chromeos/ash/components/dbus/services/cros_dbus_service.h"
 #include "dbus/exported_object.h"
 
-class GURL;
-
 namespace dbus {
 class MethodCall;
 }  // namespace dbus
@@ -52,7 +51,8 @@
   void RespondWithRestrictedFilesTransfer(
       dbus::MethodCall* method_call,
       dbus::ExportedObject::ResponseSender response_sender,
-      const std::vector<GURL>& restricted_sources);
+      const std::vector<policy::DlpFilesController::FileDaemonInfo>&
+          restricted_files);
 
   base::WeakPtrFactory<DlpFilesPolicyServiceProvider> weak_ptr_factory_{this};
 };
diff --git a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
index 5b9f441e..d0fd8955 100644
--- a/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
+++ b/chrome/browser/ash/file_manager/file_manager_browsertest_base.cc
@@ -2150,7 +2150,7 @@
   test::AddDefaultComponentExtensionsOnMainThread(profile());
 
   // Enable System Web Apps if needed.
-  if (options.media_swa || options.files_swa) {
+  if (options.media_swa) {
     ash::SystemWebAppManager::GetForTest(profile())
         ->InstallSystemAppsForTesting();
   }
@@ -2178,6 +2178,10 @@
 }
 
 void FileManagerBrowserTestBase::StartTest() {
+  if (GetOptions().files_swa) {
+    ash::SystemWebAppManager::GetForTest(profile())
+        ->InstallSystemAppsForTesting();
+  }
   const std::string full_test_name = GetFullTestCaseName();
   LOG(INFO) << "FileManagerBrowserTest::StartTest " << full_test_name;
   static const base::FilePath test_extension_dir =
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller.cc b/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
index 4bfa04e..966cc3d 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
+++ b/chrome/browser/ash/policy/dlp/dlp_files_controller.cc
@@ -24,6 +24,7 @@
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager_factory.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_warn_dialog.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_warn_notifier.h"
+#include "chrome/browser/profiles/profile_manager.h"
 #include "chromeos/dbus/dlp/dlp_client.h"
 #include "chromeos/dbus/dlp/dlp_service.pb.h"
 #include "storage/browser/file_system/file_system_url.h"
@@ -81,6 +82,26 @@
   return {};
 }
 
+// Maps |component| to DlpRulesManager::Component.
+DlpRulesManager::Component MapProtoToPolicyComponent(
+    dlp::DlpComponent component) {
+  switch (component) {
+    case dlp::DlpComponent::ARC:
+      return DlpRulesManager::Component::kArc;
+    case dlp::DlpComponent::CROSTINI:
+      return DlpRulesManager::Component::kCrostini;
+    case dlp::DlpComponent::PLUGIN_VM:
+      return DlpRulesManager::Component::kPluginVm;
+    case dlp::DlpComponent::USB:
+      return DlpRulesManager::Component::kUsb;
+    case dlp::DlpComponent::GOOGLE_DRIVE:
+      return DlpRulesManager::Component::kDrive;
+    case dlp::DlpComponent::UNKOWN_COMPONENT:
+    case dlp::DlpComponent::SYSTEM:
+      return DlpRulesManager::Component::kUnknownComponent;
+  }
+}
+
 }  // namespace
 
 DlpFilesController::DlpFileMetadata::DlpFileMetadata(
@@ -100,6 +121,29 @@
 DlpFilesController::DlpFileRestrictionDetails::~DlpFileRestrictionDetails() =
     default;
 
+DlpFilesController::FileDaemonInfo::FileDaemonInfo(
+    const base::FilePath& path,
+    const std::string& source_url)
+    : path(path), source_url(source_url) {}
+
+DlpFilesController::DlpFileDestination::DlpFileDestination(
+    const std::string& url)
+    : url_or_path(url) {}
+DlpFilesController::DlpFileDestination::DlpFileDestination(
+    const dlp::DlpComponent component)
+    : component(MapProtoToPolicyComponent(component)) {}
+
+DlpFilesController::DlpFileDestination&
+DlpFilesController::DlpFileDestination::operator=(const DlpFileDestination&) =
+    default;
+DlpFilesController::DlpFileDestination::DlpFileDestination(
+    DlpFileDestination&&) = default;
+DlpFilesController::DlpFileDestination&
+DlpFilesController::DlpFileDestination::operator=(DlpFileDestination&&) =
+    default;
+
+DlpFilesController::DlpFileDestination::~DlpFileDestination() = default;
+
 DlpFilesController::DlpFilesController(const DlpRulesManager& rules_manager)
     : rules_manager_(rules_manager),
       warn_notifier_(std::make_unique<DlpWarnNotifier>()) {}
@@ -107,7 +151,7 @@
 DlpFilesController::~DlpFilesController() = default;
 
 void DlpFilesController::GetDisallowedTransfers(
-    std::vector<storage::FileSystemURL> transferred_files,
+    const std::vector<storage::FileSystemURL>& transferred_files,
     storage::FileSystemURL destination,
     GetDisallowedTransfersCallback result_callback) {
   if (!chromeos::DlpClient::Get() || !chromeos::DlpClient::Get()->IsAlive()) {
@@ -132,7 +176,7 @@
   }
 
   request.set_destination_url(destination.path().value());
-
+  request.set_file_action(dlp::FileAction::TRANSFER);
   chromeos::DlpClient::Get()->CheckFilesTransfer(
       request,
       base::BindOnce(&DlpFilesController::ReturnDisallowedTransfers,
@@ -141,7 +185,7 @@
 }
 
 void DlpFilesController::GetDlpMetadata(
-    std::vector<storage::FileSystemURL> files,
+    const std::vector<storage::FileSystemURL>& files,
     GetDlpMetadataCallback result_callback) {
   if (!chromeos::DlpClient::Get() || !chromeos::DlpClient::Get()->IsAlive()) {
     std::move(result_callback).Run(std::vector<DlpFileMetadata>());
@@ -186,7 +230,7 @@
   }
 
   request.set_destination_url(destination.spec());
-
+  request.set_file_action(dlp::FileAction::UPLOAD);
   chromeos::DlpClient::Get()->CheckFilesTransfer(
       request,
       base::BindOnce(&DlpFilesController::ReturnAllowedUploads,
@@ -194,64 +238,92 @@
                      std::move(result_callback)));
 }
 
-void DlpFilesController::IsFilesTransferRestricted(
-    Profile* profile,
-    std::vector<GURL> files_sources,
-    std::string destination,
-    DlpWarnDialog::FilesAction files_action,
-    IsFilesTransferRestrictedCallback result_callback) {
+void DlpFilesController::CheckIfDownloadAllowed(
+    const GURL& download_url,
+    const base::FilePath& file_path,
+    CheckIfDownloadAllowedCallback result_callback) {
+  auto* profile = ProfileManager::GetPrimaryUserProfile();
   DCHECK(profile);
 
   auto dst_component =
-      MapFilePathtoPolicyComponent(profile, base::FilePath(destination));
-  std::vector<GURL> restricted_files_sources;
-  std::vector<GURL> warned_files_sources;
-  for (const auto& src : files_sources) {
+      MapFilePathtoPolicyComponent(profile, base::FilePath(file_path));
+  if (!dst_component.has_value()) {
+    // We may block downloads only if saved to external component, otherwise
+    // downloads should be allowed.
+    std::move(result_callback).Run(true);
+    return;
+  }
+
+  FileDaemonInfo file_info(base::FilePath(""), download_url.spec());
+  IsFilesTransferRestricted(
+      {std::move(file_info)}, DlpFileDestination(file_path.value()),
+      DlpWarnDialog::FilesAction::kDownload,
+      base::BindOnce(
+          [](CheckIfDownloadAllowedCallback result_callback,
+             const std::vector<FileDaemonInfo>& restricted_files) {
+            bool is_allowed = restricted_files.empty();
+            std::move(result_callback).Run(is_allowed);
+          },
+          std::move(result_callback)));
+}
+
+void DlpFilesController::IsFilesTransferRestricted(
+    const std::vector<FileDaemonInfo>& transferred_files,
+    const DlpFileDestination& destination,
+    DlpWarnDialog::FilesAction files_action,
+    IsFilesTransferRestrictedCallback result_callback) {
+  policy::DlpRulesManager* dlp_rules_manager =
+      policy::DlpRulesManagerFactory::GetForPrimaryProfile();
+  if (!dlp_rules_manager) {
+    std::move(result_callback).Run(std::vector<FileDaemonInfo>());
+    return;
+  }
+  auto* profile = ProfileManager::GetPrimaryUserProfile();
+  DCHECK(profile);
+  absl::optional<DlpRulesManager::Component> dst_component;
+  if (destination.component.has_value()) {
+    dst_component = *destination.component;
+  } else {
+    DCHECK(destination.url_or_path.has_value());
+    dst_component = MapFilePathtoPolicyComponent(
+        profile, base::FilePath(*destination.url_or_path));
+  }
+
+  std::vector<FileDaemonInfo> restricted_files;
+  std::vector<FileDaemonInfo> warned_files;
+  for (const auto& file : transferred_files) {
     DlpRulesManager::Level level;
     if (dst_component.has_value()) {
       level = rules_manager_.IsRestrictedComponent(
-          src, dst_component.value(), DlpRulesManager::Restriction::kFiles,
-          nullptr);
+          GURL(file.source_url), dst_component.value(),
+          DlpRulesManager::Restriction::kFiles, nullptr);
     } else {
-      // TODO(crbug.com/1286366): Revisit whether passing files paths here make
-      // sense.
+      // TODO(crbug.com/1286366): Revisit whether passing files paths here
+      // make sense.
+      DCHECK(destination.url_or_path.has_value());
       level = rules_manager_.IsRestrictedDestination(
-          src, GURL(destination), DlpRulesManager::Restriction::kFiles, nullptr,
-          nullptr);
+          GURL(file.source_url), GURL(*destination.url_or_path),
+          DlpRulesManager::Restriction::kFiles, nullptr, nullptr);
     }
 
     if (level == DlpRulesManager::Level::kBlock)
-      restricted_files_sources.push_back(src);
+      restricted_files.push_back(file);
     else if (level == DlpRulesManager::Level::kWarn)
-      warned_files_sources.push_back(src);
+      warned_files.push_back(file);
   }
-
-  if (warned_files_sources.empty()) {
-    std::move(result_callback).Run(std::move(restricted_files_sources));
+  if (warned_files.empty()) {
+    std::move(result_callback).Run(std::move(restricted_files));
     return;
   }
 
   warn_notifier_->ShowDlpFilesWarningDialog(
-      base::BindOnce(
-          &DlpFilesController::OnDlpWarnDialogReply,
-          weak_ptr_factory_.GetWeakPtr(), std::move(restricted_files_sources),
-          std::move(warned_files_sources), std::move(result_callback)),
+      base::BindOnce(&DlpFilesController::OnDlpWarnDialogReply,
+                     weak_ptr_factory_.GetWeakPtr(),
+                     std::move(restricted_files), std::move(warned_files),
+                     std::move(result_callback)),
       files_action);
 }
 
-void DlpFilesController::OnDlpWarnDialogReply(
-    std::vector<GURL> restricted_files_sources,
-    std::vector<GURL> warned_files_sources,
-    IsFilesTransferRestrictedCallback callback,
-    bool should_proceed) {
-  std::vector<GURL> blocked_files_sources(restricted_files_sources);
-  if (!should_proceed)
-    blocked_files_sources.insert(blocked_files_sources.end(),
-                                 warned_files_sources.begin(),
-                                 warned_files_sources.end());
-  std::move(callback).Run(std::move(blocked_files_sources));
-}
-
 std::vector<DlpFilesController::DlpFileRestrictionDetails>
 DlpFilesController::GetDlpRestrictionDetails(const std::string& sourceUrl) {
   const GURL source(sourceUrl);
@@ -321,6 +393,18 @@
   warn_notifier_ = std::move(warn_notifier);
 }
 
+void DlpFilesController::OnDlpWarnDialogReply(
+    std::vector<FileDaemonInfo> restricted_files,
+    std::vector<FileDaemonInfo> warned_files,
+    IsFilesTransferRestrictedCallback callback,
+    bool should_proceed) {
+  if (!should_proceed)
+    restricted_files.insert(restricted_files.end(),
+                            std::make_move_iterator(warned_files.begin()),
+                            std::make_move_iterator(warned_files.end()));
+  std::move(callback).Run(std::move(restricted_files));
+}
+
 void DlpFilesController::ReturnDisallowedTransfers(
     base::flat_map<std::string, storage::FileSystemURL> files_map,
     GetDisallowedTransfersCallback result_callback,
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller.h b/chrome/browser/ash/policy/dlp/dlp_files_controller.h
index 1b0976e..a15f728f 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_controller.h
+++ b/chrome/browser/ash/policy/dlp/dlp_files_controller.h
@@ -22,8 +22,6 @@
 class FileSystemURL;
 }  // namespace storage
 
-class Profile;
-
 namespace policy {
 
 // DlpFilesController is responsible for deciding whether file transfers are
@@ -71,15 +69,53 @@
     std::vector<DlpRulesManager::Component> components;
   };
 
+  // FileDaemonInfo represents file info used for communication with the DLP
+  // daemon.
+  struct FileDaemonInfo {
+    FileDaemonInfo() = delete;
+    FileDaemonInfo(const base::FilePath& path, const std::string& source_url);
+
+    friend bool operator==(const FileDaemonInfo& a, const FileDaemonInfo& b) {
+      return a.path == b.path && a.source_url == b.source_url;
+    }
+    friend bool operator!=(const FileDaemonInfo& a, const FileDaemonInfo& b) {
+      return !(a == b);
+    }
+
+    // File Path.
+    base::FilePath path;
+    // Source URL from which the file was downloaded.
+    GURL source_url;
+  };
+
+  // DlpFileDestination represents the destination for file transfer. It either
+  // has a url or a component.
+  struct DlpFileDestination {
+    explicit DlpFileDestination(const std::string& url);
+    explicit DlpFileDestination(const dlp::DlpComponent component);
+
+    DlpFileDestination& operator=(const DlpFileDestination&);
+    DlpFileDestination(DlpFileDestination&&);
+    DlpFileDestination& operator=(DlpFileDestination&&);
+
+    ~DlpFileDestination();
+
+    // Destination url or destination path.
+    absl::optional<std::string> url_or_path;
+    // Destination component.
+    absl::optional<DlpRulesManager::Component> component;
+  };
+
   using GetDisallowedTransfersCallback =
       base::OnceCallback<void(std::vector<storage::FileSystemURL>)>;
   using GetFilesRestrictedByAnyRuleCallback = GetDisallowedTransfersCallback;
   using FilterDisallowedUploadsCallback = base::OnceCallback<void(
       std::vector<blink::mojom::FileChooserFileInfoPtr>)>;
+  using CheckIfDownloadAllowedCallback = base::OnceCallback<void(bool)>;
   using GetDlpMetadataCallback =
       base::OnceCallback<void(std::vector<DlpFileMetadata>)>;
   using IsFilesTransferRestrictedCallback =
-      base::OnceCallback<void(const std::vector<GURL>&)>;
+      base::OnceCallback<void(const std::vector<FileDaemonInfo>&)>;
 
   explicit DlpFilesController(const DlpRulesManager& rules_manager);
   DlpFilesController(const DlpFilesController& other) = delete;
@@ -89,13 +125,13 @@
 
   // Returns a list of files disallowed to be transferred in |result_callback|.
   void GetDisallowedTransfers(
-      std::vector<storage::FileSystemURL> transferred_files,
+      const std::vector<storage::FileSystemURL>& transferred_files,
       storage::FileSystemURL destination,
       GetDisallowedTransfersCallback result_callback);
 
   // Retrieves metadata for each entry in |files| and returns it as a list in
   // |result_callback|.
-  void GetDlpMetadata(std::vector<storage::FileSystemURL> files,
+  void GetDlpMetadata(const std::vector<storage::FileSystemURL>& files,
                       GetDlpMetadataCallback result_callback);
 
   // Filters files disallowed to be uploaded to `destination`.
@@ -104,12 +140,18 @@
       const GURL& destination,
       FilterDisallowedUploadsCallback result_callback);
 
-  // Returns a sublist of |files_sources| in |result_callback| with files
-  // sources restricted from performing |action| to |destination|.
+  // Checks whether the file download from `download_url` to `file_path` is
+  // allowed.
+  void CheckIfDownloadAllowed(const GURL& download_url,
+                              const base::FilePath& file_path,
+                              CheckIfDownloadAllowedCallback result_callback);
+
+  // Returns a sublist of |transferred_files| which aren't allowed to be
+  // transferred to either |destination_url| or |destination_component| in
+  // |result_callback|.
   void IsFilesTransferRestricted(
-      Profile* profile,
-      std::vector<GURL> files_sources,
-      std::string destination,
+      const std::vector<FileDaemonInfo>& transferred_files,
+      const DlpFileDestination& destination,
       DlpWarnDialog::FilesAction files_action,
       IsFilesTransferRestrictedCallback result_callback);
 
@@ -127,10 +169,11 @@
   // Called back from warning dialog. Passes blocked files sources along
   // to |callback|. In case |should_proceed| is true, passes only
   // |restricted_files_sources|, otherwise passes also |warned_files_sources|.
-  void OnDlpWarnDialogReply(std::vector<GURL> restricted_files_sources,
-                            std::vector<GURL> warned_files_sources,
-                            IsFilesTransferRestrictedCallback callback,
-                            bool should_proceed);
+  void OnDlpWarnDialogReply(
+      std::vector<FileDaemonInfo> restricted_files_sources,
+      std::vector<FileDaemonInfo> warned_files_sources,
+      IsFilesTransferRestrictedCallback callback,
+      bool should_proceed);
 
   void ReturnDisallowedTransfers(
       base::flat_map<std::string, storage::FileSystemURL> files_map,
@@ -141,6 +184,7 @@
       std::vector<blink::mojom::FileChooserFileInfoPtr> uploaded_files,
       FilterDisallowedUploadsCallback result_callback,
       dlp::CheckFilesTransferResponse response);
+
   void ReturnDlpMetadata(std::vector<absl::optional<ino_t>> inodes,
                          GetDlpMetadataCallback result_callback,
                          const ::dlp::GetFilesSourcesResponse response);
diff --git a/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc b/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc
index 8d462ef0..5c7c20f 100644
--- a/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc
+++ b/chrome/browser/ash/policy/dlp/dlp_files_controller_unittest.cc
@@ -613,12 +613,16 @@
 TEST_P(DlpFilesExternalDestinationTest, IsFilesTransferRestricted_Component) {
   auto [mount_name, path, expected_component] = GetParam();
 
-  std::vector<GURL> files_sources(
-      {GURL(kExample1), GURL(kExample2), GURL(kExample3)});
-  std::vector<GURL> disallowed_sources({GURL(kExample1), GURL(kExample3)});
+  std::vector<DlpFilesController::FileDaemonInfo> transferred_files(
+      {DlpFilesController::FileDaemonInfo(base::FilePath(), kExample1),
+       DlpFilesController::FileDaemonInfo(base::FilePath(), kExample2),
+       DlpFilesController::FileDaemonInfo(base::FilePath(), kExample3)});
+  std::vector<DlpFilesController::FileDaemonInfo> disallowed_files(
+      {DlpFilesController::FileDaemonInfo(base::FilePath(), kExample1),
+       DlpFilesController::FileDaemonInfo(base::FilePath(), kExample3)});
 
   MockIsFilesTransferRestrictedCallback cb;
-  EXPECT_CALL(cb, Run(disallowed_sources)).Times(1);
+  EXPECT_CALL(cb, Run(disallowed_files)).Times(1);
 
   EXPECT_CALL(*rules_manager_,
               IsRestrictedComponent(_, expected_component, _, _))
@@ -631,8 +635,9 @@
   ASSERT_TRUE(dst_url.is_valid());
 
   files_controller_->IsFilesTransferRestricted(
-      profile_.get(), files_sources, dst_url.path().value(),
-      DlpWarnDialog::FilesAction::kDownload, cb.Get());
+      transferred_files,
+      DlpFilesController::DlpFileDestination(dst_url.path().value()),
+      DlpWarnDialog::FilesAction::kTransfer, cb.Get());
 }
 
 class DlpFilesWarningDialogTest
@@ -651,11 +656,13 @@
 TEST_P(DlpFilesWarningDialogTest,
        IsFilesTransferRestricted_FileDownloadWarned) {
   auto [should_proceed, disallowed_sources_str] = GetParam();
-  std::vector<GURL> disallowed_sources;
+  std::vector<DlpFilesController::FileDaemonInfo> disallowed_files;
   for (const auto& source : disallowed_sources_str)
-    disallowed_sources.emplace_back(source);
-  std::vector<GURL> files_sources(
-      {GURL(kExample1), GURL(kExample2), GURL(kExample3)});
+    disallowed_files.emplace_back(base::FilePath(), source);
+  std::vector<DlpFilesController::FileDaemonInfo> transferred_files(
+      {{base::FilePath(), kExample1},
+       {base::FilePath(), kExample2},
+       {base::FilePath(), kExample3}});
 
   storage::ExternalMountPoints* mount_points =
       storage::ExternalMountPoints::GetSystemInstance();
@@ -674,7 +681,7 @@
   EXPECT_CALL(*mock_dlp_warn_notifier, ShowDlpWarningDialog).Times(1);
 
   MockIsFilesTransferRestrictedCallback cb;
-  EXPECT_CALL(cb, Run(disallowed_sources)).Times(1);
+  EXPECT_CALL(cb, Run(disallowed_files)).Times(1);
 
   EXPECT_CALL(*rules_manager_,
               IsRestrictedComponent(_, DlpRulesManager::Component::kUsb, _, _))
@@ -688,7 +695,8 @@
   ASSERT_TRUE(dst_url.is_valid());
 
   files_controller_->IsFilesTransferRestricted(
-      profile_.get(), files_sources, dst_url.path().value(),
+      transferred_files,
+      DlpFilesController::DlpFileDestination(dst_url.path().value()),
       DlpWarnDialog::FilesAction::kDownload, cb.Get());
 
   storage::ExternalMountPoints::GetSystemInstance()->RevokeAllFileSystems();
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc
index 3df32c0..f392b62 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.cc
@@ -288,19 +288,20 @@
 
 void MetricReportingManager::InitNetworkCollectors(Profile* profile) {
   auto https_latency_sampler = std::make_unique<HttpsLatencySampler>();
-  auto network_telemetry_sampler =
-      std::make_unique<NetworkTelemetrySampler>(https_latency_sampler.get());
+  auto network_telemetry_sampler = std::make_unique<NetworkTelemetrySampler>();
   auto network_bandwidth_sampler = std::make_unique<NetworkBandwidthSampler>(
       g_browser_process->network_quality_tracker(), profile);
 
   // Network health telemetry.
-  InitPeriodicCollector(
-      std::move(network_telemetry_sampler), telemetry_report_queue_.get(),
-      /*enable_setting_path=*/::ash::kReportDeviceNetworkStatus,
-      metrics::kReportDeviceNetworkStatusDefaultValue,
-      ::ash::kReportDeviceNetworkTelemetryCollectionRateMs,
-      metrics::GetDefaultCollectionRate(
-          metrics::kDefaultNetworkTelemetryCollectionRate));
+  InitNetworkPeriodicCollector(network_telemetry_sampler.get(),
+                               telemetry_report_queue_.get());
+  samplers_.emplace_back(std::move(network_telemetry_sampler));
+
+  // HttpsLatency telemetry.
+  // |https_latency_sampler| will be added to |samplers_| in
+  // |InitPeriodicEventCollector|.
+  InitNetworkPeriodicCollector(https_latency_sampler.get(),
+                               telemetry_report_queue_.get());
 
   // HttpsLatency events.
   InitPeriodicEventCollector(
@@ -314,13 +315,23 @@
           metrics::kDefaultNetworkTelemetryEventCheckingRate));
 
   // Network bandwidth telemetry.
-  InitPeriodicCollector(
-      std::move(network_bandwidth_sampler), user_telemetry_report_queue_.get(),
-      /*enable_setting_path=*/::ash::kReportDeviceNetworkStatus,
+  InitNetworkPeriodicCollector(network_bandwidth_sampler.get(),
+                               user_telemetry_report_queue_.get());
+  samplers_.emplace_back(std::move(network_bandwidth_sampler));
+}
+
+void MetricReportingManager::InitNetworkPeriodicCollector(
+    Sampler* sampler,
+    MetricReportQueue* metric_report_queue) {
+  periodic_collectors_.emplace_back(delegate_->CreatePeriodicCollector(
+      sampler, metric_report_queue, &reporting_settings_,
+      /*enable_setting_path=*/
+      ::ash::kReportDeviceNetworkStatus,
       metrics::kReportDeviceNetworkStatusDefaultValue,
       ::ash::kReportDeviceNetworkTelemetryCollectionRateMs,
       metrics::GetDefaultCollectionRate(
-          metrics::kDefaultNetworkTelemetryCollectionRate));
+          metrics::kDefaultNetworkTelemetryCollectionRate),
+      /*rate_unit_to_ms=*/1));
 }
 
 void MetricReportingManager::InitAudioCollectors() {
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.h b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.h
index 1b218c5..06ad69e 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.h
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.h
@@ -118,6 +118,8 @@
       MetricReportQueue* metric_report_queue);
 
   void InitNetworkCollectors(Profile* profile);
+  void InitNetworkPeriodicCollector(Sampler* sampler,
+                                    MetricReportQueue* metric_report_queue);
 
   void InitAudioCollectors();
 
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc
index 5e3ac41..fc3bafd3 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager_unittest.cc
@@ -646,7 +646,9 @@
           /*disabled_features=*/{},
           /*is_affiliated=*/true, network_telemetry_settings,
           /*expected_count_before_login=*/0,
-          /*expected_count_after_login=*/2},
+          // 3 collectors should be created after login, network telemetry,
+          // https latency, and network bandwidth.
+          /*expected_count_after_login=*/3},
          {"AudioTelemetry_Unaffiliated", /*enabled_features=*/{},
           /*disabled_features=*/{},
           /*is_affiliated=*/false, audio_metric_settings,
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/network/https_latency_sampler.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/network/https_latency_sampler.cc
index cbc75af..3ef4e98 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/network/https_latency_sampler.cc
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/network/https_latency_sampler.cc
@@ -12,6 +12,7 @@
 #include "chromeos/ash/components/network/network_state_handler.h"
 #include "chromeos/ash/components/network/network_type_pattern.h"
 #include "components/reporting/proto/synced/metric_data.pb.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace reporting {
 namespace {
@@ -106,6 +107,11 @@
   CHECK(base::SequencedTaskRunnerHandle::IsSet());
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
+  if (!IsDeviceOnline()) {
+    std::move(callback).Run(absl::nullopt);
+    return;
+  }
+
   metric_callbacks_.push(std::move(callback));
   if (is_routine_running_) {
     return;
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/network/https_latency_sampler_unittest.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/network/https_latency_sampler_unittest.cc
index 3d615061..882ec8a8 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/network/https_latency_sampler_unittest.cc
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/network/https_latency_sampler_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ash/policy/reporting/metrics_reporting/network/https_latency_sampler.h"
 
+#include <algorithm>
 #include <memory>
 #include <string>
 #include <utility>
@@ -13,6 +14,7 @@
 #include "base/run_loop.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
+#include "base/test/bind.h"
 #include "base/test/task_environment.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "base/time/time.h"
@@ -50,6 +52,36 @@
 constexpr char kGuid[] = "guid";
 constexpr char kUserHash[] = "user_hash";
 
+void SetNetworkData(
+    std::vector<std::string> connection_states,
+    ::ash::NetworkHandlerTestHelper* network_handler_test_helper) {
+  auto* const service_client = network_handler_test_helper->service_test();
+  auto* const device_client = network_handler_test_helper->device_test();
+  network_handler_test_helper->profile_test()->AddProfile(kProfilePath,
+                                                          kUserHash);
+  base::RunLoop().RunUntilIdle();
+  network_handler_test_helper->service_test()->ClearServices();
+  network_handler_test_helper->device_test()->ClearDevices();
+  for (size_t i = 0; i < connection_states.size(); ++i) {
+    std::string index_str = base::StrCat({"_", base::NumberToString(i)});
+    const std::string device_path = base::StrCat({kDevicePath, index_str});
+    const std::string device_name = base::StrCat({kDeviceName, index_str});
+    const std::string service_path = base::StrCat({kServicePath, index_str});
+    const std::string network_name = base::StrCat({kNetworkName, index_str});
+    const std::string guid = base::StrCat({kGuid, index_str});
+    device_client->AddDevice(device_path, shill::kTypeEthernet, device_name);
+    base::RunLoop().RunUntilIdle();
+    service_client->AddService(service_path, guid, network_name,
+                               shill::kTypeEthernet, connection_states[i],
+                               /*visible=*/true);
+    service_client->SetServiceProperty(service_path, shill::kDeviceProperty,
+                                       base::Value(device_path));
+    service_client->SetServiceProperty(service_path, shill::kProfileProperty,
+                                       base::Value(kProfilePath));
+  }
+  base::RunLoop().RunUntilIdle();
+}
+
 class FakeNetworkDiagnostics : public NetworkDiagnostics {
  public:
   FakeNetworkDiagnostics() : NetworkDiagnostics(&fake_debug_daemon_client_) {}
@@ -134,6 +166,9 @@
 
 TEST(HttpsLatencySamplerTest, NoProblem) {
   base::test::TaskEnvironment task_environment;
+  ::ash::NetworkHandlerTestHelper network_handler_test_helper;
+  SetNetworkData({shill::kStateReady, shill::kStateOnline},
+                 &network_handler_test_helper);
 
   FakeNetworkDiagnostics diagnostics;
   int latency_ms = 100;
@@ -169,6 +204,9 @@
 
 TEST(HttpsLatencySamplerTest, FailedRequests) {
   base::test::TaskEnvironment task_environment;
+  ::ash::NetworkHandlerTestHelper network_handler_test_helper;
+  SetNetworkData({shill::kStateReady, shill::kStateOnline},
+                 &network_handler_test_helper);
 
   FakeNetworkDiagnostics diagnostics;
   diagnostics.SetResultProblem(HttpsLatencyProblemMojom::kFailedHttpsRequests);
@@ -203,6 +241,9 @@
 
 TEST(HttpsLatencySamplerTest, OverlappingCalls) {
   base::test::TaskEnvironment task_environment;
+  ::ash::NetworkHandlerTestHelper network_handler_test_helper;
+  SetNetworkData({shill::kStateReady, shill::kStateOnline},
+                 &network_handler_test_helper);
 
   FakeNetworkDiagnostics diagnostics;
   diagnostics.SetResultProblem(HttpsLatencyProblemMojom::kFailedDnsResolutions);
@@ -260,6 +301,9 @@
 
 TEST(HttpsLatencySamplerTest, SuccessiveCalls) {
   base::test::TaskEnvironment task_environment;
+  ::ash::NetworkHandlerTestHelper network_handler_test_helper;
+  SetNetworkData({shill::kStateReady, shill::kStateOnline},
+                 &network_handler_test_helper);
 
   FakeNetworkDiagnostics diagnostics;
   HttpsLatencySampler sampler(
@@ -328,6 +372,30 @@
   }
 }
 
+TEST(HttpsLatencySamplerTest, Offline) {
+  base::test::TaskEnvironment task_environment;
+  ::ash::NetworkHandlerTestHelper network_handler_test_helper;
+  SetNetworkData({shill::kStateReady, shill::kStateConfiguration},
+                 &network_handler_test_helper);
+
+  FakeNetworkDiagnostics diagnostics;
+  diagnostics.SetResultProblem(HttpsLatencyProblemMojom::kFailedHttpsRequests);
+  HttpsLatencySampler sampler(
+      std::make_unique<FakeHttpsLatencyDelegate>(&diagnostics));
+  bool callback_called = false;
+  absl::optional<MetricData> metric_data_result;
+
+  sampler.MaybeCollect(
+      base::BindLambdaForTesting([&callback_called, &metric_data_result](
+                                     absl::optional<MetricData> metric_data) {
+        callback_called = true;
+        metric_data_result = std::move(metric_data);
+      }));
+
+  ASSERT_TRUE(callback_called);
+  EXPECT_FALSE(metric_data_result.has_value());
+}
+
 struct HttpsLatencyEventDetectorTestCase {
   std::string test_name;
   HttpsLatencyProblem problem;
@@ -336,33 +404,6 @@
 class HttpsLatencyEventDetectorTest
     : public ::testing::TestWithParam<HttpsLatencyEventDetectorTestCase> {
  protected:
-  void SetNetworkData(std::vector<std::string> connection_states) {
-    auto* const service_client = network_handler_test_helper_.service_test();
-    auto* const device_client = network_handler_test_helper_.device_test();
-    network_handler_test_helper_.profile_test()->AddProfile(kProfilePath,
-                                                            kUserHash);
-    base::RunLoop().RunUntilIdle();
-    network_handler_test_helper_.service_test()->ClearServices();
-    network_handler_test_helper_.device_test()->ClearDevices();
-    for (size_t i = 0; i < connection_states.size(); ++i) {
-      std::string index_str = base::StrCat({"_", base::NumberToString(i)});
-      const std::string device_path = base::StrCat({kDevicePath, index_str});
-      const std::string device_name = base::StrCat({kDeviceName, index_str});
-      const std::string service_path = base::StrCat({kServicePath, index_str});
-      const std::string network_name = base::StrCat({kNetworkName, index_str});
-      const std::string guid = base::StrCat({kGuid, index_str});
-      device_client->AddDevice(device_path, shill::kTypeEthernet, device_name);
-      base::RunLoop().RunUntilIdle();
-      service_client->AddService(service_path, guid, network_name,
-                                 shill::kTypeEthernet, connection_states[i],
-                                 /*visible=*/true);
-      service_client->SetServiceProperty(service_path, shill::kDeviceProperty,
-                                         base::Value(device_path));
-      service_client->SetServiceProperty(service_path, shill::kProfileProperty,
-                                         base::Value(kProfilePath));
-    }
-    base::RunLoop().RunUntilIdle();
-  }
   base::test::TaskEnvironment task_environment_;
 
   ::ash::NetworkHandlerTestHelper network_handler_test_helper_;
@@ -492,7 +533,8 @@
 
   HttpsLatencyEventDetector detector;
 
-  SetNetworkData({shill::kStateReady, shill::kStateConfiguration});
+  SetNetworkData({shill::kStateReady, shill::kStateConfiguration},
+                 &network_handler_test_helper_);
   auto event_type =
       detector.DetectEvent(previous_metric_data, current_metric_data);
 
@@ -514,7 +556,8 @@
 
   HttpsLatencyEventDetector detector;
 
-  SetNetworkData({shill::kStateReady, shill::kStateOnline});
+  SetNetworkData({shill::kStateReady, shill::kStateOnline},
+                 &network_handler_test_helper_);
   auto event_type =
       detector.DetectEvent(previous_metric_data, current_metric_data);
 
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.cc
index 3997855..15bb16a 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.cc
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.cc
@@ -117,19 +117,9 @@
   NOTREACHED() << "Unsupported network type: " << type.ToDebugString();
   return NetworkType::NETWORK_TYPE_UNSPECIFIED;  // Unsupported
 }
-
-void OnHttpsLatencySamplerCompleted(OptionalMetricCallback callback,
-                                    MetricData network_data,
-                                    absl::optional<MetricData> latency_data) {
-  if (latency_data.has_value()) {
-    network_data.CheckTypeAndMergeFrom(latency_data.value());
-  }
-  std::move(callback).Run(std::move(network_data));
-}
 }  // namespace
 
-NetworkTelemetrySampler::NetworkTelemetrySampler(Sampler* https_latency_sampler)
-    : https_latency_sampler_(https_latency_sampler) {}
+NetworkTelemetrySampler::NetworkTelemetrySampler() = default;
 
 NetworkTelemetrySampler::~NetworkTelemetrySampler() = default;
 
@@ -199,7 +189,6 @@
   }
 
   bool should_report = false;
-  bool should_collect_latency = false;
   for (const auto* network : network_state_list) {
     ::ash::NetworkTypePattern type =
         ::ash::NetworkTypePattern::Primitive(network->type());
@@ -212,9 +201,6 @@
     }
 
     should_report = true;
-    if (network->IsOnline()) {
-      should_collect_latency = true;
-    }
 
     NetworkTelemetry* const network_telemetry =
         metric_data.mutable_telemetry_data()
@@ -280,12 +266,6 @@
     }
   }
 
-  if (should_collect_latency) {
-    https_latency_sampler_->MaybeCollect(
-        base::BindOnce(OnHttpsLatencySamplerCompleted, std::move(callback),
-                       std::move(metric_data)));
-    return;
-  }
   if (should_report) {
     std::move(callback).Run(std::move(metric_data));
     return;
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.h b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.h
index 84dfc7d3..0e381b1 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.h
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler.h
@@ -16,7 +16,7 @@
 // and connections states.
 class NetworkTelemetrySampler : public Sampler {
  public:
-  explicit NetworkTelemetrySampler(Sampler* https_latency_sampler);
+  NetworkTelemetrySampler();
 
   NetworkTelemetrySampler(const NetworkTelemetrySampler&) = delete;
   NetworkTelemetrySampler& operator=(const NetworkTelemetrySampler&) = delete;
@@ -35,8 +35,6 @@
       ::chromeos::cros_healthd::mojom::TelemetryInfoPtr cros_healthd_telemetry,
       base::flat_map<std::string, int> service_path_rssi_map);
 
-  Sampler* const https_latency_sampler_;
-
   base::WeakPtrFactory<NetworkTelemetrySampler> weak_ptr_factory_{this};
 };
 }  // namespace reporting
diff --git a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler_unittest.cc b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler_unittest.cc
index 44a092b4..51a385a 100644
--- a/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler_unittest.cc
+++ b/chrome/browser/ash/policy/reporting/metrics_reporting/network/network_telemetry_sampler_unittest.cc
@@ -45,12 +45,6 @@
 constexpr int64_t kLinkQuality = 1;
 constexpr int64_t kSignalStrength = 70;
 
-// Https latency constants.
-constexpr RoutineVerdict kVerdict = RoutineVerdict::PROBLEM;
-constexpr HttpsLatencyProblem kLatencyProblem =
-    HttpsLatencyProblem::VERY_HIGH_LATENCY;
-constexpr int64_t kLatencyMs = 3000;
-
 struct FakeNetworkData {
   std::string guid;
   std::string connection_state;
@@ -106,16 +100,6 @@
 
     ::ash::cros_healthd::FakeCrosHealthd::Initialize();
     SetWifiInterfaceData();
-
-    MetricData metric_data;
-    auto* latency_data = metric_data.mutable_telemetry_data()
-                             ->mutable_networks_telemetry()
-                             ->mutable_https_latency_data();
-    latency_data->set_verdict(kVerdict);
-    latency_data->set_problem(kLatencyProblem);
-    latency_data->set_latency_ms(kLatencyMs);
-    https_latency_sampler_ = std::make_unique<test::FakeSampler>();
-    https_latency_sampler_->SetMetricData(metric_data);
   }
 
   void TearDown() override {
@@ -174,8 +158,6 @@
     base::RunLoop().RunUntilIdle();
   }
 
-  std::unique_ptr<test::FakeSampler> https_latency_sampler_;
-
   base::test::TaskEnvironment task_environment_;
 
   ::ash::NetworkHandlerTestHelper network_handler_test_helper_;
@@ -191,8 +173,7 @@
        true /* is_configured */}};
 
   SetNetworkData(networks_data);
-  NetworkTelemetrySampler network_telemetry_sampler(
-      https_latency_sampler_.get());
+  NetworkTelemetrySampler network_telemetry_sampler;
   test::TestEvent<absl::optional<MetricData>> metric_collect_event;
   network_telemetry_sampler.MaybeCollect(metric_collect_event.cb());
   const absl::optional<MetricData> optional_result =
@@ -203,9 +184,6 @@
   const TelemetryData& result = optional_result->telemetry_data();
   ASSERT_TRUE(result.has_networks_telemetry());
 
-  // No online networks, no latency data should be collected.
-  EXPECT_FALSE(result.networks_telemetry().has_https_latency_data());
-
   ASSERT_THAT(result.networks_telemetry().network_telemetry(),
               ::testing::SizeIs(networks_data.size()));
   EXPECT_EQ(result.networks_telemetry().network_telemetry(0).guid(),
@@ -241,8 +219,7 @@
 TEST_F(NetworkTelemetrySamplerTest, NoNetworkData) {
   SetNetworkData({});
 
-  NetworkTelemetrySampler network_telemetry_sampler(
-      https_latency_sampler_.get());
+  NetworkTelemetrySampler network_telemetry_sampler;
   test::TestEvent<absl::optional<MetricData>> metric_collect_event;
   network_telemetry_sampler.MaybeCollect(metric_collect_event.cb());
   const absl::optional<MetricData> result = metric_collect_event.result();
@@ -258,8 +235,7 @@
        true /* is_visible */, true /* is_configured */}};
 
   SetNetworkData(networks_data);
-  NetworkTelemetrySampler network_telemetry_sampler(
-      https_latency_sampler_.get());
+  NetworkTelemetrySampler network_telemetry_sampler;
   test::TestEvent<absl::optional<MetricData>> metric_collect_event;
   network_telemetry_sampler.MaybeCollect(metric_collect_event.cb());
   const absl::optional<MetricData> result = metric_collect_event.result();
@@ -274,8 +250,7 @@
        false /* is_visible */, true /* is_configured */}};
 
   SetNetworkData(networks_data);
-  NetworkTelemetrySampler network_telemetry_sampler(
-      https_latency_sampler_.get());
+  NetworkTelemetrySampler network_telemetry_sampler;
   test::TestEvent<absl::optional<MetricData>> metric_collect_event;
   network_telemetry_sampler.MaybeCollect(metric_collect_event.cb());
   const absl::optional<MetricData> result = metric_collect_event.result();
@@ -291,8 +266,7 @@
        true /* is_configured */}};
 
   SetNetworkData(networks_data);
-  NetworkTelemetrySampler network_telemetry_sampler(
-      https_latency_sampler_.get());
+  NetworkTelemetrySampler network_telemetry_sampler;
   test::TestEvent<absl::optional<MetricData>> metric_collect_event;
   network_telemetry_sampler.MaybeCollect(metric_collect_event.cb());
   const absl::optional<MetricData> optional_result =
@@ -303,9 +277,6 @@
   const TelemetryData& result = optional_result->telemetry_data();
   ASSERT_TRUE(result.has_networks_telemetry());
 
-  // No online networks, no latency data should be collected.
-  EXPECT_FALSE(result.networks_telemetry().has_https_latency_data());
-
   ASSERT_THAT(result.networks_telemetry().network_telemetry(),
               ::testing::SizeIs(networks_data.size()));
   EXPECT_EQ(result.networks_telemetry().network_telemetry(0).guid(),
@@ -347,10 +318,8 @@
        true /* is_configured */}};
 
   SetNetworkData(networks_data);
-  https_latency_sampler_->SetMetricData(absl::nullopt);
 
-  NetworkTelemetrySampler network_telemetry_sampler(
-      https_latency_sampler_.get());
+  NetworkTelemetrySampler network_telemetry_sampler;
   test::TestEvent<absl::optional<MetricData>> metric_collect_event;
   network_telemetry_sampler.MaybeCollect(metric_collect_event.cb());
   const absl::optional<MetricData> optional_result =
@@ -361,9 +330,6 @@
   const TelemetryData& result = optional_result->telemetry_data();
   ASSERT_TRUE(result.has_networks_telemetry());
 
-  // Latency data is absent but network data is still collected.
-  EXPECT_FALSE(result.networks_telemetry().has_https_latency_data());
-
   ASSERT_THAT(result.networks_telemetry().network_telemetry(),
               ::testing::SizeIs(networks_data.size()));
   EXPECT_EQ(result.networks_telemetry().network_telemetry(0).guid(),
@@ -420,8 +386,7 @@
       R"({"GUID": "guid2", "Type": "wifi", "State": "online",
             "WiFi.SignalStrengthRssi": -60})");
 
-  NetworkTelemetrySampler network_telemetry_sampler(
-      https_latency_sampler_.get());
+  NetworkTelemetrySampler network_telemetry_sampler;
   test::TestEvent<absl::optional<MetricData>> metric_collect_event;
   network_telemetry_sampler.MaybeCollect(metric_collect_event.cb());
   const absl::optional<MetricData> optional_result =
@@ -432,15 +397,6 @@
   const TelemetryData& result = optional_result->telemetry_data();
   ASSERT_TRUE(result.has_networks_telemetry());
 
-  // An online network exists, latency data should be collected.
-  ASSERT_TRUE(result.networks_telemetry().has_https_latency_data());
-  EXPECT_EQ(result.networks_telemetry().https_latency_data().verdict(),
-            kVerdict);
-  EXPECT_EQ(result.networks_telemetry().https_latency_data().problem(),
-            kLatencyProblem);
-  EXPECT_EQ(result.networks_telemetry().https_latency_data().latency_ms(),
-            kLatencyMs);
-
   // Not configured network is not included
   ASSERT_THAT(result.networks_telemetry().network_telemetry(),
               ::testing::SizeIs(networks_data.size() - 1));
@@ -521,8 +477,7 @@
   network_handler_test_helper_.ConfigureService(
       R"({"GUID": "guid1", "Type": "wifi", "State": "idle",
             "WiFi.SignalStrengthRssi": -70})");
-  NetworkTelemetrySampler network_telemetry_sampler(
-      https_latency_sampler_.get());
+  NetworkTelemetrySampler network_telemetry_sampler;
   test::TestEvent<absl::optional<MetricData>> metric_collect_event;
   network_telemetry_sampler.MaybeCollect(metric_collect_event.cb());
   const absl::optional<MetricData> optional_result =
@@ -533,9 +488,6 @@
   const TelemetryData& result = optional_result->telemetry_data();
   ASSERT_TRUE(result.has_networks_telemetry());
 
-  // No online networks, no latency data should be collected.
-  EXPECT_FALSE(result.networks_telemetry().has_https_latency_data());
-
   ASSERT_THAT(result.networks_telemetry().network_telemetry(),
               ::testing::SizeIs(networks_data.size()));
   EXPECT_EQ(result.networks_telemetry().network_telemetry(0).guid(),
diff --git a/chrome/browser/ash/sync/sync_service_ash.cc b/chrome/browser/ash/sync/sync_mojo_service_ash.cc
similarity index 79%
rename from chrome/browser/ash/sync/sync_service_ash.cc
rename to chrome/browser/ash/sync/sync_mojo_service_ash.cc
index 5546380..02161b7 100644
--- a/chrome/browser/ash/sync/sync_service_ash.cc
+++ b/chrome/browser/ash/sync/sync_mojo_service_ash.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/ash/sync/sync_service_ash.h"
+#include "chrome/browser/ash/sync/sync_mojo_service_ash.h"
 
 #include "base/feature_list.h"
 #include "chrome/browser/ash/sync/sync_explicit_passphrase_client_ash.h"
@@ -11,7 +11,7 @@
 
 namespace ash {
 
-SyncServiceAsh::SyncServiceAsh(syncer::SyncService* sync_service) {
+SyncMojoServiceAsh::SyncMojoServiceAsh(syncer::SyncService* sync_service) {
   if (base::FeatureList::IsEnabled(
           syncer::kSyncChromeOSExplicitPassphraseSharing)) {
     explicit_passphrase_client_ =
@@ -23,20 +23,20 @@
   }
 }
 
-SyncServiceAsh::~SyncServiceAsh() = default;
+SyncMojoServiceAsh::~SyncMojoServiceAsh() = default;
 
-void SyncServiceAsh::BindReceiver(
+void SyncMojoServiceAsh::BindReceiver(
     mojo::PendingReceiver<crosapi::mojom::SyncService> receiver) {
   receivers_.Add(this, std::move(receiver));
 }
 
-void SyncServiceAsh::Shutdown() {
+void SyncMojoServiceAsh::Shutdown() {
   receivers_.Clear();
   user_settings_client_ = nullptr;
   explicit_passphrase_client_ = nullptr;
 }
 
-void SyncServiceAsh::BindExplicitPassphraseClient(
+void SyncMojoServiceAsh::BindExplicitPassphraseClient(
     mojo::PendingReceiver<crosapi::mojom::SyncExplicitPassphraseClient>
         receiver) {
   // Null if feature is disabled.
@@ -45,7 +45,7 @@
   }
 }
 
-void SyncServiceAsh::BindUserSettingsClient(
+void SyncMojoServiceAsh::BindUserSettingsClient(
     mojo::PendingReceiver<crosapi::mojom::SyncUserSettingsClient> receiver) {
   // Null if feature is disabled.
   if (user_settings_client_) {
diff --git a/chrome/browser/ash/sync/sync_service_ash.h b/chrome/browser/ash/sync/sync_mojo_service_ash.h
similarity index 69%
rename from chrome/browser/ash/sync/sync_service_ash.h
rename to chrome/browser/ash/sync/sync_mojo_service_ash.h
index 5132989..4b6fe524 100644
--- a/chrome/browser/ash/sync/sync_service_ash.h
+++ b/chrome/browser/ash/sync/sync_mojo_service_ash.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_ASH_SYNC_SYNC_SERVICE_ASH_H_
-#define CHROME_BROWSER_ASH_SYNC_SYNC_SERVICE_ASH_H_
+#ifndef CHROME_BROWSER_ASH_SYNC_SYNC_MOJO_SERVICE_ASH_H_
+#define CHROME_BROWSER_ASH_SYNC_SYNC_MOJO_SERVICE_ASH_H_
 
 #include <memory>
 
@@ -23,18 +23,15 @@
 
 // Implements Crosapi SyncService interface, that allows interaction of Lacros
 // and Ash SyncServices.
-// TODO(crbug.com/1233545): Consider renaming to something more distinguishable
-// from syncer::SyncService (e.g. SyncMojoService), especially if there will be
-// a need to create ash-specific SyncService implementation or code around its
-// initialization (e.g. SyncClient or SyncServiceFactory).
-class SyncServiceAsh : public KeyedService, public crosapi::mojom::SyncService {
+class SyncMojoServiceAsh : public KeyedService,
+                           public crosapi::mojom::SyncService {
  public:
   // |sync_service| must not be null. |this| should depend on |sync_service| and
   // be shutted down before it.
-  explicit SyncServiceAsh(syncer::SyncService* sync_service);
-  SyncServiceAsh(const SyncServiceAsh& other) = delete;
-  SyncServiceAsh& operator=(const SyncServiceAsh& other) = delete;
-  ~SyncServiceAsh() override;
+  explicit SyncMojoServiceAsh(syncer::SyncService* sync_service);
+  SyncMojoServiceAsh(const SyncMojoServiceAsh& other) = delete;
+  SyncMojoServiceAsh& operator=(const SyncMojoServiceAsh& other) = delete;
+  ~SyncMojoServiceAsh() override;
 
   void BindReceiver(
       mojo::PendingReceiver<crosapi::mojom::SyncService> receiver);
@@ -67,4 +64,4 @@
 
 }  // namespace ash
 
-#endif  // CHROME_BROWSER_ASH_SYNC_SYNC_SERVICE_ASH_H_
+#endif  // CHROME_BROWSER_ASH_SYNC_SYNC_MOJO_SERVICE_ASH_H_
diff --git a/chrome/browser/ash/sync/sync_service_ash_unittest.cc b/chrome/browser/ash/sync/sync_mojo_service_ash_unittest.cc
similarity index 61%
rename from chrome/browser/ash/sync/sync_service_ash_unittest.cc
rename to chrome/browser/ash/sync/sync_mojo_service_ash_unittest.cc
index 67a1906..d66d325 100644
--- a/chrome/browser/ash/sync/sync_service_ash_unittest.cc
+++ b/chrome/browser/ash/sync/sync_mojo_service_ash_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/ash/sync/sync_service_ash.h"
+#include "chrome/browser/ash/sync/sync_mojo_service_ash.h"
 
 #include "base/test/scoped_feature_list.h"
 #include "base/test/task_environment.h"
@@ -16,21 +16,24 @@
 
 namespace {
 
-class SyncServiceAshTest : public testing::Test {
+class SyncMojoServiceAshTest : public testing::Test {
  public:
-  SyncServiceAshTest() {
+  SyncMojoServiceAshTest() {
     override_features_.InitWithFeatures(
         /*enabled_features=*/{syncer::kSyncChromeOSExplicitPassphraseSharing,
                               syncer::kSyncChromeOSAppsToggleSharing},
         /*disabled_features=*/{});
-    sync_service_ash_ = std::make_unique<SyncServiceAsh>(&sync_service_);
+    sync_mojo_service_ash_ =
+        std::make_unique<SyncMojoServiceAsh>(&sync_service_);
   }
 
-  SyncServiceAshTest(const SyncServiceAshTest&) = delete;
-  SyncServiceAshTest& operator=(const SyncServiceAshTest&) = delete;
-  ~SyncServiceAshTest() override = default;
+  SyncMojoServiceAshTest(const SyncMojoServiceAshTest&) = delete;
+  SyncMojoServiceAshTest& operator=(const SyncMojoServiceAshTest&) = delete;
+  ~SyncMojoServiceAshTest() override = default;
 
-  SyncServiceAsh* sync_service_ash() { return sync_service_ash_.get(); }
+  SyncMojoServiceAsh* sync_mojo_service_ash() {
+    return sync_mojo_service_ash_.get();
+  }
 
   void RunAllPendingTasks() { task_environment_.RunUntilIdle(); }
 
@@ -39,15 +42,15 @@
   base::test::ScopedFeatureList override_features_;
 
   testing::NiceMock<syncer::MockSyncService> sync_service_;
-  std::unique_ptr<SyncServiceAsh> sync_service_ash_;
+  std::unique_ptr<SyncMojoServiceAsh> sync_mojo_service_ash_;
 };
 
-TEST_F(SyncServiceAshTest, ShouldSupportMultipleRemotes) {
+TEST_F(SyncMojoServiceAshTest, ShouldSupportMultipleRemotes) {
   mojo::Remote<crosapi::mojom::SyncService> remote1;
-  sync_service_ash()->BindReceiver(remote1.BindNewPipeAndPassReceiver());
+  sync_mojo_service_ash()->BindReceiver(remote1.BindNewPipeAndPassReceiver());
 
   mojo::Remote<crosapi::mojom::SyncService> remote2;
-  sync_service_ash()->BindReceiver(remote2.BindNewPipeAndPassReceiver());
+  sync_mojo_service_ash()->BindReceiver(remote2.BindNewPipeAndPassReceiver());
 
   // Disconnect handlers are not called synchronously. They shouldn't be called
   // in this test, but to verify that wait for all pending tasks to be
@@ -57,28 +60,28 @@
   EXPECT_TRUE(remote2.is_connected());
 }
 
-TEST_F(SyncServiceAshTest, ShouldDisconnectOnShutdown) {
-  mojo::Remote<crosapi::mojom::SyncService> sync_service_ash_remote;
-  sync_service_ash()->BindReceiver(
-      sync_service_ash_remote.BindNewPipeAndPassReceiver());
-  ASSERT_TRUE(sync_service_ash_remote.is_connected());
+TEST_F(SyncMojoServiceAshTest, ShouldDisconnectOnShutdown) {
+  mojo::Remote<crosapi::mojom::SyncService> sync_mojo_service_ash_remote;
+  sync_mojo_service_ash()->BindReceiver(
+      sync_mojo_service_ash_remote.BindNewPipeAndPassReceiver());
+  ASSERT_TRUE(sync_mojo_service_ash_remote.is_connected());
 
   mojo::Remote<crosapi::mojom::SyncExplicitPassphraseClient>
       explicit_passphrase_client_remote;
-  sync_service_ash()->BindExplicitPassphraseClient(
+  sync_mojo_service_ash()->BindExplicitPassphraseClient(
       explicit_passphrase_client_remote.BindNewPipeAndPassReceiver());
   ASSERT_TRUE(explicit_passphrase_client_remote.is_connected());
 
   mojo::Remote<crosapi::mojom::SyncUserSettingsClient>
       user_settings_client_remote;
-  sync_service_ash()->BindUserSettingsClient(
+  sync_mojo_service_ash()->BindUserSettingsClient(
       user_settings_client_remote.BindNewPipeAndPassReceiver());
   ASSERT_TRUE(user_settings_client_remote.is_connected());
 
-  sync_service_ash()->Shutdown();
+  sync_mojo_service_ash()->Shutdown();
   // Wait for the disconnect handler to be called.
   RunAllPendingTasks();
-  EXPECT_FALSE(sync_service_ash_remote.is_connected());
+  EXPECT_FALSE(sync_mojo_service_ash_remote.is_connected());
   EXPECT_FALSE(explicit_passphrase_client_remote.is_connected());
   EXPECT_FALSE(user_settings_client_remote.is_connected());
 }
diff --git a/chrome/browser/ash/sync/sync_mojo_service_factory_ash.cc b/chrome/browser/ash/sync/sync_mojo_service_factory_ash.cc
new file mode 100644
index 0000000..bbda96d
--- /dev/null
+++ b/chrome/browser/ash/sync/sync_mojo_service_factory_ash.cc
@@ -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.
+
+#include "chrome/browser/ash/sync/sync_mojo_service_factory_ash.h"
+
+#include "base/memory/singleton.h"
+#include "chrome/browser/ash/sync/sync_mojo_service_ash.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/sync/sync_service_factory.h"
+
+namespace ash {
+
+// static
+SyncMojoServiceAsh* SyncMojoServiceFactoryAsh::GetForProfile(Profile* profile) {
+  return static_cast<SyncMojoServiceAsh*>(
+      GetInstance()->GetServiceForBrowserContext(profile, /*create=*/true));
+}
+
+// static
+SyncMojoServiceFactoryAsh* SyncMojoServiceFactoryAsh::GetInstance() {
+  return base::Singleton<SyncMojoServiceFactoryAsh>::get();
+}
+
+SyncMojoServiceFactoryAsh::SyncMojoServiceFactoryAsh()
+    : ProfileKeyedServiceFactory("SyncMojoServiceAsh") {
+  DependsOn(SyncServiceFactory::GetInstance());
+}
+
+SyncMojoServiceFactoryAsh::~SyncMojoServiceFactoryAsh() = default;
+
+KeyedService* SyncMojoServiceFactoryAsh::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  Profile* profile = Profile::FromBrowserContext(context);
+  syncer::SyncService* sync_service =
+      SyncServiceFactory::GetForProfile(profile);
+  if (!sync_service) {
+    // Something prevented SyncService from being instantiated (e.g. sync is
+    // disabled by command line flag).
+    return nullptr;
+  }
+
+  return new SyncMojoServiceAsh(sync_service);
+}
+
+}  // namespace ash
diff --git a/chrome/browser/ash/sync/sync_mojo_service_factory_ash.h b/chrome/browser/ash/sync/sync_mojo_service_factory_ash.h
new file mode 100644
index 0000000..0db625a
--- /dev/null
+++ b/chrome/browser/ash/sync/sync_mojo_service_factory_ash.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 CHROME_BROWSER_ASH_SYNC_SYNC_MOJO_SERVICE_FACTORY_ASH_H_
+#define CHROME_BROWSER_ASH_SYNC_SYNC_MOJO_SERVICE_FACTORY_ASH_H_
+
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
+
+class Profile;
+
+namespace base {
+template <typename T>
+struct DefaultSingletonTraits;
+}  // namespace base
+
+namespace ash {
+
+class SyncMojoServiceAsh;
+
+class SyncMojoServiceFactoryAsh : public ProfileKeyedServiceFactory {
+ public:
+  static SyncMojoServiceAsh* GetForProfile(Profile* profile);
+  static SyncMojoServiceFactoryAsh* GetInstance();
+
+  SyncMojoServiceFactoryAsh(const SyncMojoServiceFactoryAsh& other) = delete;
+  SyncMojoServiceFactoryAsh& operator=(const SyncMojoServiceFactoryAsh& other) =
+      delete;
+
+ private:
+  friend struct base::DefaultSingletonTraits<SyncMojoServiceFactoryAsh>;
+
+  SyncMojoServiceFactoryAsh();
+  ~SyncMojoServiceFactoryAsh() override;
+
+  // BrowserContextKeyedServiceFactory implementation.
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* context) const override;
+};
+
+}  // namespace ash
+
+#endif  // CHROME_BROWSER_ASH_SYNC_SYNC_MOJO_SERVICE_FACTORY_ASH_H_
diff --git a/chrome/browser/ash/sync/sync_service_factory_ash.cc b/chrome/browser/ash/sync/sync_service_factory_ash.cc
deleted file mode 100644
index 8e3774c6..0000000
--- a/chrome/browser/ash/sync/sync_service_factory_ash.cc
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ash/sync/sync_service_factory_ash.h"
-
-#include "base/memory/singleton.h"
-#include "chrome/browser/ash/sync/sync_service_ash.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/sync/sync_service_factory.h"
-
-namespace ash {
-
-// static
-SyncServiceAsh* SyncServiceFactoryAsh::GetForProfile(Profile* profile) {
-  return static_cast<SyncServiceAsh*>(
-      GetInstance()->GetServiceForBrowserContext(profile, /*create=*/true));
-}
-
-// static
-SyncServiceFactoryAsh* SyncServiceFactoryAsh::GetInstance() {
-  return base::Singleton<SyncServiceFactoryAsh>::get();
-}
-
-SyncServiceFactoryAsh::SyncServiceFactoryAsh()
-    : ProfileKeyedServiceFactory("SyncServiceAsh") {
-  DependsOn(SyncServiceFactory::GetInstance());
-}
-
-SyncServiceFactoryAsh::~SyncServiceFactoryAsh() = default;
-
-KeyedService* SyncServiceFactoryAsh::BuildServiceInstanceFor(
-    content::BrowserContext* context) const {
-  Profile* profile = Profile::FromBrowserContext(context);
-  syncer::SyncService* sync_service =
-      SyncServiceFactory::GetForProfile(profile);
-  if (!sync_service) {
-    // Something prevented SyncService from being instantiated (e.g. sync is
-    // disabled by command line flag).
-    return nullptr;
-  }
-
-  return new SyncServiceAsh(sync_service);
-}
-
-}  // namespace ash
diff --git a/chrome/browser/ash/sync/sync_service_factory_ash.h b/chrome/browser/ash/sync/sync_service_factory_ash.h
deleted file mode 100644
index d47ef71..0000000
--- a/chrome/browser/ash/sync/sync_service_factory_ash.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_ASH_SYNC_SYNC_SERVICE_FACTORY_ASH_H_
-#define CHROME_BROWSER_ASH_SYNC_SYNC_SERVICE_FACTORY_ASH_H_
-
-#include "chrome/browser/profiles/profile_keyed_service_factory.h"
-
-class Profile;
-
-namespace base {
-template <typename T>
-struct DefaultSingletonTraits;
-}  // namespace base
-
-namespace ash {
-
-class SyncServiceAsh;
-
-class SyncServiceFactoryAsh : public ProfileKeyedServiceFactory {
- public:
-  static SyncServiceAsh* GetForProfile(Profile* profile);
-  static SyncServiceFactoryAsh* GetInstance();
-
-  SyncServiceFactoryAsh(const SyncServiceFactoryAsh& other) = delete;
-  SyncServiceFactoryAsh& operator=(const SyncServiceFactoryAsh& other) = delete;
-
- private:
-  friend struct base::DefaultSingletonTraits<SyncServiceFactoryAsh>;
-
-  SyncServiceFactoryAsh();
-  ~SyncServiceFactoryAsh() override;
-
-  // BrowserContextKeyedServiceFactory implementation.
-  KeyedService* BuildServiceInstanceFor(
-      content::BrowserContext* context) const override;
-};
-
-}  // namespace ash
-
-#endif  // CHROME_BROWSER_ASH_SYNC_SYNC_SERVICE_FACTORY_ASH_H_
diff --git a/chrome/browser/ash/system_web_apps/system_web_app_manager_browsertest.cc b/chrome/browser/ash/system_web_apps/system_web_app_manager_browsertest.cc
index c4f1b0dc..79609f9 100644
--- a/chrome/browser/ash/system_web_apps/system_web_app_manager_browsertest.cc
+++ b/chrome/browser/ash/system_web_apps/system_web_app_manager_browsertest.cc
@@ -1174,13 +1174,6 @@
   }
 }
 
-IN_PROC_BROWSER_TEST_P(SystemWebAppManagerInstallAllAppsBrowserTest,
-                       PRE_Upgrade) {
-  GetManager().InstallSystemAppsForTesting();
-  EXPECT_GE(GetManager().system_app_delegates().size(),
-            GetManager().GetAppIds().size());
-}
-
 IN_PROC_BROWSER_TEST_P(SystemWebAppManagerInstallAllAppsBrowserTest, Upgrade) {
   GetManager().InstallSystemAppsForTesting();
   const auto& app_ids = GetManager().GetAppIds();
diff --git a/chrome/browser/ash/web_applications/face_ml_integration_browsertest.cc b/chrome/browser/ash/web_applications/face_ml_integration_browsertest.cc
new file mode 100644
index 0000000..23d3e8db
--- /dev/null
+++ b/chrome/browser/ash/web_applications/face_ml_integration_browsertest.cc
@@ -0,0 +1,33 @@
+// 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/constants/ash_features.h"
+#include "ash/webui/face_ml_app_ui/url_constants.h"
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/ash/system_web_apps/test_support/system_web_app_integration_test.h"
+#include "chrome/browser/ash/system_web_apps/types/system_web_app_type.h"
+#include "content/public/test/browser_test.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+class FaceMLAppIntegrationTest : public ash::SystemWebAppIntegrationTest {
+ public:
+  FaceMLAppIntegrationTest() {
+    scoped_feature_list_.InitWithFeatures(
+        /*enabled_features=*/{chromeos::features::kFaceMLApp},
+        /*disabled_features=*/{});
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
+};
+
+// Test that the Face ML SWA installs and launches correctly.
+IN_PROC_BROWSER_TEST_P(FaceMLAppIntegrationTest, FaceMLApp) {
+  const GURL url(ash::kChromeUIFaceMLAppURL);
+  EXPECT_NO_FATAL_FAILURE(
+      ExpectSystemWebAppValid(ash::SystemWebAppType::FACE_ML, url, "Face ML"));
+}
+
+INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_REGULAR_PROFILE_P(
+    FaceMLAppIntegrationTest);
diff --git a/chrome/browser/ash/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.cc b/chrome/browser/ash/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.cc
index e11d1d6..590455d 100644
--- a/chrome/browser/ash/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.cc
+++ b/chrome/browser/ash/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.cc
@@ -18,7 +18,7 @@
 void FakeWilcoDtcSupportdClient::Init(dbus::Bus* bus) {}
 
 void FakeWilcoDtcSupportdClient::WaitForServiceToBeAvailable(
-    WaitForServiceToBeAvailableCallback callback) {
+    chromeos::WaitForServiceToBeAvailableCallback callback) {
   if (wait_for_service_to_be_available_result_) {
     base::ThreadTaskRunnerHandle::Get()->PostTask(
         FROM_HERE, base::BindOnce(std::move(callback),
@@ -55,7 +55,7 @@
       wait_for_service_to_be_available_result;
   if (!wait_for_service_to_be_available_result_)
     return;
-  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
   for (auto& callback : callbacks)
     std::move(callback).Run(*wait_for_service_to_be_available_result_);
diff --git a/chrome/browser/ash/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.h b/chrome/browser/ash/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.h
index f712772e..140700f 100644
--- a/chrome/browser/ash/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.h
+++ b/chrome/browser/ash/wilco_dtc_supportd/fake_wilco_dtc_supportd_client.h
@@ -29,7 +29,7 @@
 
   // WilcoDtcSupportdClient overrides:
   void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) override;
+      chromeos::WaitForServiceToBeAvailableCallback callback) override;
   void BootstrapMojoConnection(
       base::ScopedFD fd,
       chromeos::VoidDBusMethodCallback callback) override;
@@ -52,7 +52,7 @@
 
  private:
   absl::optional<bool> wait_for_service_to_be_available_result_;
-  std::vector<WaitForServiceToBeAvailableCallback>
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback>
       pending_wait_for_service_to_be_available_callbacks_;
 
   absl::optional<bool> bootstrap_mojo_connection_result_;
diff --git a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_client.cc b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_client.cc
index db5a8db..2c9b5a96 100644
--- a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_client.cc
+++ b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_client.cc
@@ -39,7 +39,7 @@
 
   // WilcoDtcSupportdClient overrides:
   void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) override;
+      chromeos::WaitForServiceToBeAvailableCallback callback) override;
   void BootstrapMojoConnection(
       base::ScopedFD fd,
       chromeos::VoidDBusMethodCallback callback) override;
@@ -56,7 +56,7 @@
 WilcoDtcSupportdClientImpl::~WilcoDtcSupportdClientImpl() = default;
 
 void WilcoDtcSupportdClientImpl::WaitForServiceToBeAvailable(
-    WaitForServiceToBeAvailableCallback callback) {
+    chromeos::WaitForServiceToBeAvailableCallback callback) {
   wilco_dtc_supportd_proxy_->WaitForServiceToBeAvailable(std::move(callback));
 }
 
diff --git a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_client.h b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_client.h
index 6c28b81..7f81a9f 100644
--- a/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_client.h
+++ b/chrome/browser/ash/wilco_dtc_supportd/wilco_dtc_supportd_client.h
@@ -32,7 +32,7 @@
   // Registers |callback| to run when the wilco_dtc_supportd service becomes
   // available.
   virtual void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) = 0;
+      chromeos::WaitForServiceToBeAvailableCallback callback) = 0;
 
   // Bootstrap the Mojo connection between Chrome and the wilco_dtc_supportd
   // daemon. |fd| is the file descriptor with the child end of the Mojo pipe.
diff --git a/chrome/browser/browsing_data/browsing_data_history_observer_service.cc b/chrome/browser/browsing_data/browsing_data_history_observer_service.cc
index 9e7540f..bc12136 100644
--- a/chrome/browser/browsing_data/browsing_data_history_observer_service.cc
+++ b/chrome/browser/browsing_data/browsing_data_history_observer_service.cc
@@ -139,10 +139,12 @@
               : base::NullCallback();
 
   const uint32_t removal_mask =
+      content::StoragePartition::REMOVE_DATA_MASK_AGGREGATION_SERVICE |
       content::StoragePartition::
           REMOVE_DATA_MASK_ATTRIBUTION_REPORTING_SITE_CREATED |
       content::StoragePartition::
-          REMOVE_DATA_MASK_ATTRIBUTION_REPORTING_INTERNAL;
+          REMOVE_DATA_MASK_ATTRIBUTION_REPORTING_INTERNAL |
+      content::StoragePartition::REMOVE_DATA_MASK_PRIVATE_AGGREGATION_INTERNAL;
   const uint32_t quota_removal_mask = 0;
   storage_partition->ClearData(
       removal_mask, quota_removal_mask, std::move(storage_key_matcher),
diff --git a/chrome/browser/browsing_data/browsing_data_history_observer_service_unittest.cc b/chrome/browser/browsing_data/browsing_data_history_observer_service_unittest.cc
index f040889..76e72d7 100644
--- a/chrome/browser/browsing_data/browsing_data_history_observer_service_unittest.cc
+++ b/chrome/browser/browsing_data/browsing_data_history_observer_service_unittest.cc
@@ -82,10 +82,13 @@
 
   const absl::optional<RemovalData>& removal_data = partition.GetRemovalData();
   EXPECT_TRUE(removal_data.has_value());
-  EXPECT_EQ(content::StoragePartition::
+  EXPECT_EQ(content::StoragePartition::REMOVE_DATA_MASK_AGGREGATION_SERVICE |
+                content::StoragePartition::
                     REMOVE_DATA_MASK_ATTRIBUTION_REPORTING_SITE_CREATED |
                 content::StoragePartition::
-                    REMOVE_DATA_MASK_ATTRIBUTION_REPORTING_INTERNAL,
+                    REMOVE_DATA_MASK_ATTRIBUTION_REPORTING_INTERNAL |
+                content::StoragePartition::
+                    REMOVE_DATA_MASK_PRIVATE_AGGREGATION_INTERNAL,
             removal_data->removal_mask);
   EXPECT_EQ(0u, removal_data->quota_storage_removal_mask);
   EXPECT_EQ(base::Time(), removal_data->begin);
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_constants.h b/chrome/browser/browsing_data/chrome_browsing_data_remover_constants.h
index c29358c..56251e7 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_constants.h
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_constants.h
@@ -56,8 +56,7 @@
 #endif
     DATA_TYPE_SITE_USAGE_DATA | DATA_TYPE_DURABLE_PERMISSION |
     DATA_TYPE_EXTERNAL_PROTOCOL_DATA | DATA_TYPE_ISOLATED_ORIGINS |
-    content::BrowsingDataRemover::DATA_TYPE_PRIVACY_SANDBOX |
-    content::BrowsingDataRemover::DATA_TYPE_ATTRIBUTION_REPORTING;
+    content::BrowsingDataRemover::DATA_TYPE_PRIVACY_SANDBOX;
 
 // Datatypes protected by Important Sites.
 constexpr DataType IMPORTANT_SITES_DATA_TYPES =
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 a52cf3e..24f19e0 100644
--- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
+++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
@@ -1205,12 +1205,11 @@
 #if !BUILDFLAG(IS_ANDROID)
   if (remove_mask & constants::DATA_TYPE_HISTORY &&
       web_app::AreWebAppsEnabled(profile_)) {
-    auto callback =
-        CreateTaskCompletionClosure(TracingDataType::kWebAppHistory);
     auto* web_app_provider =
         web_app::WebAppProvider::GetForLocalAppsUnchecked(profile_);
-    web_app::ClearWebAppBrowsingData(delete_begin, delete_end, web_app_provider,
-                                     std::move(callback));
+    web_app::ClearWebAppBrowsingData(
+        delete_begin, delete_end, web_app_provider,
+        CreateTaskCompletionClosure(TracingDataType::kWebAppHistory));
   }
 #endif  // !BUILDFLAG(IS_ANDROID)
 
diff --git a/chrome/browser/certificate_manager_model.cc b/chrome/browser/certificate_manager_model.cc
index bf594177..39662fe 100644
--- a/chrome/browser/certificate_manager_model.cc
+++ b/chrome/browser/certificate_manager_model.cc
@@ -27,7 +27,7 @@
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/resource_context.h"
-#include "crypto/nss_util.h"
+#include "crypto/scoped_nss_types.h"
 #include "net/base/net_errors.h"
 #include "net/cert/cert_database.h"
 #include "net/cert/x509_certificate.h"
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc
index 0c2dfbca..937ebaef 100644
--- a/chrome/browser/chrome_browser_main.cc
+++ b/chrome/browser/chrome_browser_main.cc
@@ -1106,28 +1106,6 @@
   }
 #endif
 
-  if (command_line->HasSwitch(switches::kProfileEmail) &&
-      !command_line->HasSwitch(switches::kProfileDirectory)) {
-    // Use GetSwitchValueNative() rather than GetSwitchValueASCII() to support
-    // non-ASCII email addresses.
-    base::CommandLine::StringType email_native =
-        command_line->GetSwitchValueNative(switches::kProfileEmail);
-    if (!email_native.empty()) {
-      std::string email;
-#if BUILDFLAG(IS_WIN)
-      email = base::WideToUTF8(email_native);
-#else
-      email = std::move(email_native);
-#endif
-      base::FilePath profile_dir =
-          browser_process_->profile_manager()->GetProfileDirForEmail(email);
-      if (!profile_dir.empty()) {
-        command_line->AppendSwitchPath(switches::kProfileDirectory,
-                                       profile_dir.BaseName());
-      }
-    }
-  }
-
   // ChromeOS needs ui::ResourceBundle::InitSharedInstance to be called before
   // this.
   browser_process_->PreCreateThreads();
diff --git a/chrome/browser/chrome_navigation_browsertest.cc b/chrome/browser/chrome_navigation_browsertest.cc
index f038111..9030e8ae 100644
--- a/chrome/browser/chrome_navigation_browsertest.cc
+++ b/chrome/browser/chrome_navigation_browsertest.cc
@@ -70,6 +70,7 @@
 #include "net/dns/mock_host_resolver.h"
 #include "services/metrics/public/cpp/ukm_builders.h"
 #include "services/network/public/cpp/features.h"
+#include "services/network/public/cpp/network_switches.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/mojom/use_counter/metrics/web_feature.mojom-shared.h"
@@ -1160,20 +1161,28 @@
 
   void SetUp() override {
     https_server_.ServeFilesFromSourceDirectory("chrome/test/data");
+    // Also serve files from the extensions test directory as it has a
+    // /webstore/ directory, which the Webstore hosted app expects for the URL
+    // it is associated with.
+    https_server_.ServeFilesFromSourceDirectory("chrome/test/data/extensions");
     ASSERT_TRUE(https_server_.InitializeAndListen());
     ChromeNavigationBrowserTest::SetUp();
   }
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
-    // Override the webstore URL.
-    command_line->AppendSwitchASCII(
-        ::switches::kAppsGalleryURL,
-        https_server()->GetURL("chrome.foo.com", "/frame_tree").spec());
-
     // Ignore cert errors so that the webstore URL can be loaded from a site
     // other than localhost (the EmbeddedTestServer serves a certificate that
     // is valid for localhost).
     command_line->AppendSwitch(switches::kIgnoreCertificateErrors);
+    // Add a host resolver rule to map all outgoing requests to the test server.
+    // This allows us to use "real" hostnames and standard ports in URLs (i.e.,
+    // without having to inject the port number into all URLs). This is
+    // important as the URL check to determine if a navigation is to/from the
+    // new Webstore compares the full origin, which includes the scheme, host
+    // and port.
+    command_line->AppendSwitchASCII(
+        network::switches::kHostResolverRules,
+        "MAP * " + https_server_.host_port_pair().ToString());
 
     ChromeNavigationBrowserTest::SetUpCommandLine(command_line);
   }
@@ -1183,65 +1192,182 @@
     ChromeNavigationBrowserTest::SetUpOnMainThread();
   }
 
-  net::EmbeddedTestServer* https_server() { return &https_server_; }
-
  private:
   net::EmbeddedTestServer https_server_;
 };
 
-// Make sure that Chrome Web Store origins are isolated from the rest of their
-// foo.com site.  See https://crbug.com/939108.
+// Tests that Chrome Web Store URL used by the hosted app in production
+// (chrome.google.com/webstore/) is isolated from the rest of google.com and
+// other chrome.google.com pages not in the /webstore/ path. See
+// https://crbug.com/939108.
 IN_PROC_BROWSER_TEST_F(WebstoreIsolationBrowserTest, WebstorePopupIsIsolated) {
-  const GURL first_url = https_server()->GetURL("foo.com", "/title1.html");
+  const GURL first_url("https://google.com/title1.html");
   ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), first_url));
-  content::WebContents* web_contents =
+  content::WebContents* initial_web_contents =
       browser()->tab_strip_model()->GetActiveWebContents();
+  scoped_refptr<content::SiteInstance> initial_instance(
+      initial_web_contents->GetPrimaryMainFrame()->GetSiteInstance());
 
-  // Open a popup for chrome.foo.com and ensure that it's isolated in a
-  // different SiteInstance and process from the rest of foo.com.  Note that
-  // we're opening a URL that does *not* match the web store URL due to a
-  // different path, so there will be no BrowsingInstance swap, and window.open
-  // is still expected to return a valid window reference.
-  content::TestNavigationObserver popup_waiter(nullptr, 1);
-  popup_waiter.StartWatchingNewWebContents();
-  const GURL webstore_origin_url =
-      https_server()->GetURL("chrome.foo.com", "/title1.html");
-  EXPECT_TRUE(content::EvalJs(
-                  web_contents,
-                  content::JsReplace("!!window.open($1);", webstore_origin_url))
-                  .ExtractBool());
-  popup_waiter.Wait();
+  // Open a popup for chrome.google.com and ensure that it's isolated in a
+  // different SiteInstance and process from the previous google.com page.
+  const GURL webstore_origin_url("https://chrome.google.com/title1.html");
+  {
+    content::TestNavigationObserver popup_waiter(webstore_origin_url);
+    popup_waiter.StartWatchingNewWebContents();
+    EXPECT_TRUE(content::EvalJs(initial_web_contents,
+                                content::JsReplace("!!window.open($1);",
+                                                   webstore_origin_url))
+                    .ExtractBool());
+    popup_waiter.WaitForNavigationFinished();
+    EXPECT_TRUE(popup_waiter.last_navigation_succeeded());
+  }
   EXPECT_EQ(2, browser()->tab_strip_model()->count());
   content::WebContents* popup =
       browser()->tab_strip_model()->GetActiveWebContents();
-  EXPECT_NE(popup, web_contents);
-  EXPECT_TRUE(content::WaitForLoadStop(popup));
+  EXPECT_NE(popup, initial_web_contents);
+  EXPECT_EQ(webstore_origin_url, popup->GetLastCommittedURL());
 
   scoped_refptr<content::SiteInstance> popup_instance(
       popup->GetPrimaryMainFrame()->GetSiteInstance());
-  EXPECT_NE(web_contents->GetPrimaryMainFrame()->GetSiteInstance(),
-            popup_instance);
-  EXPECT_NE(
-      web_contents->GetPrimaryMainFrame()->GetSiteInstance()->GetProcess(),
-      popup_instance->GetProcess());
+  EXPECT_NE(initial_instance, popup_instance);
+  EXPECT_NE(initial_instance->GetProcess(), popup_instance->GetProcess());
+  // This URL still does *not* match the web store URL due to it not having the
+  // /webstore/ path, so there will not have been a full BrowsingInstance swap.
+  EXPECT_TRUE(initial_instance->IsRelatedSiteInstance(popup_instance.get()));
 
-  // Also navigate the popup to the full web store URL and confirm that this
+  // Now navigate the popup to the full web store URL. This will again cause it
+  // to be isolated in a different SiteInstance and process from the previous
+  // pages, but also now cause a BrowsingInstance swap.
+  {
+    const GURL webstore_url(
+        "https://chrome.google.com/webstore/mock_store.html");
+    content::TestNavigationObserver navigation_waiter(popup);
+    EXPECT_TRUE(
+        ExecuteScript(popup, "location = '" + webstore_url.spec() + "';"));
+    navigation_waiter.WaitForNavigationFinished();
+    EXPECT_TRUE(navigation_waiter.last_navigation_succeeded());
+    EXPECT_EQ(webstore_url, popup->GetLastCommittedURL());
+  }
+  scoped_refptr<content::SiteInstance> webstore_instance(
+      popup->GetPrimaryMainFrame()->GetSiteInstance());
+  EXPECT_NE(webstore_instance, popup_instance);
+  EXPECT_NE(webstore_instance, initial_instance);
+  EXPECT_NE(webstore_instance->GetProcess(), initial_instance->GetProcess());
+  EXPECT_NE(webstore_instance->GetProcess(), popup_instance->GetProcess());
+  EXPECT_FALSE(webstore_instance->IsRelatedSiteInstance(popup_instance.get()));
+  EXPECT_FALSE(
+      webstore_instance->IsRelatedSiteInstance(initial_instance.get()));
+}
+
+// Make sure that the new Chrome Web Store URL used in production
+// (webstore.google.com) is isolated from the rest of the google.com domain.
+IN_PROC_BROWSER_TEST_F(WebstoreIsolationBrowserTest,
+                       NewWebstorePopupIsIsolated) {
+  const GURL first_url("https://google.com/title1.html");
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), first_url));
+  content::WebContents* initial_web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  scoped_refptr<content::SiteInstance> initial_instance(
+      initial_web_contents->GetPrimaryMainFrame()->GetSiteInstance());
+
+  // Open a popup for webstore.google.com and ensure that it's isolated in a
+  // different SiteInstance and process from the rest of google.com. Since the
+  // new Webstore encompasses the entire subdomain, there should have also been
+  // a BrowsingInstance swap at this point.
+  const GURL webstore_origin_url("https://webstore.google.com/title1.html");
+  {
+    content::TestNavigationObserver popup_waiter(webstore_origin_url);
+    popup_waiter.StartWatchingNewWebContents();
+    EXPECT_TRUE(content::EvalJs(initial_web_contents,
+                                content::JsReplace("!!window.open($1);",
+                                                   webstore_origin_url))
+                    .ExtractBool());
+    popup_waiter.WaitForNavigationFinished();
+    EXPECT_TRUE(popup_waiter.last_navigation_succeeded());
+  }
+  EXPECT_EQ(2, browser()->tab_strip_model()->count());
+  content::WebContents* popup =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  EXPECT_NE(popup, initial_web_contents);
+  EXPECT_EQ(webstore_origin_url, popup->GetLastCommittedURL());
+
+  scoped_refptr<content::SiteInstance> popup_instance(
+      popup->GetPrimaryMainFrame()->GetSiteInstance());
+  EXPECT_NE(initial_instance, popup_instance);
+  EXPECT_NE(initial_instance->GetProcess(), popup_instance->GetProcess());
+  EXPECT_FALSE(initial_instance->IsRelatedSiteInstance(popup_instance.get()));
+}
+
+class WebstoreOverrideIsolationBrowserTest
+    : public WebstoreIsolationBrowserTest {
+ public:
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    // Override the webstore URL.
+    command_line->AppendSwitchASCII(::switches::kAppsGalleryURL,
+                                    "https://chrome.foo.com/frame_tree");
+
+    WebstoreIsolationBrowserTest::SetUpCommandLine(command_line);
+  }
+};
+
+// Make sure that Chrome Web Store origins are isolated from the rest of their
+// site when overriding the URL from the command line. See
+// https://crbug.com/939108.
+IN_PROC_BROWSER_TEST_F(WebstoreOverrideIsolationBrowserTest,
+                       WebstorePopupIsIsolated) {
+  const GURL first_url("https://foo.com/title1.html");
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), first_url));
+  content::WebContents* initial_web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  scoped_refptr<content::SiteInstance> initial_instance(
+      initial_web_contents->GetPrimaryMainFrame()->GetSiteInstance());
+
+  // Open a popup for chrome.foo.com and ensure that it's isolated in a
+  // different SiteInstance and process from the rest of foo.com.
+  const GURL webstore_origin_url("https://chrome.foo.com/title1.html");
+  {
+    content::TestNavigationObserver popup_waiter(webstore_origin_url);
+    popup_waiter.StartWatchingNewWebContents();
+    EXPECT_TRUE(content::EvalJs(initial_web_contents,
+                                content::JsReplace("!!window.open($1);",
+                                                   webstore_origin_url))
+                    .ExtractBool());
+    popup_waiter.WaitForNavigationFinished();
+    EXPECT_TRUE(popup_waiter.last_navigation_succeeded());
+  }
+  EXPECT_EQ(2, browser()->tab_strip_model()->count());
+  content::WebContents* popup =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  EXPECT_NE(popup, initial_web_contents);
+  EXPECT_EQ(webstore_origin_url, popup->GetLastCommittedURL());
+
+  scoped_refptr<content::SiteInstance> popup_instance(
+      popup->GetPrimaryMainFrame()->GetSiteInstance());
+  EXPECT_NE(initial_instance, popup_instance);
+  EXPECT_NE(initial_instance->GetProcess(), popup_instance->GetProcess());
+  // This URL still does *not* match the web store URL due to it not having the
+  // /frame_tree/ path, so there will not have been a full BrowsingInstance
+  // swap.
+  EXPECT_TRUE(initial_instance->IsRelatedSiteInstance(popup_instance.get()));
+
+  // Now navigate the popup to the full web store URL and confirm that this
   // causes a BrowsingInstance swap.
-  const GURL webstore_url =
-      https_server()->GetURL("chrome.foo.com", "/frame_tree/simple.htm");
-  content::TestNavigationManager manager(popup, webstore_url);
-  EXPECT_TRUE(
-      ExecuteScript(popup, "location = '" + webstore_url.spec() + "';"));
-  manager.WaitForNavigationFinished();
-  EXPECT_NE(popup->GetPrimaryMainFrame()->GetSiteInstance(), popup_instance);
-  EXPECT_NE(popup->GetPrimaryMainFrame()->GetSiteInstance(),
-            web_contents->GetPrimaryMainFrame()->GetSiteInstance());
+  {
+    const GURL webstore_url("https://chrome.foo.com/frame_tree/simple.htm");
+    content::TestNavigationObserver navigation_waiter(popup);
+    EXPECT_TRUE(
+        ExecuteScript(popup, "location = '" + webstore_url.spec() + "';"));
+    navigation_waiter.WaitForNavigationFinished();
+    EXPECT_TRUE(navigation_waiter.last_navigation_succeeded());
+    EXPECT_EQ(webstore_url, popup->GetLastCommittedURL());
+  }
+  scoped_refptr<content::SiteInstance> webstore_instance(
+      popup->GetPrimaryMainFrame()->GetSiteInstance());
+  EXPECT_NE(webstore_instance, popup_instance);
+  EXPECT_NE(webstore_instance, initial_instance);
+  EXPECT_FALSE(webstore_instance->IsRelatedSiteInstance(popup_instance.get()));
   EXPECT_FALSE(
-      popup->GetPrimaryMainFrame()->GetSiteInstance()->IsRelatedSiteInstance(
-          popup_instance.get()));
-  EXPECT_FALSE(
-      popup->GetPrimaryMainFrame()->GetSiteInstance()->IsRelatedSiteInstance(
-          web_contents->GetPrimaryMainFrame()->GetSiteInstance()));
+      webstore_instance->IsRelatedSiteInstance(initial_instance.get()));
 }
 
 // Check that it's possible to navigate to a chrome scheme URL from a crashed
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 5f92462..c6a9e76 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -1859,10 +1859,10 @@
     "../ash/sync/sync_error_notifier_factory.h",
     "../ash/sync/sync_explicit_passphrase_client_ash.cc",
     "../ash/sync/sync_explicit_passphrase_client_ash.h",
-    "../ash/sync/sync_service_ash.cc",
-    "../ash/sync/sync_service_ash.h",
-    "../ash/sync/sync_service_factory_ash.cc",
-    "../ash/sync/sync_service_factory_ash.h",
+    "../ash/sync/sync_mojo_service_ash.cc",
+    "../ash/sync/sync_mojo_service_ash.h",
+    "../ash/sync/sync_mojo_service_factory_ash.cc",
+    "../ash/sync/sync_mojo_service_factory_ash.h",
     "../ash/sync/sync_user_settings_client_ash.cc",
     "../ash/sync/sync_user_settings_client_ash.h",
     "../ash/system/automatic_reboot_manager.cc",
@@ -3428,7 +3428,7 @@
     "../ash/sync/os_sync_util_unittest.cc",
     "../ash/sync/sync_error_notifier_unittest.cc",
     "../ash/sync/sync_explicit_passphrase_client_ash_unittest.cc",
-    "../ash/sync/sync_service_ash_unittest.cc",
+    "../ash/sync/sync_mojo_service_ash_unittest.cc",
     "../ash/sync/sync_user_settings_client_ash_unittest.cc",
     "../ash/system/automatic_reboot_manager_unittest.cc",
     "../ash/system/device_disabling_manager_unittest.cc",
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
index 3e8224b..c18e427 100644
--- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
+++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
@@ -1239,7 +1239,7 @@
 
     DCHECK_EQ(tasks_.front().status, Task::kScheduled);
     tasks_.pop_front();
-    auto runner = base::SequencedTaskRunnerHandle::Get();
+    const auto& runner = base::SequencedTaskRunnerHandle::Get();
     auto closure = base::BindOnce(&EventGenerator::SendEvent,
                                   weak_ptr_factory_.GetWeakPtr());
     // Non moving tasks can be done immediately.
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc b/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc
index 70bd8ea..21fe2d6 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_rules_manager_impl.cc
@@ -183,10 +183,8 @@
 }
 
 void OnSetDlpFilesPolicy(const ::dlp::SetDlpFilesPolicyResponse response) {
-  if (DlpScopedFileAccessDelegate::HasInstance()) {
-    DlpScopedFileAccessDelegate::DeleteInstance();
-  }
   if (response.has_error_message()) {
+    DlpScopedFileAccessDelegate::DeleteInstance();
     LOG(ERROR) << "Failed to set DLP Files policy and start DLP daemon, error: "
                << response.error_message();
     return;
@@ -210,9 +208,7 @@
 
 DlpRulesManagerImpl::~DlpRulesManagerImpl() {
   DataTransferDlpController::DeleteInstance();
-  if (DlpScopedFileAccessDelegate::HasInstance()) {
-    DlpScopedFileAccessDelegate::DeleteInstance();
-  }
+  DlpScopedFileAccessDelegate::DeleteInstance();
 }
 
 // static
@@ -627,7 +623,7 @@
 #if BUILDFLAG(IS_CHROMEOS_ASH)
     files_controller_ = std::make_unique<DlpFilesController>(*this);
 #endif
-  } else if (DlpScopedFileAccessDelegate::HasInstance()) {
+  } else {
     DlpScopedFileAccessDelegate::DeleteInstance();
   }
 }
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.cc b/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.cc
index 9c573f0..dc442d6 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.h"
 
 #include <sys/stat.h>
-#include <cstddef>
 
 #include "base/process/process_handle.h"
 #include "chromeos/dbus/dlp/dlp_client.h"
@@ -14,8 +13,6 @@
 
 namespace {
 
-static DlpScopedFileAccessDelegate* g_delegate = nullptr;
-
 ino_t GetInodeValue(const base::FilePath& path) {
   struct stat file_stats;
   if (stat(path.value().c_str(), &file_stats) != 0)
@@ -26,24 +23,10 @@
 }  // namespace
 
 // static
-DlpScopedFileAccessDelegate* DlpScopedFileAccessDelegate::Get() {
-  return g_delegate;
-}
-
-// static
-bool DlpScopedFileAccessDelegate::HasInstance() {
-  return g_delegate;
-}
-
-// static
 void DlpScopedFileAccessDelegate::Initialize(chromeos::DlpClient* client) {
-  g_delegate = new DlpScopedFileAccessDelegate(client);
-}
-
-// static
-void DlpScopedFileAccessDelegate::DeleteInstance() {
-  delete g_delegate;
-  g_delegate = nullptr;
+  if (!HasInstance()) {
+    new DlpScopedFileAccessDelegate(client);
+  }
 }
 
 DlpScopedFileAccessDelegate::DlpScopedFileAccessDelegate(
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.h b/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.h
index ac339f5..5b29a8a6 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate.h
@@ -14,6 +14,7 @@
 #include "base/memory/raw_ptr.h"
 #include "chromeos/dbus/dlp/dlp_service.pb.h"
 #include "components/file_access/scoped_file_access.h"
+#include "components/file_access/scoped_file_access_delegate.h"
 #include "url/gurl.h"
 
 namespace chromeos {
@@ -24,35 +25,28 @@
 
 // Delegate class to proxy file access requests to DLP daemon over D-Bus when
 // DLP Files restrictions should apply.
-class DlpScopedFileAccessDelegate {
+class DlpScopedFileAccessDelegate
+    : public file_access::ScopedFileAccessDelegate {
  public:
-  ~DlpScopedFileAccessDelegate() = default;
-
-  // Returns the singleton instance if was initialized.
-  // Otherwise it means that no files DLP restrictions should be applied.
-  static DlpScopedFileAccessDelegate* Get();
+  ~DlpScopedFileAccessDelegate() override = default;
 
   // Initializes the singleton instance.
   static void Initialize(chromeos::DlpClient* client);
 
-  // Deletes the singleton instance.
-  static void DeleteInstance();
-
-  // Checks if the singleton is initialized
-  static bool HasInstance();
-
   // Requests access to |files| in order to be sent to |destination_url|.
   // |continuation_callback| is called with a token that should be hold until
   // `open()` operation on the files finished.
   void RequestFilesAccess(
       const std::vector<base::FilePath>& files,
       const GURL& destination_url,
-      base::OnceCallback<void(file_access::ScopedFileAccess)> callback);
+      base::OnceCallback<void(file_access::ScopedFileAccess)> callback)
+      override;
+
+ protected:
+  explicit DlpScopedFileAccessDelegate(chromeos::DlpClient* client);
 
  private:
   friend class DlpScopedFileAccessDelegateTest;
-  explicit DlpScopedFileAccessDelegate(chromeos::DlpClient* client);
-
   // Handles D-Bus response to access files.
   void OnResponse(
       base::OnceCallback<void(file_access::ScopedFileAccess)> callback,
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate_unittest.cc b/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate_unittest.cc
index b724a5a7..42a2736 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate_unittest.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_scoped_file_access_delegate_unittest.cc
@@ -9,6 +9,7 @@
 #include "base/test/task_environment.h"
 #include "base/test/test_future.h"
 #include "chromeos/dbus/dlp/fake_dlp_client.h"
+#include "components/file_access/scoped_file_access_delegate.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace policy {
@@ -45,4 +46,28 @@
   EXPECT_FALSE(future2.Get<0>().is_allowed());
 }
 
+TEST_F(DlpScopedFileAccessDelegateTest, TestFileAccessSingleton) {
+  base::FilePath file_path;
+  base::CreateTemporaryFile(&file_path);
+
+  DlpScopedFileAccessDelegate::Initialize(&fake_dlp_client_);
+
+  base::test::TestFuture<file_access::ScopedFileAccess> future1;
+  auto* delegate = file_access::ScopedFileAccessDelegate::Get();
+  delegate->RequestFilesAccess({file_path}, GURL("example.com"),
+                               future1.GetCallback());
+  EXPECT_TRUE(future1.Get<0>().is_allowed());
+
+  fake_dlp_client_.SetFileAccessAllowed(false);
+  base::test::TestFuture<file_access::ScopedFileAccess> future2;
+  delegate->RequestFilesAccess({file_path}, GURL("example.com"),
+                               future2.GetCallback());
+  EXPECT_FALSE(future2.Get<0>().is_allowed());
+}
+
+TEST_F(DlpScopedFileAccessDelegateTest, TestMultipleInstances) {
+  DlpScopedFileAccessDelegate::Initialize(nullptr);
+  EXPECT_NO_FATAL_FAILURE(DlpScopedFileAccessDelegate::Initialize(nullptr));
+}
+
 }  // namespace policy
diff --git a/chrome/browser/devtools/device/devtools_android_bridge.cc b/chrome/browser/devtools/device/devtools_android_bridge.cc
index 1b17b90..8cbf931 100644
--- a/chrome/browser/devtools/device/devtools_android_bridge.cc
+++ b/chrome/browser/devtools/device/devtools_android_bridge.cc
@@ -316,7 +316,6 @@
   std::set<net::HostPortPair> targets;
   if (!preferenceValue || preferenceValue->empty())
     return targets;
-  std::string address;
   for (const auto& address : *preferenceValue) {
     if (!address.is_string())
       continue;
diff --git a/chrome/browser/devtools/protocol/devtools_printtopdf_browsertest.cc b/chrome/browser/devtools/protocol/devtools_printtopdf_browsertest.cc
index ada87c14..fe60f204 100644
--- a/chrome/browser/devtools/protocol/devtools_printtopdf_browsertest.cc
+++ b/chrome/browser/devtools/protocol/devtools_printtopdf_browsertest.cc
@@ -279,9 +279,8 @@
 
     PrintToPdfAndRenderPage(std::move(params), 0);
 
-    int x = 0;
     int y = bitmap_height() / 2;
-    uint32_t start_clr = GetPixelRGB(x, y);
+    uint32_t start_clr = GetPixelRGB(0, y);
     EXPECT_EQ(start_clr, 0x123456u);
 
     int red_square_width = 0;
diff --git a/chrome/browser/download/download_file_picker.cc b/chrome/browser/download/download_file_picker.cc
index d61546a..86c311dfb 100644
--- a/chrome/browser/download/download_file_picker.cc
+++ b/chrome/browser/download/download_file_picker.cc
@@ -127,29 +127,25 @@
       files_controller = rules_manager->GetDlpFilesController();
 
     if (files_controller) {
-      files_controller->IsFilesTransferRestricted(
-          Profile::FromBrowserContext(web_contents->GetBrowserContext()),
-          {download_item_->GetURL()}, path.value(),
-          policy::DlpWarnDialog::FilesAction::kDownload,
+      files_controller->CheckIfDownloadAllowed(
+          download_item_->GetURL(), path,
           base::BindOnce(&DownloadFilePicker::CompleteFileSelection,
                          base::Unretained(this), path));
     } else {
-      CompleteFileSelection(path, std::vector<GURL>());
+      CompleteFileSelection(path, /*is_allowed=*/true);
     }
-
     return;
   }
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
-  CompleteFileSelection(path, std::vector<GURL>());
+  CompleteFileSelection(path, /*is_allowed=*/true);
   // Deletes |this|
 }
 
-void DownloadFilePicker::CompleteFileSelection(
-    const base::FilePath& path,
-    const std::vector<GURL>& restricted_sources) {
+void DownloadFilePicker::CompleteFileSelection(const base::FilePath& path,
+                                               bool is_allowed) {
   base::FilePath selected_path(path);
 #if BUILDFLAG(IS_CHROMEOS_ASH)
-  if (!restricted_sources.empty())
+  if (!is_allowed)
     selected_path.clear();
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
   std::move(file_selected_callback_)
diff --git a/chrome/browser/download/download_file_picker.h b/chrome/browser/download/download_file_picker.h
index d1b3ad1..bbbaeff 100644
--- a/chrome/browser/download/download_file_picker.h
+++ b/chrome/browser/download/download_file_picker.h
@@ -49,11 +49,10 @@
   // policy.
   void OnFileSelected(const base::FilePath& virtual_path);
 
-  // Called when restricted files sources are obtained.
+  // Called when `is_allowed` is obtained.
   // Runs |file_selected_callback_| with |path| and then deletes this
   // object.
-  void CompleteFileSelection(const base::FilePath& path,
-                             const std::vector<GURL>& restricted_sources);
+  void CompleteFileSelection(const base::FilePath& path, bool is_allowed);
 
   // SelectFileDialog::Listener implementation.
   void FileSelected(const base::FilePath& path,
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_downloads_delegate.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_downloads_delegate.cc
index 3350481..213b5f0 100644
--- a/chrome/browser/enterprise/connectors/analysis/content_analysis_downloads_delegate.cc
+++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_downloads_delegate.cc
@@ -42,11 +42,10 @@
     if (stored_result) {
       stored_result->user_justification = user_justification;
     } else {
-      auto stored_result =
-          std::make_unique<enterprise_connectors::ScanResult>();
-      stored_result->user_justification = user_justification;
+      auto scan_result = std::make_unique<enterprise_connectors::ScanResult>();
+      scan_result->user_justification = user_justification;
       download_item_->SetUserData(enterprise_connectors::ScanResult::kKey,
-                                  std::move(stored_result));
+                                  std::move(scan_result));
     }
   }
 
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.cc b/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.cc
index faf0a2f..e8a0d45 100644
--- a/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.cc
+++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.cc
@@ -10,6 +10,10 @@
 #include "content/public/browser/browser_thread.h"
 
 namespace enterprise_connectors {
+namespace {
+
+ContentAnalysisSdkManager* sdk_manager_for_testing = nullptr;
+}
 
 ContentAnalysisSdkManager::WrappedClient::WrappedClient(
     std::unique_ptr<content_analysis::sdk::Client> client)
@@ -19,10 +23,18 @@
 
 // static
 ContentAnalysisSdkManager* ContentAnalysisSdkManager::Get() {
+  if (sdk_manager_for_testing)
+    return sdk_manager_for_testing;
   static base::NoDestructor<ContentAnalysisSdkManager> manager;
   return manager.get();
 }
 
+// static
+void ContentAnalysisSdkManager::SetManagerForTesting(
+    ContentAnalysisSdkManager* manager) {
+  sdk_manager_for_testing = manager;
+}
+
 ContentAnalysisSdkManager::ContentAnalysisSdkManager() = default;
 
 ContentAnalysisSdkManager::~ContentAnalysisSdkManager() = default;
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.h b/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.h
index dc1e27f..6e88a69 100644
--- a/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.h
+++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.h
@@ -66,6 +66,8 @@
   }
 
  protected:
+  static void SetManagerForTesting(ContentAnalysisSdkManager* manager);
+
   // Protected for testing.
   ContentAnalysisSdkManager();
   ~ContentAnalysisSdkManager();
diff --git a/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_client.cc b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_client.cc
new file mode 100644
index 0000000..6d3f7d2
--- /dev/null
+++ b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_client.cc
@@ -0,0 +1,45 @@
+// 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/enterprise/connectors/analysis/fake_content_analysis_sdk_client.h"
+
+namespace enterprise_connectors {
+
+FakeContentAnalysisSdkClient::FakeContentAnalysisSdkClient(
+    const content_analysis::sdk::Client::Config& config)
+    : config_(config) {}
+
+FakeContentAnalysisSdkClient::~FakeContentAnalysisSdkClient() = default;
+
+const content_analysis::sdk::Client::Config&
+FakeContentAnalysisSdkClient::GetConfig() const {
+  return config_;
+}
+
+int FakeContentAnalysisSdkClient::Send(
+    const content_analysis::sdk::ContentAnalysisRequest& request,
+    content_analysis::sdk::ContentAnalysisResponse* response) {
+  *response = response_;
+  return send_status_;
+}
+
+int FakeContentAnalysisSdkClient::Acknowledge(
+    const content_analysis::sdk::ContentAnalysisAcknowledgement& ack) {
+  return ack_status_;
+}
+
+void FakeContentAnalysisSdkClient::SetSendStatus(int status) {
+  send_status_ = status;
+}
+
+void FakeContentAnalysisSdkClient::SetSendResponse(
+    const content_analysis::sdk::ContentAnalysisResponse& response) {
+  response_ = response;
+}
+
+void FakeContentAnalysisSdkClient::SetAckStatus(int status) {
+  ack_status_ = status;
+}
+
+}  // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_client.h b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_client.h
new file mode 100644
index 0000000..72667bd
--- /dev/null
+++ b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_client.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 CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_CONTENT_ANALYSIS_SDK_CLIENT_H_
+#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_CONTENT_ANALYSIS_SDK_CLIENT_H_
+
+#include "third_party/content_analysis_sdk/src/browser/include/content_analysis/sdk/analysis_client.h"
+
+namespace enterprise_connectors {
+// A derivative of content analysis SDK client that creates fake clients
+// not dependent on having a real service provider agent running.
+class FakeContentAnalysisSdkClient : public content_analysis::sdk::Client {
+ public:
+  explicit FakeContentAnalysisSdkClient(
+      const content_analysis::sdk::Client::Config& config);
+
+  ~FakeContentAnalysisSdkClient() override;
+
+  // content_analysis::sdk::Client:
+  const content_analysis::sdk::Client::Config& GetConfig() const override;
+  int Send(const content_analysis::sdk::ContentAnalysisRequest& request,
+           content_analysis::sdk::ContentAnalysisResponse* response) override;
+  int Acknowledge(const content_analysis::sdk::ContentAnalysisAcknowledgement&
+                      ack) override;
+
+  // Configure analysis request sending status.
+  void SetSendStatus(int status);
+
+  // Configure agent response.
+  void SetSendResponse(
+      const content_analysis::sdk::ContentAnalysisResponse& response);
+
+  // Configure response acknowledgement status.
+  void SetAckStatus(int status);
+
+ private:
+  content_analysis::sdk::Client::Config config_;
+  content_analysis::sdk::ContentAnalysisResponse response_;
+  int send_status_;
+  int ack_status_;
+};
+
+}  // namespace enterprise_connectors
+
+#endif  // CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_CONTENT_ANALYSIS_SDK_CLIENT_H_
diff --git a/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_manager.cc b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_manager.cc
new file mode 100644
index 0000000..d06a47be
--- /dev/null
+++ b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_manager.cc
@@ -0,0 +1,27 @@
+// 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/enterprise/connectors/analysis/fake_content_analysis_sdk_manager.h"
+#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_client.h"
+
+#include <cstddef>
+
+namespace enterprise_connectors {
+
+FakeContentAnalysisSdkManager::FakeContentAnalysisSdkManager() {
+  ContentAnalysisSdkManager::SetManagerForTesting(this);
+}
+
+FakeContentAnalysisSdkManager::~FakeContentAnalysisSdkManager() {
+  ContentAnalysisSdkManager::SetManagerForTesting(nullptr);
+}
+
+// TODO(b/226679912): May need to add setter methods to access fake client.
+std::unique_ptr<content_analysis::sdk::Client>
+FakeContentAnalysisSdkManager::CreateClient(
+    const content_analysis::sdk::Client::Config& config) {
+  return std::make_unique<FakeContentAnalysisSdkClient>(config);
+}
+
+}  // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_manager.h b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_manager.h
new file mode 100644
index 0000000..dd1c971
--- /dev/null
+++ b/chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_manager.h
@@ -0,0 +1,27 @@
+// 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_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_CONTENT_ANALYSIS_SDK_MANAGER_H_
+#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_CONTENT_ANALYSIS_SDK_MANAGER_H_
+
+#include "chrome/browser/enterprise/connectors/analysis/content_analysis_sdk_manager.h"
+#include "chrome/browser/enterprise/connectors/analysis/fake_content_analysis_sdk_client.h"
+#include "third_party/content_analysis_sdk/src/browser/include/content_analysis/sdk/analysis_client.h"
+
+namespace enterprise_connectors {
+// A derivative of ContentAnalysisSdkManager that creates fake SDK clients
+// in order to not depend on having a real service provider agent running.
+class FakeContentAnalysisSdkManager : public ContentAnalysisSdkManager {
+ protected:
+  FakeContentAnalysisSdkManager();
+
+  ~FakeContentAnalysisSdkManager();
+
+  std::unique_ptr<content_analysis::sdk::Client> CreateClient(
+      const content_analysis::sdk::Client::Config& config) override;
+};
+
+}  // namespace enterprise_connectors
+
+#endif  // CHROME_BROWSER_ENTERPRISE_CONNECTORS_ANALYSIS_FAKE_CONTENT_ANALYSIS_SDK_MANAGER_H_
diff --git a/chrome/browser/enterprise/connectors/device_trust/common/metrics_utils.cc b/chrome/browser/enterprise/connectors/device_trust/common/metrics_utils.cc
index 0747c96..0716c39 100644
--- a/chrome/browser/enterprise/connectors/device_trust/common/metrics_utils.cc
+++ b/chrome/browser/enterprise/connectors/device_trust/common/metrics_utils.cc
@@ -30,4 +30,10 @@
                           base::TimeTicks::Now() - start_time);
 }
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+void LogOrigin(DTOrigin origin) {
+  base::UmaHistogramEnumeration("Enterprise.DeviceTrust.Origin", origin);
+}
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
 }  // namespace enterprise_connectors
diff --git a/chrome/browser/enterprise/connectors/device_trust/common/metrics_utils.h b/chrome/browser/enterprise/connectors/device_trust/common/metrics_utils.h
index 9db23cd..d5b6997c 100644
--- a/chrome/browser/enterprise/connectors/device_trust/common/metrics_utils.h
+++ b/chrome/browser/enterprise/connectors/device_trust/common/metrics_utils.h
@@ -38,12 +38,27 @@
   kMaxValue = kSuccess,
 };
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+// Possible origins of the Device Trust connector attestation flow on ChromeOS.
+// These values are persisted to logs and should not be renumbered. Please
+// update the DTOrigins enum in enums.xml when adding a new step here.
+enum class DTOrigin {
+  kInSession = 0,
+  kLoginScreen = 1,
+  kMaxValue = kLoginScreen,
+};
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
 void LogAttestationFunnelStep(DTAttestationFunnelStep step);
 
 void LogAttestationResult(DTAttestationResult result);
 
 void LogAttestationResponseLatency(base::TimeTicks start_time, bool success);
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+void LogOrigin(DTOrigin origin);
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
 }  // namespace enterprise_connectors
 
 #endif  // CHROME_BROWSER_ENTERPRISE_CONNECTORS_DEVICE_TRUST_COMMON_METRICS_UTILS_H_
diff --git a/chrome/browser/enterprise/connectors/device_trust/navigation_throttle.cc b/chrome/browser/enterprise/connectors/device_trust/navigation_throttle.cc
index 04b2b4a9..e8f8200 100644
--- a/chrome/browser/enterprise/connectors/device_trust/navigation_throttle.cc
+++ b/chrome/browser/enterprise/connectors/device_trust/navigation_throttle.cc
@@ -20,6 +20,26 @@
 #include "net/http/http_response_headers.h"
 #include "url/gurl.h"
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+#include "chrome/browser/ash/profiles/profile_helper.h"
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
+namespace {
+
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+enterprise_connectors::DTOrigin GetAttestationFlowOrigin(
+    content::BrowserContext* context) {
+  if (context->IsOffTheRecord() && ash::ProfileHelper::IsSigninProfile(
+                                       Profile::FromBrowserContext(context))) {
+    return enterprise_connectors::DTOrigin::kLoginScreen;
+  }
+
+  return enterprise_connectors::DTOrigin::kInSession;
+}
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+
+}  // namespace
+
 namespace enterprise_connectors {
 
 // Const headers used in the handshake flow.
@@ -85,6 +105,10 @@
 
   // If we are starting an attestation flow.
   if (navigation_handle()->GetResponseHeaders() == nullptr) {
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+    LogOrigin(GetAttestationFlowOrigin(
+        navigation_handle()->GetWebContents()->GetBrowserContext()));
+#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
     LogAttestationFunnelStep(DTAttestationFunnelStep::kAttestationFlowStarted);
     navigation_handle()->SetRequestHeader(kDeviceTrustHeader,
                                           kDeviceTrustHeaderValue);
diff --git a/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator.cc b/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator.cc
index 321e096..fd7f723 100644
--- a/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator.cc
+++ b/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator.cc
@@ -9,10 +9,13 @@
 #include "base/values.h"
 #include "chrome/browser/ash/crosapi/crosapi_ash.h"
 #include "chrome/browser/ash/crosapi/crosapi_manager.h"
+#include "chrome/browser/ash/crosapi/crosapi_util.h"
 #include "chrome/browser/ash/crosapi/networking_attributes_ash.h"
 #include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h"
+#include "chrome/browser/browser_process.h"
 #include "chrome/browser/enterprise/connectors/device_trust/signals/decorators/common/metrics_utils.h"
 #include "chrome/browser/enterprise/connectors/device_trust/signals/decorators/common/signals_decorator.h"
+#include "chromeos/ash/components/network/device_state.h"
 #include "components/device_signals/core/common/signals_constants.h"
 #include "components/policy/proto/device_management_backend.pb.h"
 
@@ -24,12 +27,31 @@
 
 constexpr char kLatencyHistogramVariant[] = "Ash";
 
+const ash::DeviceState* GetCurrentlyActiveDeviceState(Profile* profile) {
+  if (!crosapi::browser_util::IsSigninProfileOrBelongsToAffiliatedUser(
+          profile)) {
+    return nullptr;
+  }
+
+  ash::NetworkStateHandler* network_state_handler =
+      ash::NetworkHandler::Get()->network_state_handler();
+  const chromeos::NetworkState* network =
+      network_state_handler->DefaultNetwork();
+  if (!network) {
+    // Not connected to a network.
+    return nullptr;
+  }
+  return network_state_handler->GetDeviceState(network->device_path());
+}
+
 }  // namespace
 
 AshSignalsDecorator::AshSignalsDecorator(
-    policy::BrowserPolicyConnectorAsh* browser_policy_connector)
-    : browser_policy_connector_(browser_policy_connector) {
+    policy::BrowserPolicyConnectorAsh* browser_policy_connector,
+    Profile* profile)
+    : browser_policy_connector_(browser_policy_connector), profile_(profile) {
   DCHECK(browser_policy_connector_);
+  DCHECK(profile_);
 }
 
 AshSignalsDecorator::~AshSignalsDecorator() = default;
@@ -46,6 +68,18 @@
   signals.Set(device_signals::names::kEnrollmentDomain,
               browser_policy_connector_->GetEnterpriseDomainManager());
 
+  const ash::DeviceState* device_state =
+      GetCurrentlyActiveDeviceState(profile_);
+  if (device_state) {
+    base::Value::List imei_list;
+    imei_list.Append(device_state->imei());
+    signals.Set(device_signals::names::kImei, std::move(imei_list));
+
+    base::Value::List meid_list;
+    meid_list.Append(device_state->meid());
+    signals.Set(device_signals::names::kMeid, std::move(meid_list));
+  }
+
   if (!crosapi::CrosapiManager::Get() ||
       !crosapi::CrosapiManager::Get()->crosapi_ash() ||
       !crosapi::CrosapiManager::Get()
diff --git a/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator.h b/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator.h
index fccb866..fdccf14 100644
--- a/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator.h
+++ b/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator.h
@@ -15,13 +15,16 @@
 class BrowserPolicyConnectorAsh;
 }  // namespace policy
 
+class Profile;
+
 namespace enterprise_connectors {
 
 // Definition of the SignalsDecorator for Chrome OS Ash platform.
 class AshSignalsDecorator : public SignalsDecorator {
  public:
   AshSignalsDecorator(
-      policy::BrowserPolicyConnectorAsh* browser_policy_connector);
+      policy::BrowserPolicyConnectorAsh* browser_policy_connector,
+      Profile* profile);
   ~AshSignalsDecorator() override;
 
   // SignalsDecorator:
@@ -36,6 +39,7 @@
       crosapi::mojom::GetNetworkDetailsResultPtr result);
 
   policy::BrowserPolicyConnectorAsh* const browser_policy_connector_;
+  Profile* const profile_;
 
   base::WeakPtrFactory<AshSignalsDecorator> weak_ptr_factory_{this};
 };
diff --git a/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator_browsertest.cc b/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator_browsertest.cc
index aa52d82..66e0052 100644
--- a/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator_browsertest.cc
+++ b/chrome/browser/enterprise/connectors/device_trust/signals/decorators/ash/ash_signals_decorator_browsertest.cc
@@ -33,6 +33,8 @@
 constexpr char kFakeEnrollmentDomain[] = "fake.domain.google.com";
 constexpr char kFakeAffilationID[] = "fake_affiliation_id";
 
+constexpr char kFakeImei[] = "fake_imei";
+constexpr char kFakeMeid[] = "fake_meid";
 constexpr char kMacAddress[] = "0123456789AB";
 constexpr char kIpv4Address[] = "192.168.0.42";
 constexpr char kIpv6Address[] = "fe80::1262:d0ff:fef5:e8a9";
@@ -41,15 +43,6 @@
 constexpr char kWifiIPConfigV4Path[] = "/ipconfig/stub_wifi-ipv4";
 constexpr char kWifiIPConfigV6Path[] = "/ipconfig/stub_wifi-ipv6";
 
-void ValidateStaticSignals(const base::Value::Dict& signals) {
-  EXPECT_EQ(*signals.FindString(device_signals::names::kDeviceId),
-            kFakeDeviceId);
-  EXPECT_EQ(*signals.FindString(device_signals::names::kObfuscatedCustomerId),
-            kFakeCustomerId);
-  EXPECT_EQ(*signals.FindString(device_signals::names::kEnrollmentDomain),
-            kFakeEnrollmentDomain);
-}
-
 void SetupFakeNetwork() {
   ash::ShillDeviceClient::TestInterface* shill_device_client =
       ash::ShillDeviceClient::Get()->GetTestInterface();
@@ -69,6 +62,13 @@
       kWifiDevicePath, shill::kAddressProperty, base::Value(kMacAddress),
       /* notify_changed= */ false);
 
+  shill_device_client->SetDeviceProperty(kWifiDevicePath, shill::kMeidProperty,
+                                         base::Value(kFakeMeid),
+                                         /*notify_changed=*/false);
+  shill_device_client->SetDeviceProperty(kWifiDevicePath, shill::kImeiProperty,
+                                         base::Value(kFakeImei),
+                                         /*notify_changed=*/false);
+
   base::DictionaryValue ipconfig_v4_dictionary;
   ipconfig_v4_dictionary.SetKey(shill::kAddressProperty,
                                 base::Value(kIpv4Address));
@@ -115,15 +115,19 @@
   ~AshSignalsDecoratorBrowserTest() override = default;
 };
 
-IN_PROC_BROWSER_TEST_F(AshSignalsDecoratorBrowserTest, TestStaticSignals) {
+IN_PROC_BROWSER_TEST_F(AshSignalsDecoratorBrowserTest,
+                       TestStaticPolicySignals) {
   BrowserPolicyConnectorAsh* connector =
       g_browser_process->platform_part()->browser_policy_connector_ash();
+  Profile* profile =
+      g_browser_process->profile_manager()->GetPrimaryUserProfile();
+
   device_policy()->policy_data().set_directory_api_id(kFakeDeviceId);
   device_policy()->policy_data().set_obfuscated_customer_id(kFakeCustomerId);
   device_policy()->policy_data().set_managed_by(kFakeEnrollmentDomain);
   policy_helper()->RefreshPolicyAndWaitUntilDeviceCloudPolicyUpdated();
 
-  enterprise_connectors::AshSignalsDecorator decorator(connector);
+  enterprise_connectors::AshSignalsDecorator decorator(connector, profile);
 
   base::RunLoop run_loop;
 
@@ -132,19 +136,24 @@
 
   run_loop.Run();
 
-  ValidateStaticSignals(signals);
+  EXPECT_EQ(*signals.FindString(device_signals::names::kDeviceId),
+            kFakeDeviceId);
+  EXPECT_EQ(*signals.FindString(device_signals::names::kObfuscatedCustomerId),
+            kFakeCustomerId);
+  EXPECT_EQ(*signals.FindString(device_signals::names::kEnrollmentDomain),
+            kFakeEnrollmentDomain);
 }
 
-IN_PROC_BROWSER_TEST_F(AshSignalsDecoratorBrowserTest, TestIPSignal) {
+IN_PROC_BROWSER_TEST_F(AshSignalsDecoratorBrowserTest, TestNetworkSignals) {
   BrowserPolicyConnectorAsh* connector =
       g_browser_process->platform_part()->browser_policy_connector_ash();
-  enterprise_connectors::AshSignalsDecorator decorator(connector);
+  Profile* profile =
+      g_browser_process->profile_manager()->GetPrimaryUserProfile();
+  enterprise_connectors::AshSignalsDecorator decorator(connector, profile);
 
   base::RunLoop run_loop;
   base::Value::Dict signals;
 
-  Profile* profile =
-      g_browser_process->profile_manager()->GetPrimaryUserProfile();
   const user_manager::User* user =
       ash::ProfileHelper::Get()->GetUserByProfile(profile);
 
@@ -165,6 +174,14 @@
 
   EXPECT_EQ(*signals.FindString(device_signals::names::kIpAddress),
             kIpv6Address);
+
+  base::Value::List* imei_list = signals.FindList(device_signals::names::kImei);
+  EXPECT_EQ(imei_list->size(), 1);
+  EXPECT_EQ(imei_list->front(), kFakeImei);
+
+  base::Value::List* meid_list = signals.FindList(device_signals::names::kMeid);
+  EXPECT_EQ(meid_list->size(), 1);
+  EXPECT_EQ(meid_list->front(), kFakeMeid);
 }
 
 }  // namespace policy
diff --git a/chrome/browser/enterprise/connectors/device_trust/signals/signals_service_factory.cc b/chrome/browser/enterprise/connectors/device_trust/signals/signals_service_factory.cc
index 53108f9..c3d10b4 100644
--- a/chrome/browser/enterprise/connectors/device_trust/signals/signals_service_factory.cc
+++ b/chrome/browser/enterprise/connectors/device_trust/signals/signals_service_factory.cc
@@ -96,7 +96,7 @@
     auto* policy_connector_ash = platform_part->browser_policy_connector_ash();
     if (policy_connector_ash) {
       decorators.push_back(
-          std::make_unique<AshSignalsDecorator>(policy_connector_ash));
+          std::make_unique<AshSignalsDecorator>(policy_connector_ash, profile));
     }
   }
 
diff --git a/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.cc b/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.cc
index 26439834..cc79ac3 100644
--- a/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.cc
+++ b/chrome/browser/extensions/api/desktop_capture/desktop_capture_api.cc
@@ -107,8 +107,14 @@
       params->options->system_audio ==
           api::desktop_capture::SYSTEM_AUDIO_PREFERENCE_ENUM_EXCLUDE;
 
+  const bool exclude_self_browser_surface =
+      params->options &&
+      params->options->self_browser_surface ==
+          api::desktop_capture::SELF_CAPTURE_PREFERENCE_ENUM_EXCLUDE;
+
   return Execute(params->sources, exclude_system_audio,
-                 target_render_frame_host, origin, target_name);
+                 exclude_self_browser_surface, target_render_frame_host, origin,
+                 target_name);
 }
 
 std::string DesktopCaptureChooseDesktopMediaFunction::GetExtensionTargetName()
diff --git a/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc b/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc
index d91524a..2ff35c4 100644
--- a/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc
+++ b/chrome/browser/extensions/api/desktop_capture/desktop_capture_apitest.cc
@@ -276,32 +276,39 @@
   ASSERT_TRUE(RunExtensionTest(test_dir.UnpackedPath(), {}, {})) << message_;
 }
 
-class DesktopCaptureApiTestWithSystemAudioValue
+class DesktopCaptureApiTestWithMediaPickerOptions
     : public DesktopCaptureApiTest,
       public testing::WithParamInterface<std::string> {
  public:
-  DesktopCaptureApiTestWithSystemAudioValue()
-      : system_audio_preference_(GetParam()) {
+  DesktopCaptureApiTestWithMediaPickerOptions() : options_(GetParam()) {
     DesktopCaptureChooseDesktopMediaFunction::SetPickerFactoryForTests(
         &picker_factory_);
   }
 
-  ~DesktopCaptureApiTestWithSystemAudioValue() override = default;
+  ~DesktopCaptureApiTestWithMediaPickerOptions() override = default;
 
  protected:
-  const std::string system_audio_preference_;
+  const std::string options_;
 };
 
-// |options| itself is optional, as is its member (systemAudio), and so will
-// future members be (e.g. selfBrowserSurface).
-INSTANTIATE_TEST_SUITE_P(_,
-                         DesktopCaptureApiTestWithSystemAudioValue,
-                         ::testing::Values("",
-                                           "{},",
-                                           "{systemAudio: \"include\"},",
-                                           "{systemAudio: \"exclude\"},"));
+// |options| itself is optional, as are its members
+// (systemAudio, selfBrowserSurface), and so will future members be.
+INSTANTIATE_TEST_SUITE_P(
+    _,
+    DesktopCaptureApiTestWithMediaPickerOptions,
+    ::testing::Values(
+        "",
+        "{},",
+        "{systemAudio: \"include\"},",
+        "{systemAudio: \"exclude\"},",
+        "{selfBrowserSurface: \"include\"},",
+        "{selfBrowserSurface: \"exclude\"},",
+        "{selfBrowserSurface: \"include\", systemAudio: \"include\"},",
+        "{selfBrowserSurface: \"include\", systemAudio: \"exclude\"},",
+        "{selfBrowserSurface: \"exclude\", systemAudio: \"include\"},",
+        "{selfBrowserSurface: \"exclude\", systemAudio: \"exclude\"},"));
 
-IN_PROC_BROWSER_TEST_P(DesktopCaptureApiTestWithSystemAudioValue,
+IN_PROC_BROWSER_TEST_P(DesktopCaptureApiTestWithMediaPickerOptions,
                        FromServiceWorker) {
   static constexpr char kManifest[] =
       R"({
@@ -327,7 +334,7 @@
                  });
              });
         }]))",
-      system_audio_preference_.c_str());
+      options_.c_str());
 
   TestExtensionDir test_dir;
   test_dir.WriteManifest(kManifest);
diff --git a/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc b/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc
index 2a713cc..25cceca 100644
--- a/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc
+++ b/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.cc
@@ -82,6 +82,7 @@
 DesktopCaptureChooseDesktopMediaFunctionBase::Execute(
     const std::vector<api::desktop_capture::DesktopCaptureSourceType>& sources,
     bool exclude_system_audio,
+    bool exclude_self_browser_surface,
     content::RenderFrameHost* render_frame_host,
     const GURL& origin,
     const std::u16string target_name) {
@@ -137,8 +138,13 @@
       capture_policy::GetAllowedCaptureLevel(origin, web_contents);
 
   capture_policy::FilterMediaList(media_types, capture_level);
+
   DesktopMediaList::WebContentsFilter includable_web_contents_filter =
       capture_policy::GetIncludableWebContentsFilter(origin, capture_level);
+  if (exclude_self_browser_surface) {
+    includable_web_contents_filter = DesktopMediaList::ExcludeWebContents(
+        std::move(includable_web_contents_filter), web_contents);
+  }
 
   // Avoid offering window-capture as a separate source, since PipeWire's
   // content-picker will offer both screen and window sources.
diff --git a/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.h b/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.h
index f97c711..b9d086f 100644
--- a/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.h
+++ b/chrome/browser/extensions/api/desktop_capture/desktop_capture_base.h
@@ -36,10 +36,11 @@
 
   static const char kTargetNotFoundError[];
 
-  // |exclude_system_audio| is piped from the original call. It is a constraint
-  // that needs to be applied before the picker is shown to the user, as it
-  // affects the picker. It is therefore provided to the extension function
-  // rather than to getUserMedia(), as is the case for other constraints.
+  // |exclude_system_audio| and |exclude_self_browser_surface| are piped from
+  // the original call. They are constraints that need to be applied before
+  // the picker is shown to the user, as they affect the picker.
+  // It is therefore provided to the extension function rather than
+  // to getUserMedia(), as is the case for other constraints.
   //
   // |origin| is the origin for which the stream is created.
   //
@@ -48,6 +49,7 @@
       const std::vector<api::desktop_capture::DesktopCaptureSourceType>&
           sources,
       bool exclude_system_audio,
+      bool exclude_self_browser_surface,
       content::RenderFrameHost* render_frame_host,
       const GURL& origin,
       const std::u16string target_name);
diff --git a/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc b/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc
index 25798a6..4a6b9ecc 100644
--- a/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc
+++ b/chrome/browser/extensions/api/enterprise_reporting_private/conversion_utils.cc
@@ -93,10 +93,11 @@
 }
 
 absl::optional<ParsedSignalsError> ConvertFileSystemInfoResponse(
-    const device_signals::SignalsAggregationResponse& response,
+    const device_signals::SignalsAggregationResponse& aggregation_response,
     std::vector<api::enterprise_reporting_private::GetFileSystemInfoResponse>*
         arg_list) {
-  auto error = TryParseError(response, response.file_system_info_response);
+  auto error = TryParseError(aggregation_response,
+                             aggregation_response.file_system_info_response);
   if (error) {
     return error.value();
   }
@@ -104,7 +105,7 @@
   std::vector<api::enterprise_reporting_private::GetFileSystemInfoResponse>
       api_responses;
   const auto& file_system_signal_values =
-      response.file_system_info_response.value();
+      aggregation_response.file_system_info_response.value();
   for (const auto& file_system_item :
        file_system_signal_values.file_system_items) {
     api::enterprise_reporting_private::GetFileSystemInfoResponse response;
diff --git a/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc b/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
index 1d4af976..a34626f5 100644
--- a/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
+++ b/chrome/browser/extensions/api/omnibox/omnibox_api_interactive_test.cc
@@ -382,12 +382,14 @@
       GetAutocompleteControllerForBrowser(incognito_browser);
 
   // Test that we get the incognito-specific suggestions.
-  AutocompleteInput input(
-      u"alpha input", metrics::OmniboxEventProto::NTP,
-      ChromeAutocompleteSchemeClassifier(incognito_profile));
-  incognito_controller->Start(input);
-  WaitForAutocompleteDone(incognito_browser);
-  EXPECT_TRUE(incognito_controller->done());
+  {
+    AutocompleteInput input(
+        u"alpha input", metrics::OmniboxEventProto::NTP,
+        ChromeAutocompleteSchemeClassifier(incognito_profile));
+    incognito_controller->Start(input);
+    WaitForAutocompleteDone(incognito_browser);
+    EXPECT_TRUE(incognito_controller->done());
+  }
 
   // First result should be to invoke the keyword with what we typed, the
   // second should be the provided suggestion from the extension, and the
diff --git a/chrome/browser/extensions/api/webrtc_desktop_capture_private/webrtc_desktop_capture_private_api.cc b/chrome/browser/extensions/api/webrtc_desktop_capture_private/webrtc_desktop_capture_private_api.cc
index 0d045b7d..d8f416e19 100644
--- a/chrome/browser/extensions/api/webrtc_desktop_capture_private/webrtc_desktop_capture_private_api.cc
+++ b/chrome/browser/extensions/api/webrtc_desktop_capture_private/webrtc_desktop_capture_private_api.cc
@@ -71,8 +71,9 @@
   using Sources = std::vector<api::desktop_capture::DesktopCaptureSourceType>;
   Sources* sources = reinterpret_cast<Sources*>(&params->sources);
 
-  // TODO(crbug.com/1329129): Plumb systemAudio through here.
-  return Execute(*sources, /*exclude_system_audio=*/false, rfh, origin,
+  // TODO(crbug.com/1329129): Plumb systemAudio and selfBrowserSurface here.
+  return Execute(*sources, /*exclude_system_audio=*/false,
+                 /*exclude_self_browser_surface=*/false, rfh, origin,
                  target_name);
 }
 
diff --git a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc
index 3dfba242..be458a9 100644
--- a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc
+++ b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc
@@ -497,7 +497,9 @@
 
   // We must use a new BrowsingInstance (forcing a process swap and disabling
   // scripting by existing tabs) if one of the URLs corresponds to the Chrome
-  // Web Store hosted app, and the other does not.
+  // Web Store and the other does not. For the old Web Store this is done by
+  // checking for the Web Store hosted app and for the new Web Store we just
+  // check against the expected URL.
   //
   // We don't force a BrowsingInstance swap in other cases (i.e., when opening
   // a popup from one extension to a different extension, or to a non-extension
@@ -508,30 +510,44 @@
   // (by the content/ part of ShouldSwapBrowsingInstancesForNavigation); this
   // check is just doing the same for top-level frames.  See
   // https://crbug.com/590068.
+
+  // First we check for navigations which are transitioning to/from the URL
+  // associated with the new Webstore.
+  bool current_url_matches_new_webstore =
+      url::Origin::Create(current_effective_url)
+          .IsSameOriginWith(extension_urls::GetNewWebstoreLaunchURL());
+  bool dest_url_matches_new_webstore =
+      url::Origin::Create(destination_effective_url)
+          .IsSameOriginWith(extension_urls::GetNewWebstoreLaunchURL());
+  if (current_url_matches_new_webstore != dest_url_matches_new_webstore)
+    return true;
+
+  // Next we do a process check, looking to see if the Web Store hosted app ID
+  // is associated with the URLs.
   const Extension* current_extension =
       registry->enabled_extensions().GetExtensionOrAppByURL(
           current_effective_url);
-  bool is_current_url_for_web_store =
+  bool is_current_url_for_webstore_app =
       current_extension && current_extension->id() == kWebStoreAppId;
 
   const Extension* dest_extension =
       registry->enabled_extensions().GetExtensionOrAppByURL(
           destination_effective_url);
-  bool is_dest_url_for_web_store =
+  bool is_dest_url_for_webstore_app =
       dest_extension && dest_extension->id() == kWebStoreAppId;
 
-  // First do a process check.  We should force a BrowsingInstance swap if we
-  // are going to Chrome Web Store, but the current process doesn't know about
-  // CWS, even if current_extension somehow corresponds to CWS.
+  // We should force a BrowsingInstance swap if we are going to Chrome Web
+  // Store, but the current process doesn't know about CWS, even if
+  // current_extension somehow corresponds to CWS.
   ProcessMap* process_map = ProcessMap::Get(site_instance->GetBrowserContext());
-  if (is_dest_url_for_web_store && site_instance->HasProcess() &&
+  if (is_dest_url_for_webstore_app && site_instance->HasProcess() &&
       !process_map->Contains(dest_extension->id(),
                              site_instance->GetProcess()->GetID()))
     return true;
 
   // Otherwise, swap BrowsingInstances when transitioning to/from Chrome Web
   // Store.
-  return is_current_url_for_web_store != is_dest_url_for_web_store;
+  return is_current_url_for_webstore_app != is_dest_url_for_webstore_app;
 }
 
 // static
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
index 6688f01..86a1e99 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.cc
@@ -1438,6 +1438,53 @@
   PermissionGrantImpl::CollectGrants(it->second.write_grants,
                                      &grants.directory_write_grants,
                                      &grants.file_write_grants);
+
+  // Add valid (not expired) persisted permissions which do not have an
+  // associated active grant to the associated members of `grants`.
+  if (base::FeatureList::IsEnabled(
+          features::kFileSystemAccessPersistentPermissions)) {
+    std::vector<std::unique_ptr<Object>> persisted_grant_objects =
+        GetGrantedObjects(origin);
+
+    for (auto& persisted_grant_object : persisted_grant_objects) {
+      const base::FilePath persisted_path =
+          base::ValueToFilePath(
+              persisted_grant_object->value.FindKey(kPermissionPathKey))
+              .value();
+      HandleType handle_type =
+          persisted_grant_object->value.FindBoolKey(kPermissionIsDirectoryKey)
+                  .value()
+              ? HandleType::kDirectory
+              : HandleType::kFile;
+      bool is_write_grant =
+          persisted_grant_object->value.FindBoolKey(kPermissionWritableKey)
+              .value_or(false);
+      bool is_read_grant =
+          persisted_grant_object->value.FindBoolKey(kPermissionReadableKey)
+              .value_or(false);
+
+      if (handle_type == HandleType::kDirectory) {
+        if (is_write_grant &&
+            !base::Contains(grants.directory_write_grants, persisted_path)) {
+          grants.directory_write_grants.push_back(persisted_path);
+        }
+        if (is_read_grant &&
+            !base::Contains(grants.directory_read_grants, persisted_path)) {
+          grants.directory_read_grants.push_back(persisted_path);
+        }
+      }
+      if (handle_type == HandleType::kFile) {
+        if (is_write_grant &&
+            !base::Contains(grants.file_write_grants, persisted_path)) {
+          grants.file_write_grants.push_back(persisted_path);
+        }
+        if (is_read_grant &&
+            !base::Contains(grants.file_read_grants, persisted_path)) {
+          grants.file_read_grants.push_back(persisted_path);
+        }
+      }
+    }
+  }
   return grants;
 }
 
@@ -1460,6 +1507,17 @@
 bool ChromeFileSystemAccessPermissionContext::OriginHasReadAccess(
     const url::Origin& origin) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  // Check if an origin has read access granted via persisted permissions.
+  if (base::FeatureList::IsEnabled(
+          features::kFileSystemAccessPersistentPermissions)) {
+    std::vector<std::unique_ptr<Object>> persisted_grant_objects =
+        GetGrantedObjects(origin);
+    return base::ranges::any_of(
+        persisted_grant_objects, [&](const auto& grant) {
+          return grant->value.FindBoolKey(kPermissionReadableKey)
+              .value_or(false);
+        });
+  }
   auto it = origins_.find(origin);
   if (it == origins_.end())
     return false;
@@ -1475,6 +1533,17 @@
 bool ChromeFileSystemAccessPermissionContext::OriginHasWriteAccess(
     const url::Origin& origin) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  // Check if an origin has write access granted via persisted permissions.
+  if (base::FeatureList::IsEnabled(
+          features::kFileSystemAccessPersistentPermissions)) {
+    std::vector<std::unique_ptr<Object>> persisted_grant_objects =
+        GetGrantedObjects(origin);
+    return base::ranges::any_of(
+        persisted_grant_objects, [&](const auto& grant) {
+          return grant->value.FindBoolKey(kPermissionWritableKey)
+              .value_or(false);
+        });
+  }
   auto it = origins_.find(origin);
   if (it == origins_.end())
     return false;
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.h b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.h
index 6c41f51..84e04acd 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context.h
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context.h
@@ -122,7 +122,8 @@
     kUpdatePersistedPermission,
   };
 
-  // Returns a snapshot of the currently granted active permissions.
+  // Returns a snapshot of both the currently granted active and persisted
+  // permissions.
   struct Grants {
     Grants();
     ~Grants();
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_browsertest.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_browsertest.cc
index e177be3e..775abd5 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_browsertest.cc
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_browsertest.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/ui/browser.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "components/permissions/permission_util.h"
 #include "content/public/test/browser_test.h"
 #include "content/public/test/browser_test_utils.h"
 #include "content/public/test/prerender_test_util.h"
diff --git a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
index df56a1b9..e1a8067 100644
--- a/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
+++ b/chrome/browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc
@@ -32,6 +32,7 @@
 #include "chrome/test/base/testing_profile.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "components/content_settings/core/common/pref_names.h"
+#include "components/permissions/permission_util.h"
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/web_contents.h"
@@ -876,6 +877,34 @@
 }
 
 TEST_F(ChromeFileSystemAccessPermissionContextTest,
+       GetPermissionGrants_GrantsAreRetainedViaPersistedPermissions) {
+  auto kTestPath2 = kTestPath.AppendASCII("baz");
+  auto file_write_grant = permission_context()->GetWritePermissionGrant(
+      kTestOrigin, kTestPath, HandleType::kFile, UserAction::kSave);
+  auto file_read_grant = permission_context()->GetReadPermissionGrant(
+      kTestOrigin, kTestPath, HandleType::kFile, UserAction::kSave);
+  auto file_read_only_grant = permission_context()->GetReadPermissionGrant(
+      kTestOrigin, kTestPath2, HandleType::kFile, UserAction::kSave);
+
+  // `GetPermissionGrants` returns `grants` as expected.
+  auto grants = permission_context()->GetPermissionGrants(kTestOrigin);
+  std::vector<base::FilePath> expected_file_write_grants = {kTestPath};
+  std::vector<base::FilePath> expected_file_read_grants = {kTestPath,
+                                                           kTestPath2};
+
+  EXPECT_EQ(grants.file_write_grants, expected_file_write_grants);
+  EXPECT_EQ(grants.file_read_grants, expected_file_read_grants);
+
+  // Persisted permissions are retained after resetting the active grants.
+  file_write_grant.reset();
+  file_read_grant.reset();
+  file_read_only_grant.reset();
+  grants = permission_context()->GetPermissionGrants(kTestOrigin);
+  EXPECT_EQ(grants.file_write_grants, expected_file_write_grants);
+  EXPECT_EQ(grants.file_read_grants, expected_file_read_grants);
+}
+
+TEST_F(ChromeFileSystemAccessPermissionContextTest,
        GetWritePermissionGrant_InitialState_OpenAction_GlobalGuardBlocked) {
   SetDefaultContentSettingValue(ContentSettingsType::FILE_SYSTEM_WRITE_GUARD,
                                 CONTENT_SETTING_BLOCK);
@@ -980,6 +1009,9 @@
       kTestOrigin, kTestPath, HandleType::kFile, UserAction::kOpen);
   EXPECT_EQ(PermissionStatus::ASK, grant->GetStatus());
 
+  auto grants = permission_context()->GetPermissionGrants(kTestOrigin);
+  EXPECT_TRUE(grants.file_write_grants.empty());
+
   SetDefaultContentSettingValue(ContentSettingsType::FILE_SYSTEM_WRITE_GUARD,
                                 CONTENT_SETTING_BLOCK);
 
@@ -1286,6 +1318,11 @@
   EXPECT_EQ(PermissionStatus::ASK, grant->GetStatus());
   EXPECT_TRUE(permission_context()->HasPersistedPermissionForTesting(
       kTestOrigin, kTestPath, HandleType::kFile, GrantType::kWrite));
+
+  ChromeFileSystemAccessPermissionContext::Grants grants =
+      permission_context()->GetPermissionGrants(kTestOrigin);
+  std::vector<base::FilePath> expected_res = {kTestPath};
+  EXPECT_EQ(grants.file_write_grants, expected_res);
 }
 
 TEST_F(ChromeFileSystemAccessPermissionContextTest,
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index f5bd971..1209bd8 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1576,7 +1576,7 @@
   {
     "name": "eche-swa",
     "owners": [ "dhnishi" ],
-    "expiry_milestone": 107
+    "expiry_milestone": 110
   },
   {
     "name": "eche-swa-debug-mode",
diff --git a/chrome/browser/lacros/account_manager/account_profile_mapper.cc b/chrome/browser/lacros/account_manager/account_profile_mapper.cc
index afc5ec3..77c5f400 100644
--- a/chrome/browser/lacros/account_manager/account_profile_mapper.cc
+++ b/chrome/browser/lacros/account_manager/account_profile_mapper.cc
@@ -123,6 +123,18 @@
   return account_manager_facade_->CreateAccessTokenFetcher(account, consumer);
 }
 
+void AccountProfileMapper::ReportAuthError(
+    const base::FilePath& profile_path,
+    const account_manager::AccountKey& account,
+    const GoogleServiceAuthError& error) {
+  DCHECK(initialized_) << "ReportAuthError called before initialization";
+
+  if (!ProfileContainsAccount(profile_path, account))
+    return;
+
+  account_manager_facade_->ReportAuthError(account, error);
+}
+
 void AccountProfileMapper::GetAccountsMap(MapAccountsCallback callback) {
   if (!initialized_) {
     initialization_callbacks_.push_back(
@@ -278,7 +290,26 @@
 void AccountProfileMapper::OnAuthErrorChanged(
     const account_manager::AccountKey& account,
     const GoogleServiceAuthError& error) {
-  NOTIMPLEMENTED();
+  DCHECK(initialized_)
+      << "Received account error updates before initialization";
+
+  DCHECK_EQ(account.account_type(), account_manager::AccountType::kGaia);
+  if (!account_cache_.FindAccountByGaiaId(account.id())) {
+    LOG(ERROR) << "Ignoring account error update for unknown account";
+    return;
+  }
+
+  std::vector<ProfileAttributesEntry*> entries =
+      profile_attributes_storage_->GetAllProfilesAttributes();
+  for (const ProfileAttributesEntry* entry : entries) {
+    if (!entry->GetGaiaIds().contains(account.id())) {
+      continue;
+    }
+
+    for (auto& observer : observers_) {
+      observer.OnAuthErrorChanged(entry->GetPath(), account, error);
+    }
+  }
 }
 
 void AccountProfileMapper::OnProfileWillBeRemoved(
diff --git a/chrome/browser/lacros/account_manager/account_profile_mapper.h b/chrome/browser/lacros/account_manager/account_profile_mapper.h
index 99a1a60..7772510 100644
--- a/chrome/browser/lacros/account_manager/account_profile_mapper.h
+++ b/chrome/browser/lacros/account_manager/account_profile_mapper.h
@@ -19,6 +19,7 @@
 #include "chrome/browser/lacros/account_manager/account_cache.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "components/account_manager_core/account_manager_facade.h"
+#include "google_apis/gaia/google_service_auth_error.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/abseil-cpp/absl/types/variant.h"
 
@@ -84,6 +85,9 @@
                                    const account_manager::Account& account) {}
     virtual void OnAccountRemoved(const base::FilePath& profile_path,
                                   const account_manager::Account& account) {}
+    virtual void OnAuthErrorChanged(const base::FilePath& profile_path,
+                                    const account_manager::AccountKey& account,
+                                    const GoogleServiceAuthError& error) {}
   };
 
   AccountProfileMapper(account_manager::AccountManagerFacade* facade,
@@ -110,6 +114,9 @@
       const base::FilePath& profile_path,
       const account_manager::AccountKey& account,
       OAuth2AccessTokenConsumer* consumer);
+  void ReportAuthError(const base::FilePath& profile_path,
+                       const account_manager::AccountKey& account,
+                       const GoogleServiceAuthError& error);
 
   // Returns the whole map of accounts per profile. An empty path is used as the
   // key for unassigned accounts (this key is not set if there are no unassigned
diff --git a/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc b/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc
index 84c76db..6c6026d 100644
--- a/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc
+++ b/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc
@@ -5,6 +5,7 @@
 #include "chrome/browser/lacros/account_manager/account_profile_mapper.h"
 
 #include <algorithm>
+#include <utility>
 #include <vector>
 
 #include "base/callback.h"
@@ -49,10 +50,15 @@
 constexpr account_manager::AccountType kGaiaType =
     account_manager::AccountType::kGaia;
 
-// Map from profile path to a vector of GaiaIds.
+// Map from profile path to a set of GaiaIds.
 using AccountMapping =
     base::flat_map<base::FilePath, base::flat_set<std::string>>;
 
+// Map from profile path to a vector of account error updates.
+using AccountErrorMapping =
+    base::flat_map<base::FilePath,
+                   std::vector<std::pair<std::string, GoogleServiceAuthError>>>;
+
 using MockAddAccountCallback = base::MockOnceCallback<void(
     const absl::optional<AccountProfileMapper::AddAccountResult>&)>;
 
@@ -63,11 +69,17 @@
 
   MOCK_METHOD(void,
               OnAccountUpserted,
-              (const base::FilePath& profile_path, const Account&),
+              (const base::FilePath&, const Account&),
               (override));
   MOCK_METHOD(void,
               OnAccountRemoved,
-              (const base::FilePath& profile_path, const Account&),
+              (const base::FilePath&, const Account&),
+              (override));
+  MOCK_METHOD(void,
+              OnAuthErrorChanged,
+              (const base::FilePath&,
+               const account_manager::AccountKey&,
+               const GoogleServiceAuthError&),
               (override));
 };
 
@@ -290,6 +302,28 @@
     }
   }
 
+  // Setup gMock expectations for `OnAuthErrorChanged()` calls.
+  void ExpectOnAuthErrorChanged(MockAccountProfileMapperObserver* mock_observer,
+                                const AccountErrorMapping& account_errors_map) {
+    if (account_errors_map.empty()) {
+      EXPECT_CALL(*mock_observer,
+                  OnAuthErrorChanged(testing::_, testing::_, testing::_))
+          .Times(0);
+      return;
+    }
+    for (const auto& path_account_errors : account_errors_map) {
+      const base::FilePath profile_path = path_account_errors.first;
+
+      for (const std::pair<std::string, GoogleServiceAuthError>& account_error :
+           path_account_errors.second) {
+        const AccountKey account_key{account_error.first, kGaiaType};
+        const GoogleServiceAuthError error = account_error.second;
+        EXPECT_CALL(*mock_observer,
+                    OnAuthErrorChanged(profile_path, account_key, error));
+      }
+    }
+  }
+
   // Checks that the `ProfileAttributesStorage` matches `accounts_map`.
   // Tests should normally use `VerifyAccountsInPrefs()` instead to verify local
   // state as well.
@@ -828,6 +862,28 @@
   CompleteFacadeGetAccountsGaia({"A", "B"});
 }
 
+// Tests that observers are notified about changes to accounts' error status.
+TEST_F(AccountProfileMapperTest, ObserveAuthErrorChanged) {
+  base::FilePath second_path = GetProfilePath("Second");
+  base::FilePath third_path = GetProfilePath("Third");
+  AccountProfileMapper* mapper = CreateMapper(
+      {{main_path(), {"A", "B"}}, {second_path, {"A"}}, {third_path, {"B"}}});
+  MockAccountProfileMapperObserver mock_observer;
+  base::ScopedObservation<AccountProfileMapper, AccountProfileMapper::Observer>
+      observation{&mock_observer};
+  observation.Observe(mapper);
+
+  GoogleServiceAuthError error =
+      GoogleServiceAuthError::FromInvalidGaiaCredentialsReason(
+          GoogleServiceAuthError::InvalidGaiaCredentialsReason::
+              CREDENTIALS_REJECTED_BY_SERVER);
+  ExpectOnAuthErrorChanged(&mock_observer,
+                           {{main_path(), {std::make_pair("A", error)}},
+                            {second_path, {std::make_pair("A", error)}}});
+  mapper->OnAuthErrorChanged(account_manager::AccountKey{"A", kGaiaType},
+                             error);
+}
+
 // Tests that a managed syncing secondary profile gets deleted after its primary
 // account is removed from the system.
 // A secondary account of the deleted profile stays unassigned.
@@ -1625,3 +1681,34 @@
   // All accounts have been assigned to the main profile.
   VerifyAccountsInPrefs({{main_path(), {"A", "B", "C"}}});
 }
+
+TEST_F(AccountProfileMapperTest, ReportAuthError) {
+  base::FilePath second_path = GetProfilePath("Second");
+  AccountProfileMapper* mapper =
+      CreateMapper({{main_path(), {"A", "B"}}, {second_path, {"A"}}});
+
+  const account_manager::AccountKey account_key{"A", kGaiaType};
+  const GoogleServiceAuthError error =
+      GoogleServiceAuthError::FromInvalidGaiaCredentialsReason(
+          GoogleServiceAuthError::InvalidGaiaCredentialsReason::
+              CREDENTIALS_REJECTED_BY_SERVER);
+  EXPECT_CALL(*mock_facade(), ReportAuthError(account_key, error));
+
+  mapper->ReportAuthError(second_path, account_key, error);
+}
+
+TEST_F(AccountProfileMapperTest,
+       ReportAuthErrorForUnknownProfileAccountMapping) {
+  base::FilePath second_path = GetProfilePath("Second");
+  AccountProfileMapper* mapper =
+      CreateMapper({{main_path(), {"A", "B"}}, {second_path, {"B"}}});
+
+  const account_manager::AccountKey account_key{"A", kGaiaType};
+  const GoogleServiceAuthError error =
+      GoogleServiceAuthError::FromInvalidGaiaCredentialsReason(
+          GoogleServiceAuthError::InvalidGaiaCredentialsReason::
+              CREDENTIALS_REJECTED_BY_SERVER);
+  EXPECT_CALL(*mock_facade(), ReportAuthError(account_key, error)).Times(0);
+
+  mapper->ReportAuthError(second_path, account_key, error);
+}
diff --git a/chrome/browser/media/webrtc/desktop_media_list.cc b/chrome/browser/media/webrtc/desktop_media_list.cc
index b80424fc..14a45a74 100644
--- a/chrome/browser/media/webrtc/desktop_media_list.cc
+++ b/chrome/browser/media/webrtc/desktop_media_list.cc
@@ -4,6 +4,27 @@
 
 #include "chrome/browser/media/webrtc/desktop_media_list.h"
 
+#include "base/bind.h"
+#include "base/check.h"
+#include "base/memory/weak_ptr.h"
+#include "content/public/browser/web_contents.h"
+
+DesktopMediaList::WebContentsFilter DesktopMediaList::ExcludeWebContents(
+    WebContentsFilter filter,
+    content::WebContents* excluded_web_contents) {
+  DCHECK(excluded_web_contents);
+
+  return base::BindRepeating(
+      [](DesktopMediaList::WebContentsFilter filter,
+         base::WeakPtr<content::WebContents> excluded_web_contents,
+         content::WebContents* candidate_web_contents) {
+        DCHECK(candidate_web_contents);  // But maybe !excluded_web_contents.
+        return excluded_web_contents.get() != candidate_web_contents &&
+               filter.Run(candidate_web_contents);
+      },
+      std::move(filter), excluded_web_contents->GetWeakPtr());
+}
+
 DesktopMediaList::Source::Source() = default;
 
 DesktopMediaList::Source::Source(const Source& other_source) = default;
diff --git a/chrome/browser/media/webrtc/desktop_media_list.h b/chrome/browser/media/webrtc/desktop_media_list.h
index 03af516b..d93450a 100644
--- a/chrome/browser/media/webrtc/desktop_media_list.h
+++ b/chrome/browser/media/webrtc/desktop_media_list.h
@@ -45,6 +45,17 @@
   using WebContentsFilter =
       base::RepeatingCallback<bool(content::WebContents*)>;
 
+  // Wraps a given filter to produce a new filter that excludes a given
+  // WebContents, but is otherwise identical to the original filter.
+  //
+  // Note: |excluded_web_contents| will internally be converted to a WeakPtr
+  // in order to make posting the filter safe. If that weak pointer expires,
+  // the exclusion also expires. This is safe even when the capturer/capturee
+  // are the same, because capturing itself will be rejected in that case.
+  static WebContentsFilter ExcludeWebContents(
+      WebContentsFilter filter,
+      content::WebContents* excluded_web_contents);
+
   // Struct used to represent each entry in the list.
   struct Source {
     Source();
diff --git a/chrome/browser/media/webrtc/display_media_access_handler.cc b/chrome/browser/media/webrtc/display_media_access_handler.cc
index 313da4e..d84a2b2c 100644
--- a/chrome/browser/media/webrtc/display_media_access_handler.cc
+++ b/chrome/browser/media/webrtc/display_media_access_handler.cc
@@ -313,23 +313,13 @@
     base::Erase(media_types, DesktopMediaList::Type::kWindow);
   }
 
-  auto includable_web_contents_filter = base::BindRepeating(
-      [](DesktopMediaList::WebContentsFilter capture_policy_filter,
-         bool exclude_self_browser_surface,
-         base::WeakPtr<content::WebContents> capturing_web_contents,
-         content::WebContents* captured_web_contents) {
-        if (!capturing_web_contents)
-          return false;
-        if (!capture_policy_filter.Run(captured_web_contents))
-          return false;
-        if (!exclude_self_browser_surface)
-          return true;
-        return capturing_web_contents.get() != captured_web_contents;
-      },
+  auto includable_web_contents_filter =
       capture_policy::GetIncludableWebContentsFilter(request_origin,
-                                                     capture_level),
-      pending_request.request.exclude_self_browser_surface,
-      web_contents->GetWeakPtr());
+                                                     capture_level);
+  if (pending_request.request.exclude_self_browser_surface) {
+    includable_web_contents_filter = DesktopMediaList::ExcludeWebContents(
+        std::move(includable_web_contents_filter), web_contents);
+  }
 
   auto source_lists = picker_factory_->CreateMediaList(
       media_types, web_contents, includable_web_contents_filter);
diff --git a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
index 3454c732..1ebb256 100644
--- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
+++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc
@@ -82,6 +82,7 @@
 #include "base/win/scoped_handle.h"
 #include "base/win/windows_version.h"
 #include "chrome/browser/shell_integration_win.h"
+#include "chrome/installer/util/taskbar_util.h"
 #endif  // BUILDFLAG(IS_WIN)
 
 #if BUILDFLAG(IS_CHROMEOS_LACROS)
@@ -386,6 +387,18 @@
 
   base::UmaHistogramEnumeration("Windows.IsPinnedToTaskbar", result,
                                 NUM_RESULTS);
+
+  // If Chrome is not pinned to taskbar, clear the recording that the installer
+  // pinned Chrome to the taskbar, so that if the user pins Chrome back to the
+  // taskbar, we don't count launches as coming from an installer-pinned
+  // shortcut.  TODO(https://crbug.com/1353953): We currently only check if
+  // Chrome is pinned to the taskbar 1 out every 100 launches, which makes this
+  // less meaningful, so if keeping track of whether the installer pinned Chrome
+  // to the taskbar is important, we need to deal with that.
+  if (result == NOT_PINNED &&
+      GetInstallerPinnedChromeToTaskbar().value_or(false)) {
+    SetInstallerPinnedChromeToTaskbar(false);
+  }
 }
 
 // Records the pinned state of the current executable into a histogram. Should
diff --git a/chrome/browser/new_tab_page/modules/photos/photos_service.cc b/chrome/browser/new_tab_page/modules/photos/photos_service.cc
index 1f5e9b6..bba8d44 100644
--- a/chrome/browser/new_tab_page/modules/photos/photos_service.cc
+++ b/chrome/browser/new_tab_page/modules/photos/photos_service.cc
@@ -138,9 +138,9 @@
   }
 }
 
-void PhotosService::GetMemories(GetMemoriesCallback callback) {
+void PhotosService::GetMemories(GetMemoriesCallback get_memories_callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  callbacks_.push_back(std::move(callback));
+  callbacks_.push_back(std::move(get_memories_callback));
   if (callbacks_.size() > 1) {
     return;
   }
diff --git a/chrome/browser/new_tab_page/modules/photos/photos_service.h b/chrome/browser/new_tab_page/modules/photos/photos_service.h
index 70be93c..281cb64 100644
--- a/chrome/browser/new_tab_page/modules/photos/photos_service.h
+++ b/chrome/browser/new_tab_page/modules/photos/photos_service.h
@@ -75,7 +75,7 @@
 
   using GetMemoriesCallback = photos::mojom::PhotosHandler::GetMemoriesCallback;
   // Retrieves Google Photos memories from API.
-  void GetMemories(GetMemoriesCallback callback);
+  void GetMemories(GetMemoriesCallback get_memories_callback);
   // Makes the service not return data for a specified amount of time.
   void DismissModule();
   // Makes the service return data again even if dimiss time is not yet over.
diff --git a/chrome/browser/notifications/notification_interactive_uitest.cc b/chrome/browser/notifications/notification_interactive_uitest.cc
index ca3ae566..181b5362 100644
--- a/chrome/browser/notifications/notification_interactive_uitest.cc
+++ b/chrome/browser/notifications/notification_interactive_uitest.cc
@@ -35,6 +35,7 @@
 #include "components/history/core/browser/history_service.h"
 #include "components/infobars/content/content_infobar_manager.h"
 #include "components/permissions/permission_uma_util.h"
+#include "components/permissions/permission_util.h"
 #include "components/ukm/test_ukm_recorder.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_source.h"
diff --git a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
index bd928f4..8a138f7 100644
--- a/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
+++ b/chrome/browser/optimization_guide/optimization_guide_keyed_service.cc
@@ -33,9 +33,7 @@
 #include "components/optimization_guide/core/optimization_guide_features.h"
 #include "components/optimization_guide/core/optimization_guide_logger.h"
 #include "components/optimization_guide/core/optimization_guide_navigation_data.h"
-#include "components/optimization_guide/core/optimization_guide_permissions_util.h"
 #include "components/optimization_guide/core/optimization_guide_store.h"
-#include "components/optimization_guide/core/optimization_guide_switches.h"
 #include "components/optimization_guide/core/optimization_guide_util.h"
 #include "components/optimization_guide/core/prediction_manager.h"
 #include "components/optimization_guide/core/tab_url_provider.h"
@@ -106,43 +104,6 @@
   return profile->GetOriginalProfile();
 }
 
-// Logs info about the common optimization guide feature flags.
-void LogFeatureFlagsInfo(OptimizationGuideLogger* optimization_guide_logger,
-                         Profile* profile) {
-  if (!optimization_guide::switches::IsDebugLogsEnabled())
-    return;
-  if (!optimization_guide::features::IsOptimizationHintsEnabled()) {
-    OPTIMIZATION_GUIDE_LOG(
-        optimization_guide_common::mojom::LogSource::SERVICE_AND_SETTINGS,
-        optimization_guide_logger, "FEATURE_FLAG Hints component disabled");
-  }
-  if (!optimization_guide::features::IsRemoteFetchingEnabled()) {
-    OPTIMIZATION_GUIDE_LOG(
-        optimization_guide_common::mojom::LogSource::SERVICE_AND_SETTINGS,
-        optimization_guide_logger,
-        "FEATURE_FLAG remote fetching feature disabled");
-  }
-  if (!optimization_guide::IsUserPermittedToFetchFromRemoteOptimizationGuide(
-          profile->IsOffTheRecord(), profile->GetPrefs())) {
-    OPTIMIZATION_GUIDE_LOG(
-        optimization_guide_common::mojom::LogSource::SERVICE_AND_SETTINGS,
-        optimization_guide_logger,
-        "FEATURE_FLAG remote fetching user permission disabled");
-  }
-  if (!optimization_guide::features::IsPushNotificationsEnabled()) {
-    OPTIMIZATION_GUIDE_LOG(
-        optimization_guide_common::mojom::LogSource::SERVICE_AND_SETTINGS,
-        optimization_guide_logger,
-        "FEATURE_FLAG remote push notification feature disabled");
-  }
-  if (!optimization_guide::features::IsModelDownloadingEnabled()) {
-    OPTIMIZATION_GUIDE_LOG(
-        optimization_guide_common::mojom::LogSource::SERVICE_AND_SETTINGS,
-        optimization_guide_logger,
-        "FEATURE_FLAG model downloading feature disabled");
-  }
-}
-
 }  // namespace
 
 // static
@@ -308,7 +269,9 @@
       optimization_guide_logger_,
       "OptimizationGuide: KeyedService is initalized");
 
-  LogFeatureFlagsInfo(optimization_guide_logger_.get(), profile);
+  optimization_guide::LogFeatureFlagsInfo(optimization_guide_logger_.get(),
+                                          profile->IsOffTheRecord(),
+                                          profile->GetPrefs());
 }
 
 optimization_guide::ChromeHintsManager*
diff --git a/chrome/browser/page_load_metrics/observers/formfill_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/formfill_page_load_metrics_observer.cc
index cac4d8ed..27642da 100644
--- a/chrome/browser/page_load_metrics/observers/formfill_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/formfill_page_load_metrics_observer.cc
@@ -9,6 +9,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "components/page_load_metrics/browser/metrics_web_contents_observer.h"
+#include "components/page_load_metrics/browser/page_load_metrics_observer_delegate.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/web_contents.h"
 
@@ -36,34 +37,32 @@
 }
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
+FormfillPageLoadMetricsObserver::OnPrerenderStart(
+    content::NavigationHandle* navigation_handle,
+    const GURL& currently_committed_url) {
+  return CONTINUE_OBSERVING;
+}
+
+page_load_metrics::PageLoadMetricsObserver::ObservePolicy
 FormfillPageLoadMetricsObserver::OnCommit(
     content::NavigationHandle* navigation_handle) {
-  HostContentSettingsMap* settings_map =
-      HostContentSettingsMapFactory::GetForProfile(Profile::FromBrowserContext(
-          GetDelegate().GetWebContents()->GetBrowserContext()));
-  DCHECK(settings_map);
-
-  const url::Origin& origin =
-      navigation_handle->GetRenderFrameHost()->GetLastCommittedOrigin();
-
-  base::Value formfill_metadata = settings_map->GetWebsiteSetting(
-      origin.GetURL(), origin.GetURL(), ContentSettingsType::FORMFILL_METADATA,
-      nullptr);
-
-  // User data field was detected on this site before.
-  if (formfill_metadata.is_dict() &&
-      formfill_metadata.FindBoolKey(kUserDataFieldFilledKey)) {
-    page_load_metrics::MetricsWebContentsObserver::RecordFeatureUsage(
-        navigation_handle->GetRenderFrameHost(),
-        blink::mojom::WebFeature::kUserDataFieldFilledPreviously);
-  }
+  if (!GetDelegate().IsInPrerenderingBeforeActivationStart())
+    MaybeRecordPriorUsageOfUserData(navigation_handle);
 
   return CONTINUE_OBSERVING;
 }
 
+void FormfillPageLoadMetricsObserver::DidActivatePrerenderedPage(
+    content::NavigationHandle* navigation_handle) {
+  MaybeRecordPriorUsageOfUserData(navigation_handle);
+}
+
 void FormfillPageLoadMetricsObserver::OnFeaturesUsageObserved(
     content::RenderFrameHost* rfh,
     const std::vector<blink::UseCounterFeature>& features) {
+  if (GetDelegate().IsInPrerenderingBeforeActivationStart())
+    return;
+
   if (user_data_field_detected_)
     return;
 
@@ -105,3 +104,28 @@
         ContentSettingsType::FORMFILL_METADATA, std::move(formfill_metadata));
   }
 }
+
+// Check if |kUserDataFieldFilledKey| has been previously set for the associated
+// URL.
+void FormfillPageLoadMetricsObserver::MaybeRecordPriorUsageOfUserData(
+    content::NavigationHandle* navigation_handle) {
+  HostContentSettingsMap* settings_map =
+      HostContentSettingsMapFactory::GetForProfile(Profile::FromBrowserContext(
+          GetDelegate().GetWebContents()->GetBrowserContext()));
+  DCHECK(settings_map);
+
+  const url::Origin& origin =
+      navigation_handle->GetRenderFrameHost()->GetLastCommittedOrigin();
+
+  base::Value formfill_metadata = settings_map->GetWebsiteSetting(
+      origin.GetURL(), origin.GetURL(), ContentSettingsType::FORMFILL_METADATA,
+      nullptr);
+
+  // User data field was detected on this site before.
+  if (formfill_metadata.is_dict() &&
+      formfill_metadata.FindBoolKey(kUserDataFieldFilledKey)) {
+    page_load_metrics::MetricsWebContentsObserver::RecordFeatureUsage(
+        navigation_handle->GetRenderFrameHost(),
+        blink::mojom::WebFeature::kUserDataFieldFilledPreviously);
+  }
+}
diff --git a/chrome/browser/page_load_metrics/observers/formfill_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/formfill_page_load_metrics_observer.h
index b49db23..2326b603 100644
--- a/chrome/browser/page_load_metrics/observers/formfill_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/formfill_page_load_metrics_observer.h
@@ -28,11 +28,18 @@
   ObservePolicy OnFencedFramesStart(
       content::NavigationHandle* navigation_handle,
       const GURL& currently_committed_url) override;
+  ObservePolicy OnPrerenderStart(content::NavigationHandle* navigation_handle,
+                                 const GURL& currently_committed_url) override;
   ObservePolicy OnCommit(content::NavigationHandle* navigation_handle) override;
+  void DidActivatePrerenderedPage(
+      content::NavigationHandle* navigation_handle) override;
   void OnFeaturesUsageObserved(
       content::RenderFrameHost* rfh,
       const std::vector<blink::UseCounterFeature>& features) override;
 
+  void MaybeRecordPriorUsageOfUserData(
+      content::NavigationHandle* navigation_handle);
+
  private:
   bool user_data_field_detected_ = false;
 };
diff --git a/chrome/browser/password_manager/android/password_manager_android_browsertest.cc b/chrome/browser/password_manager/android/password_manager_android_browsertest.cc
index 5abe5dd..8fef0bd 100644
--- a/chrome/browser/password_manager/android/password_manager_android_browsertest.cc
+++ b/chrome/browser/password_manager/android/password_manager_android_browsertest.cc
@@ -96,7 +96,7 @@
   // To make the test closer to TouchToFill, use |FillSuggestion| to fill a
   // credential later.
   fill_data.wait_for_username = true;
-  driver->FillPasswordForm(fill_data);
+  driver->SetPasswordFillData(fill_data);
 
   // A user taps the username field.
   ASSERT_TRUE(content::ExecuteScript(
diff --git a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
index f582a11..37e0cf5a 100644
--- a/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
+++ b/chrome/browser/password_manager/chrome_password_manager_client_unittest.cc
@@ -176,7 +176,7 @@
 
  private:
   // autofill::mojom::PasswordAutofillAgent:
-  void FillPasswordForm(
+  void SetPasswordFillData(
       const autofill::PasswordFormFillData& form_data) override {}
 
   void InformNoSavedCredentials(
diff --git a/chrome/browser/payments/secure_payment_confirmation_creation_browsertest.cc b/chrome/browser/payments/secure_payment_confirmation_creation_browsertest.cc
index 1822aab2..25696d7 100644
--- a/chrome/browser/payments/secure_payment_confirmation_creation_browsertest.cc
+++ b/chrome/browser/payments/secure_payment_confirmation_creation_browsertest.cc
@@ -420,6 +420,11 @@
   ASSERT_NE(nullptr, top_origin) << response;
   EXPECT_EQ(https_server()->GetURL("a.com", "/"), GURL(*top_origin));
 
+  std::string* rpId = value->FindStringPath("payment.rpId");
+  ASSERT_NE(nullptr, rpId) << response;
+  EXPECT_EQ("a.com", *rpId);
+
+  // TODO(crbug.com/1356224): Remove legacy 'rp' parameter.
   std::string* rp = value->FindStringPath("payment.rp");
   ASSERT_NE(nullptr, rp) << response;
   EXPECT_EQ("a.com", *rp);
diff --git a/chrome/browser/permissions/permission_update_infobar_delegate_android.cc b/chrome/browser/permissions/permission_update_infobar_delegate_android.cc
index 520f5ab3..e8bf8c4d 100644
--- a/chrome/browser/permissions/permission_update_infobar_delegate_android.cc
+++ b/chrome/browser/permissions/permission_update_infobar_delegate_android.cc
@@ -15,6 +15,7 @@
 #include "components/infobars/core/infobar.h"
 #include "components/permissions/android/android_permission_util.h"
 #include "components/permissions/permission_uma_util.h"
+#include "components/permissions/permission_util.h"
 #include "components/strings/grit/components_strings.h"
 #include "content/public/browser/web_contents.h"
 #include "ui/android/window_android.h"
diff --git a/chrome/browser/permissions/permission_update_message_delegate_android.cc b/chrome/browser/permissions/permission_update_message_delegate_android.cc
index c631f56..e5a4485 100644
--- a/chrome/browser/permissions/permission_update_message_delegate_android.cc
+++ b/chrome/browser/permissions/permission_update_message_delegate_android.cc
@@ -12,6 +12,7 @@
 #include "components/messages/android/message_dispatcher_bridge.h"
 #include "components/permissions/android/android_permission_util.h"
 #include "components/permissions/permission_uma_util.h"
+#include "components/permissions/permission_util.h"
 #include "components/strings/grit/components_strings.h"
 #include "content/public/browser/web_contents.h"
 #include "ui/base/l10n/l10n_util.h"
diff --git a/chrome/browser/permissions/permissions_security_model_interactive_uitest.cc b/chrome/browser/permissions/permissions_security_model_interactive_uitest.cc
index ddf5e8e..466a975 100644
--- a/chrome/browser/permissions/permissions_security_model_interactive_uitest.cc
+++ b/chrome/browser/permissions/permissions_security_model_interactive_uitest.cc
@@ -2265,29 +2265,57 @@
       "permissions_test/request_from_popup_v3/has_permissions");
 }
 
+// crbug.com/1356314 Failed on Linux.
+#if BUILDFLAG(IS_LINUX)
+#define MAYBE_OptionsPageNoPermissonsV2Test \
+  DISABLED_OptionsPageNoPermissonsV2Test
+#else
+#define MAYBE_OptionsPageNoPermissonsV2Test OptionsPageNoPermissonsV2Test
+#endif
 IN_PROC_BROWSER_TEST_F(PermissionRequestFromExtension,
-                       OptionsPageNoPermissonsV2Test) {
+                       MAYBE_OptionsPageNoPermissonsV2Test) {
   VerifyExtensionsOptionsPage(
       "permissions_test/request_from_options_v2/no_permissions",
       /*shown_prompts=*/4);
 }
 
+// crbug.com/1356314 Failed on Linux.
+#if BUILDFLAG(IS_LINUX)
+#define MAYBE_OptionsPageHasPermissonsV2Test \
+  DISABLED_OptionsPageHasPermissonsV2Test
+#else
+#define MAYBE_OptionsPageHasPermissonsV2Test OptionsPageHasPermissonsV2Test
+#endif
 IN_PROC_BROWSER_TEST_F(PermissionRequestFromExtension,
-                       OptionsPageHasPermissonsV2Test) {
+                       MAYBE_OptionsPageHasPermissonsV2Test) {
   VerifyExtensionsOptionsPage(
       "permissions_test/request_from_options_v2/has_permissions",
       /*shown_prompts=*/2);
 }
 
+// crbug.com/1356314 Failed on Linux.
+#if BUILDFLAG(IS_LINUX)
+#define MAYBE_OptionsPageNoPermissonsV3Test \
+  DISABLED_OptionsPageNoPermissonsV3Test
+#else
+#define MAYBE_OptionsPageNoPermissonsV3Test OptionsPageNoPermissonsV3Test
+#endif
 IN_PROC_BROWSER_TEST_F(PermissionRequestFromExtension,
-                       OptionsPageNoPermissonsV3Test) {
+                       MAYBE_OptionsPageNoPermissonsV3Test) {
   VerifyExtensionsOptionsPage(
       "permissions_test/request_from_options_v3/no_permissions",
       /*shown_prompts=*/4);
 }
 
+// crbug.com/1356314 Failed on Linux.
+#if BUILDFLAG(IS_LINUX)
+#define MAYBE_OptionsPageHasPermissonsV3Test \
+  DISABLED_OptionsPageHasPermissonsV3Test
+#else
+#define MAYBE_OptionsPageHasPermissonsV3Test OptionsPageHasPermissonsV3Test
+#endif
 IN_PROC_BROWSER_TEST_F(PermissionRequestFromExtension,
-                       OptionsPageHasPermissonsV3Test) {
+                       MAYBE_OptionsPageHasPermissonsV3Test) {
   VerifyExtensionsOptionsPage(
       "permissions_test/request_from_options_v3/has_permissions",
       /*shown_prompts=*/2);
diff --git a/chrome/browser/permissions/prediction_based_permission_ui_selector_unittest.cc b/chrome/browser/permissions/prediction_based_permission_ui_selector_unittest.cc
index 2948640..f4a55ab9 100644
--- a/chrome/browser/permissions/prediction_based_permission_ui_selector_unittest.cc
+++ b/chrome/browser/permissions/prediction_based_permission_ui_selector_unittest.cc
@@ -16,6 +16,7 @@
 #include "chrome/test/base/testing_profile.h"
 #include "components/permissions/features.h"
 #include "components/permissions/permission_uma_util.h"
+#include "components/permissions/permission_util.h"
 #include "components/permissions/request_type.h"
 #include "components/permissions/test/mock_permission_request.h"
 #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
index 01c21d25..fdca93ea 100644
--- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc
+++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -1733,6 +1733,9 @@
   { key::kHighEfficiencyModeEnabled,
     performance_manager::user_tuning::prefs::kHighEfficiencyModeEnabled,
     base::Value::Type::BOOLEAN },
+  { key::kBatterySaverModeAvailability,
+    performance_manager::user_tuning::prefs::kBatterySaverModeState,
+    base::Value::Type::INTEGER },
 #endif  // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
 };
 // clang-format on
diff --git a/chrome/browser/policy/test/restore_on_startup_policy_browsertest.cc b/chrome/browser/policy/test/restore_on_startup_policy_browsertest.cc
index cccf4ff..56809d4 100644
--- a/chrome/browser/policy/test/restore_on_startup_policy_browsertest.cc
+++ b/chrome/browser/policy/test/restore_on_startup_policy_browsertest.cc
@@ -195,19 +195,21 @@
 }
 
 IN_PROC_BROWSER_TEST_P(RestoreOnStartupPolicyTest, RunTest) {
-  TabStripModel* model = browser()->tab_strip_model();
-  int size = static_cast<int>(expected_urls_.size());
-  EXPECT_EQ(size, model->count());
-  resource_coordinator::WaitForTransitionToLoaded(model);
-  for (int i = 0; i < size && i < model->count(); ++i) {
-    content::WebContents* web_contents = model->GetWebContentsAt(i);
-    if (blocked_) {
-      CheckURLIsBlockedInWebContents(web_contents, expected_urls_[i]);
-    } else if (expected_urls_[i] == GURL(chrome::kChromeUINewTabURL)) {
-      EXPECT_EQ(ntp_test_utils::GetFinalNtpUrl(browser()->profile()),
-                web_contents->GetLastCommittedURL());
-    } else {
-      EXPECT_EQ(expected_urls_[i], web_contents->GetLastCommittedURL());
+  {
+    TabStripModel* model = browser()->tab_strip_model();
+    int size = static_cast<int>(expected_urls_.size());
+    EXPECT_EQ(size, model->count());
+    resource_coordinator::WaitForTransitionToLoaded(model);
+    for (int i = 0; i < size && i < model->count(); ++i) {
+      content::WebContents* web_contents = model->GetWebContentsAt(i);
+      if (blocked_) {
+        CheckURLIsBlockedInWebContents(web_contents, expected_urls_[i]);
+      } else if (expected_urls_[i] == GURL(chrome::kChromeUINewTabURL)) {
+        EXPECT_EQ(ntp_test_utils::GetFinalNtpUrl(browser()->profile()),
+                  web_contents->GetLastCommittedURL());
+      } else {
+        EXPECT_EQ(expected_urls_[i], web_contents->GetLastCommittedURL());
+      }
     }
   }
   // Policy urls should be opened on a new window if the startup policy is set
diff --git a/chrome/browser/privacy_budget/privacy_budget_browsertest.cc b/chrome/browser/privacy_budget/privacy_budget_browsertest.cc
index 1a6b7fd..62cabc2 100644
--- a/chrome/browser/privacy_budget/privacy_budget_browsertest.cc
+++ b/chrome/browser/privacy_budget/privacy_budget_browsertest.cc
@@ -151,8 +151,7 @@
 
   // We collect all metrics together and check that there is one that contains
   // the web feature metrics.
-  auto it = merged_entries.begin();
-  auto metrics = it->second->metrics;
+  auto metrics = merged_entries.begin()->second->metrics;
 
   for (auto& it : merged_entries) {
     metrics.insert(it.second->metrics.begin(), it.second->metrics.end());
@@ -291,8 +290,7 @@
 
   // We collect all metrics together and check that there is one that contains
   // the canvas readback metrics.
-  auto it = merged_entries.begin();
-  auto metrics = it->second->metrics;
+  auto metrics = merged_entries.begin()->second->metrics;
 
   for (auto& it : merged_entries) {
     metrics.insert(it.second->metrics.begin(), it.second->metrics.end());
@@ -362,8 +360,7 @@
   constexpr uint64_t input_digest = UINT64_C(33457614533296512);
   // We collect all metrics together and check that there is one that contains
   // the canvas readback metrics.
-  auto it = merged_entries.begin();
-  auto metrics = it->second->metrics;
+  auto metrics = merged_entries.begin()->second->metrics;
 
   for (auto& it : merged_entries) {
     metrics.insert(it.second->metrics.begin(), it.second->metrics.end());
diff --git a/chrome/browser/privacy_guide/android/BUILD.gn b/chrome/browser/privacy_guide/android/BUILD.gn
index 8befd7e..df8549f 100644
--- a/chrome/browser/privacy_guide/android/BUILD.gn
+++ b/chrome/browser/privacy_guide/android/BUILD.gn
@@ -14,11 +14,14 @@
     "java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragment.java",
     "java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuidePagerAdapter.java",
     "java/src/org/chromium/chrome/browser/privacy_guide/SafeBrowsingFragment.java",
+    "java/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandler.java",
+    "java/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandlerImpl.java",
     "java/src/org/chromium/chrome/browser/privacy_guide/SyncFragment.java",
   ]
   deps = [
     ":java_resources",
     "//chrome/browser/profiles/android:java",
+    "//chrome/browser/safe_browsing/android:java",
     "//chrome/browser/signin/services/android:java",
     "//components/browser_ui/bottomsheet/android:java",
     "//components/browser_ui/widget/android:java",
@@ -35,12 +38,15 @@
 robolectric_library("junit") {
   sources = [
     "junit/src/org/chromium/chrome/browser/privacy_guide/MSBBFragmentTest.java",
+    "junit/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuidePagerAdapterTest.java",
+    "junit/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandlerImplTest.java",
   ]
   deps = [
     ":java",
     "//base:base_java_test_support",
     "//base:base_junit_test_support",
     "//chrome/browser/profiles/android:java",
+    "//chrome/browser/safe_browsing/android:java",
     "//chrome/browser/signin/services/android:java",
     "//third_party/androidx:androidx_appcompat_appcompat_java",
     "//third_party/androidx:androidx_fragment_fragment_java",
diff --git a/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragment.java b/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragment.java
index 456621b..6212081 100644
--- a/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragment.java
+++ b/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuideFragment.java
@@ -73,7 +73,7 @@
         getLayoutInflater().inflate(R.layout.privacy_guide_steps, content);
 
         mViewPager = (ViewPager2) mView.findViewById(R.id.review_viewpager);
-        mPagerAdapter = new PrivacyGuidePagerAdapter(this);
+        mPagerAdapter = new PrivacyGuidePagerAdapter(this, new StepDisplayHandlerImpl());
         mViewPager.setAdapter(mPagerAdapter);
         mViewPager.setUserInputEnabled(false);
 
diff --git a/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuidePagerAdapter.java b/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuidePagerAdapter.java
index a36314b..b918077e 100644
--- a/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuidePagerAdapter.java
+++ b/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuidePagerAdapter.java
@@ -10,39 +10,55 @@
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * Controls the behavior of the ViewPager to navigate between privacy guide steps.
  */
 public class PrivacyGuidePagerAdapter extends FragmentStateAdapter {
     /**
-     * The types of views supported. Each view corresponds to a step in the privacy guide.
+     * The types of fragments supported. Each fragment corresponds to a step in the privacy guide.
      */
     @Retention(RetentionPolicy.SOURCE)
-    @IntDef({FragmentPosition.COOKIES, FragmentPosition.MSBB, FragmentPosition.SAFE_BROWSING,
-            FragmentPosition.SYNC, FragmentPosition.COUNT})
-    private @interface FragmentPosition {
+    @IntDef({FragmentType.COOKIES, FragmentType.MSBB, FragmentType.SAFE_BROWSING,
+            FragmentType.SYNC})
+    private @interface FragmentType {
         int MSBB = 0;
         int SYNC = 1;
         int SAFE_BROWSING = 2;
         int COOKIES = 3;
-        int COUNT = 4;
     }
 
-    public PrivacyGuidePagerAdapter(Fragment parent) {
+    private final List<Integer> mFragmentTypeList = new ArrayList<>();
+
+    public PrivacyGuidePagerAdapter(Fragment parent, StepDisplayHandler displayHandler) {
         super(parent);
+
+        mFragmentTypeList.add(FragmentType.MSBB);
+        if (displayHandler.shouldDisplaySync()) {
+            mFragmentTypeList.add(FragmentType.SYNC);
+        }
+        if (displayHandler.shouldDisplaySafeBrowsing()) {
+            mFragmentTypeList.add(FragmentType.SAFE_BROWSING);
+        }
+        if (displayHandler.shouldDisplayCookies()) {
+            mFragmentTypeList.add(FragmentType.COOKIES);
+        }
     }
 
     @Override
     public Fragment createFragment(int position) {
-        switch (position) {
-            case FragmentPosition.MSBB:
+        @FragmentType
+        int fragmentType = mFragmentTypeList.get(position);
+        switch (fragmentType) {
+            case FragmentType.MSBB:
                 return new MSBBFragment();
-            case FragmentPosition.SYNC:
+            case FragmentType.SYNC:
                 return new SyncFragment();
-            case FragmentPosition.SAFE_BROWSING:
+            case FragmentType.SAFE_BROWSING:
                 return new SafeBrowsingFragment();
-            case FragmentPosition.COOKIES:
+            case FragmentType.COOKIES:
                 return new CookiesFragment();
         }
         return null;
@@ -50,6 +66,6 @@
 
     @Override
     public int getItemCount() {
-        return FragmentPosition.COUNT;
+        return mFragmentTypeList.size();
     }
 }
diff --git a/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandler.java b/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandler.java
new file mode 100644
index 0000000..92c1f5f8
--- /dev/null
+++ b/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandler.java
@@ -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.
+
+package org.chromium.chrome.browser.privacy_guide;
+
+/**
+ * Utilities to determine whether a privacy guide step will be displayed or not.
+ */
+public interface StepDisplayHandler {
+    /**
+     * @return Whether the Privacy Guide Sync page should be displayed.
+     */
+    boolean shouldDisplaySync();
+
+    /**
+     * @return Whether the Privacy Guide Safe Browsing page should be displayed.
+     */
+    boolean shouldDisplaySafeBrowsing();
+
+    /**
+     * @return Whether the Privacy Guide Cookies page should be displayed.
+     */
+    boolean shouldDisplayCookies();
+}
diff --git a/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandlerImpl.java b/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandlerImpl.java
new file mode 100644
index 0000000..a4ce3591
--- /dev/null
+++ b/chrome/browser/privacy_guide/android/java/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandlerImpl.java
@@ -0,0 +1,30 @@
+// 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.
+
+package org.chromium.chrome.browser.privacy_guide;
+
+import org.chromium.chrome.browser.safe_browsing.SafeBrowsingBridge;
+import org.chromium.chrome.browser.safe_browsing.SafeBrowsingState;
+
+/**
+ * Computes for each privacy guide step whether it should be displayed or not.
+ */
+class StepDisplayHandlerImpl implements StepDisplayHandler {
+    @Override
+    public boolean shouldDisplaySync() {
+        // TODO: Check the settings for the SyncFragment.
+        return true;
+    }
+
+    @Override
+    public boolean shouldDisplaySafeBrowsing() {
+        return SafeBrowsingBridge.getSafeBrowsingState() != SafeBrowsingState.NO_SAFE_BROWSING;
+    }
+
+    @Override
+    public boolean shouldDisplayCookies() {
+        // TODO: Check the settings for the CookiesFragment.
+        return true;
+    }
+}
diff --git a/chrome/browser/privacy_guide/android/junit/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuidePagerAdapterTest.java b/chrome/browser/privacy_guide/android/junit/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuidePagerAdapterTest.java
new file mode 100644
index 0000000..ec790a2
--- /dev/null
+++ b/chrome/browser/privacy_guide/android/junit/src/org/chromium/chrome/browser/privacy_guide/PrivacyGuidePagerAdapterTest.java
@@ -0,0 +1,102 @@
+// 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.
+
+package org.chromium.chrome.browser.privacy_guide;
+
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.testing.FragmentScenario;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.ParameterizedRobolectricTestRunner;
+import org.robolectric.ParameterizedRobolectricTestRunner.Parameter;
+import org.robolectric.ParameterizedRobolectricTestRunner.Parameters;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * JUnit tests of the class {@link PrivacyGuidePagerAdapter}
+ */
+@RunWith(ParameterizedRobolectricTestRunner.class)
+public class PrivacyGuidePagerAdapterTest {
+    @Parameters
+    public static Collection<Object[]> data() {
+        return Arrays.asList(new Object[][] {{false, false, false}, {false, false, true},
+                {false, true, false}, {false, true, true}, {true, false, false},
+                {true, false, true}, {true, true, false}, {true, true, true}});
+    }
+
+    @Parameter(0)
+    public boolean mShouldDisplaySync;
+    @Parameter(1)
+    public boolean mShouldDisplaySafeBrowsing;
+    @Parameter(2)
+    public boolean mShouldDisplayCookies;
+
+    private StepDisplayHandler mStepDisplayHandler;
+    private FragmentScenario mScenario;
+    private Fragment mFragment;
+    private PrivacyGuidePagerAdapter mPagerAdapter;
+
+    @Before
+    public void setUp() {
+        mScenario = FragmentScenario.launchInContainer(
+                Fragment.class, Bundle.EMPTY, R.style.Theme_MaterialComponents);
+        mScenario.onFragment(fragment -> mFragment = fragment);
+        initPagerAdapterWithState();
+    }
+
+    @After
+    public void tearDown() {
+        mScenario.close();
+    }
+
+    private void initPagerAdapterWithState() {
+        mStepDisplayHandler = new StepDisplayHandler() {
+            @Override
+            public boolean shouldDisplaySync() {
+                return mShouldDisplaySync;
+            }
+
+            @Override
+            public boolean shouldDisplaySafeBrowsing() {
+                return mShouldDisplaySafeBrowsing;
+            }
+
+            @Override
+            public boolean shouldDisplayCookies() {
+                return mShouldDisplayCookies;
+            }
+        };
+        mPagerAdapter = new PrivacyGuidePagerAdapter(mFragment, mStepDisplayHandler);
+    }
+
+    private Set<Class> getDisplayedFragmentClasses() {
+        Set<Class> fragmentClassSet = new HashSet<>();
+        for (int i = 0; i < mPagerAdapter.getItemCount(); i++) {
+            fragmentClassSet.add(mPagerAdapter.createFragment(i).getClass());
+        }
+        return fragmentClassSet;
+    }
+
+    @Test
+    public void testFragmentsDisplayed() {
+        Set<Class> fragmentClassSet = getDisplayedFragmentClasses();
+        Assert.assertTrue(fragmentClassSet.contains(MSBBFragment.class));
+        Assert.assertEquals("Sync step displayed incorrectly", mShouldDisplaySync,
+                fragmentClassSet.contains(SyncFragment.class));
+        Assert.assertEquals("Safe Browsing step displayed incorrectly", mShouldDisplaySafeBrowsing,
+                fragmentClassSet.contains(SafeBrowsingFragment.class));
+        Assert.assertEquals("Cookies step displayed incorrectly", mShouldDisplayCookies,
+                fragmentClassSet.contains(CookiesFragment.class));
+    }
+}
diff --git a/chrome/browser/privacy_guide/android/junit/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandlerImplTest.java b/chrome/browser/privacy_guide/android/junit/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandlerImplTest.java
new file mode 100644
index 0000000..cdc32d3
--- /dev/null
+++ b/chrome/browser/privacy_guide/android/junit/src/org/chromium/chrome/browser/privacy_guide/StepDisplayHandlerImplTest.java
@@ -0,0 +1,66 @@
+// 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.
+
+package org.chromium.chrome.browser.privacy_guide;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import org.chromium.base.test.BaseRobolectricTestRunner;
+import org.chromium.base.test.util.JniMocker;
+import org.chromium.chrome.browser.safe_browsing.SafeBrowsingBridge;
+import org.chromium.chrome.browser.safe_browsing.SafeBrowsingBridgeJni;
+import org.chromium.chrome.browser.safe_browsing.SafeBrowsingState;
+
+/**
+ * JUnit tests of the class {@link StepDisplayHandlerImpl}.
+ * This test suite can be significantly compressed if @ParameterizedTest from JUnit5 can be used.
+ */
+@RunWith(BaseRobolectricTestRunner.class)
+public class StepDisplayHandlerImplTest {
+    @Rule
+    public JniMocker mocker = new JniMocker();
+    @Rule
+    public MockitoRule mockitoRule = MockitoJUnit.rule();
+
+    @Mock
+    private SafeBrowsingBridge.Natives mSBNativesMock;
+
+    private StepDisplayHandler mStepDisplayHandler;
+
+    @Before
+    public void setUp() {
+        mocker.mock(SafeBrowsingBridgeJni.TEST_HOOKS, mSBNativesMock);
+        mStepDisplayHandler = new StepDisplayHandlerImpl();
+    }
+
+    private void setSBState(@SafeBrowsingState int sbState) {
+        Mockito.when(mSBNativesMock.getSafeBrowsingState()).thenReturn(sbState);
+    }
+
+    @Test
+    public void testDisplaySBStepWhenSBEnhanced() {
+        setSBState(SafeBrowsingState.ENHANCED_PROTECTION);
+        Assert.assertTrue(mStepDisplayHandler.shouldDisplaySafeBrowsing());
+    }
+
+    @Test
+    public void testDisplaySBWhenSBStandard() {
+        setSBState(SafeBrowsingState.STANDARD_PROTECTION);
+        Assert.assertTrue(mStepDisplayHandler.shouldDisplaySafeBrowsing());
+    }
+
+    @Test
+    public void testDontDisplaySBWhenSBUnsafe() {
+        setSBState(SafeBrowsingState.NO_SAFE_BROWSING);
+        Assert.assertFalse(mStepDisplayHandler.shouldDisplaySafeBrowsing());
+    }
+}
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc
index ffe7db0..89cf0f2 100644
--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc
+++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service.cc
@@ -300,10 +300,7 @@
   if (browsing_data_remover_) {
     browsing_data_remover_->Remove(
         base::Time::Min(), base::Time::Max(),
-        content::BrowsingDataRemover::DATA_TYPE_INTEREST_GROUPS |
-            content::BrowsingDataRemover::DATA_TYPE_AGGREGATION_SERVICE |
-            content::BrowsingDataRemover::DATA_TYPE_ATTRIBUTION_REPORTING |
-            content::BrowsingDataRemover::DATA_TYPE_TRUST_TOKENS,
+        content::BrowsingDataRemover::DATA_TYPE_PRIVACY_SANDBOX,
         content::BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB);
   }
 
diff --git a/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc b/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc
index b20ab8c..f3978edc 100644
--- a/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc
+++ b/chrome/browser/privacy_sandbox/privacy_sandbox_service_unittest.cc
@@ -1286,10 +1286,7 @@
   // Disabling should start a task clearing all kAPI information.
   EXPECT_CALL(*mock_browsing_topics_service(), ClearAllTopicsData()).Times(1);
   prefs()->SetBoolean(prefs::kPrivacySandboxApisEnabledV2, false);
-  EXPECT_EQ(content::BrowsingDataRemover::DATA_TYPE_INTEREST_GROUPS |
-                content::BrowsingDataRemover::DATA_TYPE_AGGREGATION_SERVICE |
-                content::BrowsingDataRemover::DATA_TYPE_ATTRIBUTION_REPORTING |
-                content::BrowsingDataRemover::DATA_TYPE_TRUST_TOKENS,
+  EXPECT_EQ(content::BrowsingDataRemover::DATA_TYPE_PRIVACY_SANDBOX,
             browsing_data_remover()->GetLastUsedRemovalMaskForTesting());
   EXPECT_EQ(base::Time::Min(),
             browsing_data_remover()->GetLastUsedBeginTimeForTesting());
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
index d13219c..ef0f15c 100644
--- a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
+++ b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
@@ -1827,8 +1827,16 @@
   std::unique_ptr<ContextMenuNotificationObserver> menu_observer_;
 };
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+// TODO(crbug.com/1356504): Failing on Chrome OS.
+#define MAYBE_LensRegionSearchWithValidRegionNewTab \
+  DISABLED_LensRegionSearchWithValidRegionNewTab
+#else
+#define MAYBE_LensRegionSearchWithValidRegionNewTab \
+  LensRegionSearchWithValidRegionNewTab
+#endif
 IN_PROC_BROWSER_TEST_F(SearchByRegionBrowserTest,
-                       LensRegionSearchWithValidRegionNewTab) {
+                       MAYBE_LensRegionSearchWithValidRegionNewTab) {
   SetupAndLoadPage("/empty.html");
   ui_test_utils::AllBrowserTabAddedWaiter add_tab;
 
@@ -2037,8 +2045,16 @@
   base::RepeatingClosure quit_closure_;
 };
 
+#if BUILDFLAG(IS_CHROMEOS_ASH)
+// TODO(crbug.com/1356584): Failing on Chrome OS.
+#define MAYBE_LensRegionSearchWithValidRegionUnifiedSidePanel \
+  DISABLED_LensRegionSearchWithValidRegionUnifiedSidePanel
+#else
+#define MAYBE_LensRegionSearchWithValidRegionUnifiedSidePanel \
+  LensRegionSearchWithValidRegionUnifiedSidePanel
+#endif
 IN_PROC_BROWSER_TEST_F(SearchByRegionWithUnifiedSidePanelBrowserTest,
-                       LensRegionSearchWithValidRegionUnifiedSidePanel) {
+                       MAYBE_LensRegionSearchWithValidRegionUnifiedSidePanel) {
   lens::CreateLensUnifiedSidePanelEntryForTesting(browser());
   SetupAndLoadPage("/empty.html");
   // We need a base::RunLoop to ensure that our test does not finish until the
diff --git a/chrome/browser/resources/certificate_viewer/certificate_viewer.css b/chrome/browser/resources/certificate_viewer/certificate_viewer.css
index 53c1f6ad..96b4b62 100644
--- a/chrome/browser/resources/certificate_viewer/certificate_viewer.css
+++ b/chrome/browser/resources/certificate_viewer/certificate_viewer.css
@@ -90,8 +90,6 @@
 
 #cert-field-value {
   flex: 1;
-  /* The export button may not always be visible, so put the margin here so
-   * that the cert-field-value section always has margin after it. */
   margin-block-end: 10px;
   /* Minimum height enough for 3 lines of text. */
   min-height: 48px;
diff --git a/chrome/browser/resources/certificate_viewer/certificate_viewer.ts b/chrome/browser/resources/certificate_viewer/certificate_viewer.ts
index d8a3bac..b4c7f53 100644
--- a/chrome/browser/resources/certificate_viewer/certificate_viewer.ts
+++ b/chrome/browser/resources/certificate_viewer/certificate_viewer.ts
@@ -10,7 +10,7 @@
 import {CrTreeElement} from 'chrome://resources/cr_elements/cr_tree/cr_tree.js';
 import {CrTreeItemElement} from 'chrome://resources/cr_elements/cr_tree/cr_tree_item.js';
 import {assert} from 'chrome://resources/js/assert_ts.js';
-import {isMac, sendWithPromise} from 'chrome://resources/js/cr.m.js';
+import {sendWithPromise} from 'chrome://resources/js/cr.m.js';
 
 interface TreeInfo {
   payload?: object;
@@ -79,8 +79,6 @@
 
   const exportButton = document.querySelector<HTMLElement>('#export');
   assert(exportButton);
-  // Export button is disabled on mac, see https://crbug.com/1340536
-  exportButton.hidden = isMac;
   exportButton.onclick = exportCertificate;
 }
 
diff --git a/chrome/browser/resources/chromeos/network_ui/network_ui.html b/chrome/browser/resources/chromeos/network_ui/network_ui.html
index 1be50eb..e4557d1 100644
--- a/chrome/browser/resources/chromeos/network_ui/network_ui.html
+++ b/chrome/browser/resources/chromeos/network_ui/network_ui.html
@@ -193,7 +193,7 @@
       </cr-toggle>
       <div id="set-tethering-enabled-result"></div>
     </div>
-  <template>
+  </template>
 
   <div class="tabpanel" id="metrics">
     <network-metrics-ui></network-metrics-ui>
diff --git a/chrome/browser/resources/commander/BUILD.gn b/chrome/browser/resources/commander/BUILD.gn
index 6e4e65e..240e86f 100644
--- a/chrome/browser/resources/commander/BUILD.gn
+++ b/chrome/browser/resources/commander/BUILD.gn
@@ -2,72 +2,26 @@
 # 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("//tools/grit/preprocess_if_expr.gni")
-import("//tools/polymer/html_to_wrapper.gni")
-import("//tools/typescript/ts_library.gni")
-import("//ui/webui/resources/tools/generate_grd.gni")
-import("./commander.gni")
+import("//chrome/browser/resources/tools/build_webui.gni")
 
-preprocess_folder = "preprocessed"
-
-preprocess_if_expr("preprocess") {
-  out_folder = "$target_gen_dir/$preprocess_folder"
-  in_files = ts_files
-}
-
-preprocess_if_expr("preprocess_generated") {
-  deps = [ ":html_wrapper_files" ]
-  in_folder = target_gen_dir
-  out_folder = "$target_gen_dir/$preprocess_folder"
-  in_files = html_wrapper_files
-}
-
-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/commander_resources.grd"
-  deps = [ ":build_grd" ]
-  outputs = [
-    "grit/commander_resources.h",
-    "grit/commander_resources_map.cc",
-    "grit/commander_resources_map.h",
-    "commander_resources.pak",
+build_webui("build") {
+  grd_prefix = "commander"
+  static_files = [ "commander.html" ]
+  web_component_files = [
+    "app.ts",
+    "option.ts",
   ]
-  output_dir = "$root_gen_dir/chrome"
-}
+  non_web_component_files = [
+    "browser_proxy.ts",
+    "types.ts",
+  ]
 
-html_to_wrapper("html_wrapper_files") {
-  in_files = html_files + icons_html_files
-}
+  icons_html_files = [ "icons.html" ]
 
-ts_library("build_ts") {
-  root_dir = "$target_gen_dir/$preprocess_folder"
-  out_dir = "$target_gen_dir/tsc"
-  composite = true
-  tsconfig_base = "tsconfig_base.json"
-  in_files = ts_files + html_wrapper_files
-  definitions = [ "//tools/typescript/definitions/chrome_send.d.ts" ]
-  deps = [
+  ts_composite = true
+  ts_definitions = [ "//tools/typescript/definitions/chrome_send.d.ts" ]
+  ts_deps = [
     "//third_party/polymer/v3_0:library",
     "//ui/webui/resources:library",
   ]
-  extra_deps = [
-    ":preprocess",
-    ":preprocess_generated",
-  ]
-}
-
-generate_grd("build_grd") {
-  grd_prefix = "commander"
-  out_grd = "$target_gen_dir/${grd_prefix}_resources.grd"
-  input_files = [ "commander.html" ]
-  input_files_base_dir = rebase_path(".", "//")
-
-  deps = [ ":build_ts" ]
-  manifest_files =
-      filter_include(get_target_outputs(":build_ts"), [ "*.manifest" ])
 }
diff --git a/chrome/browser/resources/commander/commander.gni b/chrome/browser/resources/commander/commander.gni
deleted file mode 100644
index 5a1e251..0000000
--- a/chrome/browser/resources/commander/commander.gni
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2022 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-_non_web_component_files = [
-  "browser_proxy.ts",
-  "types.ts",
-]
-
-# Files holding a Polymer element definition and have an equivalent .html file.
-_web_component_files = [
-  "app.ts",
-  "option.ts",
-]
-
-# Files that are passed as input to html_to_wrapper().
-html_files = []
-foreach(f, _web_component_files) {
-  html_files += [ string_replace(f, ".ts", ".html") ]
-}
-
-icons_html_files = [ "icons.html" ]
-
-# Files that are generated by html_to_wrapper().
-html_wrapper_files = []
-foreach(f, html_files + icons_html_files) {
-  html_wrapper_files += [ f + ".ts" ]
-}
-
-ts_files = _web_component_files + _non_web_component_files
diff --git a/chrome/browser/resources/extensions/detail_view.ts b/chrome/browser/resources/extensions/detail_view.ts
index c9cf18ee..7128c71 100644
--- a/chrome/browser/resources/extensions/detail_view.ts
+++ b/chrome/browser/resources/extensions/detail_view.ts
@@ -8,7 +8,7 @@
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import 'chrome://resources/js/action_link.js';
@@ -26,7 +26,7 @@
 
 import {CrLinkRowElement} from 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import {CrToggleElement} from 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
-import {CrTooltipIconElement} from 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import {CrTooltipIconElement} from 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {afterNextRender, DomRepeatEvent, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
diff --git a/chrome/browser/resources/extensions/toolbar.ts b/chrome/browser/resources/extensions/toolbar.ts
index cd17c86..7517774 100644
--- a/chrome/browser/resources/extensions/toolbar.ts
+++ b/chrome/browser/resources/extensions/toolbar.ts
@@ -6,7 +6,7 @@
 import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
 import 'chrome://resources/cr_elements/cr_toolbar/cr_toolbar.js';
 import 'chrome://resources/cr_elements/hidden_style_css.m.js';
-import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import 'chrome://resources/polymer/v3_0/paper-styles/color.js';
 import './pack_dialog.js';
diff --git a/chrome/browser/resources/hangout_services/manifest.json b/chrome/browser/resources/hangout_services/manifest.json
index 3982787..f120f08 100644
--- a/chrome/browser/resources/hangout_services/manifest.json
+++ b/chrome/browser/resources/hangout_services/manifest.json
@@ -5,7 +5,7 @@
   "name": "Google Hangouts",
   // Note: Always update the version number when this file is updated. Chrome
   // triggers extension preferences update on the version increase.
-  "version": "1.3.19",
+  "version": "1.3.20",
   "manifest_version": 2,
   "externally_connectable": {
     "matches": [
diff --git a/chrome/browser/resources/hangout_services/thunk.js b/chrome/browser/resources/hangout_services/thunk.js
index 5283c14..1c3342bd 100644
--- a/chrome/browser/resources/hangout_services/thunk.js
+++ b/chrome/browser/resources/hangout_services/thunk.js
@@ -226,7 +226,8 @@
       // Options that getDisplayMedia() also has, which are applied *before*
       // the user makes their choice, and which typically serve to shape
       // the choice offered to the user.
-      const options = message['options'] || {systemAudio: 'include'};
+      const options = message['options'] ||
+          {systemAudio: 'include', selfBrowserSurface: 'include'};
 
       let cancelId = null;
       const tab = port.sender.tab;
@@ -242,7 +243,8 @@
         requestInfo['guestProcessId'] = port.sender.guestProcessId || 0;
         requestInfo['guestRenderFrameId'] =
             port.sender.guestRenderFrameRoutingId || 0;
-        // TODO(crbug.com/1329129): Plumb systemAudio and other options here.
+        // TODO(crbug.com/1329129): Plumb systemAudio, selfBrowserSurface and
+        // other options here.
         cancelId = chrome.webrtcDesktopCapturePrivate.chooseDesktopMedia(
             sources, requestInfo, sendResponse);
       }
diff --git a/chrome/browser/resources/new_tab_page/customize_modules.ts b/chrome/browser/resources/new_tab_page/customize_modules.ts
index 67130b7..c23f2c4 100644
--- a/chrome/browser/resources/new_tab_page/customize_modules.ts
+++ b/chrome/browser/resources/new_tab_page/customize_modules.ts
@@ -7,7 +7,7 @@
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_radio_group/cr_radio_group.js';
 import 'chrome://resources/cr_elements/cr_radio_button/cr_radio_button.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 
 import {CrRadioButtonElement} from 'chrome://resources/cr_elements/cr_radio_button/cr_radio_button.js';
 import {DomRepeat, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
diff --git a/chrome/browser/resources/new_tab_page_third_party/BUILD.gn b/chrome/browser/resources/new_tab_page_third_party/BUILD.gn
index 47cec11..1feecba 100644
--- a/chrome/browser/resources/new_tab_page_third_party/BUILD.gn
+++ b/chrome/browser/resources/new_tab_page_third_party/BUILD.gn
@@ -2,70 +2,23 @@
 # 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("//tools/grit/preprocess_if_expr.gni")
-import("//tools/typescript/ts_library.gni")
-import("//ui/webui/resources/tools/generate_grd.gni")
+import("//chrome/browser/resources/tools/build_webui.gni")
 
-grd_prefix = "new_tab_page_third_party"
-preprocess_folder = "preprocessed"
-
-preprocess_if_expr("preprocess") {
-  out_folder = "$target_gen_dir/$preprocess_folder"
-  in_files = [
+build_webui("build") {
+  grd_prefix = "new_tab_page_third_party"
+  static_files = [ "new_tab_page_third_party.html" ]
+  non_web_component_files = [
     "browser_proxy.ts",
     "new_tab_page_third_party.ts",
   ]
-}
 
-copy("copy_mojo") {
-  deps = [ "//chrome/browser/ui/webui/new_tab_page_third_party:mojo_bindings_js__generator" ]
-  sources = [ "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/new_tab_page_third_party/new_tab_page_third_party.mojom-webui.js" ]
-  outputs = [ "$target_gen_dir/$preprocess_folder/{{source_file_part}}" ]
-}
+  mojo_files_deps = [ "//chrome/browser/ui/webui/new_tab_page_third_party:mojo_bindings_js__generator" ]
+  mojo_files = [ "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/new_tab_page_third_party/new_tab_page_third_party.mojom-webui.js" ]
 
-grit("resources") {
-  defines = chrome_grit_defines
-  enable_input_discovery_for_gn_analyze = false
-  source = "$target_gen_dir/resources.grd"
-  deps = [ ":build_grd" ]
-  outputs = [
-    "grit/new_tab_page_third_party_resources.h",
-    "grit/new_tab_page_third_party_resources_map.cc",
-    "grit/new_tab_page_third_party_resources_map.h",
-    "new_tab_page_third_party_resources.pak",
-  ]
-  output_dir = "$root_gen_dir/chrome"
-}
-
-ts_library("build_ts") {
-  root_dir = "$target_gen_dir/$preprocess_folder"
-  out_dir = "$target_gen_dir/tsc"
-  tsconfig_base = "tsconfig_base.json"
-  in_files = [
-    "browser_proxy.ts",
-    "new_tab_page_third_party.ts",
-    "new_tab_page_third_party.mojom-webui.js",
-  ]
-  deps = [
+  ts_deps = [
     "//third_party/polymer/v3_0:library",
     "//ui/webui/resources:library",
     "//ui/webui/resources/cr_components/most_visited:build_ts",
     "//ui/webui/resources/mojo:library",
   ]
-  extra_deps = [
-    ":copy_mojo",
-    ":preprocess",
-  ]
-}
-
-generate_grd("build_grd") {
-  grd_prefix = grd_prefix
-  out_grd = "$target_gen_dir/resources.grd"
-  input_files = [ "new_tab_page_third_party.html" ]
-  input_files_base_dir = rebase_path(".", "//")
-  deps = [ ":build_ts" ]
-  manifest_files =
-      filter_include(get_target_outputs(":build_ts"), [ "*.manifest" ])
 }
diff --git a/chrome/browser/resources/ntp4/incognito_tab.html b/chrome/browser/resources/ntp4/incognito_tab.html
index 395f942..8664461 100644
--- a/chrome/browser/resources/ntp4/incognito_tab.html
+++ b/chrome/browser/resources/ntp4/incognito_tab.html
@@ -51,6 +51,6 @@
 <script type="module" src="incognito_tab.js"></script>
 <!-- Lazy-load cr_elements to avoid performance penalty introduced by loading Polymer -->
 <script type="module" src="chrome://resources/cr_elements/cr_toggle/cr_toggle.js" async></script>
-<script type="module" src="chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js" async></script>
+<script type="module" src="chrome://resources/cr_elements/policy/cr_tooltip_icon.js" async></script>
 </body>
 </html>
diff --git a/chrome/browser/resources/ntp4/revamped_incognito_tab.html b/chrome/browser/resources/ntp4/revamped_incognito_tab.html
index c74a7d5b0..2ac9fb4 100644
--- a/chrome/browser/resources/ntp4/revamped_incognito_tab.html
+++ b/chrome/browser/resources/ntp4/revamped_incognito_tab.html
@@ -56,6 +56,6 @@
 </script>
 <!-- Lazy-load cr_elements to avoid performance penalty introduced by loading Polymer -->
 <script type="module" src="chrome://resources/cr_elements/cr_toggle/cr_toggle.js" async></script>
-<script type="module" src="chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js" async></script>
+<script type="module" src="chrome://resources/cr_elements/policy/cr_tooltip_icon.js" async></script>
 </body>
 </html>
diff --git a/chrome/browser/resources/profile_internals/BUILD.gn b/chrome/browser/resources/profile_internals/BUILD.gn
index d9f959f..2f81bf76 100644
--- a/chrome/browser/resources/profile_internals/BUILD.gn
+++ b/chrome/browser/resources/profile_internals/BUILD.gn
@@ -2,76 +2,20 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//chrome/browser/resources/tools/build_webui.gni")
 import("//chrome/common/features.gni")
-import("//tools/grit/grit_rule.gni")
-import("//tools/grit/preprocess_if_expr.gni")
-import("//tools/polymer/html_to_wrapper.gni")
-import("//tools/typescript/ts_library.gni")
-import("//ui/webui/resources/tools/generate_grd.gni")
 
 assert(!is_android)
 
-# Move everything to one folder using preprocess_if_expr.
-preprocess_folder = "preprocessed"
+build_webui("build") {
+  grd_prefix = "profile_internals"
+  static_files = [ "profile_internals.html" ]
+  web_component_files = [ "profile_internals_app.ts" ]
+  non_web_component_files = [ "profile_internals_browser_proxy.ts" ]
 
-preprocess_if_expr("preprocess") {
-  out_folder = "$target_gen_dir/$preprocess_folder"
-  in_files = [
-    "profile_internals_app.ts",
-    "profile_internals_browser_proxy.ts",
-  ]
-}
-
-preprocess_if_expr("preprocess_generated") {
-  deps = [ ":html_wrapper_files" ]
-  in_folder = target_gen_dir
-  out_folder = "$target_gen_dir/$preprocess_folder"
-  in_files = [ "profile_internals_app.html.ts" ]
-}
-
-grit("resources") {
-  enable_input_discovery_for_gn_analyze = false
-  source = "$target_gen_dir/resources.grd"
-  deps = [ ":build_grd" ]
-  outputs = [
-    "grit/profile_internals_resources.h",
-    "grit/profile_internals_resources_map.cc",
-    "grit/profile_internals_resources_map.h",
-    "profile_internals_resources.pak",
-  ]
-  output_dir = "$root_gen_dir/chrome"
-}
-
-html_to_wrapper("html_wrapper_files") {
-  in_files = [ "profile_internals_app.html" ]
-}
-
-ts_library("build_ts") {
-  root_dir = "$target_gen_dir/$preprocess_folder"
-  out_dir = "$target_gen_dir/tsc"
-  tsconfig_base = "tsconfig_base.json"
-  in_files = [
-    "profile_internals_app.ts",
-    "profile_internals_app.html.ts",
-    "profile_internals_browser_proxy.ts",
-  ]
-  definitions = [ "//tools/typescript/definitions/chrome_send.d.ts" ]
-  deps = [
+  ts_definitions = [ "//tools/typescript/definitions/chrome_send.d.ts" ]
+  ts_deps = [
     "//third_party/polymer/v3_0:library",
     "//ui/webui/resources:library",
   ]
-  extra_deps = [
-    ":preprocess",
-    ":preprocess_generated",
-  ]
-}
-
-generate_grd("build_grd") {
-  grd_prefix = "profile_internals"
-  out_grd = "$target_gen_dir/resources.grd"
-  input_files = [ "profile_internals.html" ]
-  input_files_base_dir = rebase_path(".", "//")
-  deps = [ ":build_ts" ]
-  manifest_files =
-      filter_include(get_target_outputs(":build_ts"), [ "*.manifest" ])
 }
diff --git a/chrome/browser/resources/settings/appearance_page/home_url_input.ts b/chrome/browser/resources/settings/appearance_page/home_url_input.ts
index 989e7fde..47916c5c 100644
--- a/chrome/browser/resources/settings/appearance_page/home_url_input.ts
+++ b/chrome/browser/resources/settings/appearance_page/home_url_input.ts
@@ -8,7 +8,7 @@
  * prefs.homepage
  */
 import 'chrome://resources/cr_elements/cr_input/cr_input.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 
 import {CrInputElement} from 'chrome://resources/cr_elements/cr_input/cr_input.js';
 import {assert} from 'chrome://resources/js/assert_ts.js';
diff --git a/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts b/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts
index 4a80da0..1a60d8e 100644
--- a/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts
+++ b/chrome/browser/resources/settings/autofill_page/password_manager_proxy.ts
@@ -21,6 +21,8 @@
 export type PasswordCheckStatusChangedListener =
     (status: chrome.passwordsPrivate.PasswordCheckStatus) => void;
 
+export type PasswordManagerAuthTimeoutListener = () => void;
+
 /**
  * Interface for all callbacks to the password API.
  */
@@ -304,6 +306,18 @@
       listener: PasswordCheckStatusChangedListener): void;
 
   /**
+   * Add an observer for authentication timeout.
+   */
+  addPasswordManagerAuthTimeoutListener(
+      listener: PasswordManagerAuthTimeoutListener): void;
+
+  /**
+   * Remove the specified observer for authentication timeout.
+   */
+  removePasswordManagerAuthTimeoutListener(
+      listener: PasswordManagerAuthTimeoutListener): void;
+
+  /**
    * Records a given interaction on the Password Check page.
    */
   recordPasswordCheckInteraction(interaction: PasswordCheckInteraction): void;
@@ -632,6 +646,17 @@
         listener);
   }
 
+  addPasswordManagerAuthTimeoutListener(
+      listener: PasswordManagerAuthTimeoutListener) {
+    chrome.passwordsPrivate.onPasswordManagerAuthTimeout.addListener(listener);
+  }
+
+  removePasswordManagerAuthTimeoutListener(
+      listener: PasswordManagerAuthTimeoutListener) {
+    chrome.passwordsPrivate.onPasswordManagerAuthTimeout.removeListener(
+        listener);
+  }
+
   /** override */
   recordPasswordCheckInteraction(interaction: PasswordCheckInteraction) {
     chrome.metricsPrivate.recordEnumerationValue(
diff --git a/chrome/browser/resources/settings/autofill_page/password_view.ts b/chrome/browser/resources/settings/autofill_page/password_view.ts
index 4dc1d68..f798ff30 100644
--- a/chrome/browser/resources/settings/autofill_page/password_view.ts
+++ b/chrome/browser/resources/settings/autofill_page/password_view.ts
@@ -31,6 +31,7 @@
 
 import {SavedPasswordEditedEvent} from './password_edit_dialog.js';
 import {PasswordListItemElement} from './password_list_item.js';
+import {PasswordManagerImpl} from './password_manager_proxy.js';
 import {PasswordRemovalMixin, PasswordRemovalMixinInterface} from './password_removal_mixin.js';
 import {PasswordRemoveDialogPasswordsRemovedEvent} from './password_remove_dialog.js';
 import {PasswordRequestorMixin, PasswordRequestorMixinInterface} from './password_requestor_mixin.js';
@@ -70,6 +71,8 @@
   ID = 'id',
 }
 
+export const PASSWORD_MANAGER_AUTH_TIMEOUT_PARAM = 'authTimeout';
+
 export function recordPasswordViewInteraction(
     interaction: PasswordViewPageInteractions) {
   chrome.metricsPrivate.recordEnumerationValue(
@@ -147,6 +150,28 @@
   private isPasswordVisible_: boolean;
   private showEditDialog_: boolean;
   private visibilityChangedListener_: () => void;
+  private passwordManagerAuthTimeoutListener_: () => void;
+
+  override connectedCallback() {
+    super.connectedCallback();
+
+    this.passwordManagerAuthTimeoutListener_ = () => {
+      if (Router.getInstance().getCurrentRoute() === routes.PASSWORD_VIEW) {
+        const params = new URLSearchParams();
+        params.set(PASSWORD_MANAGER_AUTH_TIMEOUT_PARAM, 'true');
+        Router.getInstance().navigateTo(routes.PASSWORDS, params);
+      }
+    };
+
+    PasswordManagerImpl.getInstance().addPasswordManagerAuthTimeoutListener(
+        this.passwordManagerAuthTimeoutListener_);
+  }
+
+  override disconnectedCallback() {
+    super.disconnectedCallback();
+    PasswordManagerImpl.getInstance().removePasswordManagerAuthTimeoutListener(
+        this.passwordManagerAuthTimeoutListener_);
+  }
 
   override currentRouteChanged(route: Route): void {
     if (route !== routes.PASSWORD_VIEW) {
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_section.html b/chrome/browser/resources/settings/autofill_page/passwords_section.html
index ba0801b1..4300eb0 100644
--- a/chrome/browser/resources/settings/autofill_page/passwords_section.html
+++ b/chrome/browser/resources/settings/autofill_page/passwords_section.html
@@ -323,3 +323,15 @@
         $i18n{noExceptionsFound}
       </div>
     </div>
+    <cr-dialog id="authTimeoutDialog">
+      <div slot="title">$i18n{passwordsTimedOut}</div>
+      <div slot="body">
+        <div>$i18n{passwordsTimedOutDescription}</div>
+      </div>
+      <div slot="button-container">
+        <cr-button class="action-button"
+            on-click="onCloseAuthTimeoutDialogButton_">
+          $i18n{passwordsGotIt}
+        </cr-button>
+      </div>
+    </cr-dialog>
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_section.ts b/chrome/browser/resources/settings/autofill_page/passwords_section.ts
index d5836bf..8c51817 100644
--- a/chrome/browser/resources/settings/autofill_page/passwords_section.ts
+++ b/chrome/browser/resources/settings/autofill_page/passwords_section.ts
@@ -10,6 +10,7 @@
 
 import 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
+import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import 'chrome://resources/cr_elements/icons.m.js';
@@ -33,6 +34,7 @@
 
 import {getInstance as getAnnouncerInstance} from 'chrome://resources/cr_elements/cr_a11y_announcer/cr_a11y_announcer.js';
 import {CrActionMenuElement} from 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js';
+import {CrDialogElement} from 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
 import {CrLinkRowElement} from 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import {assert, assertNotReached} from 'chrome://resources/js/assert_ts.js';
 import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js';
@@ -58,6 +60,7 @@
 import {PasswordCheckMixin, PasswordCheckMixinInterface} from './password_check_mixin.js';
 import {AddCredentialFromSettingsUserInteractions, PasswordEditDialogElement} from './password_edit_dialog.js';
 import {PasswordCheckReferrer, PasswordExceptionListChangedListener, PasswordManagerImpl, PasswordManagerProxy} from './password_manager_proxy.js';
+import {PASSWORD_MANAGER_AUTH_TIMEOUT_PARAM} from './password_view.js';
 import {PasswordsListHandlerElement} from './passwords_list_handler.js';
 import {getTemplate} from './passwords_section.html.js';
 import {UserUtilMixin, UserUtilMixinInterface} from './user_util_mixin.js';
@@ -82,6 +85,7 @@
     accountStorageOptInBody: HTMLElement,
     accountStorageOptOutBody: HTMLElement,
     addPasswordDialog: PasswordEditDialogElement,
+    authTimeoutDialog: CrDialogElement,
     checkPasswordLeakCount: HTMLElement,
     checkPasswordLeakDescription: HTMLElement,
     checkPasswordWarningIcon: HTMLElement,
@@ -361,11 +365,28 @@
   override currentRouteChanged(route: Route): void {
     super.currentRouteChanged(route);
 
+    if (route !== routes.PASSWORDS) {
+      return;
+    }
+
     // If password change scripts are enabled, the scripts cache should be
     // refreshed to minimize any UI modifications on the password check page.
-    if (route === routes.PASSWORDS && this.isAutomaticPasswordChangeEnabled_) {
+    if (this.isAutomaticPasswordChangeEnabled_) {
       this.passwordManager_.refreshScriptsIfNecessary();
     }
+
+    // Show the auth timeout dialog if the URL has the URL param.
+    const params = Router.getInstance().getQueryParameters();
+    if (!params.get(PASSWORD_MANAGER_AUTH_TIMEOUT_PARAM)) {
+      return;
+    }
+    this.$.authTimeoutDialog.showModal();
+    params.delete(PASSWORD_MANAGER_AUTH_TIMEOUT_PARAM);
+    Router.getInstance().updateRouteParams(params);
+  }
+
+  private onCloseAuthTimeoutDialogButton_() {
+    this.$.authTimeoutDialog.close();
   }
 
   private computeShowAddPasswordButton_(): boolean {
diff --git a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.ts b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.ts
index c9cff3a4..3c61832 100644
--- a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.ts
+++ b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.ts
@@ -4,7 +4,7 @@
 
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_expand_button/cr_expand_button.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import 'chrome://resources/polymer/v3_0/iron-collapse/iron-collapse.js';
diff --git a/chrome/browser/resources/settings/chromeos/bluetooth_page/bluetooth_page.js b/chrome/browser/resources/settings/chromeos/bluetooth_page/bluetooth_page.js
index 7409fd94e..340b83e 100644
--- a/chrome/browser/resources/settings/chromeos/bluetooth_page/bluetooth_page.js
+++ b/chrome/browser/resources/settings/chromeos/bluetooth_page/bluetooth_page.js
@@ -11,7 +11,7 @@
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import '../os_icons.js';
 import '../../prefs/prefs.js';
 import '../../settings_page/settings_animated_pages.js';
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/crostini_page/BUILD.gn
index 10ec1cb..f4c7f0e 100644
--- a/chrome/browser/resources/settings/chromeos/crostini_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/crostini_page/BUILD.gn
@@ -38,9 +38,8 @@
     "..:route_observer_behavior",
     "../..:router",
     "//ui/webui/resources/cr_elements/cr_button:cr_button",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator_behavior.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator_behavior",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:load_time_data.m",
     "//ui/webui/resources/js:web_ui_listener_behavior.m",
@@ -143,7 +142,7 @@
     "../guest_os:guest_os_shared_usb_devices",
     "//ui/webui/resources/cr_elements/cr_button:cr_button",
     "//ui/webui/resources/cr_elements/cr_icon_button:cr_icon_button",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:web_ui_listener_behavior.m",
   ]
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_arc_adb.js b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_arc_adb.js
index fd5bf59..5b1ac54f 100644
--- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_arc_adb.js
+++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_arc_adb.js
@@ -8,12 +8,12 @@
  */
 
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import './crostini_arc_adb_confirmation_dialog.js';
 import 'chrome://resources/cr_components/localized_link/localized_link.js';
 import '../../settings_shared.css.js';
 
-import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.js';
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {WebUIListenerBehavior, WebUIListenerBehaviorInterface} from 'chrome://resources/js/web_ui_listener_behavior.m.js';
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.js b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.js
index 505b039..4bf304f 100644
--- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.js
+++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_page.js
@@ -11,7 +11,7 @@
 
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import '../../settings_page/settings_animated_pages.js';
 import '../../settings_page/settings_subpage.js';
 import '../../settings_shared.css.js';
diff --git a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_port_forwarding.js b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_port_forwarding.js
index 8151cbe..ebb69d4 100644
--- a/chrome/browser/resources/settings/chromeos/crostini_page/crostini_port_forwarding.js
+++ b/chrome/browser/resources/settings/chromeos/crostini_page/crostini_port_forwarding.js
@@ -292,9 +292,7 @@
    * @private
    */
   containerLabel_(id) {
-    return this.showContainerId_(this.allPorts_, id) ?
-        containerLabel(id, DEFAULT_CROSTINI_VM) :
-        '';
+    return containerLabel(id, DEFAULT_CROSTINI_VM);
   }
 
   /**
diff --git a/chrome/browser/resources/settings/chromeos/date_time_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/date_time_page/BUILD.gn
index 3c0c2d2..a93f371 100644
--- a/chrome/browser/resources/settings/chromeos/date_time_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/date_time_page/BUILD.gn
@@ -26,8 +26,8 @@
     "..:route_observer_behavior",
     "../..:router",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_pref_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_pref_indicator",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:load_time_data.m",
     "//ui/webui/resources/js:web_ui_listener_behavior.m",
diff --git a/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.js b/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.js
index d473eb11..47c827a 100644
--- a/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.js
+++ b/chrome/browser/resources/settings/chromeos/date_time_page/date_time_page.js
@@ -9,8 +9,8 @@
  */
 
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import '../../controls/settings_toggle_button.js';
 import '../../settings_page/settings_subpage.js';
 import '../../settings_shared.css.js';
diff --git a/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn
index 84cf42a..8fda7bd 100644
--- a/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn
@@ -192,7 +192,7 @@
     "..:os_route",
     "..:route_observer_behavior",
     "../..:router",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
     "//ui/webui/resources/js:assert.m",
     "//ui/webui/resources/js:cr.m",
     "//ui/webui/resources/js:load_time_data.m",
diff --git a/chrome/browser/resources/settings/chromeos/device_page/display.js b/chrome/browser/resources/settings/chromeos/device_page/display.js
index 160aab2..1f78027 100644
--- a/chrome/browser/resources/settings/chromeos/device_page/display.js
+++ b/chrome/browser/resources/settings/chromeos/device_page/display.js
@@ -11,7 +11,7 @@
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import 'chrome://resources/cr_elements/cr_tabs/cr_tabs.js';
 import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import 'chrome://resources/cr_elements/md_select_css.m.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
 import './display_layout.js';
diff --git a/chrome/browser/resources/settings/chromeos/device_page/power.js b/chrome/browser/resources/settings/chromeos/device_page/power.js
index 4923671..e094d04 100644
--- a/chrome/browser/resources/settings/chromeos/device_page/power.js
+++ b/chrome/browser/resources/settings/chromeos/device_page/power.js
@@ -7,7 +7,7 @@
  * 'settings-power' is the settings subpage for power settings.
  */
 
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/cr_elements/md_select_css.m.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
diff --git a/chrome/browser/resources/settings/chromeos/device_page/stylus.js b/chrome/browser/resources/settings/chromeos/device_page/stylus.js
index caa443b..9c28993 100644
--- a/chrome/browser/resources/settings/chromeos/device_page/stylus.js
+++ b/chrome/browser/resources/settings/chromeos/device_page/stylus.js
@@ -15,7 +15,7 @@
 import '../../controls/settings_toggle_button.js';
 import '../../settings_shared.css.js';
 
-import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.js';
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {html, microTask, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
diff --git a/chrome/browser/resources/settings/chromeos/google_assistant_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/google_assistant_page/BUILD.gn
index d19fbfba..1a7b5d2 100644
--- a/chrome/browser/resources/settings/chromeos/google_assistant_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/google_assistant_page/BUILD.gn
@@ -30,7 +30,7 @@
     "//chrome/browser/resources/settings/chromeos:prefs_behavior",
     "//chrome/browser/resources/settings/chromeos:route_observer_behavior",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_pref_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_pref_indicator",
     "//ui/webui/resources/js:cr.m",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:load_time_data.m",
diff --git a/chrome/browser/resources/settings/chromeos/google_assistant_page/google_assistant_page.js b/chrome/browser/resources/settings/chromeos/google_assistant_page/google_assistant_page.js
index ae964bc..64b78067 100644
--- a/chrome/browser/resources/settings/chromeos/google_assistant_page/google_assistant_page.js
+++ b/chrome/browser/resources/settings/chromeos/google_assistant_page/google_assistant_page.js
@@ -8,7 +8,7 @@
  */
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import 'chrome://resources/cr_elements/md_select_css.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import '../../controls/controlled_button.js';
 import '../../controls/settings_toggle_button.js';
 import '../../prefs/prefs.js';
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn
index f5da9db..876d15c 100644
--- a/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/internet_page/BUILD.gn
@@ -115,7 +115,7 @@
     "//ui/webui/resources/cr_components/chromeos/network_health:network_health_container",
     "//ui/webui/resources/cr_components/chromeos/traffic_counters:traffic_counters",
     "//ui/webui/resources/cr_elements/cr_button:cr_button",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
     "//ui/webui/resources/js:assert.m",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:web_ui_listener_behavior.m",
@@ -175,7 +175,7 @@
     "//ui/webui/resources/cr_components/chromeos/network:onc_mojo.m",
     "//ui/webui/resources/cr_components/chromeos/network:sim_lock_dialogs.m",
     "//ui/webui/resources/cr_elements/cr_icon_button:cr_icon_button",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:web_ui_listener_behavior.m",
   ]
@@ -216,7 +216,7 @@
     "//ui/webui/resources/cr_components/chromeos/network:network_listener_behavior.m",
     "//ui/webui/resources/cr_components/chromeos/network:onc_mojo.m",
     "//ui/webui/resources/cr_elements/cr_icon_button:cr_icon_button",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
     "//ui/webui/resources/js:i18n_behavior.m",
   ]
   externs_list =
@@ -273,7 +273,7 @@
     "//ui/webui/resources/cr_components/chromeos/network:onc_mojo.m",
     "//ui/webui/resources/cr_components/chromeos/traffic_counters:traffic_counters",
     "//ui/webui/resources/cr_elements/cr_icon_button:cr_icon_button",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator_behavior.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator_behavior",
     "//ui/webui/resources/js:assert.m",
     "//ui/webui/resources/js:i18n_behavior.m",
   ]
@@ -326,7 +326,7 @@
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/cr_components/chromeos/network:mojo_interface_provider.m",
     "//ui/webui/resources/cr_components/chromeos/network:onc_mojo.m",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
     "//ui/webui/resources/js:assert.m",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:load_time_data.m",
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/cellular_networks_list.js b/chrome/browser/resources/settings/chromeos/internet_page/cellular_networks_list.js
index cb3d5e6..c01e94b 100644
--- a/chrome/browser/resources/settings/chromeos/internet_page/cellular_networks_list.js
+++ b/chrome/browser/resources/settings/chromeos/internet_page/cellular_networks_list.js
@@ -11,7 +11,7 @@
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_icons_css.m.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import '../os_settings_icons_css.js';
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.js b/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.js
index 4341e92b..ef2b7a0f 100644
--- a/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.js
+++ b/chrome/browser/resources/settings/chromeos/internet_page/cellular_roaming_toggle_button.js
@@ -11,7 +11,7 @@
 
 import '../../prefs/prefs.js';
 import '../../settings_shared.css.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
 import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_page.js b/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_page.js
index 3249d03..d6e797b 100644
--- a/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_page.js
+++ b/chrome/browser/resources/settings/chromeos/internet_page/internet_detail_page.js
@@ -21,7 +21,7 @@
 import 'chrome://resources/cr_elements/cr_expand_button/cr_expand_button.js';
 import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/polymer/v3_0/iron-collapse/iron-collapse.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
 import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/internet_page.js b/chrome/browser/resources/settings/chromeos/internet_page/internet_page.js
index a5d0dc2..a74aac6 100644
--- a/chrome/browser/resources/settings/chromeos/internet_page/internet_page.js
+++ b/chrome/browser/resources/settings/chromeos/internet_page/internet_page.js
@@ -14,7 +14,7 @@
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_toast/cr_toast.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
 import '../os_settings_icons_css.js';
 import '../../prefs/prefs.js';
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/internet_subpage.js b/chrome/browser/resources/settings/chromeos/internet_page/internet_subpage.js
index 0ee0bd00..01140f6d 100644
--- a/chrome/browser/resources/settings/chromeos/internet_page/internet_subpage.js
+++ b/chrome/browser/resources/settings/chromeos/internet_page/internet_subpage.js
@@ -11,7 +11,7 @@
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/cr_elements/md_select_css.m.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
diff --git a/chrome/browser/resources/settings/chromeos/internet_page/network_summary_item.js b/chrome/browser/resources/settings/chromeos/internet_page/network_summary_item.js
index 8aeaac79..701d1209 100644
--- a/chrome/browser/resources/settings/chromeos/internet_page/network_summary_item.js
+++ b/chrome/browser/resources/settings/chromeos/internet_page/network_summary_item.js
@@ -19,7 +19,7 @@
 import {getSimSlotCount} from 'chrome://resources/cr_components/chromeos/network/cellular_utils.m.js';
 import {CrPolicyNetworkBehaviorMojo, CrPolicyNetworkBehaviorMojoInterface} from 'chrome://resources/cr_components/chromeos/network/cr_policy_network_behavior_mojo.m.js';
 import {OncMojo} from 'chrome://resources/cr_components/chromeos/network/onc_mojo.m.js';
-import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.js';
 import {assert, assertNotReached} from 'chrome://resources/js/assert.m.js';
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js';
 import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
diff --git a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_accounts.js b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_accounts.js
index 69289587e..b1932ed 100644
--- a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_accounts.js
+++ b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_accounts.js
@@ -12,7 +12,7 @@
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_toast/cr_toast.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
 import 'chrome://resources/polymer/v3_0/iron-media-query/iron-media-query.js';
 import '../../settings_shared.css.js';
diff --git a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_add_account_dialog.js b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_add_account_dialog.js
index 54b048a..5bec7cf 100644
--- a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_add_account_dialog.js
+++ b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_add_account_dialog.js
@@ -12,7 +12,7 @@
 import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.js';
 import 'chrome://resources/cr_elements/cr_input/cr_input.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import 'chrome://resources/js/action_link.js';
 import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
diff --git a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.js b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.js
index b385442c..80b5861d 100644
--- a/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.js
+++ b/chrome/browser/resources/settings/chromeos/kerberos_page/kerberos_page.js
@@ -8,7 +8,7 @@
  * settings.
  */
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
 import '../../settings_page/settings_animated_pages.js';
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/multidevice_page/BUILD.gn
index fb35713..36c1531 100644
--- a/chrome/browser/resources/settings/chromeos/multidevice_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/multidevice_page/BUILD.gn
@@ -115,7 +115,7 @@
   deps = [
     "//third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior:iron-a11y-keys-behavior-extracted",
     "//third_party/polymer/v3_0/components-chromium/paper-behaviors:paper-ripple-behavior",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
   ]
   externs_list = [ "//ui/webui/resources/cr_elements/cr_radio_button/cr_radio_button_externs.js" ]
 }
diff --git a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_radio_button.js b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_radio_button.js
index 9b21ca8a..71f61f8 100644
--- a/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_radio_button.js
+++ b/chrome/browser/resources/settings/chromeos/multidevice_page/multidevice_radio_button.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://resources/cr_elements/cr_radio_button/cr_radio_button_style.css.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/polymer/v3_0/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js';
 import '../../settings_shared.css.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.ts b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.ts
index a8c60b0..1bb3ca2 100644
--- a/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.ts
+++ b/chrome/browser/resources/settings/chromeos/os_about_page/detailed_build_info.ts
@@ -9,15 +9,15 @@
 
 import 'chrome://resources/cr_components/localized_link/localized_link.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
-import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 import '../../prefs/prefs.js';
 import '../../settings_shared.css.js';
 import './channel_switcher_dialog.js';
 import './consumer_auto_update_toggle_dialog.js';
 import './edit_hostname_dialog.js';
 
-import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.js';
 import {assert} from 'chrome://resources/js/assert_ts.js';
 import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js';
 import {I18nMixin, I18nMixinInterface} from 'chrome://resources/js/i18n_mixin.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_details_item.js b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_details_item.js
index e2027031..313a83de 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_details_item.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/app_management_page/app_details_item.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import 'chrome://resources/cr_components/localized_link/localized_link.js';
-import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 
 import {AppType, InstallSource} from 'chrome://resources/cr_components/app_management/constants.js';
 import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.js b/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.js
index 716858bf..0a4c623 100644
--- a/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_apps_page/os_apps_page.js
@@ -10,7 +10,7 @@
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import '../../settings_page/settings_animated_pages.js';
 import '../../settings_page/settings_subpage.js';
 import '../../settings_shared.css.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_device_detail_subpage.js b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_device_detail_subpage.js
index ba1f759..1215ab31 100644
--- a/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_device_detail_subpage.js
+++ b/chrome/browser/resources/settings/chromeos/os_bluetooth_page/os_bluetooth_device_detail_subpage.js
@@ -10,7 +10,7 @@
 
 import '../../settings_shared.css.js';
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
-import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 import './os_bluetooth_change_device_name_dialog.js';
 import './os_bluetooth_true_wireless_images.js';
 import 'chrome://resources/cr_components/chromeos/bluetooth/bluetooth_device_battery_info.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_files_page/smb_shares_page.js b/chrome/browser/resources/settings/chromeos/os_files_page/smb_shares_page.js
index 54b307e3e..a7d599b 100644
--- a/chrome/browser/resources/settings/chromeos/os_files_page/smb_shares_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_files_page/smb_shares_page.js
@@ -4,7 +4,7 @@
 
 import 'chrome://resources/cr_components/chromeos/smb_shares/add_smb_share_dialog.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import 'chrome://resources/js/action_link.js';
 import 'chrome://resources/cr_elements/action_link_css.m.js';
 import 'chrome://resources/cr_components/localized_link/localized_link.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/account_manager.js b/chrome/browser/resources/settings/chromeos/os_people_page/account_manager.js
index eb66c45..9a7465df 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/account_manager.js
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/account_manager.js
@@ -12,8 +12,8 @@
 import 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
-import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
 import '../../settings_shared.css.js';
 
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/fingerprint_list.js b/chrome/browser/resources/settings/chromeos/os_people_page/fingerprint_list.js
index 2866a90..75f286d 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/fingerprint_list.js
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/fingerprint_list.js
@@ -6,7 +6,7 @@
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_input/cr_input.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 import 'chrome://resources/cr_components/localized_link/localized_link.js';
 import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
 import 'chrome://resources/polymer/v3_0/iron-list/iron-list.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js b/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js
index d2599e4..493b832 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/lock_screen.js
@@ -18,7 +18,7 @@
 import 'chrome://resources/cr_elements/cr_radio_button/cr_radio_button.js';
 import 'chrome://resources/cr_elements/cr_radio_group/cr_radio_group.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import '../../controls/settings_toggle_button.js';
 import './setup_pin_dialog.js';
 import './pin_autosubmit_dialog.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js
index 05fe9d2..c3a2b684 100644
--- a/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_people_page/os_people_page.js
@@ -9,7 +9,7 @@
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
 import '../../controls/settings_toggle_button.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.js b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.js
index be73d7c..a26a821 100644
--- a/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.js
+++ b/chrome/browser/resources/settings/chromeos/os_printing_page/cups_printers.js
@@ -13,7 +13,7 @@
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/cr_toast/cr_toast.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import 'chrome://resources/js/action_link.js';
 import 'chrome://resources/cr_elements/action_link_css.m.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_search_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/os_search_page/BUILD.gn
index 03312a76..40f011a58 100644
--- a/chrome/browser/resources/settings/chromeos/os_search_page/BUILD.gn
+++ b/chrome/browser/resources/settings/chromeos/os_search_page/BUILD.gn
@@ -26,7 +26,7 @@
     "//chrome/browser/resources/settings/chromeos/google_assistant_page:google_assistant_page",
     "//chrome/browser/resources/settings/chromeos/os_search_page:search_engines_browser_proxy",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_pref_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_pref_indicator",
     "//ui/webui/resources/js:assert.m",
     "//ui/webui/resources/js:cr.m",
     "//ui/webui/resources/js:i18n_behavior.m",
diff --git a/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.js b/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.js
index 6cd6c8911..6433f07 100644
--- a/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.js
+++ b/chrome/browser/resources/settings/chromeos/os_search_page/os_search_page.js
@@ -8,7 +8,7 @@
  */
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import './os_search_selection_dialog.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_search_page/search_engine.js b/chrome/browser/resources/settings/chromeos/os_search_page/search_engine.js
index 84086e54..a7916697 100644
--- a/chrome/browser/resources/settings/chromeos/os_search_page/search_engine.js
+++ b/chrome/browser/resources/settings/chromeos/os_search_page/search_engine.js
@@ -8,7 +8,7 @@
  */
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import './os_search_selection_dialog.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.js b/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.js
index 34f66e2..70dad3d 100644
--- a/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.js
+++ b/chrome/browser/resources/settings/chromeos/os_search_page/search_subpage.js
@@ -8,7 +8,7 @@
  */
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import '../../controls/controlled_button.js';
diff --git a/chrome/browser/resources/settings/clear_browsing_data_dialog/installed_app_checkbox.ts b/chrome/browser/resources/settings/clear_browsing_data_dialog/installed_app_checkbox.ts
index fbf1c0b..8bc3d2fa 100644
--- a/chrome/browser/resources/settings/clear_browsing_data_dialog/installed_app_checkbox.ts
+++ b/chrome/browser/resources/settings/clear_browsing_data_dialog/installed_app_checkbox.ts
@@ -8,7 +8,7 @@
  * to protect from being deleted.
  */
 import 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import '../settings_shared.css.js';
 import '../site_favicon.js';
 
diff --git a/chrome/browser/resources/settings/controls/controlled_button.ts b/chrome/browser/resources/settings/controls/controlled_button.ts
index b26134c..235eb4b 100644
--- a/chrome/browser/resources/settings/controls/controlled_button.ts
+++ b/chrome/browser/resources/settings/controls/controlled_button.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import '//resources/cr_elements/cr_button/cr_button.js';
-import '//resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import '//resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import '//resources/cr_elements/shared_vars_css.m.js';
 import '../settings_shared.css.js';
 
diff --git a/chrome/browser/resources/settings/controls/controlled_radio_button.ts b/chrome/browser/resources/settings/controls/controlled_radio_button.ts
index ec07cf3..7810afa5 100644
--- a/chrome/browser/resources/settings/controls/controlled_radio_button.ts
+++ b/chrome/browser/resources/settings/controls/controlled_radio_button.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 import '//resources/cr_elements/cr_radio_button/cr_radio_button_style.css.js';
-import '//resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import '//resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import '//resources/polymer/v3_0/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js';
 import '../settings_shared.css.js';
 
diff --git a/chrome/browser/resources/settings/controls/settings_checkbox.ts b/chrome/browser/resources/settings/controls/settings_checkbox.ts
index 3160b158..348e4577 100644
--- a/chrome/browser/resources/settings/controls/settings_checkbox.ts
+++ b/chrome/browser/resources/settings/controls/settings_checkbox.ts
@@ -7,7 +7,7 @@
  * `settings-checkbox` is a checkbox that controls a supplied preference.
  */
 import 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import '../settings_shared.css.js';
 
 import {CrCheckboxElement} from 'chrome://resources/cr_elements/cr_checkbox/cr_checkbox.js';
diff --git a/chrome/browser/resources/settings/controls/settings_dropdown_menu.ts b/chrome/browser/resources/settings/controls/settings_dropdown_menu.ts
index 929f9c1..5e253bea 100644
--- a/chrome/browser/resources/settings/controls/settings_dropdown_menu.ts
+++ b/chrome/browser/resources/settings/controls/settings_dropdown_menu.ts
@@ -12,7 +12,7 @@
  *   </settings-dropdown-menu>
  */
 import '//resources/cr_elements/md_select_css.m.js';
-import '//resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import '//resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import '../settings_shared.css.js';
 import '../settings_vars.css.js';
 
diff --git a/chrome/browser/resources/settings/controls/settings_toggle_button.ts b/chrome/browser/resources/settings/controls/settings_toggle_button.ts
index ba56439..0adf3206 100644
--- a/chrome/browser/resources/settings/controls/settings_toggle_button.ts
+++ b/chrome/browser/resources/settings/controls/settings_toggle_button.ts
@@ -8,7 +8,7 @@
  */
 import '//resources/cr_elements/shared_vars_css.m.js';
 import '//resources/cr_elements/cr_toggle/cr_toggle.js';
-import '//resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import '//resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import '//resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
 import '../settings_shared.css.js';
 
diff --git a/chrome/browser/resources/settings/languages_page/spell_check_page.ts b/chrome/browser/resources/settings/languages_page/spell_check_page.ts
index a4ae19c..4006aed 100644
--- a/chrome/browser/resources/settings/languages_page/spell_check_page.ts
+++ b/chrome/browser/resources/settings/languages_page/spell_check_page.ts
@@ -11,7 +11,7 @@
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import 'chrome://resources/cr_elements/cr_toggle/cr_toggle.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import 'chrome://resources/js/action_link.js';
@@ -31,6 +31,7 @@
 import '../settings_vars.css.js';
 // <if expr="not is_macosx">
 import './edit_dictionary_page.js';
+
 // </if>
 
 import {assert} from 'chrome://resources/js/assert_ts.js';
diff --git a/chrome/browser/resources/settings/people_page/people_page.ts b/chrome/browser/resources/settings/people_page/people_page.ts
index 37151cf..91480be 100644
--- a/chrome/browser/resources/settings/people_page/people_page.ts
+++ b/chrome/browser/resources/settings/people_page/people_page.ts
@@ -11,7 +11,7 @@
 import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js';
 import 'chrome://resources/cr_elements/cr_toast/cr_toast.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
diff --git a/chrome/browser/resources/settings/search_page/search_page.ts b/chrome/browser/resources/settings/search_page/search_page.ts
index dc06329..cf79ed3 100644
--- a/chrome/browser/resources/settings/search_page/search_page.ts
+++ b/chrome/browser/resources/settings/search_page/search_page.ts
@@ -6,7 +6,7 @@
  * @fileoverview
  * 'settings-search-page' is the settings page containing search settings.
  */
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import 'chrome://resources/cr_elements/md_select_css.m.js';
diff --git a/chrome/browser/resources/settings/settings.ts b/chrome/browser/resources/settings/settings.ts
index df81d505c..a8fa847 100644
--- a/chrome/browser/resources/settings/settings.ts
+++ b/chrome/browser/resources/settings/settings.ts
@@ -23,7 +23,7 @@
 export {SettingsAppearancePageElement} from './appearance_page/appearance_page.js';
 export {HomeUrlInputElement} from './appearance_page/home_url_input.js';
 export {SettingsAutofillPageElement} from './autofill_page/autofill_page.js';
-export {AccountStorageOptInStateChangedListener, CredentialsChangedListener, PasswordCheckInteraction, PasswordCheckReferrer, PasswordCheckStatusChangedListener, PasswordExceptionListChangedListener, PasswordManagerImpl, PasswordManagerProxy, PasswordsFileExportProgressListener, SavedPasswordListChangedListener} from './autofill_page/password_manager_proxy.js';
+export {AccountStorageOptInStateChangedListener, CredentialsChangedListener, PasswordCheckInteraction, PasswordCheckReferrer, PasswordCheckStatusChangedListener, PasswordExceptionListChangedListener, PasswordManagerAuthTimeoutListener, PasswordManagerImpl, PasswordManagerProxy, PasswordsFileExportProgressListener, SavedPasswordListChangedListener} from './autofill_page/password_manager_proxy.js';
 export {BaseMixin} from './base_mixin.js';
 export {SettingsBasicPageElement} from './basic_page/basic_page.js';
 export {ControlledRadioButtonElement} from './controls/controlled_radio_button.js';
diff --git a/chrome/browser/resources/settings/site_settings/site_list.ts b/chrome/browser/resources/settings/site_settings/site_list.ts
index d9e0e4e..4dc7bb1 100644
--- a/chrome/browser/resources/settings/site_settings/site_list.ts
+++ b/chrome/browser/resources/settings/site_settings/site_list.ts
@@ -9,7 +9,7 @@
  */
 import 'chrome://resources/cr_elements/cr_action_menu/cr_action_menu.js';
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/cr_elements/shared_vars_css.m.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
diff --git a/chrome/browser/resources/settings/site_settings/site_list_entry.ts b/chrome/browser/resources/settings/site_settings/site_list_entry.ts
index 9a2c280..1bf93d6 100644
--- a/chrome/browser/resources/settings/site_settings/site_list_entry.ts
+++ b/chrome/browser/resources/settings/site_settings/site_list_entry.ts
@@ -8,8 +8,8 @@
  */
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
 import 'chrome://resources/cr_elements/icons.m.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
-import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 import 'chrome://resources/polymer/v3_0/iron-icon/iron-icon.js';
 import '../icons.html.js';
 import '../settings_shared.css.js';
diff --git a/chrome/browser/resources/settings/site_settings_page/recent_site_permissions.ts b/chrome/browser/resources/settings/site_settings_page/recent_site_permissions.ts
index b436741..39c107c 100644
--- a/chrome/browser/resources/settings/site_settings_page/recent_site_permissions.ts
+++ b/chrome/browser/resources/settings/site_settings_page/recent_site_permissions.ts
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 import 'chrome://resources/cr_elements/shared_style_css.m.js';
 import 'chrome://resources/polymer/v3_0/paper-tooltip/paper-tooltip.js';
 import '../settings_shared.css.js';
 import '../i18n_setup.js';
 
-import {CrTooltipIconElement} from 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import {CrTooltipIconElement} from 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 import {assert} from 'chrome://resources/js/assert_ts.js';
 import {focusWithoutInk} from 'chrome://resources/js/cr/ui/focus_without_ink.m.js';
 import {I18nMixin, I18nMixinInterface} from 'chrome://resources/js/i18n_mixin.js';
diff --git a/chrome/browser/resources/settings/system_page/system_page.ts b/chrome/browser/resources/settings/system_page/system_page.ts
index 3afbaca..f20be80 100644
--- a/chrome/browser/resources/settings/system_page/system_page.ts
+++ b/chrome/browser/resources/settings/system_page/system_page.ts
@@ -9,7 +9,7 @@
 
 import 'chrome://resources/cr_elements/cr_button/cr_button.js';
 import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.js';
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
 import '../controls/extension_controlled_indicator.js';
 import '../controls/settings_toggle_button.js';
diff --git a/chrome/browser/safe_browsing/android/java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingBridge.java b/chrome/browser/safe_browsing/android/java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingBridge.java
index 65191b81..5b3d8c23 100644
--- a/chrome/browser/safe_browsing/android/java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingBridge.java
+++ b/chrome/browser/safe_browsing/android/java/src/org/chromium/chrome/browser/safe_browsing/SafeBrowsingBridge.java
@@ -4,6 +4,8 @@
 
 package org.chromium.chrome.browser.safe_browsing;
 
+import androidx.annotation.VisibleForTesting;
+
 import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.annotations.NativeMethods;
 
@@ -82,7 +84,8 @@
     }
 
     @NativeMethods
-    interface Natives {
+    @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+    public interface Natives {
         int umaValueForFile(String path);
         boolean getSafeBrowsingExtendedReportingEnabled();
         void setSafeBrowsingExtendedReportingEnabled(boolean enabled);
diff --git a/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc b/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc
index 5013b17b..d30d232 100644
--- a/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc
+++ b/chrome/browser/safe_browsing/tailored_security/tailored_security_url_observer.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/signin/identity_manager_factory.h"
 #include "components/prefs/pref_service.h"
 #include "components/safe_browsing/core/browser/tailored_security_service/tailored_security_service.h"
+#include "components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.h"
 #include "components/safe_browsing/core/common/safe_browsing_policy_handler.h"
 #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
 #include "components/signin/public/identity_manager/identity_manager.h"
@@ -24,43 +25,6 @@
 
 namespace safe_browsing {
 
-namespace {
-
-const int kThresholdForInFlowNotificationMinutes = 5;
-
-bool CanQueryTailoredSecurityForUrl(GURL url) {
-  return url.DomainIs("google.com") || url.DomainIs("youtube.com");
-}
-
-bool CanQueryTailoredSecurity(Profile* profile) {
-  if (IsEnhancedProtectionEnabled(*profile->GetPrefs()))
-    return false;
-
-  // We should only trigger the unconsented UX if the user is not consented to
-  // sync. Syncing users have different UX, handled by the
-  // `ChromeTailoredSecurityService`.
-  signin::IdentityManager* identity_manager =
-      IdentityManagerFactory::GetForProfile(profile);
-  if (!identity_manager ||
-      identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) {
-    return false;
-  }
-
-  if (profile->GetPrefs()->GetBoolean(
-          prefs::kAccountTailoredSecurityShownNotification)) {
-    return false;
-  }
-
-  if (SafeBrowsingPolicyHandler::IsSafeBrowsingProtectionLevelSetByPolicy(
-          profile->GetPrefs())) {
-    return false;
-  }
-
-  return true;
-}
-
-}  // namespace
-
 TailoredSecurityUrlObserver::~TailoredSecurityUrlObserver() {
   if (service_) {
     service_->RemoveObserver(this);
@@ -91,28 +55,11 @@
     base::Time previous_update) {
   Profile* profile =
       Profile::FromBrowserContext(web_contents()->GetBrowserContext());
-  if (!enabled || IsEnhancedProtectionEnabled(*profile->GetPrefs()))
-    return;
-
-  // We should only trigger the unconsented UX if the user is not consented to
-  // sync. Syncing users have different UX, handled by the
-  // `ChromeTailoredSecurityService`.
   signin::IdentityManager* identity_manager =
       IdentityManagerFactory::GetForProfile(profile);
-  if (!identity_manager ||
-      identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) {
+  if (!enabled || !CanShowUnconsentedTailoredSecurityDialog(
+                      identity_manager, profile->GetPrefs()))
     return;
-  }
-
-  if (profile->GetPrefs()->GetBoolean(
-          prefs::kAccountTailoredSecurityShownNotification)) {
-    return;
-  }
-
-  if (SafeBrowsingPolicyHandler::IsSafeBrowsingProtectionLevelSetByPolicy(
-          profile->GetPrefs())) {
-    return;
-  }
 
   profile->GetPrefs()->SetBoolean(
       prefs::kAccountTailoredSecurityShownNotification, true);
@@ -171,7 +118,11 @@
                                                     const GURL& url) {
   Profile* profile =
       Profile::FromBrowserContext(web_contents()->GetBrowserContext());
-  if (!CanQueryTailoredSecurity(profile)) {
+  signin::IdentityManager* identity_manager =
+      IdentityManagerFactory::GetForProfile(profile);
+
+  if (!CanShowUnconsentedTailoredSecurityDialog(identity_manager,
+                                                profile->GetPrefs())) {
     return;
   }
 
diff --git a/chrome/browser/ssl/ocsp_browsertest.cc b/chrome/browser/ssl/ocsp_browsertest.cc
index da3b0da..927c209 100644
--- a/chrome/browser/ssl/ocsp_browsertest.cc
+++ b/chrome/browser/ssl/ocsp_browsertest.cc
@@ -289,11 +289,25 @@
 
   DoConnection(cert_config);
 
-  ssl_test_util::CheckAuthenticationBrokenState(
-      chrome_test_utils::GetActiveWebContents(this), net::CERT_STATUS_REVOKED,
-      AuthState::SHOWING_INTERSTITIAL);
-
   net::CertStatus cert_status = GetCurrentCertStatus();
+  if (ssl_test_util::UsingBuiltinCertVerifier()) {
+    ssl_test_util::CheckAuthenticationBrokenState(
+        chrome_test_utils::GetActiveWebContents(this), net::CERT_STATUS_REVOKED,
+        AuthState::SHOWING_INTERSTITIAL);
+  } else {
+#if BUILDFLAG(IS_WIN)
+    // TODO(mattm): Seems to be flaky on Windows. Either returns
+    // CERT_STATUS_UNABLE_TO_CHECK_REVOCATION (which gets masked off due to
+    // soft-fail), or CERT_STATUS_REVOKED.
+    EXPECT_THAT(cert_status & net::CERT_STATUS_ALL_ERRORS,
+                ::testing::AnyOf(0u, net::CERT_STATUS_REVOKED));
+#else
+    ssl_test_util::CheckAuthenticationBrokenState(
+        chrome_test_utils::GetActiveWebContents(this), net::CERT_STATUS_REVOKED,
+        AuthState::SHOWING_INTERSTITIAL);
+#endif
+  }
+
   EXPECT_TRUE(cert_status & net::CERT_STATUS_REV_CHECKING_ENABLED);
 }
 
@@ -318,17 +332,26 @@
       chrome_test_utils::GetActiveWebContents(this), AuthState::NONE);
 
   net::CertStatus cert_status = GetCurrentCertStatus();
-
   if (ssl_test_util::UsingBuiltinCertVerifier()) {
     // The builtin verifier enforces the baseline requirements for max age
     // of an intermediate's OCSP response.
     EXPECT_EQ(0u, cert_status & net::CERT_STATUS_ALL_ERRORS);
   } else {
+#if BUILDFLAG(IS_WIN)
+    // TODO(mattm): Seems to be flaky on Windows. Either returns
+    // CERT_STATUS_UNABLE_TO_CHECK_REVOCATION (which gets masked off due to
+    // soft-fail), or CERT_STATUS_REVOKED.
+    EXPECT_THAT(cert_status & net::CERT_STATUS_ALL_ERRORS,
+                ::testing::AnyOf(0u, net::CERT_STATUS_REVOKED));
+#else
     // The platform verifiers are more lenient.
     ssl_test_util::CheckAuthenticationBrokenState(
         chrome_test_utils::GetActiveWebContents(this), net::CERT_STATUS_REVOKED,
         AuthState::SHOWING_INTERSTITIAL);
+
+#endif
   }
+
   EXPECT_TRUE(cert_status & net::CERT_STATUS_REV_CHECKING_ENABLED);
 }
 
@@ -348,19 +371,23 @@
   DoConnection(cert_config);
 
   net::CertStatus cert_status = GetCurrentCertStatus();
-
+  if (ssl_test_util::UsingBuiltinCertVerifier()) {
+    ssl_test_util::CheckAuthenticationBrokenState(
+        chrome_test_utils::GetActiveWebContents(this), net::CERT_STATUS_REVOKED,
+        AuthState::SHOWING_INTERSTITIAL);
+  } else {
 #if BUILDFLAG(IS_WIN)
-  // TODO(mattm): Seems to be flaky on Windows. Either returns
-  // CERT_STATUS_UNABLE_TO_CHECK_REVOCATION (which gets masked off due to
-  // soft-fail), or CERT_STATUS_REVOKED.
-  EXPECT_THAT(cert_status & net::CERT_STATUS_ALL_ERRORS,
-              ::testing::AnyOf(0u, net::CERT_STATUS_REVOKED));
+    // TODO(mattm): Seems to be flaky on Windows. Either returns
+    // CERT_STATUS_UNABLE_TO_CHECK_REVOCATION (which gets masked off due to
+    // soft-fail), or CERT_STATUS_REVOKED.
+    EXPECT_THAT(cert_status & net::CERT_STATUS_ALL_ERRORS,
+                ::testing::AnyOf(0u, net::CERT_STATUS_REVOKED));
 #else
-  ssl_test_util::CheckAuthenticationBrokenState(
-      chrome_test_utils::GetActiveWebContents(this), net::CERT_STATUS_REVOKED,
-      AuthState::SHOWING_INTERSTITIAL);
+    ssl_test_util::CheckAuthenticationBrokenState(
+        chrome_test_utils::GetActiveWebContents(this), net::CERT_STATUS_REVOKED,
+        AuthState::SHOWING_INTERSTITIAL);
 #endif
-
+  }
   EXPECT_TRUE(cert_status & net::CERT_STATUS_REV_CHECKING_ENABLED);
 }
 
diff --git a/chrome/browser/sync/test/integration/sync_extension_helper.cc b/chrome/browser/sync/test/integration/sync_extension_helper.cc
index 75bfe22e..29ef3da2 100644
--- a/chrome/browser/sync/test/integration/sync_extension_helper.cc
+++ b/chrome/browser/sync/test/integration/sync_extension_helper.cc
@@ -191,7 +191,6 @@
   std::list<std::string> pending_crx_ids =
       pending_extension_manager->GetPendingIdsForUpdateCheck();
 
-  std::list<std::string>::const_iterator iter;
   const extensions::PendingExtensionInfo* info = nullptr;
   for (const std::string& pending_crx_id : pending_crx_ids) {
     ASSERT_TRUE(info = pending_extension_manager->GetById(pending_crx_id));
diff --git a/chrome/browser/sync/test/lacros/sync_apps_toggle_sharing_lacros_browsertest.cc b/chrome/browser/sync/test/lacros/sync_apps_toggle_sharing_lacros_browsertest.cc
new file mode 100644
index 0000000..4539cfc
--- /dev/null
+++ b/chrome/browser/sync/test/lacros/sync_apps_toggle_sharing_lacros_browsertest.cc
@@ -0,0 +1,146 @@
+// Copyright 2022 The Chromium Authors.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/sync/test/integration/single_client_status_change_checker.h"
+#include "chrome/browser/sync/test/integration/sync_test.h"
+#include "chrome/common/chrome_constants.h"
+#include "chromeos/lacros/lacros_service.h"
+#include "chromeos/startup/browser_params_proxy.h"
+#include "components/sync/base/features.h"
+#include "components/sync/base/model_type.h"
+#include "components/sync/chromeos/lacros/fake_sync_mojo_service.h"
+#include "components/sync/chromeos/lacros/fake_sync_user_settings_client_ash.h"
+#include "components/sync/driver/sync_service_impl.h"
+#include "content/public/test/browser_test.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+// Version of crosapi that is guaranteed to have SyncUserSettingsClient API (
+// exposed by SyncService crosapi).
+const uint32_t kMinCrosapiVersionWithSyncUserSettingsClient = 80;
+
+class WebAppsSyncActiveStateChecker : public SingleClientStatusChangeChecker {
+ public:
+  WebAppsSyncActiveStateChecker(bool expected_state,
+                                syncer::SyncServiceImpl* sync_service)
+      : SingleClientStatusChangeChecker(sync_service),
+        expected_state_(expected_state) {}
+  ~WebAppsSyncActiveStateChecker() override = default;
+
+  bool IsExitConditionSatisfied(std::ostream* os) override {
+    *os << "Waiting for WebApps sync active state to become: "
+        << expected_state_;
+    return service()->GetActiveDataTypes().Has(syncer::WEB_APPS) ==
+           expected_state_;
+  }
+
+ private:
+  bool expected_state_;
+};
+
+class SyncAppsToggleSharingLacrosBrowserTest : public SyncTest {
+ public:
+  SyncAppsToggleSharingLacrosBrowserTest() : SyncTest(SINGLE_CLIENT) {
+    override_features_.InitAndEnableFeature(
+        syncer::kSyncChromeOSAppsToggleSharing);
+  }
+  ~SyncAppsToggleSharingLacrosBrowserTest() override = default;
+
+  base::FilePath GetProfileBaseName(int index) override {
+    // Apps toggle sharing is enabled only for the main profile, so SyncTest
+    // should setup sync using it.
+    DCHECK_EQ(index, 0);
+    return base::FilePath(chrome::kInitialProfile);
+  }
+
+  // This test replaces production SyncService Crosapi interface with a fake.
+  // It needs to be done before connection between Ash and Lacros user settings
+  // clients is established (during creation of browser extra parts), but after
+  // LacrosService is initialized. Thus CreatedBrowserMainParts() is the only
+  // available option.
+  void CreatedBrowserMainParts(
+      content::BrowserMainParts* browser_main_parts) override {
+    SyncTest::CreatedBrowserMainParts(browser_main_parts);
+
+    // If SyncService Crosapi interface is not available on this version of
+    // ash-chrome, this test suite will no-op.
+    if (!IsServiceAvailable()) {
+      return;
+    }
+
+    // Replace the production SyncService Crosapi interface with a fake for
+    // testing.
+    mojo::Remote<crosapi::mojom::SyncService>& remote =
+        chromeos::LacrosService::Get()
+            ->GetRemote<crosapi::mojom::SyncService>();
+    remote.reset();
+    sync_mojo_service_.BindReceiver(remote.BindNewPipeAndPassReceiver());
+  }
+
+  bool IsServiceAvailable() const {
+    const chromeos::LacrosService* lacros_service =
+        chromeos::LacrosService::Get();
+    return lacros_service &&
+           lacros_service->IsAvailable<crosapi::mojom::SyncService>() &&
+           chromeos::BrowserParamsProxy::Get()->CrosapiVersion() >=
+               kMinCrosapiVersionWithSyncUserSettingsClient;
+  }
+
+  syncer::FakeSyncUserSettingsClientAsh& client_ash() {
+    return sync_mojo_service_.GetFakeSyncUserSettingsClientAsh();
+  }
+
+ private:
+  syncer::FakeSyncMojoService sync_mojo_service_;
+  base::test::ScopedFeatureList override_features_;
+};
+
+class SyncAppsToggleSharingLacrosBrowserTestWithoutCrosapi : public SyncTest {
+ public:
+  SyncAppsToggleSharingLacrosBrowserTestWithoutCrosapi()
+      : SyncTest(SINGLE_CLIENT) {
+    override_features_.InitAndEnableFeature(
+        syncer::kSyncChromeOSAppsToggleSharing);
+  }
+  ~SyncAppsToggleSharingLacrosBrowserTestWithoutCrosapi() override = default;
+
+  base::FilePath GetProfileBaseName(int index) override {
+    // Apps toggle sharing is enabled only for the main profile, so SyncTest
+    // should setup sync using it.
+    DCHECK_EQ(index, 0);
+    return base::FilePath(chrome::kInitialProfile);
+  }
+
+ private:
+  base::test::ScopedFeatureList override_features_;
+};
+
+IN_PROC_BROWSER_TEST_F(SyncAppsToggleSharingLacrosBrowserTestWithoutCrosapi,
+                       ShouldDisableAppsSyncByDefault) {
+  ASSERT_TRUE(SetupSync());
+  // Crosapi isn't setup in this test, so Lacros SyncService should assume apps
+  // sync is disabled.
+  EXPECT_FALSE(GetSyncService(0)->GetActiveDataTypes().Has(syncer::WEB_APPS));
+}
+
+IN_PROC_BROWSER_TEST_F(SyncAppsToggleSharingLacrosBrowserTest,
+                       ShouldEnableAndDisableAppsSync) {
+  if (!IsServiceAvailable()) {
+    GTEST_SKIP() << "Unsupported Ash version.";
+  }
+  ASSERT_TRUE(SetupSync());
+  client_ash().SetAppsSyncIsEnabled(/*enabled=*/true);
+  EXPECT_TRUE(
+      WebAppsSyncActiveStateChecker(/*expected_state=*/true, GetSyncService(0))
+          .Wait());
+
+  client_ash().SetAppsSyncIsEnabled(/*enabled=*/false);
+  EXPECT_TRUE(
+      WebAppsSyncActiveStateChecker(/*expected_state=*/false, GetSyncService(0))
+          .Wait());
+}
+
+}  // namespace
diff --git a/chrome/browser/sync/test/lacros/sync_custom_passphrase_sharing_lacros_browsertest.cc b/chrome/browser/sync/test/lacros/sync_custom_passphrase_sharing_lacros_browsertest.cc
index 23a358f..4ee2810 100644
--- a/chrome/browser/sync/test/lacros/sync_custom_passphrase_sharing_lacros_browsertest.cc
+++ b/chrome/browser/sync/test/lacros/sync_custom_passphrase_sharing_lacros_browsertest.cc
@@ -59,7 +59,7 @@
     return base::FilePath(chrome::kInitialProfile);
   }
 
-  // This test replaces production SyncService Crosapi interface with a mock.
+  // This test replaces production SyncService Crosapi interface with a fake.
   // It needs to be done before connection between Ash and Lacros explicit
   // passphrase clients is established (during creation of browser extra parts),
   // but after LacrosService is initialized. Thus CreatedBrowserMainParts() is
@@ -74,7 +74,7 @@
       return;
     }
 
-    // Replace the production SyncService Crosapi interface with a mock for
+    // Replace the production SyncService Crosapi interface with a fake for
     // testing.
     mojo::Remote<crosapi::mojom::SyncService>& remote =
         chromeos::LacrosService::Get()
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/WebContentsState.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/WebContentsState.java
index 89ce94bf..2766e429 100644
--- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/WebContentsState.java
+++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/WebContentsState.java
@@ -22,9 +22,11 @@
      */
     private final ByteBuffer mBuffer;
     private int mVersion;
+    private static WebContentsState sEmptyWebContentsState;
 
     public WebContentsState(ByteBuffer buffer) {
         mBuffer = buffer;
+        sEmptyWebContentsState = null;
     }
 
     public ByteBuffer buffer() {
@@ -48,4 +50,14 @@
     public String getVirtualUrlFromState() {
         return WebContentsStateBridge.getVirtualUrlFromState(this);
     }
+
+    public static WebContentsState getTempWebContentsState() {
+        if (sEmptyWebContentsState == null) {
+            byte[] bytes = new byte[0];
+            ByteBuffer buf = ByteBuffer.wrap(bytes);
+            sEmptyWebContentsState = new WebContentsState(buf);
+            sEmptyWebContentsState.setVersion(-1);
+        }
+        return sEmptyWebContentsState;
+    }
 }
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorage.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorage.java
index f420248..41554e0 100644
--- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorage.java
+++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/FilePersistedTabDataStorage.java
@@ -23,6 +23,8 @@
 import org.chromium.base.task.PostTask;
 import org.chromium.base.task.SequencedTaskRunner;
 import org.chromium.base.task.TaskTraits;
+import org.chromium.chrome.browser.flags.BooleanCachedFieldTrialParameter;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 
 import java.io.File;
@@ -64,11 +66,19 @@
             }
         }
     }
+    private static final String DELAY_SAVES_UNTIL_DEFERRED_STARTUP =
+            "delay_saves_until_deferred_startup";
+    public static final BooleanCachedFieldTrialParameter DELAY_SAVES_UNTIL_DEFERRED_STARTUP_PARAM =
+            new BooleanCachedFieldTrialParameter(ChromeFeatureList.CRITICAL_PERSISTED_TAB_DATA,
+                    DELAY_SAVES_UNTIL_DEFERRED_STARTUP, false);
+
     private SequencedTaskRunner mSequencedTaskRunner;
     private boolean mFirstOperationRecorded;
+    private boolean mDeferredStartupComplete;
 
     @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
     protected LinkedList<StorageRequest> mQueue = new LinkedList<>();
+    private LinkedList<FileSaveRequest> mDelayedSaveRequests = new LinkedList<>();
 
     protected FilePersistedTabDataStorage() {
         mSequencedTaskRunner =
@@ -87,6 +97,11 @@
     public void save(int tabId, String dataId, Serializer<ByteBuffer> serializer,
             Callback<Integer> callback) {
         // TODO(crbug.com/1059637) we should introduce a retry mechanisms
+        if (isDelaySavesUntilDeferredStartup() && !mDeferredStartupComplete) {
+            addSaveRequestToDelayedSaveQueue(
+                    new FileSaveRequest(tabId, dataId, serializer, callback));
+            return;
+        }
         addSaveRequest(new FileSaveRequest(tabId, dataId, serializer, callback));
         processNextItemOnQueue();
     }
@@ -99,6 +114,13 @@
         mQueue.add(fileSaveRequest);
     }
 
+    private void addSaveRequestToDelayedSaveQueue(FileSaveRequest fileSaveRequest) {
+        // FileSaveRequest for the same tabid/data id will get overwritten
+        // by new FileSaveRequest so remove if it exists in the queue.
+        mDelayedSaveRequests.remove(fileSaveRequest);
+        mDelayedSaveRequests.add(fileSaveRequest);
+    }
+
     @MainThread
     @Override
     public void restore(int tabId, String dataId, Callback<ByteBuffer> callback) {
@@ -617,4 +639,27 @@
             return file != null && file.exists();
         }
     }
+
+    private static boolean isDelaySavesUntilDeferredStartup() {
+        return ChromeFeatureList.sCriticalPersistedTabData.isEnabled()
+                && DELAY_SAVES_UNTIL_DEFERRED_STARTUP_PARAM.getValue();
+    }
+
+    /**
+     * Signal to {@link FilePersistedTabDataStorage} that deferred startup
+     * is complete.
+     */
+    protected void onDeferredStartup() {
+        mDeferredStartupComplete = true;
+        for (FileSaveRequest saveRequest : mDelayedSaveRequests) {
+            addSaveRequest(saveRequest);
+            processNextItemOnQueue();
+        }
+        mDelayedSaveRequests.clear();
+    }
+
+    @VisibleForTesting
+    public LinkedList<FileSaveRequest> getDelayedSaveRequestsForTesting() {
+        return mDelayedSaveRequests;
+    }
 }
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PersistedTabData.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PersistedTabData.java
index bda188c..da4f72d 100644
--- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PersistedTabData.java
+++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PersistedTabData.java
@@ -447,4 +447,11 @@
     getSupportedMaintenanceClassesForTesting() {
         return sSupportedMaintenanceClasses;
     }
+
+    /**
+     * Signal to {@link PersistedTabData} that deferred startup is complete.
+     */
+    public static void onDeferredStartup() {
+        PersistedTabDataConfiguration.getFilePersistedTabDataStorage().onDeferredStartup();
+    }
 }
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataConfiguration.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataConfiguration.java
index 9a1f0d0c..6748f2f 100644
--- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataConfiguration.java
+++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/state/PersistedTabDataConfiguration.java
@@ -49,7 +49,7 @@
         return sEmptyByteBufferPersistedTabDataStorage;
     }
 
-    private static FilePersistedTabDataStorage getFilePersistedTabDataStorage() {
+    static FilePersistedTabDataStorage getFilePersistedTabDataStorage() {
         if (sFilePersistedTabDataStorage == null) {
             sFilePersistedTabDataStorage = new FilePersistedTabDataStorage();
         }
diff --git a/chrome/browser/tab/web_contents_state.cc b/chrome/browser/tab/web_contents_state.cc
index ab761c6..87c94f6d 100644
--- a/chrome/browser/tab/web_contents_state.cc
+++ b/chrome/browser/tab/web_contents_state.cc
@@ -346,47 +346,7 @@
                                                 serialized, current_entry);
 }
 
-// Restores a WebContents from the passed in state.
-WebContents* RestoreContentsFromByteBuffer(void* data,
-                                           int size,
-                                           int saved_state_version,
-                                           bool initially_hidden,
-                                           bool no_renderer) {
-  bool is_off_the_record;
-  int current_entry_index;
-  std::vector<sessions::SerializedNavigationEntry> navigations;
-  bool success = ExtractNavigationEntries(data, size, saved_state_version,
-                                          &is_off_the_record,
-                                          &current_entry_index, &navigations);
-  if (!success)
-    return nullptr;
-
-  Profile* profile = ProfileManager::GetActiveUserProfile();
-  std::vector<std::unique_ptr<content::NavigationEntry>> entries =
-      sessions::ContentSerializedNavigationBuilder::ToNavigationEntries(
-          navigations, profile);
-
-  if (is_off_the_record) {
-    // Serialization and deserialization related functionalities are only
-    // supported for Incognito tabbed Activities and they use primary OTR
-    // profile.
-    profile = profile->GetPrimaryOTRProfile(/*create_if_needed=*/true);
-  }
-
-  WebContents::CreateParams params(profile);
-
-  params.initially_hidden = initially_hidden;
-  if (no_renderer) {
-    params.desired_renderer_state =
-        WebContents::CreateParams::kNoRendererProcess;
-  }
-  std::unique_ptr<WebContents> web_contents(WebContents::Create(params));
-  web_contents->GetController().Restore(
-      current_entry_index, content::RestoreType::kRestored, &entries);
-  return web_contents.release();
-}
-
-}  // anonymous namespace
+}  // namespace
 
 ScopedJavaLocalRef<jobject> WebContentsState::GetContentsStateAsByteBuffer(
     JNIEnv* env,
@@ -500,8 +460,10 @@
   if (!data || size <= 0)
     return ScopedJavaLocalRef<jobject>();
 
-  WebContents* web_contents = ::RestoreContentsFromByteBuffer(
-      data, size, saved_state_version, initially_hidden, no_renderer);
+  WebContents* web_contents =
+      WebContentsState::RestoreContentsFromByteBuffer(
+          data, size, saved_state_version, initially_hidden, no_renderer)
+          .release();
 
   if (web_contents)
     return web_contents->GetJavaWebContents();
@@ -509,6 +471,46 @@
     return ScopedJavaLocalRef<jobject>();
 }
 
+std::unique_ptr<WebContents> WebContentsState::RestoreContentsFromByteBuffer(
+    void* data,
+    int size,
+    int saved_state_version,
+    bool initially_hidden,
+    bool no_renderer) {
+  bool is_off_the_record;
+  int current_entry_index;
+  std::vector<sessions::SerializedNavigationEntry> navigations;
+  bool success = ExtractNavigationEntries(data, size, saved_state_version,
+                                          &is_off_the_record,
+                                          &current_entry_index, &navigations);
+  if (!success)
+    return nullptr;
+
+  Profile* profile = ProfileManager::GetActiveUserProfile();
+  std::vector<std::unique_ptr<content::NavigationEntry>> entries =
+      sessions::ContentSerializedNavigationBuilder::ToNavigationEntries(
+          navigations, profile);
+
+  if (is_off_the_record) {
+    // Serialization and deserialization related functionalities are only
+    // supported for Incognito tabbed Activities and they use primary OTR
+    // profile.
+    profile = profile->GetPrimaryOTRProfile(/*create_if_needed=*/true);
+  }
+
+  WebContents::CreateParams params(profile);
+
+  params.initially_hidden = initially_hidden;
+  if (no_renderer) {
+    params.desired_renderer_state =
+        WebContents::CreateParams::kNoRendererProcess;
+  }
+  std::unique_ptr<WebContents> web_contents(WebContents::Create(params));
+  web_contents->GetController().Restore(
+      current_entry_index, content::RestoreType::kRestored, &entries);
+  return web_contents;
+}
+
 ScopedJavaLocalRef<jobject>
 WebContentsState::CreateSingleNavigationStateAsByteBuffer(
     JNIEnv* env,
diff --git a/chrome/browser/tab/web_contents_state.h b/chrome/browser/tab/web_contents_state.h
index b4ae3b1..4c7c651 100644
--- a/chrome/browser/tab/web_contents_state.h
+++ b/chrome/browser/tab/web_contents_state.h
@@ -7,6 +7,7 @@
 
 #include "base/android/scoped_java_ref.h"
 #include "base/callback.h"
+#include "content/public/browser/web_contents.h"
 
 namespace sessions {
 class SerializedNavigationEntry;
@@ -34,21 +35,21 @@
                                         int saved_state_version,
                                         const DeletionPredicate& predicate);
 
-  // Extracts display title from serialized tab data on restore
+  // Extracts display title from serialized tab data on restore.
   static base::android::ScopedJavaLocalRef<jstring>
   GetDisplayTitleFromByteBuffer(JNIEnv* env,
                                 void* data,
                                 int size,
                                 int saved_state_version);
 
-  // Extracts virtual url from serialized tab data on restore
+  // Extracts virtual url from serialized tab data on restore.
   static base::android::ScopedJavaLocalRef<jstring> GetVirtualUrlFromByteBuffer(
       JNIEnv* env,
       void* data,
       int size,
       int saved_state_version);
 
-  // Restores a WebContents from the passed in state.
+  // Restores a WebContents from the passed in state using JNI parameters.
   static base::android::ScopedJavaLocalRef<jobject>
   RestoreContentsFromByteBuffer(JNIEnv* env,
                                 jobject state,
@@ -56,6 +57,14 @@
                                 jboolean initially_hidden,
                                 jboolean no_renderer);
 
+  // Restores a WebContents from the passed in state using native parameters.
+  static std::unique_ptr<content::WebContents> RestoreContentsFromByteBuffer(
+      void* data,
+      int size,
+      int saved_state_version,
+      bool initially_hidden,
+      bool no_renderer);
+
   // Synthesizes a stub, single-navigation state for a tab that will be loaded
   // lazily.
   static base::android::ScopedJavaLocalRef<jobject>
diff --git a/chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.cc b/chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.cc
index 612001f2..847379a 100644
--- a/chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.cc
+++ b/chrome/browser/task_manager/providers/web_contents/web_contents_task_provider.cc
@@ -269,13 +269,15 @@
   // which cannot currently be called inside RenderFrameCreated (due to a DCHECK
   // which doesn't allow the method to be called when the state is
   // 'kSpeculative').
-  auto* rfh = navigation_handle->GetRenderFrameHost();
-  auto* site_instance = rfh->GetSiteInstance();
-  auto it = site_instance_infos_.find(site_instance);
-  if (!navigation_handle->IsSameDocument() &&
-      (it == site_instance_infos_.end() ||
-       it->second.frames.find(rfh) == it->second.frames.end())) {
-    CreateTaskForFrame(rfh);
+  {
+    auto* rfh = navigation_handle->GetRenderFrameHost();
+    auto* site_instance = rfh->GetSiteInstance();
+    auto it = site_instance_infos_.find(site_instance);
+    if (!navigation_handle->IsSameDocument() &&
+        (it == site_instance_infos_.end() ||
+         it->second.frames.find(rfh) == it->second.frames.end())) {
+      CreateTaskForFrame(rfh);
+    }
   }
 
   // Update.
@@ -453,7 +455,7 @@
   // asynchronously after the main frame is deleted.
 
   bool only_bfcache_or_prerender_rfhs = true;
-  for (auto& [site_instance, site_instance_info] : site_instance_infos_) {
+  for (auto& [ignore, site_instance_info] : site_instance_infos_) {
     for (auto* rfh : site_instance_info.frames) {
       const auto state = rfh->GetLifecycleState();
       if (state != RenderFrameHost::LifecycleState::kInBackForwardCache &&
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 330151f..fade934e 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -4786,7 +4786,6 @@
       "views/permissions/chooser_bubble_ui.cc",
       "views/permissions/permission_chip.cc",
       "views/permissions/permission_chip.h",
-      "views/permissions/permission_chip_delegate.h",
       "views/permissions/permission_prompt_bubble.cc",
       "views/permissions/permission_prompt_bubble.h",
       "views/permissions/permission_prompt_bubble_view.cc",
@@ -4799,10 +4798,6 @@
       "views/permissions/permission_prompt_quiet_icon.cc",
       "views/permissions/permission_prompt_quiet_icon.h",
       "views/permissions/permission_prompt_style.h",
-      "views/permissions/permission_quiet_chip.cc",
-      "views/permissions/permission_quiet_chip.h",
-      "views/permissions/permission_request_chip.cc",
-      "views/permissions/permission_request_chip.h",
       "views/profiles/avatar_toolbar_button.cc",
       "views/profiles/avatar_toolbar_button.h",
       "views/profiles/avatar_toolbar_button_delegate.cc",
diff --git a/chrome/browser/ui/android/fast_checkout/internal/BUILD.gn b/chrome/browser/ui/android/fast_checkout/internal/BUILD.gn
index 0248a82..1c3b9cd5 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/BUILD.gn
+++ b/chrome/browser/ui/android/fast_checkout/internal/BUILD.gn
@@ -14,6 +14,7 @@
     "java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutMediator.java",
     "java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutProperties.java",
     "java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutSheetContent.java",
+    "java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutToolbar.java",
     "java/src/org/chromium/chrome/browser/ui/fast_checkout/autofill_profile_screen/AutofillProfileItemProperties.java",
     "java/src/org/chromium/chrome/browser/ui/fast_checkout/home_screen/HomeScreenCoordinator.java",
     "java/src/org/chromium/chrome/browser/ui/fast_checkout/home_screen/HomeScreenViewBinder.java",
@@ -28,7 +29,12 @@
     "//components/autofill_assistant/android:public_java",
     "//components/browser_ui/bottomsheet/android:java",
     "//components/browser_ui/strings/android:browser_ui_strings_grd",
+    "//components/browser_ui/styles/android:java",
+    "//components/browser_ui/styles/android:java_resources",
+    "//components/browser_ui/widget/android:java",
+    "//components/browser_ui/widget/android:java_resources",
     "//third_party/androidx:androidx_annotation_annotation_java",
+    "//third_party/androidx:androidx_appcompat_appcompat_java",
     "//third_party/androidx:androidx_appcompat_appcompat_resources_java",
     "//ui/android:ui_no_recycler_view_java",
   ]
@@ -48,6 +54,7 @@
     "java/res/drawable/fast_checkout_item_background_top.xml",
     "java/res/layout/fast_checkout_bottom_sheet.xml",
     "java/res/layout/fast_checkout_home_screen_sheet.xml",
+    "java/res/menu/fast_checkout_toolbar_menu.xml",
     "java/res/values/dimens.xml",
   ]
   custom_package = "org.chromium.chrome.browser.ui.fast_checkout"
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/res/menu/fast_checkout_toolbar_menu.xml b/chrome/browser/ui/android/fast_checkout/internal/java/res/menu/fast_checkout_toolbar_menu.xml
new file mode 100644
index 0000000..8ebc8ea9
--- /dev/null
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/res/menu/fast_checkout_toolbar_menu.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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. -->
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto" >
+    <item
+        android:id="@+id/settings_menu_id"
+        android:icon="@drawable/settings_cog"
+        android:title=""
+        app:showAsAction="ifRoom"
+        app:iconTint="@macro/default_icon_color" />
+</menu>
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutToolbar.java b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutToolbar.java
new file mode 100644
index 0000000..0c17a3bc
--- /dev/null
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/src/org/chromium/chrome/browser/ui/fast_checkout/FastCheckoutToolbar.java
@@ -0,0 +1,82 @@
+// 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.
+
+package org.chromium.chrome.browser.ui.fast_checkout;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.MenuItem;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.widget.Toolbar;
+
+import org.chromium.components.browser_ui.styles.SemanticColorUtils;
+import org.chromium.components.browser_ui.widget.TintedDrawable;
+
+/**
+ * A toolbar for the selection screens in the FastCheckout bottom sheet. It
+ * contains an additional Menu with a settings gear icon.
+ */
+public class FastCheckoutToolbar extends Toolbar {
+    /** The delegate of the class that processes clicks on menu items. */
+    public interface Delegate {
+        /**
+         * The user clicked on the gear to open settings to edit an Autofill profile
+         * or a credit card profile.
+         */
+        public void onOpenSettingsClick();
+
+        /** The user clicked the back icon in the toolbar to return to the home screen. */
+        public void onBackIconClick();
+    }
+
+    public FastCheckoutToolbar(Context context) {
+        this(context, null);
+    }
+
+    public FastCheckoutToolbar(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public FastCheckoutToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        inflateMenu(R.menu.fast_checkout_toolbar_menu);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+
+        setBackgroundColor(SemanticColorUtils.getDefaultBgColor(getContext()));
+        setTitleTextAppearance(getContext(), R.style.TextAppearance_Headline);
+        Drawable tintedBackIcon = TintedDrawable.constructTintedDrawable(getContext(),
+                R.drawable.ic_arrow_back_white_24dp, R.color.default_icon_color_tint_list);
+        setNavigationIcon(tintedBackIcon);
+    }
+
+    /** Binds the items to the Delegate. The delegate must be non-null. */
+    public void setDelegate(@NonNull Delegate delegate) {
+        assert delegate != null;
+
+        setNavigationOnClickListener((v) -> delegate.onBackIconClick());
+        setOnMenuItemClickListener(new OnMenuItemClickListener() {
+            @Override
+            public boolean onMenuItemClick(MenuItem item) {
+                if (item.getItemId() == R.id.settings_menu_id) {
+                    delegate.onOpenSettingsClick();
+                    return true;
+                }
+                return false;
+            }
+        });
+    }
+
+    /** Sets the title of the MenuItem for opening settings. */
+    public void setSettingsMenuTitle(int resId) {
+        MenuItem settingsMenuItem = getMenu().findItem(R.id.settings_menu_id);
+        assert settingsMenuItem != null;
+        settingsMenuItem.setTitle(resId);
+    }
+}
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_af.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_af.xtb
index c961bcb..17eed87 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_af.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_af.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="af">
 <translation id="1068168522143272502">Blad met lys adresse en betalingopsies wat tydens betaalpuntvloei ingevul moet word, is halfpad oop.</translation>
+<translation id="4401440167302712543">Vul versending- en betaalinligting outomaties by die betaalpunt in</translation>
 <translation id="567079066552447069">Blad met lys adresse en betalingopsies wat tydens betaalpuntvloei ingevul moet word, is toe.</translation>
 <translation id="780301667611848630">Nee, dankie</translation>
 <translation id="8264703973415044493">Blad met lys adresse en betalingopsies wat tydens betaalpuntvloei ingevul moet word, is heeltemal oop.</translation>
 <translation id="8315600272591552085">Lys adresse en betalingopsies wat tydens betaalpuntvloei ingevul moet word.</translation>
+<translation id="8873105120914375071">Betaal vinniger?</translation>
+<translation id="9032876013752408138">Vul my inligting outomaties in</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ar.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ar.xtb
index 73134ce..8c5b5c9 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ar.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ar.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ar">
 <translation id="1068168522143272502">قائمة العناوين وخيارات الدفع التي سيتم ملؤها أثناء عملية الدفع تم فتحها في نصف الشاشة.</translation>
+<translation id="4401440167302712543">يمكنك ملء معلومات الشحن والدفع تلقائيًا أثناء إتمام الدفع.</translation>
 <translation id="567079066552447069">تم إغلاق قائمة العناوين وخيارات الدفع التي سيتم ملؤها أثناء عملية الدفع.</translation>
 <translation id="780301667611848630">لا، شكرًا</translation>
 <translation id="8264703973415044493">قائمة العناوين وخيارات الدفع التي سيتم ملؤها أثناء عملية الدفع تم فتحها بطول الشاشة.</translation>
 <translation id="8315600272591552085">قائمة العناوين وخيارات الدفع التي سيتم ملؤها أثناء عملية الدفع</translation>
+<translation id="8873105120914375071">هل تريد إتمام الدفع بشكل أسرع؟</translation>
+<translation id="9032876013752408138">ملء معلوماتي تلقائيًا</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_as.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_as.xtb
index 47e7f4a..1341290 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_as.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_as.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="as">
 <translation id="1068168522143272502">চেকআউট প্ৰবাহৰ সময়ত পূৰণ কৰিবলগীয়া ঠিকনা আৰু পৰিশোধৰ বিকল্পৰ সূচী অৰ্ধাংশত খোলা হৈছে।</translation>
+<translation id="4401440167302712543">আপুনি চেক আউট কৰাৰ সময়ত শ্বিপিং আৰু পৰিশোধৰ তথ্য স্বয়ংক্ৰিয়ভাৱে পূৰ কৰক</translation>
 <translation id="567079066552447069">চেকআউট প্ৰবাহৰ সময়ত পূৰণ কৰিবলগীয়া ঠিকনা আৰু পৰিশোধৰ বিকল্পৰ সূচী বন্ধ কৰা হৈছে।</translation>
 <translation id="780301667611848630">নালাগে, ধন্যবাদ</translation>
 <translation id="8264703973415044493">চেকআউট প্ৰবাহৰ সময়ত পূৰণ কৰিবলগীয়া ঠিকনা আৰু পৰিশোধৰ বিকল্পৰ সূচী সম্পূৰ্ণ অংশত খোলা হৈছে।</translation>
 <translation id="8315600272591552085">চেকআউট প্ৰবাহৰ সময়ত পূৰণ কৰিবলগীয়া ঠিকনা আৰু পৰিশোধৰ বিকল্পৰ সূচী।</translation>
+<translation id="8873105120914375071">দ্ৰুতভাৱে চেক আউট কৰিবনে?</translation>
+<translation id="9032876013752408138">মোৰ তথ্য স্বয়ংক্ৰিয়ভাৱে পূৰ কৰক</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bg.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bg.xtb
index dcfdfb8..45e4cff 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bg.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bg.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="bg">
 <translation id="1068168522143272502">Списъкът с адреси и опции за плащане, които да се попълват при плащане, е отворен на половината височина.</translation>
+<translation id="4401440167302712543">Автоматично попълване на информацията за доставка и данните за плащане при извършване на плащането</translation>
 <translation id="567079066552447069">Списъкът с адреси и опции за плащане, които да се попълват при плащане, е затворен.</translation>
 <translation id="780301667611848630">Не, благодаря</translation>
 <translation id="8264703973415044493">Списъкът с адреси и опции за плащане, които да се попълват при плащане, е отворен на пълната височина.</translation>
 <translation id="8315600272591552085">Списък с адреси и опции за плащане, които да се попълват при плащане.</translation>
+<translation id="8873105120914375071">Искате ли да плащате по-бързо?</translation>
+<translation id="9032876013752408138">Автоматично попълване на информацията ми</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bs.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bs.xtb
index f5fa727..1b6f53b1 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bs.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_bs.xtb
@@ -2,11 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="bs">
 <translation id="1068168522143272502">Lista adresa i opcija plaćanja koju treba popuniti tokom nastavka na plaćanje je otvorena na pola visine.</translation>
-<translation id="4401440167302712543">Automatski unesite podatke o dostavi i plaćanju tijekom naplate</translation>
+<translation id="4401440167302712543">Automatsko popunjavanje informacija o isporuci i plaćanju tokom nastavka na plaćanje</translation>
 <translation id="567079066552447069">Zatvorena je lista adresa i opcija plaćanja koju treba popuniti tokom nastavka na plaćanje.</translation>
 <translation id="780301667611848630">Ne, hvala</translation>
 <translation id="8264703973415044493">Lista adresa i opcija plaćanja koju treba popuniti tokom nastavka na plaćanje je otvorena u punoj visini.</translation>
 <translation id="8315600272591552085">Lista adresa i opcija plaćanja koju treba popuniti tokom nastavka na plaćanje.</translation>
-<translation id="8873105120914375071">Želite li brže završiti kupnju?</translation>
-<translation id="9032876013752408138">Automatski unesi moje podatke</translation>
+<translation id="8873105120914375071">Brži nastavak na plaćanje?</translation>
+<translation id="9032876013752408138">Automatski popuni moje informacije</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ca.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ca.xtb
index 1c362b3..0451920 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ca.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ca.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ca">
 <translation id="1068168522143272502">La llista d'adreces i opcions de pagament que cal emplenar durant els fluxos de tramitació de compra s'ha obert a mitja alçada.</translation>
+<translation id="4401440167302712543">Emplena automàticament la informació d'enviament i de pagament quan facis el pagament</translation>
 <translation id="567079066552447069">La llista d'adreces i opcions de pagament que cal emplenar durant els fluxos de tramitació de compra està tancada.</translation>
 <translation id="780301667611848630">No, gràcies</translation>
 <translation id="8264703973415044493">La llista d'adreces i opcions de pagament que cal emplenar durant els fluxos de tramitació de compra s'ha obert a alçada completa.</translation>
 <translation id="8315600272591552085">Llista d'adreces i opcions de pagament que cal emplenar durant els fluxos de tramitació de compra.</translation>
+<translation id="8873105120914375071">Vols pagar més ràpidament?</translation>
+<translation id="9032876013752408138">Emplena automàticament la meva informació</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb
index ac19664..72e470c6 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_cy.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="cy">
 <translation id="1068168522143272502">Rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu wedi agor ar hanner uchder.</translation>
+<translation id="4401440167302712543">Awtolenwi gwybodaeth anfon a thalu wrth i chi dalu</translation>
 <translation id="567079066552447069">Mae'r rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu ar gau.</translation>
 <translation id="780301667611848630">Dim diolch</translation>
 <translation id="8264703973415044493">Rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu wedi agor ar uchder llawn.</translation>
 <translation id="8315600272591552085">Rhestr o gyfeiriadau ac opsiynau talu i'w llenwi yn ystod llif y ddesg dalu.</translation>
+<translation id="8873105120914375071">Talu'n gyflymach?</translation>
+<translation id="9032876013752408138">Awtolenwi fy ngwybodaeth</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_da.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_da.xtb
index fc980010..aeac536 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_da.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_da.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="da">
 <translation id="1068168522143272502">Listen over adresser og betalingsmuligheder, der skal udfyldes under betalingsprocessen, er åbnet i halv højde.</translation>
+<translation id="4401440167302712543">Autofyld forsendelses- og betalingsoplysninger, når du betaler</translation>
 <translation id="567079066552447069">Listen over adresser og betalingsmuligheder, der skal udfyldes i forbindelse med betalingsprocessen, er lukket.</translation>
 <translation id="780301667611848630">Nej tak</translation>
 <translation id="8264703973415044493">Listen over adresser og betalingsmuligheder, der skal udfyldes i forbindelse med betalingsprocessen, er åbnet i fuld højde.</translation>
 <translation id="8315600272591552085">Listen over adresser og betalingsmuligheder, der skal udfyldes i forbindelse med betalingsprocessen.</translation>
+<translation id="8873105120914375071">Vil du betale hurtigere?</translation>
+<translation id="9032876013752408138">Autofyld mine oplysninger</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb
index 0572934..ab8e5ff 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_et.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="et">
 <translation id="1068168522143272502">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos, on avatud poolel kõrgusel.</translation>
+<translation id="4401440167302712543">Kassas makstes lisatakse tarne- ja makseteave automaatselt</translation>
 <translation id="567079066552447069">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos, on suletud.</translation>
 <translation id="780301667611848630">Ei, aitäh</translation>
 <translation id="8264703973415044493">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos, on avatud täiskõrgusel.</translation>
 <translation id="8315600272591552085">Aadresside ja maksevalikute loend, mis täidetakse ostuvoos.</translation>
+<translation id="8873105120914375071">Kas soovite kiiremini maksta?</translation>
+<translation id="9032876013752408138">Lisa minu teave automaatselt</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb
index 10bfc01..4859369 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_eu.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="eu">
 <translation id="1068168522143272502">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda altuera erdian irekita dago.</translation>
+<translation id="4401440167302712543">Bete automatikoki bidalketa eta ordainketari buruzko informazioa ordainketa-prozesuan zaudenean</translation>
 <translation id="567079066552447069">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda itxita dago.</translation>
 <translation id="780301667611848630">Ez, eskerrik asko</translation>
 <translation id="8264703973415044493">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda altuera osoan irekita dago.</translation>
 <translation id="8315600272591552085">Ordainketa-prozesuen fluxuetan bete behar diren helbideen eta ordainketa-aukeren zerrenda.</translation>
+<translation id="8873105120914375071">Bizkorrago erosi nahi duzu?</translation>
+<translation id="9032876013752408138">Bete automatikoki nire informazioa</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fa.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fa.xtb
index 7ff6c06..4e767cc 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fa.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_fa.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="fa">
 <translation id="1068168522143272502">فهرست نشانی‌ها و گزینه‌های پرداخت که باید درطول روند تسویه‌حساب پر شود به‌صورت نیمه باز شده است.</translation>
+<translation id="4401440167302712543">اطلاعات ارسال و پرداخت را هنگام تصفیه حساب به‌طور خودکار تکمیل کنید</translation>
 <translation id="567079066552447069">فهرست نشانی‌ها و گزینه‌های پرداخت که باید درطول روند تسویه‌حساب پر شود بسته شده است.</translation>
 <translation id="780301667611848630">نه متشکرم</translation>
 <translation id="8264703973415044493">فهرست نشانی‌ها و گزینه‌های پرداخت که باید درطول روند تسویه‌حساب پر شود به‌صورت کامل باز شده است.</translation>
 <translation id="8315600272591552085">فهرست نشانی‌ها و گزینه‌های پرداخت که باید درطول روند تسویه‌حساب پر شود.</translation>
+<translation id="8873105120914375071">می‌خواهید سریع‌تر تصفیه حساب کنید؟</translation>
+<translation id="9032876013752408138">تکمیل خودکار اطلاعات</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gu.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gu.xtb
index ed9687d..7069c0e 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gu.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_gu.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="gu">
 <translation id="1068168522143272502">ચેકઆઉટ ફ્લો દરમિયાન સરનામા અને ચુકવણીના વિકલ્પોની સૂચિ ભરવાની સુવિધા અડધી ખુલ્લી છે.</translation>
+<translation id="4401440167302712543">તમે ચેકઆઉટ કરી રહ્યાં હો એ દરમિયાન, શિપિંગ અને ચુકવણીની માહિતી ઑટોમૅટિક રીતે ભરો</translation>
 <translation id="567079066552447069">ચેકઆઉટ ફ્લો દરમિયાન સરનામા અને ચુકવણીના વિકલ્પોની સૂચિ ભરવાની સુવિધા બંધ છે.</translation>
 <translation id="780301667611848630">નહીં, આભાર</translation>
 <translation id="8264703973415044493">ચેકઆઉટ ફ્લો દરમિયાન સરનામા અને ચુકવણીના વિકલ્પોની સૂચિ ભરવાની સુવિધા સંપૂર્ણ રીતે ખુલ્લી છે.</translation>
 <translation id="8315600272591552085">ચેકઆઉટ ફ્લો દરમિયાન ભરવાની સરનામા અને ચુકવણીના વિકલ્પોની સૂચિ.</translation>
+<translation id="8873105120914375071">શું ચેકઆઉટ ઝડપથી કરવા માગો છો?</translation>
+<translation id="9032876013752408138">મારી માહિતી ઑટોમૅટિક રીતે ભરો</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hu.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hu.xtb
index e525bfc..defac86 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hu.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_hu.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="hu">
 <translation id="1068168522143272502">A fizetési folyamat során használandó címek és fizetési lehetőségek listája meg van nyitva félmagasságban.</translation>
+<translation id="4401440167302712543">Szállítási és fizetési adatok automatikus kitöltése fizetéskor</translation>
 <translation id="567079066552447069">A fizetési folyamat során használandó címek és fizetési lehetőségek listája be van zárva.</translation>
 <translation id="780301667611848630">Köszönöm, nem</translation>
 <translation id="8264703973415044493">A fizetési folyamat során használandó címek és fizetési lehetőségek listája meg van nyitva teljes magasságban.</translation>
 <translation id="8315600272591552085">A fizetési folyamat során használandó címek és fizetési lehetőségek listája.</translation>
+<translation id="8873105120914375071">Gyorsabban szeretne fizetni?</translation>
+<translation id="9032876013752408138">Adatok automatikus kitöltése</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_id.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_id.xtb
index 4c7fc3e..a43574a 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_id.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_id.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="id">
 <translation id="1068168522143272502">Daftar alamat dan opsi pembayaran yang harus diisi selama alur checkout terbuka setengah.</translation>
+<translation id="4401440167302712543">Isi otomatis info pengiriman dan pembayaran saat Anda check out</translation>
 <translation id="567079066552447069">Daftar alamat dan opsi pembayaran yang harus diisi selama alur checkout ditutup.</translation>
 <translation id="780301667611848630">Lain kali</translation>
 <translation id="8264703973415044493">Daftar alamat dan opsi pembayaran yang harus diisi selama alur checkout terbuka sepenuhnya.</translation>
 <translation id="8315600272591552085">Daftar alamat dan opsi pembayaran yang harus diisi selama alur checkout.</translation>
+<translation id="8873105120914375071">Check out lebih cepat?</translation>
+<translation id="9032876013752408138">Isi otomatis info saya</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ko.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ko.xtb
index dde3e20e..c51a5acd 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ko.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ko.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ko">
 <translation id="1068168522143272502">결제 시 자동 입력될 주소 및 결제 옵션 목록이 절반 높이로 열렸습니다.</translation>
+<translation id="4401440167302712543">결제 시 배송 및 결제 정보 자동 완성</translation>
 <translation id="567079066552447069">결제 시 자동 입력될 주소 및 결제 옵션 목록이 닫혔습니다.</translation>
 <translation id="780301667611848630">취소</translation>
 <translation id="8264703973415044493">결제 시 자동 입력될 주소 및 결제 옵션 목록이 전체 화면으로 열렸습니다.</translation>
 <translation id="8315600272591552085">결제 시 자동 입력될 주소 및 결제 옵션 목록입니다.</translation>
+<translation id="8873105120914375071">더 빨리 결제하시겠습니까?</translation>
+<translation id="9032876013752408138">내 정보 자동 완성</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lo.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lo.xtb
index ad5e015..a432925 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lo.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lo.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="lo">
 <translation id="1068168522143272502">ລາຍການທີ່ຢູ່ ແລະ ຕົວເລືອກການຈ່າຍເງິນທີ່ຕ້ອງຕື່ມໃນລະຫວ່າງຂັ້ນຕອນການຈ່າຍເງິນໄດ້ເປີດແບບເຄິ່ງໜ້າ.</translation>
+<translation id="4401440167302712543">ການຕື່ມຂໍ້ມູນການສົ່ງ ແລະ ການຈ່າຍເງິນໂດຍອັດຕະໂນມັດໃນເວລາທີ່ທ່ານຈ່າຍເງິນ</translation>
 <translation id="567079066552447069">ລາຍການທີ່ຢູ່ ແລະ ຕົວເລືອກການຈ່າຍເງິນທີ່ຕ້ອງຕື່ມໃນລະຫວ່າງຂັ້ນຕອນການຈ່າຍເງິນແມ່ນຖືກປິດແລ້ວ.</translation>
 <translation id="780301667611848630">ບໍ່​, ​ຂອບ​ໃຈ</translation>
 <translation id="8264703973415044493">ລາຍການທີ່ຢູ່ ແລະ ຕົວເລືອກການຈ່າຍເງິນທີ່ຕ້ອງຕື່ມໃນລະຫວ່າງຂັ້ນຕອນການຈ່າຍເງິນໄດ້ເປີດແບບເຕັມໜ້າ.</translation>
 <translation id="8315600272591552085">ລາຍການທີ່ຢູ່ ແລະ ຕົວເລືອກການຈ່າຍເງິນທີ່ຕ້ອງຕື່ມໃນລະຫວ່າງຂັ້ນຕອນການຈ່າຍເງິນ.</translation>
+<translation id="8873105120914375071">ຈ່າຍເງິນໃຫ້ໄວຂຶ້ນບໍ?</translation>
+<translation id="9032876013752408138">ຕື່ມຂໍ້ມູນຂອງຂ້ອຍໂດຍອັດຕະໂນມັດ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lt.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lt.xtb
index 4b52237e..9f15a97 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lt.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_lt.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="lt">
 <translation id="1068168522143272502">Adresų ir mokėjimo parinkčių, kuriuos reikia pateikti atsiskaitant, sąrašas atidarytas iki pusės ekrano aukščio.</translation>
+<translation id="4401440167302712543">Atsiskaitant automatiškai užpildyti siuntimo ir mokėjimo informaciją</translation>
 <translation id="567079066552447069">Adresų ir mokėjimo parinkčių, kuriuos reikia pateikti atsiskaitant, sąrašas uždarytas.</translation>
 <translation id="780301667611848630">Ačiū, ne</translation>
 <translation id="8264703973415044493">Adresų ir mokėjimo parinkčių, kuriuos reikia pateikti atsiskaitant, sąrašas atidarytas per visą ekrano aukštį.</translation>
 <translation id="8315600272591552085">Adresų ir mokėjimo parinkčių, kuriuos reikia pateikti atsiskaitant, sąrašas.</translation>
+<translation id="8873105120914375071">Atsiskaityti greičiau?</translation>
+<translation id="9032876013752408138">Automatinis informacijos pildymas</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mn.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mn.xtb
index 2b2bfbf..2bc2f030 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mn.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mn.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="mn">
 <translation id="1068168522143272502">Тооцоо хийх урсгалын үеэр бөглөх хаяг болон төлбөрийн сонголтын жагсаалтыг хагас өндөртэйгээр нээсэн.</translation>
+<translation id="4401440167302712543">Тооцоо хийх үедээ тээвэрлэлт болон төлбөрийн мэдээллийг автоматаар бөглөх</translation>
 <translation id="567079066552447069">Тооцоо хийх урсгалын үеэр бөглөх хаяг болон төлбөрийн сонголтын жагсаалтыг хаасан.</translation>
 <translation id="780301667611848630">Үгүй, баярлалаа</translation>
 <translation id="8264703973415044493">Тооцоо хийх урсгалын үеэр бөглөх хаяг болон төлбөрийн сонголтын жагсаалтыг бүтэн өндөртэйгээр нээсэн.</translation>
 <translation id="8315600272591552085">Тооцоо хийх урсгалын үеэр бөглөх хаяг болон төлбөрийн сонголтын жагсаалт.</translation>
+<translation id="8873105120914375071">Тооцоогоо илүү хурдан хийх үү?</translation>
+<translation id="9032876013752408138">Миний мэдээллийг автоматаар бөглөнө үү</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mr.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mr.xtb
index 97de2ca..0402d015 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mr.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_mr.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="mr">
 <translation id="1068168522143272502">चेकआउट फ्लोदरम्यान भरावयाची पत्त्यांची सूची आणि पेमेंट पर्याय अर्ध्या उंचीवर उघडले.</translation>
+<translation id="4401440167302712543">तुम्ही चेक आउट करताना शिपिंग आणि पेमेंट माहिती ऑटोफिल करा</translation>
 <translation id="567079066552447069">चेकआउट फ्लोदरम्यान भरावयाची पत्त्यांची सूची आणि पेमेंट पर्याय बंद आहेत.</translation>
 <translation id="780301667611848630">नाही, नको</translation>
 <translation id="8264703973415044493">चेकआउट फ्लोदरम्यान भरावयाची पत्त्यांची सूची आणि पेमेंट पर्याय पूर्ण उंचीवर उघडले.</translation>
 <translation id="8315600272591552085">चेकआउट फ्लोदरम्यान भरावयाची पत्त्यांची सूची आणि पेमेंट पर्याय.</translation>
+<translation id="8873105120914375071">आणखी जलद चेक आउट करायचे आहे?</translation>
+<translation id="9032876013752408138">माझी माहिती ऑटोफिल करा</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ne.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ne.xtb
index 60b804c..76ad319 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ne.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ne.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ne">
 <translation id="1068168522143272502">चेकआउट फ्लोका बेला भर्नु पर्ने ठेगाना तथा भुक्तानीसम्बन्धी विकल्पहरूको सूची आधा स्क्रिनमा खोलिएको छ।</translation>
+<translation id="4401440167302712543">चेक आउट गर्दै गर्दा सिपिङ र भुक्तानी जानकारी स्वतः भरियोस्</translation>
 <translation id="567079066552447069">चेकआउट फ्लोका बेला भर्नु पर्ने ठेगाना तथा भुक्तानीसम्बन्धी विकल्पहरूको सूची बन्द छ।</translation>
 <translation id="780301667611848630">भयो, धन्यवाद</translation>
 <translation id="8264703973415044493">चेकआउट फ्लोका बेला भर्नु पर्ने ठेगाना तथा भुक्तानीसम्बन्धी विकल्पहरूको सूची पूरै स्क्रिनमा खोलिएको छ।</translation>
 <translation id="8315600272591552085">चेकआउट फ्लोका बेला भर्नु पर्ने ठेगाना तथा भुक्तानीसम्बन्धी विकल्पहरूको सूची।</translation>
+<translation id="8873105120914375071">अझ छिटो चेक आउट गर्ने हो?</translation>
+<translation id="9032876013752408138">मेरो जानकारी स्वतः भरियोस्</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_no.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_no.xtb
index 1170e68..2968a9d 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_no.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_no.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="no">
 <translation id="1068168522143272502">Listen over adresser og betalingsmåter som kan fylles ut i løpet av betalingsflyten, er åpnet i halv høyde.</translation>
+<translation id="4401440167302712543">Fyll ut frakt- og betalingsopplysninger automatisk når du betaler</translation>
 <translation id="567079066552447069">Listen over adresser og betalingsmåter som kan fylles ut i løpet av betalingsflyten, er lukket.</translation>
 <translation id="780301667611848630">Nei takk</translation>
 <translation id="8264703973415044493">Listen over adresser og betalingsmåter som kan fylles ut i løpet av betalingsflyten, er åpnet i full høyde.</translation>
 <translation id="8315600272591552085">Listen over adresser og betalingsmåter som kan fylles ut i løpet av betalingsflyten.</translation>
+<translation id="8873105120914375071">Vil du betale raskere?</translation>
+<translation id="9032876013752408138">Fyll ut opplysningene mine automatisk</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pa.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pa.xtb
index e5f8a2b..31910cd4 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pa.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pa.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="pa">
 <translation id="1068168522143272502">ਚੈੱਕ-ਆਊਟ ਕਰਨ ਵੇਲੇ ਭਰੇ ਜਾਣ ਵਾਲੇ ਪਤਿਆਂ ਅਤੇ ਭੁਗਤਾਨ ਸੰਬੰਧੀ ਵਿਕਲਪਾਂ ਦੀ ਸੂਚੀ ਨੂੰ ਅੱਧੀ ਉਚਾਈ ਤੱਕ ਖੋਲ੍ਹਿਆ ਗਿਆ।</translation>
+<translation id="4401440167302712543">ਤੁਹਾਡੇ ਵੱਲੋਂ ਚੈੱਕ-ਆਊਟ ਕਰਨ 'ਤੇ ਸ਼ਿਪਿੰਗ ਅਤੇ ਭੁਗਤਾਨ ਜਾਣਕਾਰੀ ਨੂੰ ਆਟੋਫਿਲ ਕਰੋ</translation>
 <translation id="567079066552447069">ਚੈੱਕ-ਆਊਟ ਕਰਨ ਵੇਲੇ ਭਰੇ ਜਾਣ ਵਾਲੇ ਪਤਿਆਂ ਅਤੇ ਭੁਗਤਾਨ ਸੰਬੰਧੀ ਵਿਕਲਪਾਂ ਦੀ ਸੂਚੀ ਬੰਦ ਹੈ।</translation>
 <translation id="780301667611848630">ਨਹੀਂ ਧੰਨਵਾਦ</translation>
 <translation id="8264703973415044493">ਚੈੱਕ-ਆਊਟ ਕਰਨ ਵੇਲੇ ਭਰੇ ਜਾਣ ਵਾਲੇ ਪਤਿਆਂ ਅਤੇ ਭੁਗਤਾਨ ਸੰਬੰਧੀ ਵਿਕਲਪਾਂ ਦੀ ਸੂਚੀ ਨੂੰ ਪੂਰੀ ਉਚਾਈ ਤੱਕ ਖੋਲ੍ਹਿਆ ਗਿਆ।</translation>
 <translation id="8315600272591552085">ਚੈੱਕ-ਆਊਟ ਕਰਨ ਵੇਲੇ ਭਰੇ ਜਾਣ ਵਾਲੇ ਪਤਿਆਂ ਅਤੇ ਭੁਗਤਾਨ ਸੰਬੰਧੀ ਵਿਕਲਪਾਂ ਦੀ ਸੂਚੀ।</translation>
+<translation id="8873105120914375071">ਕੀ ਤੇਜ਼ੀ ਨਾਲ ਚੈੱਕ-ਆਊਟ ਕਰਨਾ ਹੈ?</translation>
+<translation id="9032876013752408138">ਮੇਰੀ ਜਾਣਕਾਰੀ ਆਟੋਫਿਲ ਕਰੋ</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pl.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pl.xtb
index 209e3bc..c81f460 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pl.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pl.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="pl">
 <translation id="1068168522143272502">Lista adresów i opcji płatności, które można wstawić podczas procesu płatności, otwarta do połowy wysokości.</translation>
+<translation id="4401440167302712543">Zezwól na autouzupełnianie informacji o dostawie i płatności podczas płacenia</translation>
 <translation id="567079066552447069">Lista adresów i opcji płatności, które można wstawić podczas procesu płatności, jest zamknięta.</translation>
 <translation id="780301667611848630">Nie, dziękuję</translation>
 <translation id="8264703973415044493">Lista adresów i opcji płatności, które można wstawić podczas procesu płatności, otwarta na całą wysokość.</translation>
 <translation id="8315600272591552085">Lista adresów i opcji płatności, które można wstawić podczas procesu płatności.</translation>
+<translation id="8873105120914375071">Chcesz płacić szybciej?</translation>
+<translation id="9032876013752408138">Autouzupełniaj moje dane</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-BR.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-BR.xtb
index 9d545c3..001ad44 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-BR.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_pt-BR.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="pt-BR">
 <translation id="1068168522143272502">A lista de opções de pagamento e endereços a serem preenchidos durante os fluxos de finalização de compra está aberta na metade da altura.</translation>
+<translation id="4401440167302712543">Preencha automaticamente as informações de envio e pagamento ao finalizar a compra</translation>
 <translation id="567079066552447069">A lista de opções de pagamento e endereços a serem preenchidos durante os fluxos de finalização de compra está fechada.</translation>
 <translation id="780301667611848630">Não</translation>
 <translation id="8264703973415044493">A lista de opções de pagamento e endereços a serem preenchidos durante os fluxos de finalização de compra está aberta no tamanho máximo.</translation>
 <translation id="8315600272591552085">Lista de opções de pagamento e endereços a serem preenchidos durante os fluxos de finalização de compra.</translation>
+<translation id="8873105120914375071">Finalizar a compra mais rápido?</translation>
+<translation id="9032876013752408138">Preencher automaticamente</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb
index ad90714e..b6c308ae 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ru.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ru">
 <translation id="1068168522143272502">Список адресов и способов оплаты для заполнения во время оформления покупок открыт на половину экрана.</translation>
+<translation id="4401440167302712543">Автоматически заполняйте адрес доставки и платежные данные при оформлении заказа.</translation>
 <translation id="567079066552447069">Список адресов и способов оплаты для автозаполнения во время оформления покупок закрыт.</translation>
 <translation id="780301667611848630">Спасибо, не надо</translation>
 <translation id="8264703973415044493">Список адресов и способов оплаты для автозаполнения во время оформления покупок открыт на весь экран.</translation>
 <translation id="8315600272591552085">Список адресов и способов оплаты для заполнения во время оформления покупок.</translation>
+<translation id="8873105120914375071">Хотите быстрее оформлять заказы?</translation>
+<translation id="9032876013752408138">Включить автозаполнение</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb
index 54796fda..1c92118 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_si.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="si">
 <translation id="1068168522143272502">අර්ධ උසින් විවෘත කරන ලද ගෙවා පිටවීමේ ප්‍රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව.</translation>
+<translation id="4401440167302712543">ඔබ ගෙවා පිටවන විට නැව්ගත කිරීමේ සහ ගෙවීම් තතු ස්වයංක්‍රීයව පුරවන්න</translation>
 <translation id="567079066552447069">ගෙවා පිටවීමේ ප්‍රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව වසා ඇත.</translation>
 <translation id="780301667611848630">එපා, ස්තූතියි</translation>
 <translation id="8264703973415044493">සම්පූර්ණ උසින් විවෘත කරන ලද ගෙවා පිටවීමේ ප්‍රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව.</translation>
 <translation id="8315600272591552085">ගෙවා පිටවීමේ ප්‍රවාහ අතරතුර පිරවිය යුතු ලිපින සහ ගෙවීම් විකල්ප ලැයිස්තුව.</translation>
+<translation id="8873105120914375071">වේගයෙන් ගෙවා පිටවන්න ද?</translation>
+<translation id="9032876013752408138">මගේ තතු ස්වයංව පුරවන්න</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr-Latn.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr-Latn.xtb
index 4d666a9..e0a5fec 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr-Latn.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr-Latn.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sr-Latn">
 <translation id="1068168522143272502">Lista adresa i opcija plaćanja za popunjavanje pri plaćanju je otvorena do polovine ekrana.</translation>
+<translation id="4401440167302712543">Automatsko popunjavanje informacija o isporuci i plaćanju dok plaćate</translation>
 <translation id="567079066552447069">Lista adresa i opcija plaćanja za popunjavanje pri plaćanju je zatvorena.</translation>
 <translation id="780301667611848630">Ne, hvala</translation>
 <translation id="8264703973415044493">Lista adresa i opcija plaćanja za popunjavanje pri plaćanju je otvorena na celom ekranu.</translation>
 <translation id="8315600272591552085">Lista adresa i opcija plaćanja za popunjavanje pri plaćanju.</translation>
+<translation id="8873105120914375071">Želite da plaćate brže?</translation>
+<translation id="9032876013752408138">Automatski popunjavaj moje informacije</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr.xtb
index 83bb90f..9f7cda0e 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sr.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sr">
 <translation id="1068168522143272502">Листа адреса и опција плаћања за попуњавање при плаћању је отворена до половине екрана.</translation>
+<translation id="4401440167302712543">Аутоматско попуњавање информација о испоруци и плаћању док плаћате</translation>
 <translation id="567079066552447069">Листа адреса и опција плаћања за попуњавање при плаћању је затворена.</translation>
 <translation id="780301667611848630">Не, хвала</translation>
 <translation id="8264703973415044493">Листа адреса и опција плаћања за попуњавање при плаћању је отворена на целом екрану.</translation>
 <translation id="8315600272591552085">Листа адреса и опција плаћања за попуњавање при плаћању.</translation>
+<translation id="8873105120914375071">Желите да плаћате брже?</translation>
+<translation id="9032876013752408138">Аутоматски попуњавај моје информације</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb
index 0ddfbd7..537aa10 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sv.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sv">
 <translation id="1068168522143272502">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden har öppnats över halva skärmen.</translation>
+<translation id="4401440167302712543">Fyll i frakt- och betalningsuppgifter automatiskt i kassan</translation>
 <translation id="567079066552447069">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden har stängts.</translation>
 <translation id="780301667611848630">Nej tack</translation>
 <translation id="8264703973415044493">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden har öppnats över hela skärmen.</translation>
 <translation id="8315600272591552085">Listan över adresser och betalningsalternativ som ska fyllas i under betalningsflöden.</translation>
+<translation id="8873105120914375071">Vill du betala snabbare?</translation>
+<translation id="9032876013752408138">Fyll i mina uppgifter automatiskt</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb
index 53fef74d..a030155 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_sw.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="sw">
 <translation id="1068168522143272502">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa imefunguliwa katika nusu skrini.</translation>
+<translation id="4401440167302712543">Jaza kiotomatiki maelezo ya malipo na usafirishaji wakati wa kununua</translation>
 <translation id="567079066552447069">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa imefungwa.</translation>
 <translation id="780301667611848630">Hapana</translation>
 <translation id="8264703973415044493">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa imefunguliwa katika skrini nzima.</translation>
 <translation id="8315600272591552085">Orodha ya anwani na chaguo za malipo zitakazojazwa wakati wa mtiririko wa kulipa.</translation>
+<translation id="8873105120914375071">Ungependa kulipa kwa haraka?</translation>
+<translation id="9032876013752408138">Jaza kiotomatiki maelezo yangu</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ta.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ta.xtb
index 7e7d107..9f649f2 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ta.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_ta.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="ta">
 <translation id="1068168522143272502">செக்-அவுட் செயல்முறைகளின்போது நிரப்பப்பட வேண்டிய முகவரிகள், பேமெண்ட் விருப்பங்கள் ஆகியவற்றின் பட்டியல் பாதித் திரையில் தெரியும்படி திறக்கப்பட்டுள்ளது.</translation>
+<translation id="4401440167302712543">நீங்கள் செக் அவுட் செய்யும்போது ஷிப்பிங் மற்றும் பேமெண்ட் தகவல்களைத் தானாக நிரப்பும்</translation>
 <translation id="567079066552447069">செக்-அவுட் செயல்முறைகளின்போது நிரப்பப்பட வேண்டிய முகவரிகள், பேமெண்ட் விருப்பங்கள் ஆகியவற்றின் பட்டியல் மூடப்பட்டுள்ளது.</translation>
 <translation id="780301667611848630">வேண்டாம்</translation>
 <translation id="8264703973415044493">செக்-அவுட் செயல்முறைகளின்போது நிரப்பப்பட வேண்டிய முகவரிகள், பேமெண்ட் விருப்பங்கள் ஆகியவற்றின் பட்டியல் முழுத் திரையில் தெரியும்படி திறக்கப்பட்டுள்ளது.</translation>
 <translation id="8315600272591552085">செக்-அவுட் செயல்முறைகளின்போது நிரப்பப்பட வேண்டிய முகவரிகள், பேமெண்ட் விருப்பங்கள் ஆகியவற்றின் பட்டியல்.</translation>
+<translation id="8873105120914375071">விரைவாக செக் அவுட் செய்ய வேண்டுமா?</translation>
+<translation id="9032876013752408138">எனது தகவலைத் தானாக நிரப்பு</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-CN.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-CN.xtb
index 27b219ac..a052a808 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-CN.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-CN.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-CN">
 <translation id="1068168522143272502">要在结账流程中填写的地址和付款方式列表已半屏打开。</translation>
+<translation id="4401440167302712543">结账时自动填充送货和付款信息</translation>
 <translation id="567079066552447069">要在结账流程中填充的地址和付款方式的列表已关闭。</translation>
 <translation id="780301667611848630">不用了,谢谢</translation>
 <translation id="8264703973415044493">要在结账流程中填充的地址和付款方式的列表已全屏打开。</translation>
 <translation id="8315600272591552085">要在结账流程中填充的地址和付款方式的列表。</translation>
+<translation id="8873105120914375071">想更快捷地结账?</translation>
+<translation id="9032876013752408138">自动填充我的信息</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-TW.xtb b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-TW.xtb
index b2862606..cb6ae3b 100644
--- a/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-TW.xtb
+++ b/chrome/browser/ui/android/fast_checkout/internal/java/strings/translations/android_fast_checkout_strings_zh-TW.xtb
@@ -2,8 +2,11 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-TW">
 <translation id="1068168522143272502">當結帳流程顯示在半個螢幕上時,系統要填入的地址和付款方式清單。</translation>
+<translation id="4401440167302712543">結帳時自動填入運送與付款資訊</translation>
 <translation id="567079066552447069">當結帳流程關閉時,系統要填入的地址和付款方式清單。</translation>
 <translation id="780301667611848630">不用了,謝謝</translation>
 <translation id="8264703973415044493">當結帳流程顯示在整個螢幕上時,系統要填入的地址和付款方式清單。</translation>
 <translation id="8315600272591552085">系統要在結帳流程填入的地址和付款方式清單。</translation>
+<translation id="8873105120914375071">想加快結帳速度嗎?</translation>
+<translation id="9032876013752408138">自動填入我的資訊</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java
index b0513b1a..3293231e 100644
--- a/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java
+++ b/chrome/browser/ui/android/signin/java/src/org/chromium/chrome/browser/ui/signin/SyncConsentFragmentBase.java
@@ -21,8 +21,10 @@
 import androidx.annotation.IntDef;
 import androidx.annotation.Nullable;
 import androidx.annotation.StringRes;
+import androidx.annotation.VisibleForTesting;
 import androidx.fragment.app.Fragment;
 
+import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.browser.SyncFirstSetupCompleteSource;
 import org.chromium.chrome.browser.consent_auditor.ConsentAuditorFeature;
@@ -108,6 +110,18 @@
         int GROUP_C = 3;
     }
 
+    /** Used for Signin.SyncConsentScreen.DataRowClicked histogram. Don't change existing values. */
+    @VisibleForTesting
+    @IntDef({SyncDataRowClicked.BOOKMARKS, SyncDataRowClicked.AUTOFILL, SyncDataRowClicked.HISTORY,
+            SyncDataRowClicked.COUNT})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface SyncDataRowClicked {
+        int BOOKMARKS = 0;
+        int AUTOFILL = 1;
+        int HISTORY = 2;
+        int COUNT = 3;
+    }
+
     private final AccountManagerFacade mAccountManagerFacade;
     protected boolean mIsChild;
 
@@ -364,6 +378,10 @@
         mSyncConsentView =
                 (SyncConsentView) inflater.inflate(R.layout.sync_consent_view, container, false);
 
+        mSyncConsentView.getBookmarksRow().setOnClickListener(this::recordClickAndResetListener);
+        mSyncConsentView.getAutofillRow().setOnClickListener(this::recordClickAndResetListener);
+        mSyncConsentView.getHistoryRow().setOnClickListener(this::recordClickAndResetListener);
+
         mSyncConsentView.getRefuseButton().setOnClickListener(this::onRefuseButtonClicked);
         mSyncConsentView.getAcceptButton().setOnClickListener(this::onAcceptButtonClicked);
         mSyncConsentView.getAcceptButton().setVisibility(View.GONE);
@@ -534,6 +552,27 @@
         }
     }
 
+    /**
+     * Records histogram for the sync data row clicks only once. Resets listener after recording.
+     */
+    private void recordClickAndResetListener(View view) {
+        if (view == mSyncConsentView.getBookmarksRow()) {
+            recordSyncDataRowClicked(SyncDataRowClicked.BOOKMARKS);
+        } else if (view == mSyncConsentView.getAutofillRow()) {
+            recordSyncDataRowClicked(SyncDataRowClicked.AUTOFILL);
+        } else if (view == mSyncConsentView.getHistoryRow()) {
+            recordSyncDataRowClicked(SyncDataRowClicked.HISTORY);
+        } else {
+            throw new IllegalStateException("Sync data row view does not exist");
+        }
+        view.setOnClickListener(null);
+    }
+
+    private static void recordSyncDataRowClicked(@SyncDataRowClicked int syncRowClicked) {
+        RecordHistogram.recordEnumeratedHistogram("Signin.SyncConsentScreen.DataRowClicked",
+                syncRowClicked, SyncDataRowClicked.COUNT);
+    }
+
     private void updateSyncConsentViewText(@StringRes int refuseButtonTextId) {
         mConsentTextTracker.setText(mSyncConsentView.getTitleView(), getSyncConsentViewTitleText());
         mConsentTextTracker.setText(
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
index 7890e97..536ea59 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ar.xtb
@@ -434,6 +434,7 @@
 <translation id="3290249595466894471">يُرسِل هذا الوضع أيضًا عددًا قليلاً من الصفحات وعمليات التنزيل وأنشطة الإضافات ومعلومات النظام للمساعدة في اكتشاف التهديدات الجديدة.</translation>
 <translation id="3297344142967351106">المساعَدة الصوتية</translation>
 <translation id="3303414029551471755">هل ترغب في الاستمرار في تنزيل المحتوى؟</translation>
+<translation id="3305795716056605962">يمكنك ترجمة الصفحات بالنقر على زر "خيارات إضافية".</translation>
 <translation id="3334729583274622784">هل تريد تغيير امتداد الملف؟</translation>
 <translation id="3341262203274374114">يتعذّر إلغاء متابعة الخلاصة. حدث خطأ.</translation>
 <translation id="3359667936385849800">استخدام مقدِّم الخدمة الحالي</translation>
@@ -1269,6 +1270,7 @@
 <translation id="7853202427316060426">النشاط</translation>
 <translation id="7857691613771368249">السؤال عن وقت حفظ الملفات</translation>
 <translation id="7859988229622350291">لغات لا أريد ترجمتها مطلقًا</translation>
+<translation id="7866213166286285359">يمكنك ترجمة الصفحات هنا.</translation>
 <translation id="78707286264420418">يجب تفعيل الإذن "الأجهزة المجاورة" ليتمكّن <ph name="PRODUCT_NAME" /> من الاتصال بجهازك.</translation>
 <translation id="7875915731392087153">إنشاء بريد إلكتروني</translation>
 <translation id="7876243839304621966">إزالة الكل</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
index 97ee67c..3c13f49 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">নতুন ভাবুকিবোৰ বিচাৰি পোৱাত সহায় কৰিবলৈ পৃষ্ঠা, ডাউনল’ড, এক্সটেনশ্বনৰ কাৰ্যকলাপ আৰু ছিষ্টেমৰ তথ্যৰ এটা সৰু নমুনাও পঠিয়ায়</translation>
 <translation id="3297344142967351106">ধ্বনিৰ সহায়ত ডিভাইচৰ ব্যৱহাৰ</translation>
 <translation id="3303414029551471755">সমলখিনি ডাউনল’ড কৰিবলৈ আগবাঢ়িবনে?</translation>
+<translation id="3305795716056605962">অধিক বিকল্পৰ বুটামটোৰ পৰা পৃষ্ঠা অনুবাদ কৰক</translation>
 <translation id="3334729583274622784">ফাইলটোৰ এক্সটেনশ্বন সলনি কৰিবনে?</translation>
 <translation id="3341262203274374114">আনফ’ল’ কৰিব নোৱাৰি। কিবা ভুল হ’ল।</translation>
 <translation id="3359667936385849800">আপোনাৰ বৰ্তমানৰ সেৱা প্ৰদানকাৰী ব্যৱহাৰ কৰক</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">কাৰ্যকলাপ</translation>
 <translation id="7857691613771368249">ফাইল কেতিয়া ছেভ কৰিব লাগে সোধক</translation>
 <translation id="7859988229622350291">কেতিয়াও অনুবাদ কৰিব নলগীয়া</translation>
+<translation id="7866213166286285359">ইয়াত পৃষ্ঠা অনুবাদ কৰক</translation>
 <translation id="78707286264420418">আপোনাৰ ডিভাইচৰ সৈতে সংযুক্ত হ’বলৈ <ph name="PRODUCT_NAME" />ক নিকটৱৰ্তী ডিভাইচৰ অনুমতিৰ প্ৰয়োজন</translation>
 <translation id="7875915731392087153">ইমেইল সৃষ্টি কৰক</translation>
 <translation id="7876243839304621966">সকলো আঁতৰাওক</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
index d561afe..71fb7ae 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -750,6 +750,7 @@
 <translation id="5091199029769593641">শীঘ্রই, আপনি নতুন কোনও ট্যাব খুললে, <ph name="SITE_NAME" /> থেকে গল্প পড়তে পারবেন। আপনি যেসব সাইট ফলো করেন, সেগুলি আপনার Google অ্যাকাউন্টে সেভ হয়ে যায়। আপনি 'ডিসকভার' সেটিংসে গিয়ে সেগুলি ম্যানেজ করতে পারেন।</translation>
 <translation id="5091249083535528968">বেশি ব্যবহারের ডেটা</translation>
 <translation id="509429900233858213">একটি ত্রুটি ঘটেছে৷</translation>
+<translation id="5099845111805573968">আপনি একবার ডেস্কটপ সাইট বেছে নিলে, আপনার প্রতিবার ভিজিট করার সময় সাইটে সেটিংটি প্রয়োগ করা হয়</translation>
 <translation id="5102401324271069229">যদি কোনও সাইট আপনার পাসওয়ার্ড চুরি করার চেষ্টা করে বা আপনি কোনও ক্ষতিকারক ফাইল ডাউনলোড করলে, Chrome, পৃষ্ঠার কিছু কন্টেন্ট সহ URL ও হয়ত Safe Browsing-এ পাঠাতে পারে</translation>
 <translation id="510275257476243843">১ ঘণ্টা বাকি আছে</translation>
 <translation id="5115811374190515607"><ph name="PRODUCT_NAME" />-এ</translation>
@@ -909,6 +910,7 @@
 <translation id="5958275228015807058">ডাউনলোড ফোল্ডার থেকে আপনার সমস্ত ফাইল ও পৃষ্ঠাগুলি খুঁজে নিন</translation>
 <translation id="5962718611393537961">সঙ্কুচিত করতে আলতো চাপুন</translation>
 <translation id="5964869237734432770">ছবির বিবরণ বন্ধ করুন</translation>
+<translation id="5966233851250124270">Chrome আপনার পছন্দ মনে রাখবে</translation>
 <translation id="5979084224081478209">পাসওয়ার্ড চেক করুন</translation>
 <translation id="5995726099713306770">পৃষ্ঠাটি আবার ডাউনলোড করবেন?</translation>
 <translation id="6000066717592683814">Google কে রাখুন</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
index c4ef487..334f146 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Odesílá také malý vzorek stránek, stažených souborů, rozšíření, aktivity a informací o systému a pomáhá tak odhalovat nové hrozby</translation>
 <translation id="3297344142967351106">Hlasová asistence</translation>
 <translation id="3303414029551471755">Chcete pokračovat ke stažení obsahu?</translation>
+<translation id="3305795716056605962">Stránky přeložíte pomocí tlačítka Další možnosti</translation>
 <translation id="3334729583274622784">Změnit příponu souboru?</translation>
 <translation id="3341262203274374114">Sledování nelze zrušit. Něco se pokazilo.</translation>
 <translation id="3359667936385849800">Použít aktuálního poskytovatele služeb</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Aktivita</translation>
 <translation id="7857691613771368249">Zeptat se, kdy se soubory mají uložit</translation>
 <translation id="7859988229622350291">Nikdy nepřekládat</translation>
+<translation id="7866213166286285359">Překlad stránek je k dispozici zde</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> k připojení k vašemu zařízení potřebuje oprávnění pro přístup k zařízením v okolí</translation>
 <translation id="7875915731392087153">Vytvořit e-mail</translation>
 <translation id="7876243839304621966">Odstranit vše</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
index 593f12a..e90abb6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Sendet außerdem eine kleine Auswahl von Seiten, Downloads, Erweiterungsaktivitäten und Systeminformationen, um die Erkennung neuer Bedrohungen zu verbessern</translation>
 <translation id="3297344142967351106">Sprachassistent</translation>
 <translation id="3303414029551471755">Inhalt herunterladen?</translation>
+<translation id="3305795716056605962">Seiten über die Schaltfläche „Weitere Optionen“ übersetzen lassen</translation>
 <translation id="3334729583274622784">Dateiendung ändern?</translation>
 <translation id="3341262203274374114">Nicht mehr folgen nicht möglich. Ein Fehler ist aufgetreten.</translation>
 <translation id="3359667936385849800">Aktuellen Anbieter verwenden</translation>
@@ -557,6 +558,7 @@
 <translation id="4062305924942672200">Rechtliche Hinweise</translation>
 <translation id="4084682180776658562">Lesezeichen</translation>
 <translation id="4084712963632273211">Von <ph name="PUBLISHER_ORIGIN" /> – <ph name="BEGIN_DEEMPHASIZED" />bereitgestellt durch Google<ph name="END_DEEMPHASIZED" /></translation>
+<translation id="409109920254068737">Du kannst dich über dieses Tablet auf dem Gerät anmelden, auf dem dieser QR-Code angezeigt wird.</translation>
 <translation id="4095146165863963773">App-Daten löschen?</translation>
 <translation id="4096227151372679484">Ablauf zum Speichern von Lesezeichen ist halb geöffnet</translation>
 <translation id="4099578267706723511">Nutzungsstatistiken und Absturzberichte zur Verbesserung von Chrome an Google senden</translation>
@@ -591,6 +593,7 @@
 <translation id="4262915912852657291"><ph name="BEGIN_BOLD" />Welche Daten werden verwendet?<ph name="END_BOLD" /> Dein Browserverlauf, das heißt eine Liste der von dir auf diesem Gerät in Chrome besuchten Websites.</translation>
 <translation id="4263656433980196874">Benutzeroberfläche für die Einwilligung in die Sprachsuche von Assistant ganz geöffnet</translation>
 <translation id="4269820728363426813">URL kopieren</translation>
+<translation id="4283102315569707115">Desktopwebsites standardmäßig anfordern?</translation>
 <translation id="4291407919474070700"><ph name="BEGIN_LINK" />Displaysperre in den Android-Einstellungen aktivieren<ph name="END_LINK" /></translation>
 <translation id="4293476595220860475">Wenn du Chrome verwendest, stimmst du den <ph name="BEGIN_TOS_LINK" />Nutzungsbedingungen von Google<ph name="END_TOS_LINK" /> und den <ph name="BEGIN_ATOS_LINK" />zusätzlichen Nutzungsbedingungen für Google Chrome und Chrome OS<ph name="END_ATOS_LINK" /> zu. Außerdem gilt die <ph name="BEGIN_PRIVACY_LINK" />Datenschutzerklärung<ph name="END_PRIVACY_LINK" />.</translation>
 <translation id="4296252229500326964">Neuer Inkognitotab</translation>
@@ -970,6 +973,7 @@
 <translation id="6342069812937806050">Gerade eben</translation>
 <translation id="6343495912647200061">{SHIPPING_ADDRESS,plural, =1{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 und <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> weitere}other{<ph name="SHIPPING_ADDRESS_PREVIEW" />\u2026 und <ph name="NUMBER_OF_ADDITIONAL_ADDRESSES" /> weitere}}</translation>
 <translation id="6345878117466430440">Als gelesen markieren</translation>
+<translation id="6357653805084533597">Du kannst dich über dieses Smartphone auf dem Gerät anmelden, auf dem dieser QR-Code angezeigt wird.</translation>
 <translation id="6363990818884053551">Bestätige deine Identität, um die Synchronisierung zu starten</translation>
 <translation id="6364438453358674297">Vorschlag aus Verlauf entfernen?</translation>
 <translation id="6380100320871303656">Chrome lädt Seiten häufiger vorab, die du wahrscheinlich aufrufen wirst. Bei dieser Einstellung werden voraussichtlich mehr Daten genutzt.</translation>
@@ -1265,6 +1269,7 @@
 <translation id="7853202427316060426">Aktivität</translation>
 <translation id="7857691613771368249">Nachfragen, wann Dateien gespeichert werden sollen</translation>
 <translation id="7859988229622350291">Nie übersetzen</translation>
+<translation id="7866213166286285359">Seiten hier übersetzen lassen</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> benötigt die Berechtigung zum Zugriff auf Geräte in der Nähe, um eine Verbindung zu deinem Gerät herzustellen</translation>
 <translation id="7875915731392087153">E-Mail erstellen</translation>
 <translation id="7876243839304621966">Alle entfernen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
index 5d90db6..442318e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
@@ -748,6 +748,7 @@
 <translation id="5091199029769593641">Soon, you’ll see stories from <ph name="SITE_NAME" /> when you open a new tab. The sites that you follow are saved in your Google Account. You can manage them in Discover settings.</translation>
 <translation id="5091249083535528968">Extended usage data</translation>
 <translation id="509429900233858213">An error occurred.</translation>
+<translation id="5099845111805573968">When you select desktop site once, the setting is applied to the site each time that you visit</translation>
 <translation id="5102401324271069229">If a site tries to steal your password, or when you download a harmful file, Chrome may also send URLs, including bits of page content, to Safe Browsing</translation>
 <translation id="510275257476243843">1 hour left</translation>
 <translation id="5115811374190515607">to <ph name="PRODUCT_NAME" /></translation>
@@ -907,6 +908,7 @@
 <translation id="5958275228015807058">Find your files and pages in Downloads</translation>
 <translation id="5962718611393537961">Tap to collapse</translation>
 <translation id="5964869237734432770">Stop image descriptions</translation>
+<translation id="5966233851250124270">Chrome will remember your choice</translation>
 <translation id="5979084224081478209">Check passwords</translation>
 <translation id="5995726099713306770">Download page again?</translation>
 <translation id="6000066717592683814">Keep Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
index 3fde42a..34e9792 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">También envía una pequeña muestra de páginas, descargas, información del sistema y actividad de extensiones para ayudar a descubrir nuevas amenazas.</translation>
 <translation id="3297344142967351106">Asistencia de voz</translation>
 <translation id="3303414029551471755">¿Deseas descargar el contenido?</translation>
+<translation id="3305795716056605962">Traducir páginas desde el botón Más opciones</translation>
 <translation id="3334729583274622784">¿Quieres cambiar la extensión del archivo?</translation>
 <translation id="3341262203274374114">No se puede dejar de seguir. Se produjo un error.</translation>
 <translation id="3359667936385849800">Usa tu proveedor de servicios actual</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Actividad</translation>
 <translation id="7857691613771368249">Preguntar cuándo guardar los archivos</translation>
 <translation id="7859988229622350291">Nunca traducir</translation>
+<translation id="7866213166286285359">Presiona aquí para mostrar la opción "Traducir páginas"</translation>
 <translation id="78707286264420418">Para poder conectarse a tu dispositivo, <ph name="PRODUCT_NAME" /> necesita permiso de los dispositivos cercanos.</translation>
 <translation id="7875915731392087153">Crear correo electrónico</translation>
 <translation id="7876243839304621966">Eliminar todo</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
index 2cb9e92..47fa252 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">También envía una pequeña muestra de páginas, descargas, actividad de extensiones e información del sistema para ayudar a detectar nuevas amenazas.</translation>
 <translation id="3297344142967351106">Asistente de voz</translation>
 <translation id="3303414029551471755">¿Quieres continuar para descargar el contenido?</translation>
+<translation id="3305795716056605962">Traducir páginas desde el botón Más opciones</translation>
 <translation id="3334729583274622784">¿Cambiar la extensión del archivo?</translation>
 <translation id="3341262203274374114">No se puede dejar de seguir. Se ha producido un error.</translation>
 <translation id="3359667936385849800">Usar proveedor de servicios actual</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Actividad</translation>
 <translation id="7857691613771368249">Preguntar cuándo guardar archivos</translation>
 <translation id="7859988229622350291">No traducir nunca</translation>
+<translation id="7866213166286285359">Traducir páginas aquí</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> necesita el permiso de detección de dispositivos cercanos para conectarse a tu dispositivo</translation>
 <translation id="7875915731392087153">Crear correo electrónico</translation>
 <translation id="7876243839304621966">Quitar todo</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
index 5546bae..13f44562 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Un petit échantillon de pages, de téléchargements, d'informations système et d'activité des extensions est aussi envoyé afin d'identifier de nouvelles menaces</translation>
 <translation id="3297344142967351106">Assistance vocale</translation>
 <translation id="3303414029551471755">Poursuivre et télécharger le contenu ?</translation>
+<translation id="3305795716056605962">Traduisez les pages à l'aide du bouton "Plus d'options"</translation>
 <translation id="3334729583274622784">Modifier l'extension du fichier ?</translation>
 <translation id="3341262203274374114">Impossible de vous désabonner en raison d'une erreur.</translation>
 <translation id="3359667936385849800">Utiliser votre fournisseur de services actuel</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Activité</translation>
 <translation id="7857691613771368249">Vous demander quand enregistrer les fichiers</translation>
 <translation id="7859988229622350291">Ne jamais traduire</translation>
+<translation id="7866213166286285359">Traduisez les pages ici</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> a besoin de l'autorisation Appareils à proximité pour se connecter à votre appareil</translation>
 <translation id="7875915731392087153">Créer un e-mail</translation>
 <translation id="7876243839304621966">Tout supprimer</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
index bd2a9cb..850cbb6 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Tamén envía unha pequena mostra da información do sistema, da actividade das extensións, das páxinas e das descargas para axudar a descubrir novas ameazas</translation>
 <translation id="3297344142967351106">Asistencia de voz</translation>
 <translation id="3303414029551471755">Queres continuar coa descarga do contido?</translation>
+<translation id="3305795716056605962">Traduce páxinas desde o botón Máis opcións</translation>
 <translation id="3334729583274622784">Queres cambiar a extensión do ficheiro?</translation>
 <translation id="3341262203274374114">Non se puido deixar de seguir o feed. Produciuse un erro.</translation>
 <translation id="3359667936385849800">Utilizar o teu fornecedor de servizo actual</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Actividade</translation>
 <translation id="7857691613771368249">Preguntar cando gardar ficheiros</translation>
 <translation id="7859988229622350291">Non traducir nunca</translation>
+<translation id="7866213166286285359">Traduce páxinas aquí</translation>
 <translation id="78707286264420418">Para conectarse ao teu dispositivo, <ph name="PRODUCT_NAME" /> require o permiso Dispositivos próximos</translation>
 <translation id="7875915731392087153">Crea un correo electrónico</translation>
 <translation id="7876243839304621966">Eliminar todo</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
index f8b92395..8d48ef2 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">नए खतरों का पता लगाने के लिए, पेज के नमूने, डाउनलोड, एक्सटेंशन की गतिविधि, और सिस्टम की जानकारी भी भेजी जाती है</translation>
 <translation id="3297344142967351106">आवाज़ से डिवाइस का इस्तेमाल करना</translation>
 <translation id="3303414029551471755">सामग्री डाउनलोड करने के लिए आगे बढ़ें?</translation>
+<translation id="3305795716056605962">'ज़्यादा विकल्प' बटन से पेजों का अनुवाद करें</translation>
 <translation id="3334729583274622784">फ़ाइल एक्सटेंशन बदलना चाहते हैं?</translation>
 <translation id="3341262203274374114">अनफ़ॉलो नहीं कर सकते. कोई गड़बड़ी हुई.</translation>
 <translation id="3359667936385849800">आपको सेवा देने वाली मौजूदा कंपनी का इस्तेमाल करें</translation>
@@ -1265,6 +1266,7 @@
 <translation id="7853202427316060426">गतिविधि</translation>
 <translation id="7857691613771368249">पूछें कि फ़ाइलें कब सेव करनी हैं</translation>
 <translation id="7859988229622350291">कभी अनुवाद न करें</translation>
+<translation id="7866213166286285359">पेजों का अनुवाद यहां करें</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> को आपके डिवाइस से कनेक्ट करने के लिए, आस-पास मौजूद डिवाइसों के साथ इंटरैक्ट करने की अनुमति की ज़रूरत है</translation>
 <translation id="7875915731392087153">ईमेल बनाएं</translation>
 <translation id="7876243839304621966">सभी को निकालें</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
index 47f60585..8796ef0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hu.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Elküldi továbbá az oldalakkal, letöltésekkel, bővítményekkel és rendszerrel kapcsolatos adatok egy kisebb mintáját annak érdekében, hogy a jövőben könnyebben felismerhessük az új fenyegetéseket.</translation>
 <translation id="3297344142967351106">Hangalapú segítség</translation>
 <translation id="3303414029551471755">Biztosan letölti a tartalmat?</translation>
+<translation id="3305795716056605962">Oldalfordításhoz használja a További lehetőségek gombot</translation>
 <translation id="3334729583274622784">Módosítja a fájl kiterjesztését?</translation>
 <translation id="3341262203274374114">Nem sikerült felhagyni a követéssel. Hiba történt.</translation>
 <translation id="3359667936385849800">A jelenlegi szolgáltató használata</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Aktivitás</translation>
 <translation id="7857691613771368249">Rákérdezés a fájlok mentésének időpontjára</translation>
 <translation id="7859988229622350291">Sosem fordított nyelvek</translation>
+<translation id="7866213166286285359">Itt fordíthat le oldalakat</translation>
 <translation id="78707286264420418">A <ph name="PRODUCT_NAME" /> terméknek a „Közeli eszközök” engedélyre van szüksége, hogy kapcsolódhasson az Ön eszközéhez.</translation>
 <translation id="7875915731392087153">E-mail létrehozása</translation>
 <translation id="7876243839304621966">Összes eltávolítása</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
index ecee769..d69071ba 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hy.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Նաև ուղարկում է էջերի, ներբեռնված ֆայլերի, ընդլայնումների գործողությունների և համակարգի մասին տեղեկություններից որոշ հատվածներ, որոնք օգնում են հայտնաբերել օգտատերերին սպառնացող նոր վտանգներ։</translation>
 <translation id="3297344142967351106">Ձայնային հուշումներ</translation>
 <translation id="3303414029551471755">Ներբեռնե՞լ բովանդակությունը:</translation>
+<translation id="3305795716056605962">Թարգմանեք էջերը «Այլ ընտրանքներ» կոճակի օգնությամբ</translation>
 <translation id="3334729583274622784">Փոխե՞լ ֆայլի ընդլայնումը</translation>
 <translation id="3341262203274374114">Սխալի պատճառով չհաջողվեց չեղարկել բաժանորդագրությունը։</translation>
 <translation id="3359667936385849800">Օգտագործել իմ ընթացիկ մատակարարը</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Գործողություններ</translation>
 <translation id="7857691613771368249">Հարցնել, թե երբ պահել ֆայլերը</translation>
 <translation id="7859988229622350291">Երբեք չթարգմանել</translation>
+<translation id="7866213166286285359">Թարգմանեք էջերն այստեղ</translation>
 <translation id="78707286264420418">Ձեր սարքին միանալու համար <ph name="PRODUCT_NAME" />-ին մոտակա սարքերը գտնելու թույլտվություն է հարկավոր</translation>
 <translation id="7875915731392087153">Ստեղծեք նամակ</translation>
 <translation id="7876243839304621966">Հեռացնել բոլորը</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
index aee48e2..38ec41f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">בנוסף, נשלחת דגימה קטנה שכוללת דפים, הורדות, פעילות של תוספים ופרטי מערכת כדי לאתר איומים חדשים</translation>
 <translation id="3297344142967351106">האסיסטנט</translation>
 <translation id="3303414029551471755">האם להוריד את התוכן?</translation>
+<translation id="3305795716056605962">תרגום הדפים באמצעות הלחצן 'אפשרויות נוספות'</translation>
 <translation id="3334729583274622784">לשנות את סיומת הקובץ?</translation>
 <translation id="3341262203274374114">לא ניתן לבטל את המעקב. משהו השתבש.</translation>
 <translation id="3359667936385849800">שימוש בספק השירות הנוכחי</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">פעילות</translation>
 <translation id="7857691613771368249">תוצג שאלה מתי יש לשמור קבצים</translation>
 <translation id="7859988229622350291">אין לתרגם אף פעם</translation>
+<translation id="7866213166286285359">תרגום הדפים שכאן</translation>
 <translation id="78707286264420418">ל-<ph name="PRODUCT_NAME" /> נדרשת 'הרשאת מכשירים בקרבת מקום' כדי להתחבר למכשיר שלך</translation>
 <translation id="7875915731392087153">הודעת אימייל חדשה</translation>
 <translation id="7876243839304621966">הסרת הכול</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
index 36ca778..de328b11 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Сонымен қатар жаңа қауіптерді анықтауға көмектесу үшін беттердің, жүктеп алынған файлдардың, кеңейтімдерді пайдаланудың шағын үлгісін және жүйе туралы ақпаратты жібереді.</translation>
 <translation id="3297344142967351106">Дауыстық көмек</translation>
 <translation id="3303414029551471755">Мазмұн жүктеуді жалғастырасыз ба?</translation>
+<translation id="3305795716056605962">Беттерді "Қосымша опциялар" түймесі арқылы аударыңыз.</translation>
 <translation id="3334729583274622784">Файл кеңейтімін өзгертесіз бе?</translation>
 <translation id="3341262203274374114">Жазылудан бас тарту мүмкін емес. Бірдеңе дұрыс болмады.</translation>
 <translation id="3359667936385849800">Қазіргі қызмет көрсетушіні пайдалану</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Әрекет</translation>
 <translation id="7857691613771368249">Файлдар сақтайтын кезде сұрау</translation>
 <translation id="7859988229622350291">Ешқашан аудармау</translation>
+<translation id="7866213166286285359">Беттерді осы жерде аударыңыз.</translation>
 <translation id="78707286264420418">Құрылғыңызға қосылу үшін <ph name="PRODUCT_NAME" /> жүйесіне маңайдағы құрылғыларды пайдалану рұқсаты қажет.</translation>
 <translation id="7875915731392087153">Электрондық пошта жасау</translation>
 <translation id="7876243839304621966">Барлығын алып тастау</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
index 2a6c992..df75be3b4 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
@@ -747,6 +747,7 @@
 <translation id="5091199029769593641">ಶೀಘ್ರವೇ, ನೀವು ಹೊಸ ಟ್ಯಾಬ್ ಅನ್ನು ತೆರೆದಾಗ, ನಿಮಗೆ <ph name="SITE_NAME" /> ನಲ್ಲಿ ಸ್ಟೋರಿಗಳನ್ನು ಕಾಣುತ್ತವೆ. ನೀವು ಅನುಸರಿಸುವ ಸೈಟ್‌ಗಳನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ. ನೀವು ಅವುಗಳನ್ನು Discover ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ನಿರ್ವಹಿಸಬಹುದು.</translation>
 <translation id="5091249083535528968">ಬಳಕೆಯ ಡೇಟಾವನ್ನು ವಿಸ್ತರಿಸಲಾಗಿದೆ</translation>
 <translation id="509429900233858213">ದೋಷವೊಂದು ಕಾಣಿಸಿಕೊಂಡಿದೆ.</translation>
+<translation id="5099845111805573968">ನೀವು ಡೆಸ್ಕ್‌ಟಾಪ್ ಸೈಟ್ ಅನ್ನು ಒಮ್ಮೆ ಆಯ್ಕೆಮಾಡಿದರೆ, ನೀವು ಭೇಟಿ ನೀಡುವ ಪ್ರತಿ ಬಾರಿ ಸೈಟ್‌ಗೆ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ</translation>
 <translation id="5102401324271069229">ಯಾವುದಾದರೂ ಸೈಟ್ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಕದಿಯಲು ಪ್ರಯತ್ನಿಸಿದರೆ ಅಥವಾ ನೀವು ಹಾನಿಕಾರಕ ಫೈಲ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಿದಾಗ, ಪುಟದ ವಿಷಯದ ತುಣುಕುಗಳನ್ನು ಒಳಗೊಂಡ URL ಗಳನ್ನು Chrome, ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್‌ಗೆ ಕಳುಹಿಸುತ್ತದೆ</translation>
 <translation id="510275257476243843">1 ಗಂಟೆ ಉಳಿದಿದೆ</translation>
 <translation id="5115811374190515607"><ph name="PRODUCT_NAME" /> ಗೆ</translation>
@@ -906,6 +907,7 @@
 <translation id="5958275228015807058">ಡೌನ್‌ಲೋಡ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಫೈಲ್‌ಗಳು ಮತ್ತು ಪುಟಗಳನ್ನು ಹುಡುಕಿ</translation>
 <translation id="5962718611393537961">ಕುಗ್ಗಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ</translation>
 <translation id="5964869237734432770">ಚಿತ್ರ ವಿವರಣೆಗಳನ್ನು ನಿಲ್ಲಿಸಿ</translation>
+<translation id="5966233851250124270">ನಿಮ್ಮ ಆಯ್ಕೆಯನ್ನು Chrome ನೆನಪಿಟ್ಟುಕೊಳ್ಳುತ್ತದೆ</translation>
 <translation id="5979084224081478209">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="5995726099713306770">ಪುಟವನ್ನು ಪುನಃ ಡೌನ್‌ಲೋಡ್ ಮಾಡಬೇಕೆ?</translation>
 <translation id="6000066717592683814">Google ಇರಿಸಿಕೊಳ್ಳಿ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
index 3df1bde..e187ab7 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">ນອກຈາກນັ້ນ, ຍັງສົ່ງຕົວຢ່າງບາງສ່ວນຂອງໜ້າ, ການດາວໂຫຼດ, ການເຄື່ອນໄຫວສ່ວນຂະຫຍາຍ ແລະ ຂໍ້ມູນລະບົບເພື່ອຊ່ວຍຄົ້ນພົບໄພຄຸກຄາມໃໝ່ໆນຳ.</translation>
 <translation id="3297344142967351106">ການຊ່ວຍເຫຼືອທາງສຽງ</translation>
 <translation id="3303414029551471755">ສືບ​ຕໍ່​ໄປດາວ​ໂຫຼດ​ເນື້ອ​ໃນ​ບໍ?</translation>
+<translation id="3305795716056605962">ແປພາສາໜ້າຈາກປຸ່ມຕົວເລືອກເພີ່ມເຕີມ</translation>
 <translation id="3334729583274622784">ປ່ຽນນາມສະກຸນໄຟລ໌ບໍ?</translation>
 <translation id="3341262203274374114">ບໍ່ສາມາດເຊົາຕິດຕາມໄດ້. ມີບາງຢ່າງຜິດພາດເກີດຂຶ້ນ.</translation>
 <translation id="3359667936385849800">ໃຊ້ຜູ້ໃຫ້ບໍລິການປັດຈຸບັນຂອງທ່ານ</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">ການເຄື່ອນໄຫວ</translation>
 <translation id="7857691613771368249">ຖາມວ່າຈະໃຫ້ບັນທຶກໄຟລ໌ເມື່ອໃດ</translation>
 <translation id="7859988229622350291">ຢ່າແປ</translation>
+<translation id="7866213166286285359">ແປພາສາໜ້າຢູ່ບ່ອນນີ້</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> ຕ້ອງການການອະນຸຍາດອຸປະກອນທີ່ຢູ່ໃກ້ຄຽງເພື່ອເຊື່ອມຕໍ່ຫາອຸປະກອນຂອງທ່ານ</translation>
 <translation id="7875915731392087153">ສ້າງອີເມວ</translation>
 <translation id="7876243839304621966">ເອົາ​ອອກທັງ​ຫມົດ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
index 59d2fb9..a717fd47 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Испраќа и мал примерок од страници, преземања, активност на екстензиите и податоци за системот за да помогне да се откријат нови закани</translation>
 <translation id="3297344142967351106">Гласовна помош</translation>
 <translation id="3303414029551471755">Продолжете со преземање на содржината?</translation>
+<translation id="3305795716056605962">Преведувајте страници од копчето „Повеќе опции“</translation>
 <translation id="3334729583274622784">Дали да се промени наставката на датотеката?</translation>
 <translation id="3341262203274374114">Не може да се отследи. Нешто тргна наопаку.</translation>
 <translation id="3359667936385849800">Користете го тековниот давател на услуги</translation>
@@ -747,6 +748,7 @@
 <translation id="5091199029769593641">Наскоро ќе гледате стории од <ph name="SITE_NAME" /> при отворање нова картичка. Сајтовите што ги следите се зачувуваат во сметката на Google. Може да управувате со нив во поставките за Discover.</translation>
 <translation id="5091249083535528968">Проширени податоци за користењето</translation>
 <translation id="509429900233858213">Настана грешка.</translation>
+<translation id="5099845111805573968">Кога еднаш ќе изберете сајт за компјутер, поставката ќе се применува на сајтот при секоја ваша посета</translation>
 <translation id="5102401324271069229">Ако некој сајт се обиде да ви ја украде лозинката или кога ќе преземете штетна датотека, Chrome може да испрати URL-адреси, вклучувајќи и делови од содржините на страницата, во „Безбедно прелистување“</translation>
 <translation id="510275257476243843">Остана 1 час</translation>
 <translation id="5115811374190515607">до <ph name="PRODUCT_NAME" /></translation>
@@ -906,6 +908,7 @@
 <translation id="5958275228015807058">Вашите датотеки и страници ќе ги најдете во „Преземања“</translation>
 <translation id="5962718611393537961">Допрете за да се собере</translation>
 <translation id="5964869237734432770">Сопри описи на слики</translation>
+<translation id="5966233851250124270">Chrome ќе го запомни вашиот избор</translation>
 <translation id="5979084224081478209">Провери ги лозинките</translation>
 <translation id="5995726099713306770">Да се преземе страницата повторно?</translation>
 <translation id="6000066717592683814">Задржи го Google</translation>
@@ -1268,6 +1271,7 @@
 <translation id="7853202427316060426">Активност</translation>
 <translation id="7857691613771368249">Прашувај кога да се зачувуваат датотеки</translation>
 <translation id="7859988229622350291">Никогаш не преведувај</translation>
+<translation id="7866213166286285359">Преведувајте страници овде</translation>
 <translation id="78707286264420418">На <ph name="PRODUCT_NAME" /> му е потребна дозвола за „Уреди во близина“ за да се поврзе со вашиот уред</translation>
 <translation id="7875915731392087153">Создајте е-пошта</translation>
 <translation id="7876243839304621966">Отстрани ги сите</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
index 709355e..6afc6ea 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mr.xtb
@@ -748,6 +748,7 @@
 <translation id="5091199029769593641">लवकरच, तुम्ही नवीन टॅब उघडल्यानंतर तुम्हाला <ph name="SITE_NAME" /> वरील स्टोरी दिसतील. तुम्ही फॉलो करता त्या साइट तुमच्या Google खात्यामध्ये सेव्ह केल्या जातात. तुम्ही त्या Discover सेटिंग्जमध्ये व्यवस्थापित करू शकता.</translation>
 <translation id="5091249083535528968">वाढलेला वापर डेटा</translation>
 <translation id="509429900233858213">एक एरर आली आहे.</translation>
+<translation id="5099845111805573968">तुम्ही एकदा डेस्कटॉप साइट निवडल्यावर, तुम्ही प्रत्येक वेळी भेट देता तेव्हा सेटिंग लागू केले जाते</translation>
 <translation id="5102401324271069229">साइटने तुमचा पासवर्ड चोरण्याचा प्रयत्न केल्यास किंवा तुम्ही हानिकारक फाइल डाउनलोड केल्यास, Chrome कदाचित पेज आशयाच्या भागांसह URLs सुरक्षित ब्राउझिंग ला पाठवेल</translation>
 <translation id="510275257476243843">1 तास शिल्लक</translation>
 <translation id="5115811374190515607"><ph name="PRODUCT_NAME" /> वर</translation>
@@ -907,6 +908,7 @@
 <translation id="5958275228015807058">तुमच्या फाइल आणि पेज डाउनलोडमध्ये शोधा</translation>
 <translation id="5962718611393537961">संकुचित करण्‍यासाठी टॅप करा</translation>
 <translation id="5964869237734432770">इमेजची वर्णने थांबवा</translation>
+<translation id="5966233851250124270">Chrome तुमची निवड लक्षात ठेवेल</translation>
 <translation id="5979084224081478209">पासवर्ड तपासा</translation>
 <translation id="5995726099713306770">पेज पुन्हा डाउनलोड करायचे आहे का?</translation>
 <translation id="6000066717592683814">Google ठेवा</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
index 7049a58..f88d339 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Stuurt ook een klein gedeelte pagina's, downloads, extensie-activiteit en systeeminformatie om nieuwe dreigingen te kunnen vinden</translation>
 <translation id="3297344142967351106">Spraakassistent</translation>
 <translation id="3303414029551471755">Doorgaan met het downloaden van de content?</translation>
+<translation id="3305795716056605962">Vertaal pagina's via de knop Meer opties</translation>
 <translation id="3334729583274622784">Bestandsextensie wijzigen?</translation>
 <translation id="3341262203274374114">Niet meer volgen is mislukt. Er is iets misgegaan.</translation>
 <translation id="3359667936385849800">Je huidige serviceprovider gebruiken</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Activiteit</translation>
 <translation id="7857691613771368249">Vragen wanneer bestanden moeten worden opgeslagen</translation>
 <translation id="7859988229622350291">Nooit vertalen</translation>
+<translation id="7866213166286285359">Vertaal hier pagina's</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> heeft het recht Apparaten in de buurt nodig om verbinding te maken met je apparaat</translation>
 <translation id="7875915731392087153">E-mail maken</translation>
 <translation id="7876243839304621966">Alles verwijderen</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
index ba6ca5f..14edb4e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -748,6 +748,7 @@
 <translation id="5091199029769593641">Em breve, serão apresentadas notícias de <ph name="SITE_NAME" /> quando abrir um novo separador. Os sites que segue são guardados na sua Conta Google. Pode geri-los nas definições do Discover.</translation>
 <translation id="5091249083535528968">Dados de utilização alargados</translation>
 <translation id="509429900233858213">Ocorreu um erro.</translation>
+<translation id="5099845111805573968">Quando seleciona o site para computador uma vez, a definição é aplicada ao site sempre que o visitar</translation>
 <translation id="5102401324271069229">Se um site tentar roubar a sua palavra-passe, ou quando transferir um ficheiro prejudicial, o Chrome pode enviar URLs, incluindo bits de conteúdo das páginas, para a Navegação segura</translation>
 <translation id="510275257476243843">Falta 1 hora</translation>
 <translation id="5115811374190515607">para <ph name="PRODUCT_NAME" /></translation>
@@ -907,6 +908,7 @@
 <translation id="5958275228015807058">Encontre os seus ficheiros e páginas nas Transferências.</translation>
 <translation id="5962718611393537961">Toque para reduzir</translation>
 <translation id="5964869237734432770">Parar descrições de imagens</translation>
+<translation id="5966233851250124270">O Chrome vai memorizar a sua escolha</translation>
 <translation id="5979084224081478209">Verificar palavras-passe</translation>
 <translation id="5995726099713306770">Pretende transferir a página novamente?</translation>
 <translation id="6000066717592683814">Manter o Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
index c7d95e9..14ff428da 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_si.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">නව තර්ජන සොයා ගැනීමට උදවු කිරීමට පිටුවල, බාගැනීම්වල, දිගු ක්‍රියාකාරකමේ සහ පද්ධති තොරතුරුවල කුඩා නියැදියක් ද යවයි</translation>
 <translation id="3297344142967351106">හඬ සහාය</translation>
 <translation id="3303414029551471755">අන්තර්ගතය බාගැනීම අරඹන්නද?</translation>
+<translation id="3305795716056605962">තව විකල්ප බොත්තමෙන් පිටු පරිවර්තනය කරන්න</translation>
 <translation id="3334729583274622784">ගොනු දිගුව වෙනස් කරන්නේද?</translation>
 <translation id="3341262203274374114">අනුගමනය කිරීමෙන් ඉවත් වීමට නොහැකිය. යම් දෙයක් වැරදිණි.</translation>
 <translation id="3359667936385849800">ඔබේ වත්මන් සේවා සැපයුම්කරු භාවිත කරන්න</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">ක්‍රියාකාරකම</translation>
 <translation id="7857691613771368249">ගොනු සුරකින්නේ කවර විටද යන්න අසන්න</translation>
 <translation id="7859988229622350291">කිසි විටක පරිවර්තනය නොකරන්න</translation>
+<translation id="7866213166286285359">මෙහි පිටු පරිවර්තනය කරන්න</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> හට ඔබගේ උපාංගයට සම්බන්ධ වීමට අවට උපාංග අවසරය අවශ්‍යයි</translation>
 <translation id="7875915731392087153">ඊ-තැපෑල සාදන්න</translation>
 <translation id="7876243839304621966">සියල්ල ඉවත් කරන්න</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
index 202ec1a..14b8759 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
@@ -232,7 +232,7 @@
 <translation id="2230777942707397948">Dritare bosh</translation>
 <translation id="223356358902285214">Aktiviteti i uebit dhe i aplikacioneve</translation>
 <translation id="2239812875700136898">Kontrollo historitë e tua nga butoni "Opsionet për Zbulo"</translation>
-<translation id="2248941474044011069">Fjalëkalimet enkriptohen në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve" të Google</translation>
+<translation id="2248941474044011069">Fjalëkalimet enkriptohen në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve të Google"</translation>
 <translation id="2259659629660284697">Eksporto fjalëkalimet…</translation>
 <translation id="2276231040576210443">Mund të zgjedhësh gjithmonë se çfarë do të sinkronizosh te <ph name="BEGIN_LINK1" />cilësimet<ph name="END_LINK1" />. Google mund t'i personalizojë "Kërko" dhe shërbimet e tjera bazuar në historikun tënd.</translation>
 <translation id="2276696007612801991">Identifikohu në "Llogarinë tënde të Google" për të kontrolluar fjalëkalimet e tua</translation>
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Dërgon gjithashtu një shembull të vogël të faqeve, shkarkimeve, aktivitetit të shtesave dhe informacioneve të sistemit për të ndihmuar në zbulimin e kërcënimeve të reja</translation>
 <translation id="3297344142967351106">Ndihma zanore</translation>
 <translation id="3303414029551471755">Të vazhdohet me shkarkimin e përmbajtjes?</translation>
+<translation id="3305795716056605962">Përkthe faqet nga butoni "Opsione të tjera"</translation>
 <translation id="3334729583274622784">Do ta ndryshosh prapashtesën e skedarit?</translation>
 <translation id="3341262203274374114">Ndjekja nuk mund të anulohet. Ndodhi një gabim.</translation>
 <translation id="3359667936385849800">Përdor ofruesin aktual të shërbimit</translation>
@@ -694,7 +695,7 @@
 <translation id="4837753911714442426">Hap opsionet për të printuar faqen</translation>
 <translation id="4842092870884894799">Po shfaq dritaren kërcyese të krijimit të fjalëkalimit</translation>
 <translation id="4842515939542199281">Trokit te mikrofoni për të kërkuar me zë</translation>
-<translation id="4844633725025837809">Për siguri shtesë, enkripto fjalëkalimet në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve" të Google</translation>
+<translation id="4844633725025837809">Për siguri shtesë, enkripto fjalëkalimet në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve të Google"</translation>
 <translation id="4850886885716139402">Pamja</translation>
 <translation id="4852014461738377247">Po identifikohesh\u2026</translation>
 <translation id="4860895144060829044">Telefono</translation>
@@ -943,7 +944,7 @@
 <translation id="6162892189396105610">Ngarkon paraprakisht faqet që Chrome mendon se mund të vizitosh.</translation>
 <translation id="6186394685773237175">Nuk u gjetën fjalëkalime të komprometuara</translation>
 <translation id="6192907950379606605">Merr përshkrimet e imazheve</translation>
-<translation id="6196315980958524839">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve" të Google në këtë pajisje</translation>
+<translation id="6196315980958524839">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve të Google" në këtë pajisje</translation>
 <translation id="620197886010707372">Të hapet aplikacioni për <ph name="APPNAME" /> me Google Play?</translation>
 <translation id="6203593061661911168">Shkarkimi do të fillojë kur të jesh në Wi-Fi</translation>
 <translation id="6210748933810148297">Nuk je <ph name="EMAIL" />?</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Aktiviteti</translation>
 <translation id="7857691613771368249">Pyet kur të ruhen skedarët</translation>
 <translation id="7859988229622350291">Mos përkthe asnjëherë</translation>
+<translation id="7866213166286285359">Përkthe faqet këtu</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> ka nevojë për lejen "Pajisje në afërsi" për të lidhur pajisjen tënde</translation>
 <translation id="7875915731392087153">Krijo mail</translation>
 <translation id="7876243839304621966">Hiqi të gjitha</translation>
@@ -1289,7 +1291,7 @@
 <translation id="7961015016161918242">Asnjëherë</translation>
 <translation id="7961926449547174351">Ke çaktivizuar qasjen te "Hapësira ruajtëse". Shko te "Cilësimet" për ta aktivizuar atë.</translation>
 <translation id="7963646190083259054">Shitësi:</translation>
-<translation id="7965838025086216108">Fjalëkalimet e ruajtura mund t'i përdorësh në çdo pajisje. Ato ruhen në "Menaxherin e fjalëkalimeve" të Google për <ph name="ACCOUNT" />.</translation>
+<translation id="7965838025086216108">Fjalëkalimet e ruajtura mund t'i përdorësh në çdo pajisje. Ato ruhen në "Menaxherin e fjalëkalimeve të Google" për <ph name="ACCOUNT" />.</translation>
 <translation id="7968014550143838305">U shtua te lista e leximit</translation>
 <translation id="7971136598759319605">Aktiv 1 ditë më parë</translation>
 <translation id="7975379999046275268">Shiko paraprakisht faqen <ph name="BEGIN_NEW" />E re<ph name="END_NEW" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
index 61a8ab4..be157b37 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sw.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Hutuma pia sampuli ndogo ya kurasa, vipakuliwa, shughuli za viendelezi na maelezo ya mfumo ili kusaidia kugundua matukio mapya hatari</translation>
 <translation id="3297344142967351106">Usaidizi wa kutumia sauti</translation>
 <translation id="3303414029551471755">Ungependa kuendelea kupakua maudhui?</translation>
+<translation id="3305795716056605962">Tafsiri kurasa kwenye kitufe cha Chaguo Zaidi</translation>
 <translation id="3334729583274622784">Ungependa kubadilisha kiendelezi cha faili?</translation>
 <translation id="3341262203274374114">Imeshinda kuacha kufuatilia. Hitilafu fulani imetokea.</translation>
 <translation id="3359667936385849800">Tumia mtoa huduma wako wa sasa</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Shughuli</translation>
 <translation id="7857691613771368249">Uliza wakati wa kuhifadhi faili</translation>
 <translation id="7859988229622350291">Kamwe usitafsiri</translation>
+<translation id="7866213166286285359">Tafsiri kurasa hapa</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> inahitaji ruhusa ya kufikia Vifaa vilivyo karibu ili iweze kuunganisha kwenye kifaa chako</translation>
 <translation id="7875915731392087153">Tunga barua pepe</translation>
 <translation id="7876243839304621966">Ondoa yote</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
index cff4e58f..8aba204 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">புதிய அச்சுறுத்தல்களைக் கண்டறிய உதவும் வகையில் பக்கங்களின் சிறிய மாதிரி, பதிவிறக்கங்கள், நீட்டிப்புச் செயல்பாடு, சிஸ்டம் தகவல்கள் ஆகியவற்றையும் அனுப்பும்</translation>
 <translation id="3297344142967351106">குரல் உதவி</translation>
 <translation id="3303414029551471755">உள்ளடக்கத்தைப் பதிவிறக்குவதைத் தொடரவா?</translation>
+<translation id="3305795716056605962">மேலும் விருப்பங்கள் பட்டனைக் கிளிக் செய்து, பக்கங்களை மொழிபெயர்க்கலாம்</translation>
 <translation id="3334729583274622784">ஃபைல் நீட்டிப்பை மாற்றவா?</translation>
 <translation id="3341262203274374114">பின்தொடர்வதை நிறுத்த முடியவில்லை. ஏதோ தவறாகிவிட்டது.</translation>
 <translation id="3359667936385849800">எனது தற்போதைய சேவை வழங்குநரைப் பயன்படுத்து</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">செயல்பாடு</translation>
 <translation id="7857691613771368249">கோப்புகளை எப்போது சேமிக்க வேண்டும் எனக் கேள்</translation>
 <translation id="7859988229622350291">மொழிபெயர்க்கக்கூடாதவை</translation>
+<translation id="7866213166286285359">பக்கங்களை இங்கே மொழிபெயர்க்கலாம்</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> உங்கள் சாதனத்துடன் இணைய, அருகிலுள்ள சாதனங்களுடன் இணைவதற்கான அனுமதி தேவை</translation>
 <translation id="7875915731392087153">மின்னஞ்சலை உருவாக்கவும்</translation>
 <translation id="7876243839304621966">அனைத்தையும் அகற்று</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
index 5d502d5..1d00e99 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
@@ -433,6 +433,7 @@
 <translation id="3290249595466894471">Đồng thời gửi một mẫu nhỏ dữ liệu hoạt động trên các trang, tệp đã tải xuống, tiện ích và thông tin hệ thống để giúp phát hiện các mối đe dọa mới</translation>
 <translation id="3297344142967351106">Trợ lý thoại</translation>
 <translation id="3303414029551471755">Tiếp tục tải xuống nội dung?</translation>
+<translation id="3305795716056605962">Dịch trang từ nút Tuỳ chọn khác</translation>
 <translation id="3334729583274622784">Thay đổi đuôi tệp?</translation>
 <translation id="3341262203274374114">Không thể ngừng theo dõi. Đã xảy ra lỗi.</translation>
 <translation id="3359667936385849800">Sử dụng nhà cung cấp dịch vụ hiện tại của bạn</translation>
@@ -1268,6 +1269,7 @@
 <translation id="7853202427316060426">Hoạt động</translation>
 <translation id="7857691613771368249">Hỏi thời điểm lưu tệp</translation>
 <translation id="7859988229622350291">Không bao giờ dịch</translation>
+<translation id="7866213166286285359">Nhấp vào đây để chọn dịch trang</translation>
 <translation id="78707286264420418"><ph name="PRODUCT_NAME" /> cần các quyền đối với Thiết bị ở gần để kết nối với thiết bị của bạn</translation>
 <translation id="7875915731392087153">Tạo email</translation>
 <translation id="7876243839304621966">Xóa tất cả</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
index e17ce4b1..c3eb6e8 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -433,7 +433,7 @@
 <translation id="3290249595466894471">同時傳送網頁、下載檔案、擴充程式活動及系統資料的少量抽樣資料,以協助發現新威脅</translation>
 <translation id="3297344142967351106">語音助手</translation>
 <translation id="3303414029551471755">繼續下載內容?</translation>
-<translation id="3305795716056605962">透過「更多選項」按鈕翻譯頁面</translation>
+<translation id="3305795716056605962">透過「更多選項」掣翻譯頁面</translation>
 <translation id="3334729583274622784">要變更副檔名嗎?</translation>
 <translation id="3341262203274374114">無法取消追蹤,發生錯誤。</translation>
 <translation id="3359667936385849800">使用目前的服務供應商</translation>
diff --git a/chrome/browser/ui/android/tab_model/android_live_tab_context_wrapper.cc b/chrome/browser/ui/android/tab_model/android_live_tab_context_wrapper.cc
index 6f4396f..fe9f4db 100644
--- a/chrome/browser/ui/android/tab_model/android_live_tab_context_wrapper.cc
+++ b/chrome/browser/ui/android/tab_model/android_live_tab_context_wrapper.cc
@@ -11,14 +11,17 @@
 
 AndroidLiveTabContextCloseWrapper::AndroidLiveTabContextCloseWrapper(
     TabModel* tab_model,
-    std::vector<TabAndroid*> closed_tabs,
-    std::map<int, tab_groups::TabGroupId> tab_id_to_tab_group,
-    std::map<tab_groups::TabGroupId, tab_groups::TabGroupVisualData>
-        tab_group_visual_data)
+    std::vector<TabAndroid*>&& closed_tabs,
+    std::map<int, tab_groups::TabGroupId>&& tab_id_to_tab_group,
+    std::map<tab_groups::TabGroupId, tab_groups::TabGroupVisualData>&&
+        tab_group_visual_data,
+    std::vector<historical_tab_saver::WebContentsStateByteBuffer>&&
+        web_contents_state)
     : AndroidLiveTabContext(tab_model),
       closed_tabs_(closed_tabs),
       tab_id_to_tab_group_(tab_id_to_tab_group),
-      tab_group_visual_data_(tab_group_visual_data) {}
+      tab_group_visual_data_(tab_group_visual_data),
+      web_contents_state_(web_contents_state) {}
 
 AndroidLiveTabContextCloseWrapper::~AndroidLiveTabContextCloseWrapper() =
     default;
@@ -33,8 +36,10 @@
 
 sessions::LiveTab* AndroidLiveTabContextCloseWrapper::GetLiveTabAt(
     int relative_index) const {
+  DCHECK_LT(base::checked_cast<size_t>(relative_index),
+            web_contents_state_.size());
   scoped_web_contents_ = historical_tab_saver::ScopedWebContents::CreateForTab(
-      GetTabAt(relative_index));
+      GetTabAt(relative_index), &web_contents_state_[relative_index]);
   DCHECK(scoped_web_contents_->web_contents());
   return sessions::ContentLiveTab::GetForWebContents(
       scoped_web_contents_->web_contents());
diff --git a/chrome/browser/ui/android/tab_model/android_live_tab_context_wrapper.h b/chrome/browser/ui/android/tab_model/android_live_tab_context_wrapper.h
index 4377950d..821308e 100644
--- a/chrome/browser/ui/android/tab_model/android_live_tab_context_wrapper.h
+++ b/chrome/browser/ui/android/tab_model/android_live_tab_context_wrapper.h
@@ -34,10 +34,12 @@
   //   `id_to_tab_group`. If the title is null in Java use "".
   AndroidLiveTabContextCloseWrapper(
       TabModel* tab_model,
-      std::vector<TabAndroid*> closed_tabs,
-      std::map<int, tab_groups::TabGroupId> tab_id_to_tab_group,
-      std::map<tab_groups::TabGroupId, tab_groups::TabGroupVisualData>
-          tab_group_visual_data);
+      std::vector<TabAndroid*>&& closed_tabs,
+      std::map<int, tab_groups::TabGroupId>&& tab_id_to_tab_group,
+      std::map<tab_groups::TabGroupId, tab_groups::TabGroupVisualData>&&
+          tab_group_visual_data,
+      std::vector<historical_tab_saver::WebContentsStateByteBuffer>&&
+          web_contents_state);
   ~AndroidLiveTabContextCloseWrapper() override;
 
   AndroidLiveTabContextCloseWrapper(const AndroidLiveTabContextCloseWrapper&) =
@@ -82,6 +84,10 @@
   std::map<tab_groups::TabGroupId, tab_groups::TabGroupVisualData>
       tab_group_visual_data_;
 
+  // List of webContentStates to close linked by tab index for bulk closure.
+  std::vector<historical_tab_saver::WebContentsStateByteBuffer>
+      web_contents_state_;
+
   // The most recently unfrozen web contents. Mutable as const signature methods
   // modify this field (constness inherited from LiveTabContext).
   mutable std::unique_ptr<historical_tab_saver::ScopedWebContents>
diff --git a/chrome/browser/ui/startup/launch_mode_recorder.cc b/chrome/browser/ui/startup/launch_mode_recorder.cc
index 9171d6da..bb62a3d 100644
--- a/chrome/browser/ui/startup/launch_mode_recorder.cc
+++ b/chrome/browser/ui/startup/launch_mode_recorder.cc
@@ -24,6 +24,7 @@
 #if BUILDFLAG(IS_WIN)
 #include "base/files/file_path.h"
 #include "base/win/startup_information.h"
+#include "chrome/installer/util/taskbar_util.h"
 #endif
 
 namespace {
@@ -137,10 +138,22 @@
 }
 #endif                   // BUILDFLAG(IS_WIN)
 
+void RecordLaunchMode(LaunchMode mode) {
+  base::UmaHistogramEnumeration("Launch.Modes", mode);
+#if BUILDFLAG(IS_WIN)
+  if (mode == LaunchMode::kShortcutTaskbar) {
+    absl::optional<bool> installer_pinned = GetInstallerPinnedChromeToTaskbar();
+    if (installer_pinned.has_value()) {
+      base::UmaHistogramBoolean("Windows.Launch.TaskbarInstallerPinned",
+                                installer_pinned.value());
+    }
+  }
+#endif  // BUILDFLAG(IS_WIN)
+}
+
 // Log in a histogram the frequency of launching by the different methods. See
 // LaunchMode enum for the actual values of the buckets.
 void RecordLaunchModeHistogram(LaunchMode mode) {
-  static constexpr char kLaunchModesHistogram[] = "Launch.Modes";
   if (mode == LaunchMode::kToBeDecided &&
       (mode = GetLaunchModeFast()) == LaunchMode::kToBeDecided) {
     // The mode couldn't be determined with a fast path. Perform a more
@@ -149,12 +162,9 @@
         FROM_HERE,
         {base::TaskPriority::BEST_EFFORT,
          base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN},
-        base::BindOnce([]() {
-          base::UmaHistogramEnumeration(kLaunchModesHistogram,
-                                        GetLaunchModeSlow());
-        }));
+        base::BindOnce(&RecordLaunchMode, GetLaunchModeSlow()));
   } else {
-    base::UmaHistogramEnumeration(kLaunchModesHistogram, mode);
+    RecordLaunchMode(mode);
   }
 }
 
diff --git a/chrome/browser/ui/startup/launch_mode_recorder.h b/chrome/browser/ui/startup/launch_mode_recorder.h
index 4a6de12..09ffc4ff 100644
--- a/chrome/browser/ui/startup/launch_mode_recorder.h
+++ b/chrome/browser/ui/startup/launch_mode_recorder.h
@@ -18,15 +18,16 @@
   // method outside of a platform shortcut or command-line launch..
   // kAsWebAppInWindow = 1,     Deprecated in favor of kAsWebAppInWindowByUrl
   //                            and kAsWebAppInWindowByAppId
-  kWithUrls = 2,             // Launched with urls in the cmd line.
-  kOther = 3,                // Not launched from a shortcut.
-  kShortcutNoName = 4,       // Launched from shortcut but no name available.
-  kShortcutUnknown = 5,      // Launched from user-defined shortcut.
-  kShortcutQuickLaunch = 6,  // Launched from the quick launch bar.
-  kShortcutDesktop = 7,      // Launched from a desktop shortcut.
-  kShortcutTaskbar = 8,      // Launched from the taskbar.
-  kUserExperiment = 9,       // Launched after acceptance of a user experiment.
-  kOtherOS = 10,             // Result bucket for OSes with no coverage here.
+  kWithUrls = 2,         // Launched with urls in the cmd line.
+  kOther = 3,            // Not launched from a shortcut.
+  kShortcutNoName = 4,   // Launched from shortcut but no name available.
+  kShortcutUnknown = 5,  // Launched from user-defined shortcut.
+  // kShortcutQuickLaunch = 6,  Launched from the quick launch bar. Not used.
+  //                            See kShortcutTaskbar instead.
+  kShortcutDesktop = 7,  // Launched from a desktop shortcut.
+  kShortcutTaskbar = 8,  // Launched from the Windows taskbar.
+  kUserExperiment = 9,   // Launched after acceptance of a user experiment.
+  kOtherOS = 10,         // Result bucket for OSes with no coverage here.
   kMacUndockedDiskLaunch = 11,  // Undocked launch from disk.
   kMacDockedDiskLaunch = 12,    // Docked launch from disk.
   kMacUndockedDMGLaunch = 13,   // Undocked launch from a dmg.
diff --git a/chrome/browser/ui/startup/startup_browser_creator.cc b/chrome/browser/ui/startup/startup_browser_creator.cc
index 11e7e377..4595cc9 100644
--- a/chrome/browser/ui/startup/startup_browser_creator.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator.cc
@@ -1489,6 +1489,26 @@
             StartupProfileMode::kBrowserWindow};
   }
 
+  if (command_line.HasSwitch(switches::kProfileEmail)) {
+    // Use GetSwitchValueNative() rather than GetSwitchValueASCII() to support
+    // non-ASCII email addresses.
+    base::CommandLine::StringType email_native =
+        command_line.GetSwitchValueNative(switches::kProfileEmail);
+    if (!email_native.empty()) {
+      std::string email;
+#if BUILDFLAG(IS_WIN)
+      email = base::WideToUTF8(email_native);
+#else
+      email = std::move(email_native);
+#endif
+      base::FilePath profile_dir =
+          g_browser_process->profile_manager()->GetProfileDirForEmail(email);
+      if (!profile_dir.empty()) {
+        return {profile_dir, StartupProfileMode::kBrowserWindow};
+      }
+    }
+  }
+
 #if !BUILDFLAG(IS_CHROMEOS_ASH)
   if (!ignore_profile_picker &&
       ShouldShowProfilePickerAtProcessLaunch(profile_manager, command_line)) {
diff --git a/chrome/browser/ui/views/file_system_access/file_system_access_browsertest.cc b/chrome/browser/ui/views/file_system_access/file_system_access_browsertest.cc
index a1239fb..cfeeb14a 100644
--- a/chrome/browser/ui/views/file_system_access/file_system_access_browsertest.cc
+++ b/chrome/browser/ui/views/file_system_access/file_system_access_browsertest.cc
@@ -94,8 +94,8 @@
     return result;
   }
 
-  bool IsUsageIndicatorVisible() {
-    auto* browser_view = BrowserView::GetBrowserViewForBrowser(browser());
+  bool IsUsageIndicatorVisible(Browser* browser) {
+    auto* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
     auto* icon_view =
         browser_view->toolbar_button_provider()->GetPageActionIconView(
             PageActionIconType::kFileSystemAccess);
@@ -117,7 +117,7 @@
   content::WebContents* web_contents =
       browser()->tab_strip_model()->GetActiveWebContents();
 
-  EXPECT_FALSE(IsUsageIndicatorVisible());
+  EXPECT_FALSE(IsUsageIndicatorVisible(browser()));
 
   EXPECT_EQ(test_file.BaseName().AsUTF8Unsafe(),
             content::EvalJs(web_contents,
@@ -126,7 +126,7 @@
                             "  self.entry = e;"
                             "  return e.name; })()"));
 
-  EXPECT_TRUE(IsUsageIndicatorVisible())
+  EXPECT_TRUE(IsUsageIndicatorVisible(browser()))
       << "A save file dialog implicitly grants write access, so usage "
          "indicator should be visible.";
 
@@ -163,7 +163,7 @@
   FileSystemAccessPermissionRequestManager::FromWebContents(web_contents)
       ->set_auto_response_for_test(permissions::PermissionAction::GRANTED);
 
-  EXPECT_FALSE(IsUsageIndicatorVisible());
+  EXPECT_FALSE(IsUsageIndicatorVisible(browser()));
 
   EXPECT_EQ(test_file.BaseName().AsUTF8Unsafe(),
             content::EvalJs(web_contents,
@@ -173,7 +173,7 @@
                             "  return e.name; })()"));
 
   // Even read-only access should show a usage indicator.
-  EXPECT_TRUE(IsUsageIndicatorVisible());
+  EXPECT_TRUE(IsUsageIndicatorVisible(browser()));
 
   EXPECT_EQ(
       static_cast<int>(file_contents.size()),
@@ -188,7 +188,7 @@
 
   // Should have prompted for and received write access, so usage indicator
   // should still be visible.
-  EXPECT_TRUE(IsUsageIndicatorVisible());
+  EXPECT_TRUE(IsUsageIndicatorVisible(browser()));
 
   {
     base::ScopedAllowBlockingForTesting allow_blocking;
@@ -308,7 +308,7 @@
 
   load_observer.WaitForNavigationFinished();
 
-  EXPECT_FALSE(IsUsageIndicatorVisible());
+  EXPECT_FALSE(IsUsageIndicatorVisible(browser()));
 
   EXPECT_EQ(test_file.BaseName().AsUTF8Unsafe(),
             content::EvalJs(web_contents,
@@ -318,7 +318,7 @@
                             "  return e.name; })()"));
 
   // Even read-only access should show a usage indicator.
-  EXPECT_TRUE(IsUsageIndicatorVisible());
+  EXPECT_TRUE(IsUsageIndicatorVisible(browser()));
 
   EXPECT_EQ("done",
             content::EvalJs(
@@ -352,7 +352,7 @@
                              file_contents)));
 
   // The usage indicator should still be visible.
-  EXPECT_TRUE(IsUsageIndicatorVisible());
+  EXPECT_TRUE(IsUsageIndicatorVisible(browser()));
 }
 
 #if BUILDFLAG(FULL_SAFE_BROWSING)
@@ -776,6 +776,106 @@
                             "self.entry.queryPermission({mode: 'read'})"));
 }
 
+class PersistedPermissionsFileSystemAccessBrowserTest
+    : public FileSystemAccessBrowserTest {
+ public:
+  PersistedPermissionsFileSystemAccessBrowserTest() {
+    // Enable Persisted Permissions.
+    feature_list_.InitAndEnableFeature(
+        features::kFileSystemAccessPersistentPermissions);
+  }
+
+  void SetUpOnMainThread() override {
+    FileSystemAccessBrowserTest::SetUpOnMainThread();
+  }
+
+  ~PersistedPermissionsFileSystemAccessBrowserTest() override = default;
+
+  PersistedPermissionsFileSystemAccessBrowserTest(
+      const PersistedPermissionsFileSystemAccessBrowserTest&) = delete;
+  PersistedPermissionsFileSystemAccessBrowserTest& operator=(
+      const PersistedPermissionsFileSystemAccessBrowserTest&) = delete;
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(PersistedPermissionsFileSystemAccessBrowserTest,
+                       UsageIndicatorVisibleWithPersistedPermissionsEnabled) {
+  const GURL test_url = embedded_test_server()->GetURL("/title1.html");
+  auto kTestOrigin = url::Origin::Create(test_url);
+  const base::FilePath test_file = CreateTestFile("");
+  const std::string file_contents = "file contents to write";
+  std::unique_ptr<ChromeFileSystemAccessPermissionContext> permission_context =
+      std::make_unique<ChromeFileSystemAccessPermissionContext>(
+          browser()->profile());
+
+  ui::SelectFileDialog::SetFactory(
+      new SelectPredeterminedFileDialogFactory({test_file}));
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), test_url));
+
+  // The usage indicator is not initially visible.
+  EXPECT_FALSE(IsUsageIndicatorVisible(browser()));
+
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  FileSystemAccessPermissionRequestManager::FromWebContents(web_contents)
+      ->set_auto_response_for_test(permissions::PermissionAction::GRANTED);
+
+  auto grant = permission_context->GetWritePermissionGrant(
+      kTestOrigin, test_file,
+      content::FileSystemAccessPermissionContext::HandleType::kFile,
+      content::FileSystemAccessPermissionContext::UserAction::kSave);
+
+  EXPECT_TRUE(permission_context->HasPersistedPermissionForTesting(
+      kTestOrigin, test_file,
+      content::FileSystemAccessPermissionContext::HandleType::kFile,
+      ChromeFileSystemAccessPermissionContext::GrantType::kWrite));
+  EXPECT_EQ(content::FileSystemAccessPermissionGrant::PermissionStatus::GRANTED,
+            grant->GetStatus());
+
+  EXPECT_EQ(test_file.BaseName().AsUTF8Unsafe(),
+            content::EvalJs(web_contents,
+                            "(async () => {"
+                            "  let [e] = await self.showOpenFilePicker();"
+                            "  self.entry = e;"
+                            "  return e.name; })()"));
+  EXPECT_EQ(
+      static_cast<int>(file_contents.size()),
+      content::EvalJs(
+          web_contents,
+          content::JsReplace("(async () => {"
+                             "  const w = await self.entry.createWritable();"
+                             "  await w.write(new Blob([$1]));"
+                             "  await w.close();"
+                             "  return (await self.entry.getFile()).size; })()",
+                             file_contents)));
+
+  {
+    base::ScopedAllowBlockingForTesting allow_blocking;
+    std::string read_contents;
+    EXPECT_TRUE(base::ReadFileToString(test_file, &read_contents));
+    EXPECT_EQ(file_contents, read_contents);
+  }
+
+  // The usage indicator is visible after opening and writing to a file.
+  EXPECT_TRUE(IsUsageIndicatorVisible(browser()));
+
+  // Navigate to another page.
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(
+      browser(), embedded_test_server()->GetURL("a.com", "/title2.html")));
+
+  // The usage indicator is not visible after navigating to another page.
+  EXPECT_FALSE(IsUsageIndicatorVisible(browser()));
+
+  // Navigate back to the original page.
+  ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), test_url));
+
+  // With Persisted Permissions enabled, the usage indicator should be visible
+  // on the original page.
+  EXPECT_TRUE(IsUsageIndicatorVisible(browser()));
+}
+
 class BackForwardCacheFileSystemAccessBrowserTest
     : public FileSystemAccessBrowserTest {
  public:
@@ -819,7 +919,8 @@
 
   content::RenderFrameDeletedObserver deleted_observer(initial_rfh);
 
-  // Navigate to another page. The initial page goes to the back forward cache.
+  // Navigate to another page. The initial page goes to the back forward
+  // cache.
   ASSERT_TRUE(ui_test_utils::NavigateToURL(
       browser(), embedded_test_server()->GetURL("b.com", "/title2.html")));
   EXPECT_FALSE(deleted_observer.deleted());
@@ -964,8 +1065,9 @@
     if (fenced_frame_helper_)
       return fenced_frame_helper_->CreateFencedFrame(fenced_frame_parent, url);
 
-    // FencedFrameTestHelper only supports the MPArch version of fenced frames.
-    // So need to maually create a fenced frame for the ShadowDOM version.
+    // FencedFrameTestHelper only supports the MPArch version of fenced
+    // frames. So need to maually create a fenced frame for the ShadowDOM
+    // version.
     content::TestNavigationManager navigation(
         browser()->tab_strip_model()->GetActiveWebContents(), url);
     constexpr char kAddFencedFrameScript[] = R"({
@@ -1009,7 +1111,7 @@
   FileSystemAccessPermissionRequestManager::FromWebContents(web_contents)
       ->set_auto_response_for_test(permissions::PermissionAction::GRANTED);
 
-  EXPECT_FALSE(IsUsageIndicatorVisible());
+  EXPECT_FALSE(IsUsageIndicatorVisible(browser()));
 
   // Load a fenced frame.
   GURL fenced_frame_url = https_server().GetURL("/fenced_frames/title1.html");
@@ -1025,7 +1127,7 @@
                                "  return e.name; })()"));
 
   // Even read-only access should show a usage indicator.
-  EXPECT_FALSE(IsUsageIndicatorVisible());
+  EXPECT_FALSE(IsUsageIndicatorVisible(browser()));
 
   auto grant = permission_context->GetWritePermissionGrant(
       url::Origin::Create(fenced_frame_url), test_file,
@@ -1099,8 +1201,8 @@
     }
 
     // Write permissions are granted to the test WebUI with WebUIAllowlist in
-    // SetUpAndNavigateToTestWebUI. Users should not get permission prompts. We
-    // auto-deny them if they show up.
+    // SetUpAndNavigateToTestWebUI. Users should not get permission prompts.
+    // We auto-deny them if they show up.
     FileSystemAccessPermissionRequestManager::FromWebContents(web_contents)
         ->set_auto_response_for_test(permissions::PermissionAction::DENIED);
 
@@ -1132,8 +1234,8 @@
   void TestDirectoryPermission(content::WebContents* web_contents,
                                const base::FilePath& dir_path) {
     // Write permissions are granted to the test WebUI with WebUIAllowlist in
-    // SetUpAndNavigateToTestWebUI. Users should not get permission prompts. We
-    // auto-deny them if they show up.
+    // SetUpAndNavigateToTestWebUI. Users should not get permission prompts.
+    // We auto-deny them if they show up.
     FileSystemAccessPermissionRequestManager::FromWebContents(web_contents)
         ->set_auto_response_for_test(permissions::PermissionAction::DENIED);
 
@@ -1180,9 +1282,10 @@
 
 IN_PROC_BROWSER_TEST_F(FileSystemAccessBrowserTestForWebUI,
                        OpenFilePicker_FileInSensitivePath) {
-  base::ScopedPathOverride downloads_override(
-      chrome::DIR_DEFAULT_DOWNLOADS, temp_dir_.GetPath(), /*is_absolute*/ true,
-      /*create*/ false);
+  base::ScopedPathOverride downloads_override(chrome::DIR_DEFAULT_DOWNLOADS,
+                                              temp_dir_.GetPath(),
+                                              /*is_absolute*/ true,
+                                              /*create*/ false);
 
   content::WebContents* web_contents = SetUpAndNavigateToTestWebUI();
   TestFilePermissionInDirectory(web_contents, temp_dir_.GetPath());
@@ -1196,9 +1299,10 @@
 
 IN_PROC_BROWSER_TEST_F(FileSystemAccessBrowserTestForWebUI,
                        OpenDirectoryPicker_DirectoryInSensitivePath) {
-  base::ScopedPathOverride downloads_override(
-      chrome::DIR_DEFAULT_DOWNLOADS, temp_dir_.GetPath(), /*is_absolute*/ true,
-      /*create*/ false);
+  base::ScopedPathOverride downloads_override(chrome::DIR_DEFAULT_DOWNLOADS,
+                                              temp_dir_.GetPath(),
+                                              /*is_absolute*/ true,
+                                              /*create*/ false);
 
   base::FilePath test_dir_path = temp_dir_.GetPath().AppendASCII("folder");
   {
diff --git a/chrome/browser/ui/views/frame/browser_frame_view_layout_linux.cc b/chrome/browser/ui/views/frame/browser_frame_view_layout_linux.cc
index a7eeea3..fea7e7a 100644
--- a/chrome/browser/ui/views/frame/browser_frame_view_layout_linux.cc
+++ b/chrome/browser/ui/views/frame/browser_frame_view_layout_linux.cc
@@ -54,17 +54,28 @@
 
   // The border must be at least as large as the shadow.
   gfx::Rect frame_extents;
+  const auto tiled_edges = delegate_->GetTiledEdges();
   for (const auto& shadow_value : view_->GetShadowValues()) {
     auto shadow_radius = shadow_value.blur() / 4;
+    gfx::InsetsF shadow_insets =
+        gfx::InsetsF::TLBR(tiled_edges.top ? 0 : shadow_radius,
+                           tiled_edges.left ? 0 : shadow_radius,
+                           tiled_edges.bottom ? 0 : shadow_radius,
+                           tiled_edges.right ? 0 : shadow_radius);
     gfx::RectF shadow_extents;
-    shadow_extents.Inset(-gfx::InsetsF(shadow_radius));
-    shadow_extents.set_y(shadow_extents.y() + shadow_value.y());
+    shadow_extents.Inset(-shadow_insets);
+    if (!tiled_edges.top)
+      shadow_extents.set_y(shadow_extents.y() + shadow_value.y());
     frame_extents.Union(gfx::ToEnclosingRect(shadow_extents));
   }
 
   // The border must be at least as large as the input region.
+  auto insets = -gfx::Insets::TLBR(tiled_edges.top ? 0 : kResizeBorder,
+                                   tiled_edges.left ? 0 : kResizeBorder,
+                                   tiled_edges.bottom ? 0 : kResizeBorder,
+                                   tiled_edges.right ? 0 : kResizeBorder);
   gfx::Rect input_extents;
-  input_extents.Inset(-gfx::Insets(kResizeBorder));
+  input_extents.Inset(-insets);
   frame_extents.Union(input_extents);
 
   return gfx::Insets::TLBR(-frame_extents.y(), -frame_extents.x(),
diff --git a/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_native_unittest.cc b/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_native_unittest.cc
index 0d15ff70..4fa1cd6 100644
--- a/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_native_unittest.cc
+++ b/chrome/browser/ui/views/frame/browser_frame_view_layout_linux_native_unittest.cc
@@ -7,6 +7,8 @@
 
 #include <memory>
 
+#include "build/build_config.h"
+#include "build/chromeos_buildflags.h"
 #include "chrome/browser/ui/layout_constants.h"
 #include "chrome/test/views/chrome_views_test_base.h"
 #include "ui/linux/nav_button_provider.h"
@@ -76,6 +78,12 @@
       const gfx::Rect& bounding_rect) const override {}
   bool IsTranslucentWindowOpacitySupported() const override { return true; }
   bool ShouldDrawRestoredFrameShadow() const override { return true; }
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
+  OpaqueBrowserFrameViewLayoutDelegate::TiledEdges GetTiledEdges()
+      const override {
+    return {};
+  }
+#endif
 };
 
 class TestNavButtonProvider : public ui::NavButtonProvider {
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
index 687f5bd..46a93d2 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.cc
@@ -580,6 +580,15 @@
   return false;
 }
 
+#if BUILDFLAG(IS_LINUX)
+OpaqueBrowserFrameViewLayoutDelegate::TiledEdges
+OpaqueBrowserFrameView::GetTiledEdges() const {
+  // TODO(crbug.com/1355273): return the actual tiled state of the platform
+  // window.
+  return {};
+}
+#endif
+
 ///////////////////////////////////////////////////////////////////////////////
 // OpaqueBrowserFrameView, protected:
 
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view.h b/chrome/browser/ui/views/frame/opaque_browser_frame_view.h
index 45ae28c..ed2d4d3 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view.h
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view.h
@@ -9,6 +9,7 @@
 
 #include "base/memory/raw_ptr.h"
 #include "build/build_config.h"
+#include "build/chromeos_buildflags.h"
 #include "chrome/browser/ui/view_ids.h"
 #include "chrome/browser/ui/views/frame/browser_frame.h"
 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h"
@@ -113,6 +114,9 @@
       const gfx::Rect& bounding_rect) const override;
   bool IsTranslucentWindowOpacitySupported() const override;
   bool ShouldDrawRestoredFrameShadow() const override;
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
+  TiledEdges GetTiledEdges() const override;
+#endif
 
  protected:
   views::Button* minimize_button() const { return minimize_button_; }
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_delegate.h b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_delegate.h
index c7f1753..ec241da 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_delegate.h
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_delegate.h
@@ -7,6 +7,8 @@
 
 #include <string>
 
+#include "build/build_config.h"
+#include "build/chromeos_buildflags.h"
 
 namespace gfx {
 class Size;
@@ -25,6 +27,18 @@
     kImageButton,
   };
 
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
+  // Wayland can notify the application if certain edge of the window is
+  // "tiled": https://wayland.app/protocols/xdg-shell#xdg_toplevel:enum:state.
+  // Chromium should not draw frame decorations for the tiled edges.
+  struct TiledEdges {
+    bool left = false;
+    bool right = false;
+    bool top = false;
+    bool bottom = false;
+  };
+#endif
+
   // Controls the visual placement of the window icon/title in non-tabstrip
   // mode.
   virtual bool ShouldShowWindowIcon() const = 0;
@@ -90,6 +104,12 @@
   // Returns true if a client-side shadow should be drawn for restored windows.
   virtual bool ShouldDrawRestoredFrameShadow() const = 0;
 
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
+  // Returns which edges of the window are snapped to the edges of the desktop
+  // (or "tiled").
+  virtual TiledEdges GetTiledEdges() const = 0;
+#endif
+
  protected:
   virtual ~OpaqueBrowserFrameViewLayoutDelegate() = default;
 };
diff --git a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc
index 3db1458..cf01721 100644
--- a/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc
+++ b/chrome/browser/ui/views/frame/opaque_browser_frame_view_layout_unittest.cc
@@ -11,6 +11,8 @@
 #include "base/command_line.h"
 #include "base/memory/raw_ptr.h"
 #include "base/strings/utf_string_conversions.h"
+#include "build/build_config.h"
+#include "build/chromeos_buildflags.h"
 #include "chrome/browser/ui/layout_constants.h"
 #include "chrome/browser/ui/views/tab_icon_view.h"
 #include "chrome/common/chrome_switches.h"
@@ -87,6 +89,12 @@
       const gfx::Rect& bounding_rect) const override {}
   bool IsTranslucentWindowOpacitySupported() const override { return true; }
   bool ShouldDrawRestoredFrameShadow() const override { return true; }
+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
+  OpaqueBrowserFrameViewLayoutDelegate::TiledEdges GetTiledEdges()
+      const override {
+    return {};
+  }
+#endif
 
  private:
   std::u16string window_title_;
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index 37a72ba8..ec5fc2b 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -68,8 +68,6 @@
 #include "chrome/browser/ui/views/page_info/page_info_bubble_view.h"
 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h"
 #include "chrome/browser/ui/views/permissions/permission_chip.h"
-#include "chrome/browser/ui/views/permissions/permission_quiet_chip.h"
-#include "chrome/browser/ui/views/permissions/permission_request_chip.h"
 #include "chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_icon_view.h"
 #include "chrome/browser/ui/views/sharing_hub/sharing_hub_icon_view.h"
 #include "chrome/browser/ui/web_applications/app_browser_controller.h"
@@ -826,30 +824,6 @@
   chip_ = AddChildViewAt(std::make_unique<PermissionChip>(), 0);
 }
 
-PermissionChip* LocationBarView::DisplayChip(
-    permissions::PermissionPrompt::Delegate* delegate,
-    bool should_bubble_start_open) {
-  DCHECK(delegate);
-  DCHECK(chip_);
-
-  chip_->SetupChip(std::make_unique<PermissionRequestChip>(
-      browser(), delegate, should_bubble_start_open));
-
-  return chip_;
-}
-
-PermissionChip* LocationBarView::DisplayQuietChip(
-    permissions::PermissionPrompt::Delegate* delegate,
-    bool should_expand) {
-  DCHECK(delegate);
-  DCHECK(chip_);
-
-  chip_->SetupChip(std::make_unique<PermissionQuietChip>(browser(), delegate,
-                                                         should_expand));
-
-  return chip_;
-}
-
 void LocationBarView::FinalizeChip() {
   DCHECK(chip_);
   chip_->Finalize();
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.h b/chrome/browser/ui/views/location_bar/location_bar_view.h
index 329615a..d8cede2 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.h
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.h
@@ -180,20 +180,6 @@
   // Adds chip into the LocationBarView in the first position.
   void CreateChip();
 
-  // Creates and displays an instance of PermissionRequestChip.
-  // If `should_bubble_start_open` is true, a permission prompt bubble will be
-  // displayed automatically after PermissionRequestChip is created.
-  // `should_bubble_start_open` is evaluated based on
-  // `PermissionChipGestureSensitive` and `PermissionChipRequestTypeSensitive`
-  // experiments.
-  PermissionChip* DisplayChip(permissions::PermissionPrompt::Delegate* delegate,
-                              bool should_bubble_start_open);
-
-  // Creates and displays an instance of PermissionQuietChip.
-  PermissionChip* DisplayQuietChip(
-      permissions::PermissionPrompt::Delegate* delegate,
-      bool should_expand);
-
   // Removes previously displayed PermissionChip.
   void FinalizeChip();
 
diff --git a/chrome/browser/ui/views/location_bar/omnibox_chip_button.cc b/chrome/browser/ui/views/location_bar/omnibox_chip_button.cc
index 20f90602..0d5e74aa 100644
--- a/chrome/browser/ui/views/location_bar/omnibox_chip_button.cc
+++ b/chrome/browser/ui/views/location_bar/omnibox_chip_button.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/ui/views/location_bar/omnibox_chip_button.h"
+#include <cstddef>
 
 #include "chrome/browser/themes/theme_properties.h"
 #include "chrome/browser/ui/color/chrome_color_id.h"
@@ -129,9 +130,8 @@
 }
 
 const gfx::VectorIcon& OmniboxChipButton::GetIcon() const {
-  if (permission_chip_delegate_.has_value()) {
-    return show_blocked_icon_ ? permission_chip_delegate_.value()->GetIconOff()
-                              : permission_chip_delegate_.value()->GetIconOn();
+  if (icon_) {
+    return const_cast<decltype(*icon_)>(*icon_);
   }
 
   return gfx::kNoneIcon;
@@ -171,26 +171,15 @@
   force_expanded_for_testing_ = force_expanded_for_testing;
 }
 
-void OmniboxChipButton::SetShowBlockedIcon(bool show_blocked_icon) {
-  if (show_blocked_icon_ != show_blocked_icon) {
-    show_blocked_icon_ = show_blocked_icon;
-    theme_ = show_blocked_icon ? OmniboxChipTheme::kLowVisibility
-                               : OmniboxChipTheme::kNormalVisibility;
-    UpdateIconAndColors();
-  }
-}
-
-void OmniboxChipButton::SetPermissionChipDelegate(
-    PermissionChipDelegate* permission_chip_delegate) {
-  DCHECK(permission_chip_delegate);
-  permission_chip_delegate_ = permission_chip_delegate;
+void OmniboxChipButton::SetChipIcon(const gfx::VectorIcon& icon) {
+  icon_ = &icon;
 
   UpdateIconAndColors();
 }
 
 void OmniboxChipButton::Finalize() {
-  permission_chip_delegate_.reset();
-  show_blocked_icon_ = false;
+  icon_ = (gfx::VectorIcon*)&gfx::kNoneIcon;
+
   // It is possible that a chip gets finalized while the animation was in
   // progress.
   animation_->Stop();
diff --git a/chrome/browser/ui/views/location_bar/omnibox_chip_button.h b/chrome/browser/ui/views/location_bar/omnibox_chip_button.h
index bcae3144..97cb454 100644
--- a/chrome/browser/ui/views/location_bar/omnibox_chip_button.h
+++ b/chrome/browser/ui/views/location_bar/omnibox_chip_button.h
@@ -6,10 +6,11 @@
 #define CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_OMNIBOX_CHIP_BUTTON_H_
 
 #include "chrome/browser/ui/views/location_bar/omnibox_chip_theme.h"
-#include "chrome/browser/ui/views/permissions/permission_chip_delegate.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/base/models/image_model.h"
 #include "ui/gfx/animation/slide_animation.h"
+#include "ui/gfx/paint_vector_icon.h"
+#include "ui/gfx/vector_icon_types.h"
 #include "ui/views/controls/button/md_text_button.h"
 
 // UI component for chip button located in the omnibox. A button with an icon
@@ -45,10 +46,7 @@
   void SetMessage(std::u16string message);
   void SetForceExpandedForTesting(bool force_expanded_for_testing);
 
-  void SetShowBlockedIcon(bool show_blocked_icon);
-
-  void SetPermissionChipDelegate(
-      PermissionChipDelegate* permission_chip_delegate);
+  void SetChipIcon(const gfx::VectorIcon& icon);
 
   void Finalize();
 
@@ -77,13 +75,11 @@
   // without text.
   bool fully_collapsed_ = false;
 
-  bool show_blocked_icon_ = false;
+  raw_ptr<const gfx::VectorIcon> icon_ = &gfx::kNoneIcon;
 
   base::RepeatingCallback<void()> expand_animation_ended_callback_;
 
   bool force_expanded_for_testing_ = false;
-
-  absl::optional<PermissionChipDelegate*> permission_chip_delegate_;
 };
 
 #endif  // CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_OMNIBOX_CHIP_BUTTON_H_
diff --git a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
index 645bd00..e5c06be 100644
--- a/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
+++ b/chrome/browser/ui/views/page_info/page_info_bubble_view_unittest.cc
@@ -39,6 +39,7 @@
 #include "components/history/core/browser/history_service.h"
 #include "components/page_info/core/features.h"
 #include "components/permissions/permission_uma_util.h"
+#include "components/permissions/permission_util.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/ukm/test_ukm_recorder.h"
 #include "content/public/browser/ssl_status.h"
diff --git a/chrome/browser/ui/views/permissions/permission_bubble_interactive_uitest.cc b/chrome/browser/ui/views/permissions/permission_bubble_interactive_uitest.cc
index 879db698..f518ff1e 100644
--- a/chrome/browser/ui/views/permissions/permission_bubble_interactive_uitest.cc
+++ b/chrome/browser/ui/views/permissions/permission_bubble_interactive_uitest.cc
@@ -14,7 +14,6 @@
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/permissions/permission_chip.h"
-#include "chrome/browser/ui/views/permissions/permission_request_chip.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/interactive_test_utils.h"
diff --git a/chrome/browser/ui/views/permissions/permission_chip.cc b/chrome/browser/ui/views/permissions/permission_chip.cc
index 08d212b..f13ca6ef 100644
--- a/chrome/browser/ui/views/permissions/permission_chip.cc
+++ b/chrome/browser/ui/views/permissions/permission_chip.cc
@@ -3,17 +3,25 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/ui/views/permissions/permission_chip.h"
+#include <cstddef>
+#include <memory>
 
+#include "base/check.h"
 #include "base/location.h"
 #include "base/memory/raw_ptr.h"
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
+#include "chrome/browser/ui/views/content_setting_bubble_contents.h"
+#include "chrome/browser/ui/views/frame/browser_view.h"
+#include "chrome/browser/ui/views/location_bar/location_bar_view.h"
+#include "chrome/browser/ui/views/location_bar/omnibox_chip_theme.h"
 #include "chrome/browser/ui/views/permissions/permission_prompt_style.h"
 #include "chrome/grit/generated_resources.h"
 #include "components/permissions/features.h"
 #include "components/permissions/permission_request.h"
+#include "components/permissions/permission_util.h"
 #include "components/permissions/request_type.h"
 #include "components/strings/grit/components_strings.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -62,17 +70,116 @@
   Finalize();
 }
 
+namespace {
+const gfx::VectorIcon& GetBlockedPermissionIconId(
+    permissions::PermissionPrompt::Delegate* delegate) {
+  DCHECK(delegate);
+  DCHECK(delegate->Requests().size() > 0);
+
+  auto requests = delegate->Requests();
+  if (requests.size() == 1)
+    return requests[0]->GetBlockedIconForChip();
+
+  // When we have two requests, it must be microphone & camera. Then we need to
+  // use the icon from the camera request.
+  return permissions::RequestType::kCameraStream == requests[0]->request_type()
+             ? requests[0]->GetBlockedIconForChip()
+             : requests[1]->GetBlockedIconForChip();
+}
+
+const gfx::VectorIcon& GetPermissionIconId(
+    permissions::PermissionPrompt::Delegate* delegate) {
+  DCHECK(delegate);
+  DCHECK(delegate->Requests().size() > 0);
+  auto requests = delegate->Requests();
+  if (requests.size() == 1)
+    return requests[0]->GetIconForChip();
+
+  // When we have two requests, it must be microphone & camera. Then we need to
+  // use the icon from the camera request.
+  return permissions::RequestType::kCameraStream == requests[0]->request_type()
+             ? requests[0]->GetIconForChip()
+             : requests[1]->GetIconForChip();
+}
+
+std::u16string GetQuietPermissionMessage(
+    permissions::PermissionPrompt::Delegate* delegate) {
+  DCHECK(delegate);
+  DCHECK(delegate->Requests()[0]->GetQuietChipText().has_value());
+
+  return delegate->Requests()[0]->GetQuietChipText().value();
+}
+
+std::u16string GetPermissionMessage(
+    permissions::PermissionPrompt::Delegate* delegate) {
+  DCHECK(delegate);
+
+  auto requests = delegate->Requests();
+
+  return requests.size() == 1
+             ? requests[0]->GetRequestChipText().value()
+             : l10n_util::GetStringUTF16(
+                   IDS_MEDIA_CAPTURE_VIDEO_AND_AUDIO_PERMISSION_CHIP);
+}
+
+bool ShouldPermissionBubbleExpand(
+    permissions::PermissionPrompt::Delegate* delegate,
+    PermissionPromptStyle prompt_style) {
+  DCHECK(delegate);
+  if (PermissionPromptStyle::kQuietChip == prompt_style) {
+    return !permissions::PermissionUiSelector::ShouldSuppressAnimation(
+        delegate->ReasonForUsingQuietUi());
+  }
+
+  return true;
+}
+}  // namespace
+
 void PermissionChip::OpenBubble() {
   // The prompt bubble is either not opened yet or already closed on
   // deactivation.
   DCHECK(!IsBubbleShowing());
 
+  if (!permission_prompt_delegate_.value()) {
+    return;
+  }
+
   // Prevent the chip from being collapsed if the permission prompt bubble is
   // opened.
   ResetTimers();
 
-  prompt_bubble_tracker_.SetView(permission_chip_delegate_->CreateBubble());
-  permission_chip_delegate_->ShowBubble();
+  if (prompt_style_ == PermissionPromptStyle::kChip) {
+    raw_ptr<PermissionPromptBubbleView> prompt_bubble =
+        new PermissionPromptBubbleView(
+            browser_, permission_prompt_delegate_.value()->GetWeakPtr(),
+            chip_shown_time_, PermissionPromptStyle::kChip);
+    prompt_bubble_tracker_.SetView(prompt_bubble);
+    prompt_bubble->Show();
+  } else if (prompt_style_ == PermissionPromptStyle::kQuietChip) {
+    BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_);
+
+    LocationBarView* lbv =
+        browser_view ? browser_view->GetLocationBarView() : nullptr;
+    BrowserView::GetBrowserViewForBrowser(browser_)->GetLocationBarView();
+    content::WebContents* web_contents = lbv->GetContentSettingWebContents();
+
+    if (web_contents) {
+      std::unique_ptr<ContentSettingQuietRequestBubbleModel>
+          content_setting_bubble_model =
+              std::make_unique<ContentSettingQuietRequestBubbleModel>(
+                  lbv->GetContentSettingBubbleModelDelegate(), web_contents);
+      raw_ptr<ContentSettingBubbleContents> quiet_request_bubble =
+          new ContentSettingBubbleContents(
+              std::move(content_setting_bubble_model), web_contents, lbv,
+              views::BubbleBorder::TOP_LEFT);
+      views::Widget* bubble_widget =
+          views::BubbleDialogDelegateView::CreateBubble(quiet_request_bubble);
+
+      quiet_request_bubble->set_close_on_deactivate(false);
+      prompt_bubble_tracker_.SetView(quiet_request_bubble);
+      bubble_widget->Show();
+    }
+  }
 
   // It is possible that a Chip get finalized while the permission prompt bubble
   // was displayed.
@@ -87,10 +194,10 @@
 }
 
 void PermissionChip::Reshow() {
-  if (GetVisible() || !IsInitialized())
+  if (GetVisible() && !permission_prompt_delegate_.has_value())
     return;
   SetVisible(true);
-  Show(/*always_open_bubble=*/false);
+  Show();
 }
 
 void PermissionChip::Collapse(bool allow_restart) {
@@ -104,7 +211,10 @@
 }
 
 void PermissionChip::AnnounceChip() {
-  if (!should_start_open_) {
+  if (!permission_prompt_delegate_.value()) {
+    return;
+  }
+  if (!should_bubble_start_open_) {
 #if BUILDFLAG(IS_MAC)
     GetViewAccessibility().OverrideName(l10n_util::GetStringUTF16(
         IDS_PERMISSIONS_REQUESTED_SCREENREADER_ANNOUNCEMENT));
@@ -128,7 +238,7 @@
 }
 
 void PermissionChip::ShowBlockedIcon() {
-  chip_button_->SetShowBlockedIcon(true);
+  chip_button_->SetChipIcon(*blocked_icon_);
 }
 
 void PermissionChip::VisibilityChanged(views::View* /*starting_from*/,
@@ -182,59 +292,84 @@
              : nullptr;
 }
 
-void PermissionChip::SetupChip(
-    std::unique_ptr<PermissionChipDelegate> permission_chip_delegate) {
-  DCHECK(permission_chip_delegate.get());
-  DCHECK(!permission_chip_delegate_.get());
-
-  permission_chip_delegate_ = std::move(permission_chip_delegate);
-
-  permission_prompt_delegate_ =
-      permission_chip_delegate_->GetPermissionPromptDelegate();
-
-  should_start_open_ = permission_chip_delegate_->ShouldStartOpen();
-  should_expand_ = permission_chip_delegate_->ShouldExpand();
-
-  chip_button_->SetTheme(permission_chip_delegate_->GetTheme());
-  chip_button_->SetText(permission_chip_delegate_->GetMessage());
-  chip_button_->SetPermissionChipDelegate(permission_chip_delegate_.get());
+void PermissionChip::SetupChip(const std::u16string& text,
+                               OmniboxChipTheme visibility,
+                               const gfx::VectorIcon& icon) {
+  chip_shown_time_ = base::TimeTicks::Now();
+  chip_button_->SetText(text);
+  chip_button_->SetTheme(visibility);
+  chip_button_->SetChipIcon(icon);
   chip_button_->SetButtonController(std::make_unique<BubbleButtonController>(
       chip_button_, this,
       std::make_unique<views::Button::DefaultButtonControllerDelegate>(
           chip_button_)));
   chip_button_->SetExpandAnimationEndedCallback(base::BindRepeating(
       &PermissionChip::ExpandAnimationEnded, weak_factory_.GetWeakPtr()));
+}
 
+void PermissionChip::ShowQuietChip(
+    Browser* browser,
+    permissions::PermissionPrompt::Delegate* permission_prompt_delegate) {
+  DCHECK(permission_prompt_delegate);
+
+  permission_prompt_delegate_ = permission_prompt_delegate;
+  browser_ = browser;
+  prompt_style_ = PermissionPromptStyle::kQuietChip;
+  blocked_icon_ = &GetBlockedPermissionIconId(*permission_prompt_delegate_);
+  should_bubble_start_open_ = false;
+  should_expand_ = ShouldPermissionBubbleExpand(
+      permission_prompt_delegate_.value(), prompt_style_);
+
+  SetupChip(GetQuietPermissionMessage(*permission_prompt_delegate_),
+            OmniboxChipTheme::kLowVisibility, *blocked_icon_);
   SetVisible(true);
-  Show(should_start_open_);
+  Show();
+  AnnounceChip();
+}
 
+void PermissionChip::ShowLoudChip(
+    Browser* browser,
+    permissions::PermissionPrompt::Delegate* permission_prompt_delegate) {
+  DCHECK(permission_prompt_delegate);
+
+  permission_prompt_delegate_ = permission_prompt_delegate;
+  browser_ = browser;
+  prompt_style_ = PermissionPromptStyle::kChip;
+  should_bubble_start_open_ =
+      permissions::PermissionUtil::ShouldPermissionBubbleStartOpen(
+          permission_prompt_delegate_.value());
+  blocked_icon_ = &GetBlockedPermissionIconId(*permission_prompt_delegate_);
+  should_expand_ = true;
+  SetupChip(GetPermissionMessage(*permission_prompt_delegate_),
+            OmniboxChipTheme::kNormalVisibility,
+            GetPermissionIconId(*permission_prompt_delegate_));
+  SetVisible(true);
+  Show();
   AnnounceChip();
 }
 
 void PermissionChip::Finalize() {
   Hide();
 
-  if (!IsInitialized()) {
-    return;
+  permissions::PermissionPrompt::Delegate* delegate = nullptr;
+  if (permission_prompt_delegate_.has_value()) {
+    delegate = permission_prompt_delegate_.value();
+    permission_prompt_delegate_.reset();
   }
 
-  permissions::PermissionPrompt::Delegate* delegate =
-      permission_prompt_delegate_.value();
-  permission_prompt_delegate_.reset();
-
   chip_button_->Finalize();
 
   GetViewAccessibility().AnnounceText(l10n_util::GetStringUTF16(
       IDS_PERMISSIONS_EXPIRED_SCREENREADER_ANNOUNCEMENT));
 
-  if (should_dismiss_) {
-    delegate->Dismiss();
-  } else {
-    delegate->Ignore();
+  if (delegate) {
+    if (should_dismiss_) {
+      delegate->Dismiss();
+    } else {
+      delegate->Ignore();
+    }
   }
 
-  permission_chip_delegate_.reset();
-
   views::Widget* const bubble_widget = GetPromptBubbleWidget();
   if (bubble_widget) {
     bubble_widget->RemoveObserver(this);
@@ -246,21 +381,17 @@
   ResetTimers();
 }
 
-bool PermissionChip::IsInitialized() {
-  return permission_prompt_delegate_.has_value() &&
-         permission_chip_delegate_.get();
-}
-
 bool PermissionChip::IsActive() {
-  return GetVisible() && IsInitialized();
+  return GetVisible() && permission_prompt_delegate_.value();
 }
 
-void PermissionChip::Show(bool always_open_bubble) {
+void PermissionChip::Show() {
   // TODO(olesiamarukhno): Add tests for animation logic.
   chip_button_->ResetAnimation();
-  if (should_expand_ && (!permission_prompt_delegate_.value()
-                              ->WasCurrentRequestAlreadyDisplayed() ||
-                         always_open_bubble)) {
+  if (should_expand_ && (should_bubble_start_open_ ||
+                         (permission_prompt_delegate_.value() &&
+                          !permission_prompt_delegate_.value()
+                               ->WasCurrentRequestAlreadyDisplayed()))) {
     chip_button_->AnimateExpand();
   } else {
     StartDismissTimer();
@@ -269,10 +400,11 @@
 }
 
 void PermissionChip::ExpandAnimationEnded() {
-  if (IsBubbleShowing() || !GetVisible() || !IsInitialized())
+  if (IsBubbleShowing() || !GetVisible() ||
+      !permission_prompt_delegate_.value())
     return;
 
-  if (should_start_open_) {
+  if (should_bubble_start_open_) {
     OpenBubble();
   } else {
     StartCollapseTimer();
@@ -280,6 +412,15 @@
 }
 
 void PermissionChip::ChipButtonPressed() {
+  if (!IsBubbleShowing() || should_bubble_start_open_) {
+    // Only record if its the first interaction.
+    if (prompt_style_ == PermissionPromptStyle::kChip) {
+      RecordChipButtonPressed("Permissions.Chip.TimeToInteraction");
+    } else if (prompt_style_ == PermissionPromptStyle::kQuietChip) {
+      RecordChipButtonPressed("Permissions.QuietChip.TimeToInteraction");
+    }
+  }
+
   if (IsBubbleShowing()) {
     // A mouse click on chip while a permission prompt is open should dismiss
     // the prompt and collapse the chip
@@ -314,5 +455,10 @@
   }
 }
 
+void PermissionChip::RecordChipButtonPressed(const char* recordKey) {
+  base::UmaHistogramMediumTimes(recordKey,
+                                base::TimeTicks::Now() - chip_shown_time_);
+}
+
 BEGIN_METADATA(PermissionChip, views::View)
 END_METADATA
diff --git a/chrome/browser/ui/views/permissions/permission_chip.h b/chrome/browser/ui/views/permissions/permission_chip.h
index d17253e7..9817020 100644
--- a/chrome/browser/ui/views/permissions/permission_chip.h
+++ b/chrome/browser/ui/views/permissions/permission_chip.h
@@ -8,9 +8,10 @@
 #include "base/memory/raw_ptr.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ui/views/location_bar/omnibox_chip_button.h"
-#include "chrome/browser/ui/views/permissions/permission_chip_delegate.h"
+#include "chrome/browser/ui/views/permissions/permission_prompt_style.h"
 #include "components/permissions/permission_prompt.h"
 #include "components/permissions/permission_request.h"
+#include "permission_prompt_bubble_view.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/accessible_pane_view.h"
 #include "ui/views/view_tracker.h"
@@ -55,11 +56,15 @@
   bool IsAnimating() const override;
   void RestartTimersOnMouseHover() override;
 
-  void SetupChip(
-      std::unique_ptr<PermissionChipDelegate> permission_chip_delegate);
+  void ShowQuietChip(
+      Browser* browser,
+      permissions::PermissionPrompt::Delegate* permission_prompt_delegate);
+
+  void ShowLoudChip(
+      Browser* browser,
+      permissions::PermissionPrompt::Delegate* permission_prompt_delegate);
 
   void Finalize();
-  bool IsInitialized();
   // The chip is fully initialized and visible.
   bool IsActive();
 
@@ -69,7 +74,7 @@
     return prompt_bubble_tracker_.view();
   }
 
-  bool should_start_open_for_testing() { return should_start_open_; }
+  bool should_start_open_for_testing() { return should_bubble_start_open_; }
   bool should_expand_for_testing() { return should_expand_; }
   OmniboxChipButton* get_chip_button_for_testing() { return chip_button_; }
 
@@ -96,12 +101,15 @@
   void ShowBlockedIcon();
 
  private:
-  void Show(bool always_open_bubble);
+  void Show();
   void ExpandAnimationEnded();
   void ChipButtonPressed();
   void StartCollapseTimer();
   void StartDismissTimer();
   void Collapse(bool allow_restart);
+  void SetupChip(const std::u16string& text,
+                 OmniboxChipTheme visibility,
+                 const gfx::VectorIcon& icon);
 
   void ResetTimers() {
     collapse_timer_.AbandonAndStop();
@@ -111,10 +119,17 @@
   void AnnounceChip();
   void OnPromptBubbleDismissed();
 
+  void RecordChipButtonPressed(const char* recordKey);
+
   absl::optional<permissions::PermissionPrompt::Delegate*>
       permission_prompt_delegate_;
 
-  std::unique_ptr<PermissionChipDelegate> permission_chip_delegate_;
+  PermissionPromptStyle prompt_style_;
+
+  // The time when the chip was displayed.
+  base::TimeTicks chip_shown_time_;
+
+  Browser* browser_;
 
   // ViewTracker used to track the prompt bubble.
   views::ViewTracker prompt_bubble_tracker_;
@@ -129,10 +144,14 @@
   // The button that displays the icon and text.
   raw_ptr<OmniboxChipButton> chip_button_ = nullptr;
 
-  bool should_start_open_ = false;
-  bool should_expand_ = true;
   bool should_dismiss_ = false;
 
+  raw_ptr<const gfx::VectorIcon> blocked_icon_;
+
+  bool should_bubble_start_open_ = false;
+
+  bool should_expand_ = true;
+
   base::WeakPtrFactory<PermissionChip> weak_factory_{this};
 };
 
diff --git a/chrome/browser/ui/views/permissions/permission_chip_delegate.h b/chrome/browser/ui/views/permissions/permission_chip_delegate.h
deleted file mode 100644
index 5e4e881..0000000
--- a/chrome/browser/ui/views/permissions/permission_chip_delegate.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_VIEWS_PERMISSIONS_PERMISSION_CHIP_DELEGATE_H_
-#define CHROME_BROWSER_UI_VIEWS_PERMISSIONS_PERMISSION_CHIP_DELEGATE_H_
-
-#include <string>
-#include "components/permissions/permission_prompt.h"
-
-namespace views {
-class View;
-}
-
-namespace gfx {
-struct VectorIcon;
-}
-
-enum class OmniboxChipTheme;
-
-// The delegate interface provides data for a visual representation of the
-// permission prompt in the form of a quiet or normal permission chip.
-class PermissionChipDelegate {
- public:
-  virtual ~PermissionChipDelegate() = default;
-  // Returns a newly-created permission prompt bubble.
-  [[nodiscard]] virtual views::View* CreateBubble() = 0;
-
-  // Show previously created prompt bubble.
-  virtual void ShowBubble() = 0;
-
-  virtual const gfx::VectorIcon& GetIconOn() = 0;
-  virtual const gfx::VectorIcon& GetIconOff() = 0;
-  virtual std::u16string GetMessage() = 0;
-  virtual bool ShouldStartOpen() = 0;
-  virtual bool ShouldExpand() = 0;
-  virtual OmniboxChipTheme GetTheme() = 0;
-  virtual permissions::PermissionPrompt::Delegate*
-  GetPermissionPromptDelegate() = 0;
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_PERMISSIONS_PERMISSION_CHIP_DELEGATE_H_
diff --git a/chrome/browser/ui/views/permissions/permission_chip_interactive_test.cc b/chrome/browser/ui/views/permissions/permission_chip_interactive_test.cc
index e071df2..c6474257 100644
--- a/chrome/browser/ui/views/permissions/permission_chip_interactive_test.cc
+++ b/chrome/browser/ui/views/permissions/permission_chip_interactive_test.cc
@@ -15,7 +15,6 @@
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/location_bar/omnibox_chip_theme.h"
 #include "chrome/browser/ui/views/permissions/permission_chip.h"
-#include "chrome/browser/ui/views/permissions/permission_request_chip.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -24,6 +23,7 @@
 #include "components/metrics/content/subprocess_metrics_provider.h"
 #include "components/permissions/features.h"
 #include "components/permissions/permission_ui_selector.h"
+#include "components/permissions/permission_util.h"
 #include "components/permissions/request_type.h"
 #include "components/permissions/test/mock_permission_request.h"
 #include "content/public/browser/render_frame_host.h"
diff --git a/chrome/browser/ui/views/permissions/permission_chip_unittest.cc b/chrome/browser/ui/views/permissions/permission_chip_unittest.cc
index 425e36d..fc53c58 100644
--- a/chrome/browser/ui/views/permissions/permission_chip_unittest.cc
+++ b/chrome/browser/ui/views/permissions/permission_chip_unittest.cc
@@ -1,13 +1,13 @@
 // Copyright 2021 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
-
 #include "chrome/browser/ui/views/permissions/permission_chip.h"
 #include "base/memory/raw_ptr.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/frame/test_with_browser_view.h"
-#include "chrome/browser/ui/views/permissions/permission_quiet_chip.h"
-#include "chrome/browser/ui/views/permissions/permission_request_chip.h"
+#include "components/permissions/features.h"
+#include "components/permissions/permission_request_enums.h"
+#include "components/permissions/permission_ui_selector.h"
 #include "components/permissions/test/mock_permission_request.h"
 #include "ui/events/base_event_utils.h"
 #include "ui/views/test/ax_event_counter.h"
@@ -19,12 +19,25 @@
  public:
   explicit TestDelegate(
       const GURL& origin,
-      const std::vector<permissions::RequestType> request_types) {
+      const std::vector<permissions::RequestType> request_types,
+      bool with_gesture)
+      : TestDelegate(origin, request_types, with_gesture, absl::nullopt) {}
+
+  explicit TestDelegate(
+      const GURL& origin,
+      const std::vector<permissions::RequestType> request_types,
+      bool with_gesture,
+      absl::optional<permissions::PermissionUiSelector::QuietUiReason>
+          quiet_ui_reason)
+      : quiet_ui_reason_(quiet_ui_reason) {
     std::transform(
         request_types.begin(), request_types.end(),
         std::back_inserter(requests_), [&](auto& request_type) {
           return std::make_unique<permissions::MockPermissionRequest>(
-              origin, request_type);
+              origin, request_type,
+              with_gesture
+                  ? permissions::PermissionRequestGestureType::GESTURE
+                  : permissions::PermissionRequestGestureType::NO_GESTURE);
         });
     std::transform(requests_.begin(), requests_.end(),
                    std::back_inserter(raw_requests_),
@@ -61,7 +74,7 @@
   bool ShouldCurrentRequestUseQuietUI() const override { return false; }
   absl::optional<permissions::PermissionUiSelector::QuietUiReason>
   ReasonForUsingQuietUi() const override {
-    return absl::nullopt;
+    return quiet_ui_reason_;
   }
   void SetDismissOnTabClose() override {}
   void SetBubbleShown() override {}
@@ -79,6 +92,8 @@
   std::vector<std::unique_ptr<permissions::PermissionRequest>> requests_;
   std::vector<permissions::PermissionRequest*> raw_requests_;
   bool was_current_request_already_displayed_ = false;
+  absl::optional<permissions::PermissionUiSelector::QuietUiReason>
+      quiet_ui_reason_;
   base::WeakPtrFactory<TestDelegate> weak_factory_{this};
 };
 }  // namespace
@@ -87,7 +102,10 @@
  public:
   PermissionChipUnitTest()
       : TestWithBrowserView(
-            base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
+            base::test::TaskEnvironment::TimeSource::MOCK_TIME) {
+    feature_list_.InitAndEnableFeature(
+        permissions::features::kPermissionChipGestureSensitive);
+  }
 
   PermissionChipUnitTest(const PermissionChipUnitTest&) = delete;
   PermissionChipUnitTest& operator=(const PermissionChipUnitTest&) = delete;
@@ -107,6 +125,7 @@
     base::RunLoop().RunUntilIdle();
   }
 
+  base::test::ScopedFeatureList feature_list_;
   raw_ptr<content::WebContents> web_contents_;
 
   base::TimeDelta kChipCollapseDuration = base::Seconds(12);
@@ -117,10 +136,9 @@
 
 TEST_F(PermissionChipUnitTest, DisplayChipNoAutoPopupTest) {
   TestDelegate delegate(GURL("https://test.origin"),
-                        {permissions::RequestType::kNotifications});
+                        {permissions::RequestType::kNotifications}, false);
   PermissionChip chip;
-  chip.SetupChip(
-      std::make_unique<PermissionRequestChip>(browser(), &delegate, false));
+  chip.ShowLoudChip(browser(), &delegate);
 
   EXPECT_FALSE(chip.IsBubbleShowing());
 
@@ -165,14 +183,13 @@
 
 TEST_F(PermissionChipUnitTest, AlreadyDisplayedRequestTest) {
   TestDelegate delegate(GURL("https://test.origin"),
-                        {permissions::RequestType::kNotifications});
+                        {permissions::RequestType::kNotifications}, false);
   delegate.SetAlreadyDisplayed();
 
   EXPECT_TRUE(delegate.WasCurrentRequestAlreadyDisplayed());
 
   PermissionChip chip;
-  chip.SetupChip(
-      std::make_unique<PermissionRequestChip>(browser(), &delegate, false));
+  chip.ShowLoudChip(browser(), &delegate);
 
   EXPECT_FALSE(chip.IsBubbleShowing());
 
@@ -196,10 +213,9 @@
 
 TEST_F(PermissionChipUnitTest, MultiClickOnChipNoAutoPopupTest) {
   TestDelegate delegate(GURL("https://test.origin"),
-                        {permissions::RequestType::kNotifications});
+                        {permissions::RequestType::kNotifications}, false);
   PermissionChip chip;
-  chip.SetupChip(
-      std::make_unique<PermissionRequestChip>(browser(), &delegate, false));
+  chip.ShowLoudChip(browser(), &delegate);
 
   EXPECT_FALSE(chip.IsBubbleShowing());
 
@@ -284,10 +300,9 @@
 
 TEST_F(PermissionChipUnitTest, DisplayChipAutoPopupTest) {
   TestDelegate delegate(GURL("https://test.origin"),
-                        {permissions::RequestType::kNotifications});
+                        {permissions::RequestType::kNotifications}, true);
   PermissionChip chip;
-  chip.SetupChip(
-      std::make_unique<PermissionRequestChip>(browser(), &delegate, true));
+  chip.ShowLoudChip(browser(), &delegate);
 
   // Due to animation issue, the collapse timer will not be started.
   EXPECT_FALSE(chip.is_collapse_timer_running_for_testing());
@@ -328,10 +343,9 @@
 
 TEST_F(PermissionChipUnitTest, MultiClickOnChipAutoPopupTest) {
   TestDelegate delegate(GURL("https://test.origin"),
-                        {permissions::RequestType::kNotifications});
+                        {permissions::RequestType::kNotifications}, true);
   PermissionChip chip;
-  chip.SetupChip(
-      std::make_unique<PermissionRequestChip>(browser(), &delegate, true));
+  chip.ShowLoudChip(browser(), &delegate);
 
   EXPECT_FALSE(chip.IsBubbleShowing());
 
@@ -403,11 +417,11 @@
 }
 
 TEST_F(PermissionChipUnitTest, DisplayQuietChipNoAbusiveTest) {
-  TestDelegate delegate(GURL("https://test.origin"),
-                        {permissions::RequestType::kNotifications});
+  TestDelegate delegate(
+      GURL("https://test.origin"), {permissions::RequestType::kNotifications},
+      true, permissions::PermissionUiSelector::QuietUiReason::kEnabledInPrefs);
   PermissionChip chip;
-  chip.SetupChip(
-      std::make_unique<PermissionQuietChip>(browser(), &delegate, true));
+  chip.ShowQuietChip(browser(), &delegate);
 
   EXPECT_FALSE(chip.IsBubbleShowing());
 
@@ -447,11 +461,11 @@
 }
 
 TEST_F(PermissionChipUnitTest, MultiClickOnQuietChipNoAbusiveTest) {
-  TestDelegate delegate(GURL("https://test.origin"),
-                        {permissions::RequestType::kNotifications});
+  TestDelegate delegate(
+      GURL("https://test.origin"), {permissions::RequestType::kNotifications},
+      true, permissions::PermissionUiSelector::QuietUiReason::kEnabledInPrefs);
   PermissionChip chip;
-  chip.SetupChip(
-      std::make_unique<PermissionQuietChip>(browser(), &delegate, true));
+  chip.ShowQuietChip(browser(), &delegate);
 
   EXPECT_FALSE(chip.IsBubbleShowing());
 
@@ -483,7 +497,8 @@
   EXPECT_FALSE(chip.is_collapse_timer_running_for_testing());
   EXPECT_FALSE(chip.is_dismiss_timer_running_for_testing());
 
-  // After 30 seconds the permissin prompt popup bubble should still be visible.
+  // After 30 seconds the permissin prompt popup bubble should still be
+  // visible.
   task_environment()->AdvanceClock(kLongerThanAllTimersDuration);
   base::RunLoop().RunUntilIdle();
   ASSERT_TRUE(delegate.IsRequestInProgress());
@@ -538,10 +553,12 @@
 
 TEST_F(PermissionChipUnitTest, DisplayQuietChipAbusiveTest) {
   TestDelegate delegate(GURL("https://test.origin"),
-                        {permissions::RequestType::kNotifications});
+                        {permissions::RequestType::kNotifications}, true,
+                        permissions::PermissionUiSelector::QuietUiReason::
+                            kTriggeredDueToAbusiveRequests);
+
   PermissionChip chip;
-  chip.SetupChip(
-      std::make_unique<PermissionQuietChip>(browser(), &delegate, false));
+  chip.ShowQuietChip(browser(), &delegate);
 
   EXPECT_FALSE(chip.IsBubbleShowing());
 
@@ -569,10 +586,11 @@
 
 TEST_F(PermissionChipUnitTest, MultiClickOnQuietChipAbusiveTest) {
   TestDelegate delegate(GURL("https://test.origin"),
-                        {permissions::RequestType::kNotifications});
+                        {permissions::RequestType::kNotifications}, true,
+                        permissions::PermissionUiSelector::QuietUiReason::
+                            kTriggeredDueToAbusiveRequests);
   PermissionChip chip;
-  chip.SetupChip(
-      std::make_unique<PermissionQuietChip>(browser(), &delegate, false));
+  chip.ShowQuietChip(browser(), &delegate);
 
   EXPECT_FALSE(chip.IsBubbleShowing());
 
diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_view.cc b/chrome/browser/ui/views/permissions/permission_prompt_bubble_view.cc
index da5b906..39d86f8 100644
--- a/chrome/browser/ui/views/permissions/permission_prompt_bubble_view.cc
+++ b/chrome/browser/ui/views/permissions/permission_prompt_bubble_view.cc
@@ -23,6 +23,7 @@
 #include "components/permissions/features.h"
 #include "components/permissions/permission_request.h"
 #include "components/permissions/permission_uma_util.h"
+#include "components/permissions/permission_util.h"
 #include "components/permissions/request_type.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/url_formatter/elide_url.h"
diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_view.h b/chrome/browser/ui/views/permissions/permission_prompt_bubble_view.h
index 6b4c3a28..8ae4ff7 100644
--- a/chrome/browser/ui/views/permissions/permission_prompt_bubble_view.h
+++ b/chrome/browser/ui/views/permissions/permission_prompt_bubble_view.h
@@ -11,11 +11,13 @@
 #include "base/time/time.h"
 #include "chrome/browser/ui/views/permissions/permission_prompt_style.h"
 #include "components/permissions/permission_prompt.h"
+#include "components/permissions/permission_util.h"
 #include "ui/base/metadata/metadata_header_macros.h"
 #include "ui/views/bubble/bubble_dialog_delegate_view.h"
 
 namespace permissions {
 enum class PermissionAction;
+enum class RequestType;
 }  // namespace permissions
 
 class Browser;
diff --git a/chrome/browser/ui/views/permissions/permission_prompt_bubble_view_browsertest.cc b/chrome/browser/ui/views/permissions/permission_prompt_bubble_view_browsertest.cc
index c3602bc..9ae59a1 100644
--- a/chrome/browser/ui/views/permissions/permission_prompt_bubble_view_browsertest.cc
+++ b/chrome/browser/ui/views/permissions/permission_prompt_bubble_view_browsertest.cc
@@ -23,7 +23,6 @@
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/permissions/permission_chip.h"
 #include "chrome/browser/ui/views/permissions/permission_prompt_bubble_view.h"
-#include "chrome/browser/ui/views/permissions/permission_request_chip.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/pref_names.h"
@@ -35,6 +34,7 @@
 #include "components/permissions/features.h"
 #include "components/permissions/permission_request.h"
 #include "components/permissions/permission_ui_selector.h"
+#include "components/permissions/permission_util.h"
 #include "components/permissions/request_type.h"
 #include "components/permissions/test/mock_permission_request.h"
 #include "content/public/browser/render_frame_host.h"
@@ -260,8 +260,8 @@
   }
 }
 
-// Test switching between PermissionChip and PermissionPromptBubbleView and make
-// sure no crashes.
+// Test switching between PermissionChip and PermissionPromptBubbleView and
+// make sure no crashes.
 IN_PROC_BROWSER_TEST_P(PermissionPromptBubbleViewBrowserTest,
                        SwitchBetweenChipAndBubble) {
   BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser());
diff --git a/chrome/browser/ui/views/permissions/permission_prompt_chip.cc b/chrome/browser/ui/views/permissions/permission_prompt_chip.cc
index 115ad14..a8f000a 100644
--- a/chrome/browser/ui/views/permissions/permission_prompt_chip.cc
+++ b/chrome/browser/ui/views/permissions/permission_prompt_chip.cc
@@ -7,57 +7,18 @@
 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
 #include "chrome/browser/ui/views/permissions/permission_chip.h"
 #include "components/permissions/features.h"
+#include "components/permissions/permission_util.h"
 #include "content/public/browser/web_contents.h"
 
-namespace {
-
-bool ShouldBubbleStartOpen(PermissionPromptChip::Delegate* delegate) {
-  if (base::FeatureList::IsEnabled(
-          permissions::features::kPermissionChipGestureSensitive)) {
-    std::vector<permissions::PermissionRequest*> requests =
-        delegate->Requests();
-    const bool has_gesture =
-        std::any_of(requests.begin(), requests.end(),
-                    [](permissions::PermissionRequest* request) {
-                      return request->GetGestureType() ==
-                             permissions::PermissionRequestGestureType::GESTURE;
-                    });
-    if (has_gesture)
-      return true;
-  }
-  if (base::FeatureList::IsEnabled(
-          permissions::features::kPermissionChipRequestTypeSensitive)) {
-    // Notifications and geolocation are targeted here because they are usually
-    // not necessary for the website to function correctly, so they can safely
-    // be given less prominence.
-    std::vector<permissions::PermissionRequest*> requests =
-        delegate->Requests();
-    const bool is_geolocation_or_notifications = std::any_of(
-        requests.begin(), requests.end(),
-        [](permissions::PermissionRequest* request) {
-          permissions::RequestType request_type = request->request_type();
-          return request_type == permissions::RequestType::kNotifications ||
-                 request_type == permissions::RequestType::kGeolocation;
-        });
-    if (!is_geolocation_or_notifications)
-      return true;
-  }
-  return false;
-}
-
-}  // namespace
-
 PermissionPromptChip::PermissionPromptChip(Browser* browser,
                                            content::WebContents* web_contents,
                                            Delegate* delegate)
     : PermissionPromptDesktop(browser, web_contents, delegate) {
   LocationBarView* lbv = GetLocationBarView();
   if (delegate->ShouldCurrentRequestUseQuietUI()) {
-    lbv->DisplayQuietChip(
-        delegate, !permissions::PermissionUiSelector::ShouldSuppressAnimation(
-                      delegate->ReasonForUsingQuietUi()));
+    lbv->chip()->ShowQuietChip(browser, delegate);
   } else {
-    lbv->DisplayChip(delegate, ShouldBubbleStartOpen(delegate));
+    lbv->chip()->ShowLoudChip(browser, delegate);
   }
 }
 
@@ -90,7 +51,8 @@
                      LOCATION_BAR_LEFT_QUIET_CHIP;
   }
 
-  return ShouldBubbleStartOpen(delegate())
+  return permissions::PermissionUtil::ShouldPermissionBubbleStartOpen(
+             delegate())
              ? permissions::PermissionPromptDisposition::
                    LOCATION_BAR_LEFT_CHIP_AUTO_BUBBLE
              : permissions::PermissionPromptDisposition::LOCATION_BAR_LEFT_CHIP;
diff --git a/chrome/browser/ui/views/permissions/permission_quiet_chip.cc b/chrome/browser/ui/views/permissions/permission_quiet_chip.cc
deleted file mode 100644
index be171de..0000000
--- a/chrome/browser/ui/views/permissions/permission_quiet_chip.cc
+++ /dev/null
@@ -1,125 +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 "chrome/browser/ui/views/permissions/permission_quiet_chip.h"
-
-#include "base/location.h"
-#include "base/metrics/histogram_functions.h"
-#include "base/time/time.h"
-#include "chrome/browser/ui/content_settings/content_setting_bubble_model.h"
-#include "chrome/browser/ui/views/content_setting_bubble_contents.h"
-#include "chrome/browser/ui/views/frame/browser_view.h"
-#include "chrome/browser/ui/views/location_bar/location_bar_view.h"
-#include "chrome/browser/ui/views/location_bar/omnibox_chip_theme.h"
-#include "chrome/browser/ui/views/permissions/permission_prompt_bubble_view.h"
-#include "chrome/browser/ui/views/permissions/permission_prompt_style.h"
-#include "components/permissions/permission_request.h"
-#include "components/vector_icons/vector_icons.h"
-#include "ui/events/event.h"
-#include "ui/gfx/paint_vector_icon.h"
-#include "ui/views/accessibility/view_accessibility.h"
-#include "ui/views/bubble/bubble_dialog_delegate_view.h"
-#include "ui/views/controls/button/button_controller.h"
-#include "ui/views/layout/fill_layout.h"
-#include "ui/views/widget/widget.h"
-
-namespace {
-
-const gfx::VectorIcon& GetBlockedPermissionIconId(
-    permissions::PermissionPrompt::Delegate* delegate) {
-  DCHECK(delegate);
-
-  return delegate->Requests()[0]->GetBlockedIconForChip();
-}
-
-std::u16string GetPermissionMessage(
-    permissions::PermissionPrompt::Delegate* delegate) {
-  DCHECK(delegate);
-  DCHECK(delegate->Requests()[0]->GetQuietChipText().has_value());
-
-  return delegate->Requests()[0]->GetQuietChipText().value();
-}
-
-}  // namespace
-
-PermissionQuietChip::PermissionQuietChip(
-    Browser* browser,
-    permissions::PermissionPrompt::Delegate* delegate,
-    bool should_expand)
-    : browser_(browser), delegate_(delegate), should_expand_(should_expand) {
-  DCHECK_EQ(1u, delegate->Requests().size());
-  chip_shown_time_ = base::TimeTicks::Now();
-}
-
-PermissionQuietChip::~PermissionQuietChip() = default;
-
-views::View* PermissionQuietChip::CreateBubble() {
-  RecordChipButtonPressed();
-
-  LocationBarView* lbv = GetLocationBarView();
-  content::WebContents* web_contents = lbv->GetContentSettingWebContents();
-
-  if (web_contents) {
-    std::unique_ptr<ContentSettingQuietRequestBubbleModel>
-        content_setting_bubble_model =
-            std::make_unique<ContentSettingQuietRequestBubbleModel>(
-                lbv->GetContentSettingBubbleModelDelegate(), web_contents);
-    ContentSettingBubbleContents* quiet_request_bubble =
-        new ContentSettingBubbleContents(
-            std::move(content_setting_bubble_model), web_contents, lbv,
-            views::BubbleBorder::TOP_LEFT);
-    bubble_widget_ =
-        views::BubbleDialogDelegateView::CreateBubble(quiet_request_bubble);
-
-    quiet_request_bubble->set_close_on_deactivate(false);
-
-    return quiet_request_bubble;
-  }
-
-  return nullptr;
-}
-
-void PermissionQuietChip::ShowBubble() {
-  if (bubble_widget_) {
-    bubble_widget_->Show();
-  }
-}
-
-const gfx::VectorIcon& PermissionQuietChip::GetIconOn() {
-  return GetBlockedPermissionIconId(delegate_);
-}
-
-const gfx::VectorIcon& PermissionQuietChip::GetIconOff() {
-  return GetBlockedPermissionIconId(delegate_);
-}
-
-std::u16string PermissionQuietChip::GetMessage() {
-  return GetPermissionMessage(delegate_);
-}
-
-bool PermissionQuietChip::ShouldStartOpen() {
-  return should_bubble_start_open_;
-}
-
-bool PermissionQuietChip::ShouldExpand() {
-  return should_expand_;
-}
-
-OmniboxChipTheme PermissionQuietChip::GetTheme() {
-  return OmniboxChipTheme::kLowVisibility;
-}
-
-permissions::PermissionPrompt::Delegate*
-PermissionQuietChip::GetPermissionPromptDelegate() {
-  return delegate_;
-}
-
-void PermissionQuietChip::RecordChipButtonPressed() {
-  base::UmaHistogramMediumTimes("Permissions.QuietChip.TimeToInteraction",
-                                base::TimeTicks::Now() - chip_shown_time_);
-}
-
-LocationBarView* PermissionQuietChip::GetLocationBarView() {
-  return BrowserView::GetBrowserViewForBrowser(browser_)->GetLocationBarView();
-}
diff --git a/chrome/browser/ui/views/permissions/permission_quiet_chip.h b/chrome/browser/ui/views/permissions/permission_quiet_chip.h
deleted file mode 100644
index 6727a51b..0000000
--- a/chrome/browser/ui/views/permissions/permission_quiet_chip.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_VIEWS_PERMISSIONS_PERMISSION_QUIET_CHIP_H_
-#define CHROME_BROWSER_UI_VIEWS_PERMISSIONS_PERMISSION_QUIET_CHIP_H_
-
-#include "base/memory/raw_ptr.h"
-#include "base/time/time.h"
-#include "chrome/browser/ui/views/permissions/permission_chip_delegate.h"
-
-namespace views {
-class Widget;
-}
-
-class Browser;
-class LocationBarView;
-
-// A less prominent version of `PermissionRequestChip`. It is used to display a
-// permission request from origins with an abusive reputation, low acceptance
-// rate, or if a user manually enabled "quieter messaging" in
-// chrome://settings/content/notifications.
-class PermissionQuietChip : public PermissionChipDelegate {
- public:
-  PermissionQuietChip(Browser* browser,
-                      permissions::PermissionPrompt::Delegate* delegate,
-                      bool should_expand);
-  PermissionQuietChip(const PermissionQuietChip& chip) = delete;
-  PermissionQuietChip& operator=(const PermissionQuietChip& chip) = delete;
-  ~PermissionQuietChip() override;
-
- private:
-  // PermissionChipDelegate:
-  views::View* CreateBubble() override;
-  void ShowBubble() override;
-  const gfx::VectorIcon& GetIconOn() override;
-  const gfx::VectorIcon& GetIconOff() override;
-  std::u16string GetMessage() override;
-  bool ShouldStartOpen() override;
-  bool ShouldExpand() override;
-  OmniboxChipTheme GetTheme() override;
-  permissions::PermissionPrompt::Delegate* GetPermissionPromptDelegate()
-      override;
-
-  void RecordChipButtonPressed();
-  LocationBarView* GetLocationBarView();
-
-  raw_ptr<Browser> browser_ = nullptr;
-  raw_ptr<views::Widget> bubble_widget_ = nullptr;
-  raw_ptr<permissions::PermissionPrompt::Delegate> delegate_ = nullptr;
-
-  // The time when the chip was displayed.
-  base::TimeTicks chip_shown_time_;
-
-  bool should_bubble_start_open_ = false;
-  bool should_expand_ = false;
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_PERMISSIONS_PERMISSION_QUIET_CHIP_H_
diff --git a/chrome/browser/ui/views/permissions/permission_request_chip.cc b/chrome/browser/ui/views/permissions/permission_request_chip.cc
deleted file mode 100644
index e17d4e7..0000000
--- a/chrome/browser/ui/views/permissions/permission_request_chip.cc
+++ /dev/null
@@ -1,153 +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 "chrome/browser/ui/views/permissions/permission_request_chip.h"
-
-#include "base/location.h"
-#include "base/metrics/histogram_functions.h"
-#include "base/time/time.h"
-#include "chrome/browser/ui/views/location_bar/omnibox_chip_theme.h"
-#include "chrome/browser/ui/views/permissions/permission_prompt_bubble_view.h"
-#include "chrome/browser/ui/views/permissions/permission_prompt_style.h"
-#include "components/permissions/features.h"
-#include "components/permissions/permission_request.h"
-#include "components/strings/grit/components_strings.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/events/event.h"
-#include "ui/views/accessibility/view_accessibility.h"
-#include "ui/views/bubble/bubble_dialog_delegate_view.h"
-#include "ui/views/controls/button/button_controller.h"
-#include "ui/views/layout/fill_layout.h"
-#include "ui/views/widget/widget.h"
-
-namespace {
-
-bool IsCameraPermission(permissions::RequestType type) {
-  return type == permissions::RequestType::kCameraStream;
-}
-
-bool IsCameraOrMicPermission(permissions::RequestType type) {
-  return type == permissions::RequestType::kCameraStream ||
-         type == permissions::RequestType::kMicStream;
-}
-
-const gfx::VectorIcon& GetPermissionIconId(
-    permissions::PermissionPrompt::Delegate* delegate) {
-  DCHECK(delegate);
-  auto requests = delegate->Requests();
-  if (requests.size() == 1)
-    return requests[0]->GetIconForChip();
-
-  // When we have two requests, it must be microphone & camera. Then we need to
-  // use the icon from the camera request.
-  return IsCameraPermission(requests[0]->request_type())
-             ? requests[0]->GetIconForChip()
-             : requests[1]->GetIconForChip();
-}
-
-const gfx::VectorIcon& GetBlockedPermissionIconId(
-    permissions::PermissionPrompt::Delegate* delegate) {
-  DCHECK(delegate);
-  auto requests = delegate->Requests();
-  if (requests.size() == 1)
-    return requests[0]->GetBlockedIconForChip();
-
-  // When we have two requests, it must be microphone & camera. Then we need to
-  // use the icon from the camera request.
-  return IsCameraPermission(requests[0]->request_type())
-             ? requests[0]->GetBlockedIconForChip()
-             : requests[1]->GetBlockedIconForChip();
-}
-
-std::u16string GetPermissionMessage(
-    permissions::PermissionPrompt::Delegate* delegate) {
-  DCHECK(delegate);
-
-  auto requests = delegate->Requests();
-
-  return requests.size() == 1
-             ? requests[0]->GetRequestChipText().value()
-             : l10n_util::GetStringUTF16(
-                   IDS_MEDIA_CAPTURE_VIDEO_AND_AUDIO_PERMISSION_CHIP);
-}
-
-void VerifyCameraAndMicRequest(
-    permissions::PermissionPrompt::Delegate* delegate) {
-  DCHECK(delegate);
-
-  const std::vector<permissions::PermissionRequest*>& requests =
-      delegate->Requests();
-
-  // TODO(olesiamarukhno): Add combined camera & microphone permission and
-  // update delegate to contain only one request at a time.
-  DCHECK(requests.size() == 1u || requests.size() == 2u);
-  if (requests.size() == 2) {
-    DCHECK(IsCameraOrMicPermission(requests[0]->request_type()));
-    DCHECK(IsCameraOrMicPermission(requests[1]->request_type()));
-    DCHECK_NE(requests[0]->request_type(), requests[1]->request_type());
-  }
-}
-
-}  // namespace
-
-PermissionRequestChip::PermissionRequestChip(
-    Browser* browser,
-    permissions::PermissionPrompt::Delegate* delegate,
-    bool should_bubble_start_open)
-    : browser_(browser), delegate_(delegate) {
-  should_bubble_start_open_ = should_bubble_start_open;
-  chip_shown_time_ = base::TimeTicks::Now();
-  VerifyCameraAndMicRequest(delegate);
-}
-
-PermissionRequestChip::~PermissionRequestChip() = default;
-
-views::View* PermissionRequestChip::CreateBubble() {
-  prompt_bubble_ = new PermissionPromptBubbleView(
-      browser_, delegate_->GetWeakPtr(), chip_shown_time_,
-      PermissionPromptStyle::kChip);
-  RecordChipButtonPressed();
-
-  return prompt_bubble_;
-}
-
-void PermissionRequestChip::ShowBubble() {
-  if (prompt_bubble_) {
-    prompt_bubble_->Show();
-  }
-}
-
-const gfx::VectorIcon& PermissionRequestChip::GetIconOn() {
-  return GetPermissionIconId(delegate_);
-}
-
-const gfx::VectorIcon& PermissionRequestChip::GetIconOff() {
-  return GetBlockedPermissionIconId(delegate_);
-}
-
-std::u16string PermissionRequestChip::GetMessage() {
-  return GetPermissionMessage(delegate_);
-}
-
-bool PermissionRequestChip::ShouldStartOpen() {
-  return should_bubble_start_open_;
-}
-
-bool PermissionRequestChip::ShouldExpand() {
-  return true;
-}
-
-OmniboxChipTheme PermissionRequestChip::GetTheme() {
-  return OmniboxChipTheme::kNormalVisibility;
-}
-
-permissions::PermissionPrompt::Delegate*
-PermissionRequestChip::GetPermissionPromptDelegate() {
-  return delegate_;
-}
-
-void PermissionRequestChip::RecordChipButtonPressed() {
-  base::UmaHistogramMediumTimes("Permissions.Chip.TimeToInteraction",
-                                base::TimeTicks::Now() - chip_shown_time_);
-}
diff --git a/chrome/browser/ui/views/permissions/permission_request_chip.h b/chrome/browser/ui/views/permissions/permission_request_chip.h
deleted file mode 100644
index 42559c9..0000000
--- a/chrome/browser/ui/views/permissions/permission_request_chip.h
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2021 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_UI_VIEWS_PERMISSIONS_PERMISSION_REQUEST_CHIP_H_
-#define CHROME_BROWSER_UI_VIEWS_PERMISSIONS_PERMISSION_REQUEST_CHIP_H_
-
-#include "base/memory/raw_ptr.h"
-#include "base/time/time.h"
-#include "chrome/browser/ui/views/permissions/permission_chip_delegate.h"
-
-namespace views {
-class View;
-}
-
-class Browser;
-class PermissionPromptBubbleView;
-enum class OmniboxChipTheme;
-
-// An implementation of PermissionChipDelegate that is used in the
-// PermissionChip and provides data for a visual representation of a permission
-// prompt in the form of a normal (loud) permission chip.
-class PermissionRequestChip : public PermissionChipDelegate {
- public:
-  // If `should_bubble_start_open` is true, a permission prompt bubble will be
-  // displayed automatically after PermissionRequestChip is created.
-  // `should_bubble_start_open` is evaluated based on
-  // `PermissionChipGestureSensitive` and `PermissionChipRequestTypeSensitive`
-  // experiments.
-  PermissionRequestChip(Browser* browser,
-                        permissions::PermissionPrompt::Delegate* delegate,
-                        bool should_bubble_start_open);
-  PermissionRequestChip(const PermissionRequestChip& chip) = delete;
-  PermissionRequestChip& operator=(const PermissionRequestChip& chip) = delete;
-  ~PermissionRequestChip() override;
-
- private:
-  // PermissionChipDelegate:
-  views::View* CreateBubble() override;
-  void ShowBubble() override;
-  const gfx::VectorIcon& GetIconOn() override;
-  const gfx::VectorIcon& GetIconOff() override;
-  std::u16string GetMessage() override;
-  bool ShouldStartOpen() override;
-  bool ShouldExpand() override;
-  OmniboxChipTheme GetTheme() override;
-  permissions::PermissionPrompt::Delegate* GetPermissionPromptDelegate()
-      override;
-
-  void RecordChipButtonPressed();
-  void OnPromptBubbleDismissed();
-
-  raw_ptr<Browser> browser_ = nullptr;
-  raw_ptr<PermissionPromptBubbleView> prompt_bubble_ = nullptr;
-  raw_ptr<permissions::PermissionPrompt::Delegate> delegate_ = nullptr;
-
-  // The time when the chip was displayed.
-  base::TimeTicks chip_shown_time_;
-  bool should_bubble_start_open_ = false;
-};
-
-#endif  // CHROME_BROWSER_UI_VIEWS_PERMISSIONS_PERMISSION_REQUEST_CHIP_H_
diff --git a/chrome/browser/ui/views/permissions/permission_request_chip_browsertest.cc b/chrome/browser/ui/views/permissions/permission_request_chip_browsertest.cc
index 2b28c7d5..614e56e 100644
--- a/chrome/browser/ui/views/permissions/permission_request_chip_browsertest.cc
+++ b/chrome/browser/ui/views/permissions/permission_request_chip_browsertest.cc
@@ -15,7 +15,6 @@
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
 #include "chrome/browser/ui/views/permissions/permission_chip.h"
-#include "chrome/browser/ui/views/permissions/permission_request_chip.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "chrome/test/permissions/permission_request_manager_test_api.h"
@@ -81,7 +80,6 @@
   // After animation ended, the chip is expanded and the bubble is shown.
   EXPECT_TRUE(lbv->chip()->GetVisible());
   EXPECT_TRUE(lbv->chip()->IsBubbleShowing());
-  EXPECT_TRUE(lbv->chip()->IsInitialized());
 
   // Type something in the omnibox.
   auto* omnibox_view = lbv->GetOmniboxView();
@@ -94,7 +92,6 @@
   // location icon isn't offset by the chip and the bubble is hidden.
   EXPECT_FALSE(lbv->chip()->GetVisible());
   EXPECT_FALSE(lbv->chip()->IsBubbleShowing());
-  EXPECT_FALSE(lbv->chip()->IsInitialized());
   EXPECT_EQ(lbv->location_icon_view()->bounds().x(),
             GetLayoutConstant(LOCATION_BAR_ELEMENT_PADDING));
 }
diff --git a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.cc b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.cc
index 171dcb30..3db3b059 100644
--- a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.cc
+++ b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog.cc
@@ -14,6 +14,7 @@
 #include "chrome/grit/generated_resources.h"
 #include "components/constrained_window/constrained_window_views.h"
 #include "components/content_settings/browser/page_specific_content_settings.h"
+#include "components/content_settings/core/browser/cookie_settings.h"
 #include "components/omnibox/browser/favicon_cache.h"
 #include "content/public/browser/web_contents.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
@@ -23,12 +24,31 @@
 
 namespace {
 
+struct PageSpecificSiteDataDialogSite {
+  url::Origin origin;
+  ContentSetting setting;
+};
+
 struct PageSpecificSiteDataDialogSection {
   std::u16string title;
   std::u16string subtitle;
-  std::vector<url::Origin> origins;
+  std::vector<PageSpecificSiteDataDialogSite> sites;
 };
 
+int GetContentSettingRowOrder(ContentSetting setting) {
+  switch (setting) {
+    case CONTENT_SETTING_ALLOW:
+      return 0;
+    case CONTENT_SETTING_SESSION_ONLY:
+      return 1;
+    case CONTENT_SETTING_BLOCK:
+      return 2;
+    default:
+      NOTREACHED();
+      return -1;
+  }
+}
+
 // Creates a new CookiesTreeModel for all objects in the container,
 // copying each of them.
 std::unique_ptr<CookiesTreeModel> CreateCookiesTreeModel(
@@ -60,7 +80,7 @@
 // * "From other sites" with origins that are third parties in relation to the
 // |current_origin|.
 std::vector<PageSpecificSiteDataDialogSection> GetSections(
-    std::vector<url::Origin> all_origins,
+    std::vector<PageSpecificSiteDataDialogSite> all_sites,
     const url::Origin& current_origin) {
   // TODO(crbug.com/1344787): Use actual strings.
   auto eltd_current_origin = GetEtldPlusOne(current_origin);
@@ -73,11 +93,11 @@
   third_party_section.title = u"From other site";
   third_party_section.subtitle = u"From other site subtitle";
 
-  for (const auto& origin : all_origins) {
-    if (GetEtldPlusOne(origin) == eltd_current_origin) {
-      first_party_section.origins.push_back(origin);
+  for (const auto& site : all_sites) {
+    if (GetEtldPlusOne(site.origin) == eltd_current_origin) {
+      first_party_section.sites.push_back(site);
     } else {
-      third_party_section.origins.push_back(origin);
+      third_party_section.sites.push_back(site);
     }
   }
 
@@ -126,17 +146,26 @@
     }
   }
 
-  std::vector<url::Origin> GetAllOrigins() {
-    std::vector<url::Origin> all_origins;
+  std::vector<PageSpecificSiteDataDialogSite> GetAllSites() {
+    // TODO(crbug.com/1344787): Keep a map of all origins to avoid having
+    // multiple entries. This could happen when there are both partitioned and
+    // regular cookies.
+    std::vector<PageSpecificSiteDataDialogSite> sites;
     for (const auto& node :
          allowed_cookies_tree_model_->GetRoot()->children()) {
-      all_origins.push_back(node->GetDetailedInfo().origin);
+      sites.push_back(CreateSiteFromHostNode(node.get()));
     }
     for (const auto& node :
          blocked_cookies_tree_model_->GetRoot()->children()) {
-      all_origins.push_back(node->GetDetailedInfo().origin);
+      sites.push_back(CreateSiteFromHostNode(node.get()));
     }
-    return all_origins;
+
+    std::sort(sites.begin(), sites.end(), [](const auto& o1, const auto& o2) {
+      return GetContentSettingRowOrder(o1.setting) <
+             GetContentSettingRowOrder(o2.setting);
+    });
+
+    return sites;
   }
 
   FaviconCache* favicon_cache() { return favicon_cache_.get(); }
@@ -184,6 +213,21 @@
 
   bool CanCreateContentException(GURL url) const { return !url.SchemeIsFile(); }
 
+  PageSpecificSiteDataDialogSite CreateSiteFromHostNode(CookieTreeNode* node) {
+    GURL current_url = web_contents_->GetVisibleURL();
+
+    PageSpecificSiteDataDialogSite site;
+    site.origin = node->GetDetailedInfo().origin;
+    content_settings::SettingSource source;
+    site.setting = cookie_settings_->GetCookieSetting(
+        site.origin.GetURL(), current_url, &source,
+        content_settings::CookieSettings::QueryReason::kCookies);
+    // TODO(crbug.com/1344787): Handle sources other than SETTING_SOURCE_USER.
+    // TODO(crbug.com/1344787): Handle partitioned nodes.
+
+    return site;
+  }
+
   base::WeakPtr<content::WebContents> web_contents_;
   // Each model represent separate local storage container. The implementation
   // doesn't make a difference between allowed and blocked models and checks
@@ -212,21 +256,19 @@
           base::Unretained(delegate)));
 
   auto sections =
-      GetSections(delegate->GetAllOrigins(),
+      GetSections(delegate->GetAllSites(),
                   url::Origin::Create(web_contents->GetVisibleURL()));
   for (const auto& section : sections) {
     builder.AddParagraph(
         ui::DialogModelLabel(section.subtitle).set_is_secondary(),
         section.title);
-    for (const auto& origin : section.origins) {
-      // TODO(crbug.com/1344787): Get the actual state based on the cookie
-      // setting.
+    for (const auto& site : section.sites) {
       // It is safe to use base::Unretained for the delegate here because both
       // the row view and the delegate are owned by the dialog and will be
       // destroyed when the dialog is destroyed.
       builder.AddCustomField(
           CreateCustomField(std::make_unique<SiteDataRowView>(
-              origin, CONTENT_SETTING_BLOCK, delegate->favicon_cache(),
+              site.origin, site.setting, delegate->favicon_cache(),
               base::BindRepeating(
                   &PageSpecificSiteDataDialogModelDelegate::DeleteStoredObjects,
                   base::Unretained(delegate)),
diff --git a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_browsertest.cc b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_browsertest.cc
index 3094d3f3..1c7da0a 100644
--- a/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_browsertest.cc
+++ b/chrome/browser/ui/views/site_data/page_specific_site_data_dialog_browsertest.cc
@@ -64,8 +64,7 @@
     auto* element_tracker = ui::ElementTracker::GetElementTracker();
     auto* tracked_element =
         element_tracker->GetFirstMatchingElement(id, context);
-    auto* view = tracked_element->AsA<views::TrackedElementViews>()->view();
-    return view;
+    return tracked_element->AsA<views::TrackedElementViews>()->view();
   }
 
   void ClickDeleteMenuItem(SiteDataRowView* row_view) {
@@ -174,15 +173,31 @@
       GetViewByIdentifier(context, kPageSpecificSiteDataDialogRowForTesting);
   auto* row_view = static_cast<SiteDataRowView*>(view);
   EXPECT_TRUE(row_view->GetVisible());
-  // TODO(crbug.com/1344787): Remove changing state here after the actual state
-  // is shown in the UI.
-  ClickAllowMenuItem(row_view);
-  EXPECT_EQ(row_view->state_label_for_testing()->GetText(), u"Allowed");
   ClickDeleteMenuItem(row_view);
   EXPECT_FALSE(row_view->GetVisible());
   // TODO(crbug.com/1344787): Check the histograms value.
 }
 
+IN_PROC_BROWSER_TEST_P(PageSpecificSiteDataDialogBrowserTest, BlockMenuItem) {
+  if (!GetParam()) {
+    return;
+  }
+
+  auto* dialog = OpenDialog();
+  ui::ElementContext context =
+      views::ElementTrackerViews::GetContextForWidget(dialog);
+
+  auto* view =
+      GetViewByIdentifier(context, kPageSpecificSiteDataDialogRowForTesting);
+  auto* row_view = static_cast<SiteDataRowView*>(view);
+  // TODO(crbug.com/1344787): The label shouldn't be visible here but GetVisible
+  // returns true. It's not actually visible because it has size 0.
+  ClickBlockMenuItem(row_view);
+  EXPECT_TRUE(row_view->state_label_for_testing()->GetVisible());
+  EXPECT_EQ(row_view->state_label_for_testing()->GetText(), u"Blocked");
+  // TODO(crbug.com/1344787): Check the histograms value.
+}
+
 IN_PROC_BROWSER_TEST_P(PageSpecificSiteDataDialogBrowserTest, AllowMenuItem) {
   if (!GetParam()) {
     return;
@@ -195,8 +210,14 @@
   auto* view =
       GetViewByIdentifier(context, kPageSpecificSiteDataDialogRowForTesting);
   auto* row_view = static_cast<SiteDataRowView*>(view);
-  // TODO(crbug.com/1344787): Check the initial state.
+  // TODO(crbug.com/1344787): The label shouldn't be visible here but GetVisible
+  // returns true. It's not actually visible because it has size 0.
+  // TODO(crbug.com/1344787): Setup a site with blocked cookies to start with
+  // blocked state here.
+  ClickBlockMenuItem(row_view);
+  EXPECT_EQ(row_view->state_label_for_testing()->GetText(), u"Blocked");
   ClickAllowMenuItem(row_view);
+  EXPECT_TRUE(row_view->state_label_for_testing()->GetVisible());
   EXPECT_EQ(row_view->state_label_for_testing()->GetText(), u"Allowed");
   // TODO(crbug.com/1344787): Check the histograms value.
 }
@@ -214,14 +235,14 @@
   auto* view =
       GetViewByIdentifier(context, kPageSpecificSiteDataDialogRowForTesting);
   auto* row_view = static_cast<SiteDataRowView*>(view);
-  // TODO(crbug.com/1344787): Check the initial state.
+  // TODO(crbug.com/1344787): The label shouldn't be visible here but GetVisible
+  // returns true. It's not actually visible because it has size 0.
   ClickClearOnExitMenuItem(row_view);
+  EXPECT_TRUE(row_view->state_label_for_testing()->GetVisible());
   EXPECT_EQ(row_view->state_label_for_testing()->GetText(), u"Clear on close");
   // TODO(crbug.com/1344787): Check the histograms value.
 }
 
-// TODO(crbug.com/1344787): Add test for blocking a site.
-
 // Run tests with kPageSpecificSiteDataDialog flag enabled and disabled.
 INSTANTIATE_TEST_SUITE_P(All,
                          PageSpecificSiteDataDialogBrowserTest,
diff --git a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
index a46c139..4b0c49b 100644
--- a/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_integration_test_driver.cc
@@ -1602,7 +1602,7 @@
       }));
   // If there are still install sources, the app might not be fully uninstalled,
   // so this will listen for the removal of the policy install source.
-  provider()->install_finalizer().SetRemoveSourceCallbackForTesting(
+  provider()->install_finalizer().SetRemoveManagementTypeCallbackForTesting(
       base::BindLambdaForTesting([&](const AppId& app_id) {
         if (policy_app->id == app_id)
           run_loop.Quit();
@@ -2612,7 +2612,7 @@
       }));
   // If there are still install sources, the app might not be fully uninstalled,
   // so this will listen for the removal of the policy install source.
-  provider()->install_finalizer().SetRemoveSourceCallbackForTesting(
+  provider()->install_finalizer().SetRemoveManagementTypeCallbackForTesting(
       base::BindLambdaForTesting([&](const AppId& app_id) {
         if (id == app_id)
           run_loop.Quit();
diff --git a/chrome/browser/ui/views/webid/account_selection_bubble_view.cc b/chrome/browser/ui/views/webid/account_selection_bubble_view.cc
index 518bea3..2923557 100644
--- a/chrome/browser/ui/views/webid/account_selection_bubble_view.cc
+++ b/chrome/browser/ui/views/webid/account_selection_bubble_view.cc
@@ -310,6 +310,21 @@
       features::kFedCmMultipleIdentityProviders);
 }
 
+// Selects string for disclosure text based on passed-in `privacy_policy_url`
+// and `terms_of_service_url`.
+int SelectDisclosureTextResourceId(const GURL& privacy_policy_url,
+                                   const GURL& terms_of_service_url) {
+  if (privacy_policy_url.is_empty()) {
+    return terms_of_service_url.is_empty()
+               ? IDS_ACCOUNT_SELECTION_DATA_SHARING_CONSENT_NO_PP_OR_TOS
+               : IDS_ACCOUNT_SELECTION_DATA_SHARING_CONSENT_NO_PP;
+  }
+
+  return terms_of_service_url.is_empty()
+             ? IDS_ACCOUNT_SELECTION_DATA_SHARING_CONSENT_NO_TOS
+             : IDS_ACCOUNT_SELECTION_DATA_SHARING_CONSENT;
+}
+
 }  // namespace
 
 AccountSelectionBubbleView::AccountSelectionBubbleView(
@@ -542,75 +557,37 @@
       views::CreateEmptyBorder(gfx::Insets::TLBR(5, 0, 0, 0)));
   disclosure_label->SetDefaultTextStyle(views::style::STYLE_SECONDARY);
 
+  int disclosure_resource_id = SelectDisclosureTextResourceId(
+      client_data_.privacy_policy_url, client_data_.terms_of_service_url);
+
+  // The order that the links are added to `link_urls` should match the order of
+  // the links in `disclosure_resource_id`.
+  std::vector<GURL> link_urls;
+  if (!client_data_.privacy_policy_url.is_empty())
+    link_urls.push_back(client_data_.privacy_policy_url);
+  if (!client_data_.terms_of_service_url.is_empty())
+    link_urls.push_back(client_data_.terms_of_service_url);
+
+  // Each link has both <ph name="BEGIN_LINK"> and <ph name="END_LINK">.
+  std::vector<std::u16string> replacements = {idp_for_display_};
+  replacements.insert(replacements.end(), link_urls.size() * 2,
+                      std::u16string());
+
   std::vector<size_t> offsets;
+  const std::u16string disclosure_text = l10n_util::GetStringFUTF16(
+      disclosure_resource_id, replacements, &offsets);
+  disclosure_label->SetText(disclosure_text);
 
-  if (client_data_.privacy_policy_url.is_empty() &&
-      client_data_.terms_of_service_url.is_empty()) {
-    // Case for both the privacy policy and terms of service URLs are missing.
-    const std::u16string disclosure_text = l10n_util::GetStringFUTF16(
-        IDS_ACCOUNT_SELECTION_DATA_SHARING_CONSENT_NO_PP_OR_TOS,
-        {idp_for_display_});
-    disclosure_label->SetText(disclosure_text);
-    return row;
-  }
-
-  if (client_data_.privacy_policy_url.is_empty()) {
-    // Case for when we only need to add a link for terms of service URL, but
-    // not privacy policy. We use two placeholders for the start and end of
-    // 'terms of service' in order to style that text as a link.
-    const std::u16string disclosure_text = l10n_util::GetStringFUTF16(
-        IDS_ACCOUNT_SELECTION_DATA_SHARING_CONSENT_NO_PP,
-        {idp_for_display_, std::u16string(), std::u16string()}, &offsets);
-    disclosure_label->SetText(disclosure_text);
-    // Add link styling for terms of service url.
+  size_t offset_index = 1u;
+  for (const GURL& link_url : link_urls) {
     disclosure_label->AddStyleRange(
-        gfx::Range(offsets[1], offsets[2]),
+        gfx::Range(offsets[offset_index], offsets[offset_index + 1]),
         views::StyledLabel::RangeStyleInfo::CreateForLink(
             base::BindRepeating(&AccountSelectionBubbleView::OnLinkClicked,
-                                weak_ptr_factory_.GetWeakPtr(),
-                                client_data_.terms_of_service_url)));
-    return row;
+                                weak_ptr_factory_.GetWeakPtr(), link_url)));
+    offset_index += 2;
   }
 
-  if (client_data_.terms_of_service_url.is_empty()) {
-    // Case for when we only need to add a link for privacy policy URL, but not
-    // terms of service. We use two placeholders for the start and end of
-    // 'privacy policy' in order to style that text as a link.
-    const std::u16string disclosure_text = l10n_util::GetStringFUTF16(
-        IDS_ACCOUNT_SELECTION_DATA_SHARING_CONSENT_NO_TOS,
-        {idp_for_display_, std::u16string(), std::u16string()}, &offsets);
-    disclosure_label->SetText(disclosure_text);
-    // Add link styling for privacy policy url.
-    disclosure_label->AddStyleRange(
-        gfx::Range(offsets[1], offsets[2]),
-        views::StyledLabel::RangeStyleInfo::CreateForLink(base::BindRepeating(
-            &AccountSelectionBubbleView::OnLinkClicked,
-            weak_ptr_factory_.GetWeakPtr(), client_data_.privacy_policy_url)));
-    return row;
-  }
-
-  // Case for when we add a link for privacy policy URL as well as
-  // terms of service URL. We use four placeholders at start/end of both
-  // 'privacy policy' and 'terms of service' in order to style both of them as
-  // links.
-  const std::vector<std::u16string> replacements = {
-      idp_for_display_, std::u16string(), std::u16string(), std::u16string(),
-      std::u16string()};
-  const std::u16string disclosure_text = l10n_util::GetStringFUTF16(
-      IDS_ACCOUNT_SELECTION_DATA_SHARING_CONSENT, replacements, &offsets);
-  disclosure_label->SetText(disclosure_text);
-  // Add link styling for privacy policy url.
-  disclosure_label->AddStyleRange(
-      gfx::Range(offsets[1], offsets[2]),
-      views::StyledLabel::RangeStyleInfo::CreateForLink(base::BindRepeating(
-          &AccountSelectionBubbleView::OnLinkClicked,
-          weak_ptr_factory_.GetWeakPtr(), client_data_.privacy_policy_url)));
-  // Add link styling for terms of service url.
-  disclosure_label->AddStyleRange(
-      gfx::Range(offsets[3], offsets[4]),
-      views::StyledLabel::RangeStyleInfo::CreateForLink(base::BindRepeating(
-          &AccountSelectionBubbleView::OnLinkClicked,
-          weak_ptr_factory_.GetWeakPtr(), client_data_.terms_of_service_url)));
   return row;
 }
 
diff --git a/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc b/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc
index fc3fde2a..ea5c502 100644
--- a/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc
+++ b/chrome/browser/ui/web_applications/test/web_app_browsertest_util.cc
@@ -109,11 +109,18 @@
   base::ScopedCFTypeRef<CFURLRef> url(CFURLCreateFromFileSystemRepresentation(
       NULL, (const UInt8*)icon_path.value().c_str(), icon_path.value().length(),
       false));
-  CGImageSourceRef source = CGImageSourceCreateWithURL(url, NULL);
+  base::ScopedCFTypeRef<CGImageSourceRef> source(
+      CGImageSourceCreateWithURL(url, NULL));
+  if (!source)
+    return 0;
   // Get the first icon in the .icns file (index 0)
   base::ScopedCFTypeRef<CGImageRef> cg_image(
       CGImageSourceCreateImageAtIndex(source, 0, empty_dict));
+  if (!cg_image)
+    return 0;
   SkBitmap bitmap = skia::CGImageToSkBitmap(cg_image);
+  if (bitmap.empty())
+    return 0;
   return bitmap.getColor(0, 0);
 #else
 #if BUILDFLAG(IS_WIN)
diff --git a/chrome/browser/ui/web_applications/web_app_browser_controller.cc b/chrome/browser/ui/web_applications/web_app_browser_controller.cc
index 37c4def6..0b1d64c 100644
--- a/chrome/browser/ui/web_applications/web_app_browser_controller.cc
+++ b/chrome/browser/ui/web_applications/web_app_browser_controller.cc
@@ -211,9 +211,11 @@
     const std::string& fingerprint) {
   // base::Unretained is safe as |asset_link_handler_| is owned by this object
   // and will be destroyed if this object is destroyed.
+  // TODO(swestphal): Support passing several fingerprints for verification.
+  std::vector<std::string> fingerprints{fingerprint};
   const std::string origin = GetAppStartUrl().DeprecatedGetOriginAsURL().spec();
   asset_link_handler_->CheckDigitalAssetLinkRelationshipForAndroidApp(
-      origin, kRelationship, fingerprint, package_name,
+      origin, kRelationship, std::move(fingerprints), package_name,
       base::BindOnce(&WebAppBrowserController::OnRelationshipCheckComplete,
                      base::Unretained(this)));
 }
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
index a9907f0..2d0a6fe 100644
--- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
+++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -1016,6 +1016,8 @@
     {"passwordNoteCharacterCount", IDS_SETTINGS_PASSWORDS_NOTE_CHARACTER_COUNT},
     {"passwordNoteCharacterCountWarning",
      IDS_SETTINGS_PASSWORDS_NOTE_CHARACTER_COUNT_WARNING},
+    {"passwordsTimedOut", IDS_SETTINGS_PASSWORDS_TIMED_OUT},
+    {"passwordsGotIt", IDS_SETTINGS_GOT_IT},
     {"noAddressesFound", IDS_SETTINGS_ADDRESS_NONE},
     {"noPasswordsFound", IDS_SETTINGS_PASSWORDS_NONE},
     {"noExceptionsFound", IDS_SETTINGS_PASSWORDS_EXCEPTIONS_NONE},
@@ -1273,6 +1275,10 @@
           autofill::features::kAutofillEnableVirtualCardMetadata));
 
   html_source->AddLocalizedStrings(kLocalizedStrings);
+  // PASSWORD_VIEW page timeouts in 5 minutes:
+  html_source->AddString("passwordsTimedOutDescription",
+                         l10n_util::GetPluralStringFUTF16(
+                             IDS_SETTINGS_PASSWORDS_TIMED_OUT_DESCRIPTION, 5));
 }
 
 void AddSignOutDialogStrings(content::WebUIDataSource* html_source,
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
index da6c64f..695f13c 100644
--- a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
+++ b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
@@ -59,6 +59,7 @@
 #include "components/permissions/object_permission_context_base.h"
 #include "components/permissions/permission_decision_auto_blocker.h"
 #include "components/permissions/permission_uma_util.h"
+#include "components/permissions/permission_util.h"
 #include "components/permissions/test/object_permission_context_base_mock_permission_observer.h"
 #include "components/permissions/test/permission_test_util.h"
 #include "components/services/app_service/public/cpp/app_registry_cache.h"
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index 51c7517..05d3fe2 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -197,6 +197,8 @@
     "web_app_translation_manager.h",
     "web_app_ui_manager.cc",
     "web_app_ui_manager.h",
+    "web_app_uninstall_job.cc",
+    "web_app_uninstall_job.h",
     "web_app_url_loader.cc",
     "web_app_url_loader.h",
     "web_app_utils.cc",
diff --git a/chrome/browser/web_applications/commands/web_app_uninstall_command.cc b/chrome/browser/web_applications/commands/web_app_uninstall_command.cc
index de8bdf1..72eebc0 100644
--- a/chrome/browser/web_applications/commands/web_app_uninstall_command.cc
+++ b/chrome/browser/web_applications/commands/web_app_uninstall_command.cc
@@ -8,176 +8,144 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/containers/flat_set.h"
+#include "base/containers/contains.h"
 #include "base/metrics/histogram_functions.h"
-#include "base/strings/stringprintf.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/web_applications/isolation_prefs_utils.h"
-#include "chrome/browser/web_applications/locks/app_lock.h"
+#include "chrome/browser/web_applications/locks/full_system_lock.h"
+#include "chrome/browser/web_applications/user_uninstalled_preinstalled_web_app_prefs.h"
 #include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
 #include "chrome/browser/web_applications/web_app_id.h"
-#include "chrome/browser/web_applications/web_app_install_finalizer.h"
 #include "chrome/browser/web_applications/web_app_install_manager.h"
+#include "chrome/browser/web_applications/web_app_install_utils.h"
 #include "chrome/browser/web_applications/web_app_registrar.h"
 #include "chrome/browser/web_applications/web_app_registry_update.h"
 #include "chrome/browser/web_applications/web_app_sync_bridge.h"
 #include "chrome/browser/web_applications/web_app_translation_manager.h"
+#include "chrome/browser/web_applications/web_app_uninstall_job.h"
 #include "components/webapps/browser/installable/installable_metrics.h"
 #include "components/webapps/browser/uninstall_result_code.h"
 
 namespace web_app {
 
+namespace {
+
+bool CanUninstallAllManagementSources(
+    const webapps::WebappUninstallSource& uninstall_source) {
+  // Check that the source was from a known 'user' or allowed ones such
+  // as kMigration.
+  return uninstall_source == webapps::WebappUninstallSource::kUnknown ||
+         uninstall_source == webapps::WebappUninstallSource::kAppMenu ||
+         uninstall_source == webapps::WebappUninstallSource::kAppsPage ||
+         uninstall_source == webapps::WebappUninstallSource::kOsSettings ||
+         uninstall_source == webapps::WebappUninstallSource::kAppManagement ||
+         uninstall_source == webapps::WebappUninstallSource::kMigration ||
+         uninstall_source == webapps::WebappUninstallSource::kAppList ||
+         uninstall_source == webapps::WebappUninstallSource::kShelf ||
+         uninstall_source == webapps::WebappUninstallSource::kSync ||
+         uninstall_source == webapps::WebappUninstallSource::kStartupCleanup;
+}
+
+}  // namespace
+
 WebAppUninstallCommand::WebAppUninstallCommand(
     const AppId& app_id,
-    const url::Origin& app_origin,
+    absl::optional<WebAppManagement::Type> management_type_or_all,
+    webapps::WebappUninstallSource uninstall_source,
+    UninstallWebAppCallback callback,
     Profile* profile,
     OsIntegrationManager* os_integration_manager,
     WebAppSyncBridge* sync_bridge,
     WebAppIconManager* icon_manager,
     WebAppRegistrar* registrar,
     WebAppInstallManager* install_manager,
-    WebAppInstallFinalizer* install_finalizer,
-    WebAppTranslationManager* translation_manager,
-    webapps::WebappUninstallSource source,
-    UninstallWebAppCallback callback)
-    : lock_(std::make_unique<AppLock, base::flat_set<AppId>>({app_id})),
+    WebAppTranslationManager* translation_manager)
+    : lock_(std::make_unique<FullSystemLock>()),
       app_id_(app_id),
-      app_origin_(app_origin),
-      source_(source),
       callback_(std::move(callback)),
+      profile_prefs_(profile->GetPrefs()),
       os_integration_manager_(os_integration_manager),
       sync_bridge_(sync_bridge),
       icon_manager_(icon_manager),
       registrar_(registrar),
       install_manager_(install_manager),
-      install_finalizer_(install_finalizer),
-      translation_manager_(translation_manager),
-      profile_prefs_(profile->GetPrefs()) {}
+      translation_manager_(translation_manager) {
+  // Initializing data for uninstallation tracking.
+  queued_uninstalls_.emplace_back(app_id_, management_type_or_all,
+                                  uninstall_source);
+
+  webapps::InstallableMetrics::TrackUninstallEvent(uninstall_source);
+}
 
 WebAppUninstallCommand::~WebAppUninstallCommand() = default;
 
-Lock& WebAppUninstallCommand::lock() const {
-  return *lock_;
-}
-
 void WebAppUninstallCommand::Start() {
-  if (!registrar_->GetAppById(app_id_)) {
-    Abort(webapps::UninstallResultCode::kNoAppToUninstall);
-    return;
-  }
+  while (!queued_uninstalls_.empty()) {
+    DCHECK(!all_uninstalled_queued_);
+    const UninstallInfo current_uninstall =
+        std::move(queued_uninstalls_.back());
+    queued_uninstalls_.pop_back();
+    AppendUninstallInfoToDebugLog(current_uninstall);
 
-  DCHECK(state_ == State::kNotStarted);
-  state_ = State::kPendingDataDeletion;
-
-  // Note: It is supported to re-start an uninstall on startup, so
-  // `is_uninstalling()` is not checked. It is a class invariant that there can
-  // never be more than one uninstall task operating on the same web app at the
-  // same time.
-  {
-    ScopedRegistryUpdate update(sync_bridge_);
-    WebApp* app = update->UpdateApp(app_id_);
-    DCHECK(app);
-    app->SetIsUninstalling(true);
-  }
-  install_manager_->NotifyWebAppWillBeUninstalled(app_id_);
-
-  RemoveAppIsolationState(profile_prefs_, app_origin_);
-
-  // Uninstall any sub-apps the app has.
-  // TODO(phillis): Fix this command to get locks for all sub-app ids as well.
-  // https://crbug.com/1341337
-  std::vector<AppId> sub_app_ids = registrar_->GetAllSubAppIds(app_id_);
-  num_pending_sub_app_uninstalls_ = sub_app_ids.size();
-  for (const AppId& sub_app_id : sub_app_ids) {
-    if (registrar_->GetAppById(sub_app_id) == nullptr)
+    const AppId& app_id = current_uninstall.app_id;
+    const WebApp* app = registrar_->GetAppById(app_id);
+    if (!app) {
+      uninstall_results_[app_id] =
+          webapps::UninstallResultCode::kNoAppToUninstall;
+      AppendUninstallResultsToDebugLog(app_id);
       continue;
-    install_finalizer_->UninstallExternalWebApp(
-        sub_app_id, WebAppManagement::Type::kSubApp,
-        webapps::WebappUninstallSource::kSubApp,
-        base::BindOnce(&WebAppUninstallCommand::OnSubAppUninstalled,
-                       weak_factory_.GetWeakPtr()));
+    }
+
+    // This contains the external uninstall logic.
+    if (current_uninstall.management_type_or_all.has_value()) {
+      const WebAppManagement::Type source =
+          current_uninstall.management_type_or_all.value();
+      // If there is more than a single source, then we can just remove the
+      // source from the web_app DB. Else we end up calling Uninstall() at the
+      // end.
+      if (!app->HasOnlySource(source)) {
+        // There is a chance that removed source type is NOT user uninstallable
+        // but the remaining source (after removal) types are user
+        // uninstallable. In this case, the following call will register os
+        // uninstallation.
+        apps_pending_uninstall_[app_id] = nullptr;
+        MaybeRegisterOsUninstall(
+            app, source, *os_integration_manager_,
+            base::BindOnce(&WebAppUninstallCommand::
+                               RemoveManagementTypeAfterOsUninstallRegistration,
+                           weak_factory_.GetWeakPtr(), app_id, source,
+                           current_uninstall.uninstall_source));
+      } else {
+        Uninstall(app_id, current_uninstall.uninstall_source);
+      }
+    } else {
+      // This contains the user uninstall and sync uninstall logic.
+      DCHECK(
+          CanUninstallAllManagementSources(current_uninstall.uninstall_source));
+      // The following DCHECK streamlines the user uninstall and sync uninstall
+      // flow, because for sync uninstalls, the web_app source is removed before
+      // being synced, so the first condition fails by the time an Uninstall is
+      // invoked.
+      DCHECK(app->CanUserUninstallWebApp() ||
+             current_uninstall.uninstall_source ==
+                 webapps::WebappUninstallSource::kSync);
+      if (app->IsPreinstalledApp()) {
+        // Update the default uninstalled web_app prefs if it is a preinstalled
+        // app but being removed by user.
+        const WebApp::ExternalConfigMap& config_map =
+            app->management_to_external_config_map();
+        auto it = config_map.find(WebAppManagement::kDefault);
+        DCHECK(it != config_map.end());
+        UserUninstalledPreinstalledWebAppPrefs(profile_prefs_)
+            .Add(app_id, it->second.install_urls);
+      }
+      Uninstall(app_id, current_uninstall.uninstall_source);
+    }
   }
-
-  os_integration_manager_->UninstallAllOsHooks(
-      app_id_, base::BindOnce(&WebAppUninstallCommand::OnOsHooksUninstalled,
-                              weak_factory_.GetWeakPtr()));
-  icon_manager_->DeleteData(
-      app_id_, base::BindOnce(&WebAppUninstallCommand::OnIconDataDeleted,
-                              weak_factory_.GetWeakPtr()));
-
-  translation_manager_->DeleteTranslations(
-      app_id_, base::BindOnce(&WebAppUninstallCommand::OnTranslationDataDeleted,
-                              weak_factory_.GetWeakPtr()));
-}
-
-void WebAppUninstallCommand::Abort(webapps::UninstallResultCode code) {
-  if (!callback_)
-    return;
-  SignalCompletionAndSelfDestruct(CommandResult::kFailure,
-                                  base::BindOnce(std::move(callback_), code));
-}
-
-void WebAppUninstallCommand::OnSubAppUninstalled(
-    webapps::UninstallResultCode code) {
-  errors_ = errors_ || (code != webapps::UninstallResultCode::kSuccess);
-  num_pending_sub_app_uninstalls_--;
-  DCHECK_GE(num_pending_sub_app_uninstalls_, 0u);
-  MaybeFinishUninstall();
-}
-
-void WebAppUninstallCommand::OnOsHooksUninstalled(OsHooksErrors errors) {
-  DCHECK(state_ == State::kPendingDataDeletion);
-  hooks_uninstalled_ = true;
-  // TODO(https://crbug.com/1293234): Remove after flakiness is solved.
-  DLOG_IF(ERROR, errors.any())
-      << "OS integration errors for " << app_id_ << ": " << errors.to_string();
-  base::UmaHistogramBoolean("WebApp.Uninstall.OsHookSuccess", errors.none());
-  errors_ = errors_ || errors.any();
-  MaybeFinishUninstall();
-}
-
-void WebAppUninstallCommand::OnIconDataDeleted(bool success) {
-  DCHECK(state_ == State::kPendingDataDeletion);
-  app_data_deleted_ = true;
-  // TODO(https://crbug.com/1293234): Remove after flakiness is solved.
-  DLOG_IF(ERROR, !success) << "Error deleting icon data for " << app_id_;
-  base::UmaHistogramBoolean("WebApp.Uninstall.IconDataSuccess", success);
-  errors_ = errors_ || !success;
-  MaybeFinishUninstall();
-}
-
-void WebAppUninstallCommand::OnTranslationDataDeleted(bool success) {
-  DCHECK(state_ == State::kPendingDataDeletion);
-  translation_data_deleted_ = true;
-  errors_ = errors_ || !success;
-  MaybeFinishUninstall();
-}
-
-void WebAppUninstallCommand::MaybeFinishUninstall() {
-  DCHECK(state_ == State::kPendingDataDeletion);
-  if (!hooks_uninstalled_ || !app_data_deleted_ ||
-      num_pending_sub_app_uninstalls_ > 0 || !translation_data_deleted_) {
-    return;
-  }
-  DCHECK_EQ(num_pending_sub_app_uninstalls_, 0u);
-  state_ = State::kDone;
-
-  base::UmaHistogramBoolean("WebApp.Uninstall.Result", !errors_);
-
-  webapps::InstallableMetrics::TrackUninstallEvent(source_);
-  {
-    DCHECK_NE(registrar_->GetAppById(app_id_), nullptr);
-    ScopedRegistryUpdate update(sync_bridge_);
-    update->DeleteApp(app_id_);
-  }
-  install_manager_->NotifyWebAppUninstalled(app_id_);
-
-  SignalCompletionAndSelfDestruct(
-      errors_ ? CommandResult::kFailure : CommandResult::kSuccess,
-      base::BindOnce(std::move(callback_),
-                     errors_ ? webapps::UninstallResultCode::kError
-                             : webapps::UninstallResultCode::kSuccess));
+  all_uninstalled_queued_ = true;
+  MaybeFinishUninstallAndDestruct();
 }
 
 void WebAppUninstallCommand::OnSyncSourceRemoved() {
@@ -191,8 +159,138 @@
   return;
 }
 
-base::Value WebAppUninstallCommand::ToDebugValue() const {
-  return base::Value(base::StringPrintf(
-      "WebAppUninstallCommand %d, app_id_: %s", id(), app_id_.c_str()));
+Lock& WebAppUninstallCommand::lock() const {
+  return *lock_;
 }
+
+base::Value WebAppUninstallCommand::ToDebugValue() const {
+  base::Value::Dict uninstall_info;
+  uninstall_info.Set("type", "WebAppUninstallCommand");
+  uninstall_info.Set("command_data", debug_log_.Clone());
+  return base::Value(std::move(uninstall_info));
+}
+
+void WebAppUninstallCommand::SetRemoveManagementTypeCallbackForTesting(
+    RemoveManagementTypeCallback callback) {
+  management_type_removed_callback_for_testing_ = std::move(callback);
+}
+
+WebAppUninstallCommand::UninstallInfo::UninstallInfo(
+    AppId app_id,
+    absl::optional<WebAppManagement::Type> management_type_or_all,
+    webapps::WebappUninstallSource uninstall_source)
+    : app_id(app_id),
+      management_type_or_all(management_type_or_all),
+      uninstall_source(uninstall_source) {}
+
+WebAppUninstallCommand::UninstallInfo::~UninstallInfo() = default;
+
+WebAppUninstallCommand::UninstallInfo::UninstallInfo(
+    const UninstallInfo& uninstall_info) = default;
+
+WebAppUninstallCommand::UninstallInfo::UninstallInfo(
+    UninstallInfo&& uninstall_info) = default;
+
+void WebAppUninstallCommand::AppendUninstallInfoToDebugLog(
+    const UninstallInfo& uninstall_info) {
+  base::Value::Dict source_info;
+  if (uninstall_info.management_type_or_all.has_value()) {
+    source_info.Set("management_type",
+                    ConvertWebAppManagementToStringType(
+                        uninstall_info.management_type_or_all.value()));
+  }
+  source_info.Set("uninstall_source", ConvertUninstallSourceToStringType(
+                                          uninstall_info.uninstall_source));
+  debug_log_.Set(uninstall_info.app_id, base::Value(std::move(source_info)));
+}
+
+void WebAppUninstallCommand::AppendUninstallResultsToDebugLog(
+    const AppId& app_id) {
+  base::Value::Dict* app_dict = debug_log_.FindDict(app_id);
+  DCHECK(app_dict);
+  app_dict->Set("uninstall_result", webapps::ConvertUninstallResultCodeToString(
+                                        uninstall_results_[app_id]));
+}
+
+void WebAppUninstallCommand::Abort(webapps::UninstallResultCode code) {
+  base::UmaHistogramBoolean("WebApp.Uninstall.Result",
+                            (code == webapps::UninstallResultCode::kSuccess));
+  if (!callback_)
+    return;
+  SignalCompletionAndSelfDestruct(CommandResult::kFailure,
+                                  base::BindOnce(std::move(callback_), code));
+}
+
+void WebAppUninstallCommand::Uninstall(
+    const AppId& app_id,
+    const webapps::WebappUninstallSource& uninstall_source) {
+  QueueSubAppsForUninstallIfAny(app_id);
+
+  auto uninstall_job = WebAppUninstallJob::CreateAndStart(
+      app_id, url::Origin::Create(registrar_->GetAppById(app_id)->start_url()),
+      base::BindOnce(&WebAppUninstallCommand::OnSingleUninstallComplete,
+                     weak_factory_.GetWeakPtr(), app_id, uninstall_source),
+      *os_integration_manager_, *sync_bridge_, *icon_manager_, *registrar_,
+      *install_manager_, *translation_manager_, *profile_prefs_);
+  apps_pending_uninstall_[app_id] = std::move(uninstall_job);
+}
+
+void WebAppUninstallCommand::QueueSubAppsForUninstallIfAny(
+    const AppId& app_id) {
+  std::vector<AppId> sub_app_ids = registrar_->GetAllSubAppIds(app_id);
+  for (const AppId& sub_app_id : sub_app_ids) {
+    queued_uninstalls_.emplace_back(
+        sub_app_id, WebAppManagement::kSubApp,
+        webapps::WebappUninstallSource::kParentUninstall);
+  }
+}
+
+void WebAppUninstallCommand::RemoveManagementTypeAfterOsUninstallRegistration(
+    const AppId& app_id,
+    const WebAppManagement::Type& management_type,
+    const webapps::WebappUninstallSource& uninstall_source,
+    OsHooksErrors os_hooks_errors) {
+  {
+    ScopedRegistryUpdate update(sync_bridge_);
+    WebApp* app_to_update = update->UpdateApp(app_id);
+    app_to_update->RemoveSource(management_type);
+    if (management_type == WebAppManagement::kSubApp) {
+      app_to_update->SetParentAppId(absl::nullopt);
+    }
+  }
+
+  if (management_type_removed_callback_for_testing_)
+    std::move(management_type_removed_callback_for_testing_).Run(app_id);
+
+  // Registering an OS uninstall is also an "uninstall", so the
+  // state is updated for the command.
+  OnSingleUninstallComplete(app_id, uninstall_source,
+                            webapps::UninstallResultCode::kSuccess);
+}
+
+void WebAppUninstallCommand::OnSingleUninstallComplete(
+    const AppId& app_id,
+    const webapps::WebappUninstallSource& source,
+    webapps::UninstallResultCode code) {
+  DCHECK(base::Contains(apps_pending_uninstall_, app_id));
+  apps_pending_uninstall_.erase(app_id);
+
+  if (source == webapps::WebappUninstallSource::kSync) {
+    base::UmaHistogramBoolean("Webapp.SyncInitiatedUninstallResult",
+                              code == webapps::UninstallResultCode::kSuccess);
+  }
+  uninstall_results_[app_id] = code;
+  AppendUninstallResultsToDebugLog(app_id);
+  MaybeFinishUninstallAndDestruct();
+}
+
+void WebAppUninstallCommand::MaybeFinishUninstallAndDestruct() {
+  if (apps_pending_uninstall_.empty() && all_uninstalled_queued_) {
+    // All uninstall jobs have finished.
+    SignalCompletionAndSelfDestruct(
+        CommandResult::kSuccess,
+        base::BindOnce(std::move(callback_), uninstall_results_[app_id_]));
+  }
+}
+
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/commands/web_app_uninstall_command.h b/chrome/browser/web_applications/commands/web_app_uninstall_command.h
index 7760b09..49e4a22 100644
--- a/chrome/browser/web_applications/commands/web_app_uninstall_command.h
+++ b/chrome/browser/web_applications/commands/web_app_uninstall_command.h
@@ -5,13 +5,20 @@
 #ifndef CHROME_BROWSER_WEB_APPLICATIONS_COMMANDS_WEB_APP_UNINSTALL_COMMAND_H_
 #define CHROME_BROWSER_WEB_APPLICATIONS_COMMANDS_WEB_APP_UNINSTALL_COMMAND_H_
 
+#include <memory>
+
+#include "base/callback_forward.h"
+#include "base/containers/circular_deque.h"
+#include "base/containers/flat_map.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/values.h"
 #include "chrome/browser/web_applications/commands/web_app_command.h"
 #include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
 #include "chrome/browser/web_applications/web_app_id.h"
-#include "third_party/blink/public/mojom/manifest/manifest.mojom-forward.h"
+#include "components/webapps/browser/installable/installable_metrics.h"
+#include "components/webapps/browser/uninstall_result_code.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
 
 class Profile;
 class PrefService;
@@ -23,78 +30,99 @@
 
 namespace web_app {
 
-class AppLock;
+class FullSystemLock;
 class OsIntegrationManager;
 class WebAppIconManager;
 class WebAppInstallManager;
-class WebAppInstallFinalizer;
 class WebAppRegistrar;
 class WebAppSyncBridge;
 class WebAppTranslationManager;
+class WebAppUninstallJob;
 
 // Uninstall the web app.
 class WebAppUninstallCommand : public WebAppCommand {
  public:
   using UninstallWebAppCallback =
       base::OnceCallback<void(webapps::UninstallResultCode)>;
+  using RemoveManagementTypeCallback =
+      base::RepeatingCallback<void(const AppId& app_id)>;
 
-  WebAppUninstallCommand(const AppId& app_id,
-                         const url::Origin& app_origin,
-                         Profile* profile,
-                         OsIntegrationManager* os_integration_manager,
-                         WebAppSyncBridge* sync_bridge,
-                         WebAppIconManager* icon_manager,
-                         WebAppRegistrar* registrar,
-                         WebAppInstallManager* install_manager,
-                         WebAppInstallFinalizer* install_finalizer,
-                         WebAppTranslationManager* translation_manager,
-                         webapps::WebappUninstallSource source,
-                         UninstallWebAppCallback callback);
+  WebAppUninstallCommand(
+      const AppId& app_id,
+      absl::optional<WebAppManagement::Type> management_type_or_all,
+      webapps::WebappUninstallSource uninstall_source,
+      UninstallWebAppCallback callback,
+      Profile* profile,
+      OsIntegrationManager* os_integration_manager,
+      WebAppSyncBridge* sync_bridge,
+      WebAppIconManager* icon_manager,
+      WebAppRegistrar* registrar,
+      WebAppInstallManager* install_manager,
+      WebAppTranslationManager* translation_manager);
   ~WebAppUninstallCommand() override;
 
-  Lock& lock() const override;
-
   void Start() override;
   void OnSyncSourceRemoved() override;
   void OnShutdown() override;
 
+  Lock& lock() const override;
   base::Value ToDebugValue() const override;
 
+  void SetRemoveManagementTypeCallbackForTesting(
+      RemoveManagementTypeCallback callback);
+
  private:
+  // Used to store information needed for uninstalling an app with app_id.
+  struct UninstallInfo {
+    UninstallInfo(AppId app_id,
+                  absl::optional<WebAppManagement::Type> management_type_or_all,
+                  webapps::WebappUninstallSource uninstall_source);
+    ~UninstallInfo();
+    UninstallInfo(const UninstallInfo& uninstall_info);
+    UninstallInfo(UninstallInfo&& uninstall_info);
+    UninstallInfo& operator=(const UninstallInfo& uninstall_info) = delete;
+    UninstallInfo& operator=(UninstallInfo&& uninstall_info) = delete;
+
+    AppId app_id;
+    absl::optional<WebAppManagement::Type> management_type_or_all;
+    webapps::WebappUninstallSource uninstall_source;
+  };
+
+  void AppendUninstallInfoToDebugLog(const UninstallInfo& uninstall_info);
+  void AppendUninstallResultsToDebugLog(const AppId& app_id);
   void Abort(webapps::UninstallResultCode code);
-  void OnSubAppUninstalled(webapps::UninstallResultCode code);
-  void OnOsHooksUninstalled(OsHooksErrors errors);
-  void OnIconDataDeleted(bool success);
-  void OnTranslationDataDeleted(bool success);
-  void MaybeFinishUninstall();
+  void Uninstall(const AppId& app_id,
+                 const webapps::WebappUninstallSource& uninstall_source);
+  void QueueSubAppsForUninstallIfAny(const AppId& app_id);
+  void RemoveManagementTypeAfterOsUninstallRegistration(
+      const AppId& app_id,
+      const WebAppManagement::Type& install_source,
+      const webapps::WebappUninstallSource& uninstall_source,
+      OsHooksErrors os_hooks_errors);
+  void OnSingleUninstallComplete(const AppId& app_id,
+                                 const webapps::WebappUninstallSource& source,
+                                 webapps::UninstallResultCode code);
+  void MaybeFinishUninstallAndDestruct();
 
-  enum class State {
-    kNotStarted = 0,
-    kPendingDataDeletion = 1,
-    kDone = 2,
-  } state_ = State::kNotStarted;
+  std::unique_ptr<FullSystemLock> lock_;
+  const AppId app_id_;
+  base::circular_deque<UninstallInfo> queued_uninstalls_;
+  base::flat_map<AppId, webapps::UninstallResultCode> uninstall_results_;
+  base::flat_map<AppId, std::unique_ptr<WebAppUninstallJob>>
+      apps_pending_uninstall_;
+  base::Value::Dict debug_log_;
+  bool all_uninstalled_queued_ = false;
 
-  std::unique_ptr<AppLock> lock_;
-  AppId app_id_;
-  url::Origin app_origin_;
-  webapps::WebappUninstallSource source_;
   UninstallWebAppCallback callback_;
+  RemoveManagementTypeCallback management_type_removed_callback_for_testing_;
 
+  raw_ptr<PrefService> profile_prefs_;
   raw_ptr<OsIntegrationManager> os_integration_manager_;
   raw_ptr<WebAppSyncBridge> sync_bridge_;
   raw_ptr<WebAppIconManager> icon_manager_;
   raw_ptr<WebAppRegistrar> registrar_;
   raw_ptr<WebAppInstallManager> install_manager_;
-  raw_ptr<WebAppInstallFinalizer> install_finalizer_;
   raw_ptr<WebAppTranslationManager> translation_manager_;
-  raw_ptr<PrefService> profile_prefs_;
-
-  size_t num_pending_sub_app_uninstalls_;
-
-  bool app_data_deleted_ = false;
-  bool translation_data_deleted_ = false;
-  bool hooks_uninstalled_ = false;
-  bool errors_ = false;
 
   base::WeakPtrFactory<WebAppUninstallCommand> weak_factory_{this};
 };
diff --git a/chrome/browser/web_applications/commands/web_app_uninstall_command_unittest.cc b/chrome/browser/web_applications/commands/web_app_uninstall_command_unittest.cc
index e0ab2ed..e1ffecb 100644
--- a/chrome/browser/web_applications/commands/web_app_uninstall_command_unittest.cc
+++ b/chrome/browser/web_applications/commands/web_app_uninstall_command_unittest.cc
@@ -17,12 +17,15 @@
 #include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
 #include "chrome/browser/web_applications/test/web_app_test.h"
 #include "chrome/browser/web_applications/test/web_app_test_utils.h"
+#include "chrome/browser/web_applications/user_uninstalled_preinstalled_web_app_prefs.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
+#include "chrome/browser/web_applications/web_app_constants.h"
 #include "chrome/browser/web_applications/web_app_icon_manager.h"
 #include "chrome/browser/web_applications/web_app_registry_update.h"
 #include "chrome/browser/web_applications/web_app_utils.h"
 #include "components/prefs/testing_pref_service.h"
+#include "components/webapps/browser/installable/installable_metrics.h"
 #include "components/webapps/browser/uninstall_result_code.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -59,7 +62,7 @@
   scoped_refptr<testing::StrictMock<MockFileUtilsWrapper>> file_utils_wrapper_;
 };
 
-TEST_F(WebAppUninstallCommandTest, SimpleUninstall) {
+TEST_F(WebAppUninstallCommandTest, SimpleUninstallInternal) {
   auto web_app = test::CreateWebApp(GURL("https://www.example.com"),
                                     WebAppManagement::kSync);
   AppId app_id = web_app->app_id();
@@ -81,21 +84,56 @@
   base::RunLoop loop;
   provider()->command_manager().ScheduleCommand(
       std::make_unique<WebAppUninstallCommand>(
-          app_id, url::Origin(), profile(), &os_integration_manager_,
-          &provider()->sync_bridge(), &provider()->icon_manager(),
-          &provider()->registrar(), &provider()->install_manager(),
-          &provider()->install_finalizer(), &provider()->translation_manager(),
-          webapps::WebappUninstallSource::kAppMenu,
+          app_id, absl::nullopt, webapps::WebappUninstallSource::kAppMenu,
           base::BindLambdaForTesting([&](webapps::UninstallResultCode code) {
             EXPECT_EQ(webapps::UninstallResultCode::kSuccess, code);
             loop.Quit();
-          })));
+          }),
+          profile(), &os_integration_manager_, &provider()->sync_bridge(),
+          &provider()->icon_manager(), &provider()->registrar(),
+          &provider()->install_manager(), &provider()->translation_manager()));
 
   loop.Run();
   EXPECT_EQ(provider()->registrar().GetAppById(app_id), nullptr);
 }
 
-TEST_F(WebAppUninstallCommandTest, FailedDataDelete) {
+TEST_F(WebAppUninstallCommandTest, SimpleUninstallExternal) {
+  auto web_app = test::CreateWebApp(GURL("https://www.example.com"),
+                                    WebAppManagement::kDefault);
+  AppId app_id = web_app->app_id();
+  {
+    ScopedRegistryUpdate update(&provider()->sync_bridge());
+    update->CreateApp(std::move(web_app));
+  }
+
+  OsHooksErrors result;
+  EXPECT_CALL(os_integration_manager_, UninstallAllOsHooks(app_id, testing::_))
+      .WillOnce(base::test::RunOnceCallback<1>(result));
+
+  base::FilePath deletion_path = GetManifestResourcesDirectoryForApp(
+      GetWebAppsRootDirectory(profile()), app_id);
+
+  EXPECT_CALL(*file_utils_wrapper_, DeleteFileRecursively(deletion_path))
+      .WillOnce(testing::Return(true));
+
+  base::RunLoop loop;
+  provider()->command_manager().ScheduleCommand(
+      std::make_unique<WebAppUninstallCommand>(
+          app_id, WebAppManagement::kDefault,
+          webapps::WebappUninstallSource::kAppMenu,
+          base::BindLambdaForTesting([&](webapps::UninstallResultCode code) {
+            EXPECT_EQ(webapps::UninstallResultCode::kSuccess, code);
+            loop.Quit();
+          }),
+          profile(), &os_integration_manager_, &provider()->sync_bridge(),
+          &provider()->icon_manager(), &provider()->registrar(),
+          &provider()->install_manager(), &provider()->translation_manager()));
+
+  loop.Run();
+  EXPECT_EQ(provider()->registrar().GetAppById(app_id), nullptr);
+}
+
+TEST_F(WebAppUninstallCommandTest, FailedDataDeletion) {
   auto web_app = test::CreateWebApp(GURL("https://www.example.com"),
                                     WebAppManagement::kSync);
   AppId app_id = web_app->app_id();
@@ -117,21 +155,20 @@
   base::RunLoop loop;
   provider()->command_manager().ScheduleCommand(
       std::make_unique<WebAppUninstallCommand>(
-          app_id, url::Origin(), profile(), &os_integration_manager_,
-          &provider()->sync_bridge(), &provider()->icon_manager(),
-          &provider()->registrar(), &provider()->install_manager(),
-          &provider()->install_finalizer(), &provider()->translation_manager(),
-          webapps::WebappUninstallSource::kAppMenu,
+          app_id, absl::nullopt, webapps::WebappUninstallSource::kAppMenu,
           base::BindLambdaForTesting([&](webapps::UninstallResultCode code) {
             EXPECT_EQ(webapps::UninstallResultCode::kError, code);
             loop.Quit();
-          })));
+          }),
+          profile(), &os_integration_manager_, &provider()->sync_bridge(),
+          &provider()->icon_manager(), &provider()->registrar(),
+          &provider()->install_manager(), &provider()->translation_manager()));
 
   loop.Run();
   EXPECT_EQ(provider()->registrar().GetAppById(app_id), nullptr);
 }
 
-TEST_F(WebAppUninstallCommandTest, FailedOsHooks) {
+TEST_F(WebAppUninstallCommandTest, FailedOsHooksSetting) {
   auto web_app = test::CreateWebApp(GURL("https://www.example.com"),
                                     WebAppManagement::kSync);
   AppId app_id = web_app->app_id();
@@ -154,21 +191,20 @@
   base::RunLoop loop;
   provider()->command_manager().ScheduleCommand(
       std::make_unique<WebAppUninstallCommand>(
-          app_id, url::Origin(), profile(), &os_integration_manager_,
-          &provider()->sync_bridge(), &provider()->icon_manager(),
-          &provider()->registrar(), &provider()->install_manager(),
-          &provider()->install_finalizer(), &provider()->translation_manager(),
-          webapps::WebappUninstallSource::kAppMenu,
+          app_id, absl::nullopt, webapps::WebappUninstallSource::kAppMenu,
           base::BindLambdaForTesting([&](webapps::UninstallResultCode code) {
             EXPECT_EQ(webapps::UninstallResultCode::kError, code);
             loop.Quit();
-          })));
+          }),
+          profile(), &os_integration_manager_, &provider()->sync_bridge(),
+          &provider()->icon_manager(), &provider()->registrar(),
+          &provider()->install_manager(), &provider()->translation_manager()));
 
   loop.Run();
   EXPECT_EQ(provider()->registrar().GetAppById(app_id), nullptr);
 }
 
-TEST_F(WebAppUninstallCommandTest, UninstallNonExistentApp) {
+TEST_F(WebAppUninstallCommandTest, TryToUninstallNonExistentApp) {
   auto web_app = test::CreateWebApp(GURL("https://www.example.com"),
                                     WebAppManagement::kSync);
   AppId app_id = web_app->app_id();
@@ -185,19 +221,215 @@
   base::RunLoop loop;
   provider()->command_manager().ScheduleCommand(
       std::make_unique<WebAppUninstallCommand>(
-          app_id, url::Origin(), profile(), &os_integration_manager_,
-          &provider()->sync_bridge(), &provider()->icon_manager(),
-          &provider()->registrar(), &provider()->install_manager(),
-          &provider()->install_finalizer(), &provider()->translation_manager(),
-          webapps::WebappUninstallSource::kAppMenu,
+          app_id, absl::nullopt, webapps::WebappUninstallSource::kAppMenu,
           base::BindLambdaForTesting([&](webapps::UninstallResultCode code) {
             EXPECT_EQ(webapps::UninstallResultCode::kNoAppToUninstall, code);
             loop.Quit();
-          })));
+          }),
+          profile(), &os_integration_manager_, &provider()->sync_bridge(),
+          &provider()->icon_manager(), &provider()->registrar(),
+          &provider()->install_manager(), &provider()->translation_manager()));
 
   loop.Run();
   EXPECT_EQ(provider()->registrar().GetAppById(app_id), nullptr);
 }
 
+TEST_F(WebAppUninstallCommandTest, CommandManagerShutdownThrowsError) {
+  auto web_app = test::CreateWebApp(GURL("https://www.example.com"),
+                                    WebAppManagement::kSync);
+  AppId app_id = web_app->app_id();
+  {
+    ScopedRegistryUpdate update(&provider()->sync_bridge());
+    update->CreateApp(std::move(web_app));
+  }
+
+  EXPECT_CALL(os_integration_manager_, UninstallAllOsHooks(app_id, testing::_))
+      .Times(0);
+
+  base::FilePath deletion_path = GetManifestResourcesDirectoryForApp(
+      GetWebAppsRootDirectory(profile()), app_id);
+
+  EXPECT_CALL(*file_utils_wrapper_, DeleteFileRecursively(deletion_path))
+      .Times(0);
+
+  provider()->command_manager().ScheduleCommand(
+      std::make_unique<WebAppUninstallCommand>(
+          app_id, absl::nullopt, webapps::WebappUninstallSource::kAppMenu,
+          base::BindLambdaForTesting([&](webapps::UninstallResultCode code) {
+            EXPECT_EQ(webapps::UninstallResultCode::kError, code);
+          }),
+          profile(), &os_integration_manager_, &provider()->sync_bridge(),
+          &provider()->icon_manager(), &provider()->registrar(),
+          &provider()->install_manager(), &provider()->translation_manager()));
+
+  provider()->command_manager().Shutdown();
+  // App is not uninstalled.
+  EXPECT_NE(provider()->registrar().GetAppById(app_id), nullptr);
+}
+
+TEST_F(WebAppUninstallCommandTest, UserUninstalledPrefsFilled) {
+  auto web_app = test::CreateWebApp(GURL("https://www.example.com"),
+                                    WebAppManagement::kDefault);
+  AppId app_id = web_app->app_id();
+  web_app->AddInstallURLToManagementExternalConfigMap(
+      WebAppManagement::kDefault, GURL("https://www.example.com/install"));
+  {
+    ScopedRegistryUpdate update(&provider()->sync_bridge());
+    update->CreateApp(std::move(web_app));
+  }
+  EXPECT_FALSE(UserUninstalledPreinstalledWebAppPrefs(profile()->GetPrefs())
+                   .DoesAppIdExist(app_id));
+
+  OsHooksErrors result;
+  EXPECT_CALL(os_integration_manager_, UninstallAllOsHooks(app_id, testing::_))
+      .WillOnce(base::test::RunOnceCallback<1>(result));
+
+  base::FilePath deletion_path = GetManifestResourcesDirectoryForApp(
+      GetWebAppsRootDirectory(profile()), app_id);
+
+  EXPECT_CALL(*file_utils_wrapper_, DeleteFileRecursively(deletion_path))
+      .WillOnce(testing::Return(true));
+
+  base::RunLoop loop;
+  provider()->command_manager().ScheduleCommand(
+      std::make_unique<WebAppUninstallCommand>(
+          app_id, absl::nullopt, webapps::WebappUninstallSource::kAppMenu,
+          base::BindLambdaForTesting([&](webapps::UninstallResultCode code) {
+            EXPECT_EQ(webapps::UninstallResultCode::kSuccess, code);
+            loop.Quit();
+          }),
+          profile(), &os_integration_manager_, &provider()->sync_bridge(),
+          &provider()->icon_manager(), &provider()->registrar(),
+          &provider()->install_manager(), &provider()->translation_manager()));
+
+  loop.Run();
+  EXPECT_EQ(provider()->registrar().GetAppById(app_id), nullptr);
+  EXPECT_TRUE(UserUninstalledPreinstalledWebAppPrefs(profile()->GetPrefs())
+                  .DoesAppIdExist(app_id));
+}
+
+TEST_F(WebAppUninstallCommandTest, RemoveSourceAndTriggerOSUninstallation) {
+  auto web_app = test::CreateWebApp(GURL("https://www.example.com"),
+                                    WebAppManagement::kDefault);
+  web_app->AddSource(WebAppManagement::kPolicy);
+  web_app->AddInstallURLToManagementExternalConfigMap(
+      WebAppManagement::kDefault, GURL("https://example.com/install"));
+  EXPECT_FALSE(web_app->CanUserUninstallWebApp());
+  AppId app_id = web_app->app_id();
+  {
+    ScopedRegistryUpdate update(&provider()->sync_bridge());
+    update->CreateApp(std::move(web_app));
+  }
+
+  EXPECT_CALL(os_integration_manager_, UninstallAllOsHooks(app_id, testing::_))
+      .Times(0);
+
+// This is called once on Windows because OsUninstallRegistration is limited to
+// WIN.
+#if BUILDFLAG(IS_WIN)
+  EXPECT_CALL(os_integration_manager_,
+              MacAppShimOnAppInstalledForProfile(app_id))
+      .Times(1);
+  EXPECT_CALL(os_integration_manager_,
+              RegisterWebAppOsUninstallation(app_id, testing::_))
+      .Times(1);
+#else
+  EXPECT_CALL(os_integration_manager_,
+              RegisterWebAppOsUninstallation(app_id, testing::_))
+      .Times(0);
+#endif
+
+  base::FilePath deletion_path = GetManifestResourcesDirectoryForApp(
+      GetWebAppsRootDirectory(profile()), app_id);
+
+  EXPECT_CALL(*file_utils_wrapper_, DeleteFileRecursively(deletion_path))
+      .Times(0);
+
+  base::RunLoop run_loop;
+  auto command = std::make_unique<WebAppUninstallCommand>(
+      app_id, WebAppManagement::kPolicy,
+      webapps::WebappUninstallSource::kExternalPolicy,
+      base::BindLambdaForTesting([&](webapps::UninstallResultCode code) {
+        EXPECT_EQ(webapps::UninstallResultCode::kSuccess, code);
+        run_loop.Quit();
+      }),
+      profile(), &os_integration_manager_, &provider()->sync_bridge(),
+      &provider()->icon_manager(), &provider()->registrar(),
+      &provider()->install_manager(), &provider()->translation_manager());
+
+  command->SetRemoveManagementTypeCallbackForTesting(
+      base::BindLambdaForTesting([&](const AppId& app_id) {
+        // The policy source will be removed and WebAppOsUninstallation is
+        // registered.
+        EXPECT_FALSE(
+            provider()->registrar().GetAppById(app_id)->IsPolicyInstalledApp());
+      }));
+  provider()->command_manager().ScheduleCommand(std::move(command));
+  run_loop.Run();
+}
+
+struct UninstallSources {
+  webapps::WebappUninstallSource source;
+};
+
+class WebAppUninstallCommandSourceTest
+    : public WebAppUninstallCommandTest,
+      public testing::WithParamInterface<UninstallSources> {
+ public:
+  WebAppUninstallCommandSourceTest() = default;
+  ~WebAppUninstallCommandSourceTest() override = default;
+};
+
+// Verify an app can be uninstalled with non-external uninstall_sources and
+// Sync.
+TEST_P(WebAppUninstallCommandSourceTest, RunTestForUninstallSource) {
+  auto web_app = test::CreateWebApp(GURL("https://www.example.com"),
+                                    WebAppManagement::kSync);
+  AppId app_id = web_app->app_id();
+  {
+    ScopedRegistryUpdate update(&provider()->sync_bridge());
+    update->CreateApp(std::move(web_app));
+  }
+
+  OsHooksErrors result;
+  EXPECT_CALL(os_integration_manager_, UninstallAllOsHooks(app_id, testing::_))
+      .WillOnce(base::test::RunOnceCallback<1>(result));
+
+  base::FilePath deletion_path = GetManifestResourcesDirectoryForApp(
+      GetWebAppsRootDirectory(profile()), app_id);
+
+  EXPECT_CALL(*file_utils_wrapper_, DeleteFileRecursively(deletion_path))
+      .WillOnce(testing::Return(true));
+
+  base::RunLoop loop;
+  provider()->command_manager().ScheduleCommand(
+      std::make_unique<WebAppUninstallCommand>(
+          app_id, absl::nullopt, GetParam().source,
+          base::BindLambdaForTesting([&](webapps::UninstallResultCode code) {
+            EXPECT_EQ(webapps::UninstallResultCode::kSuccess, code);
+            loop.Quit();
+          }),
+          profile(), &os_integration_manager_, &provider()->sync_bridge(),
+          &provider()->icon_manager(), &provider()->registrar(),
+          &provider()->install_manager(), &provider()->translation_manager()));
+
+  loop.Run();
+  EXPECT_EQ(provider()->registrar().GetAppById(app_id), nullptr);
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    All,
+    WebAppUninstallCommandSourceTest,
+    ::testing::Values(
+        UninstallSources({webapps::WebappUninstallSource::kAppMenu}),
+        UninstallSources({webapps::WebappUninstallSource::kAppsPage}),
+        UninstallSources({webapps::WebappUninstallSource::kOsSettings}),
+        UninstallSources({webapps::WebappUninstallSource::kAppManagement}),
+        UninstallSources({webapps::WebappUninstallSource::kMigration}),
+        UninstallSources({webapps::WebappUninstallSource::kAppList}),
+        UninstallSources({webapps::WebappUninstallSource::kShelf}),
+        UninstallSources({webapps::WebappUninstallSource::kSync}),
+        UninstallSources({webapps::WebappUninstallSource::kStartupCleanup})));
+
 }  // namespace
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc b/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
index e300c5d..97ffa4d 100644
--- a/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
+++ b/chrome/browser/web_applications/extensions/externally_managed_app_install_task_unittest.cc
@@ -248,7 +248,7 @@
     ++num_reparent_tab_calls_;
   }
 
-  void SetRemoveSourceCallbackForTesting(
+  void SetRemoveManagementTypeCallbackForTesting(
       base::RepeatingCallback<void(const AppId&)>) override {
     NOTIMPLEMENTED();
   }
diff --git a/chrome/browser/web_applications/test/fake_install_finalizer.cc b/chrome/browser/web_applications/test/fake_install_finalizer.cc
index cad6669..3bf3fce 100644
--- a/chrome/browser/web_applications/test/fake_install_finalizer.cc
+++ b/chrome/browser/web_applications/test/fake_install_finalizer.cc
@@ -104,7 +104,7 @@
                                        content::WebContents* web_contents) {
   ++num_reparent_tab_calls_;
 }
-void FakeInstallFinalizer::SetRemoveSourceCallbackForTesting(
+void FakeInstallFinalizer::SetRemoveManagementTypeCallbackForTesting(
     base::RepeatingCallback<void(const AppId&)>) {
   NOTIMPLEMENTED();
 }
diff --git a/chrome/browser/web_applications/test/fake_install_finalizer.h b/chrome/browser/web_applications/test/fake_install_finalizer.h
index 99c21b3..2534d30 100644
--- a/chrome/browser/web_applications/test/fake_install_finalizer.h
+++ b/chrome/browser/web_applications/test/fake_install_finalizer.h
@@ -53,7 +53,7 @@
   void ReparentTab(const AppId& app_id,
                    bool shortcut_created,
                    content::WebContents* web_contents) override;
-  void SetRemoveSourceCallbackForTesting(
+  void SetRemoveManagementTypeCallbackForTesting(
       base::RepeatingCallback<void(const AppId&)>) override;
 
   void SetNextFinalizeInstallResult(const AppId& app_id,
diff --git a/chrome/browser/web_applications/web_app.cc b/chrome/browser/web_applications/web_app.cc
index 80e5964..0faf85f0 100644
--- a/chrome/browser/web_applications/web_app.cc
+++ b/chrome/browser/web_applications/web_app.cc
@@ -687,28 +687,6 @@
     return value ? base::Value(*value) : base::Value();
   };
 
-  auto ConvertWebAppManagementToStringType =
-      [](const WebAppManagement::Type& source) {
-        switch (source) {
-          case WebAppManagement::Type::kSystem:
-            return "System";
-          case WebAppManagement::Type::kKiosk:
-            return "Kiosk";
-          case WebAppManagement::Type::kPolicy:
-            return "Policy";
-          case WebAppManagement::Type::kSubApp:
-            return "SubApp";
-          case WebAppManagement::Type::kWebAppStore:
-            return "WebAppStore";
-          case WebAppManagement::Type::kSync:
-            return "Sync";
-          case WebAppManagement::Type::kDefault:
-            return "Default";
-          case WebAppManagement::Type::kCommandLine:
-            return "CommandLine";
-        }
-      };
-
   // Prefix with a ! so these fields appear at the top when serialized.
   root.SetStringKey("!app_id", app_id_);
 
diff --git a/chrome/browser/web_applications/web_app_constants.cc b/chrome/browser/web_applications/web_app_constants.cc
index 55b043a..0808cae 100644
--- a/chrome/browser/web_applications/web_app_constants.cc
+++ b/chrome/browser/web_applications/web_app_constants.cc
@@ -5,6 +5,9 @@
 #include "chrome/browser/web_applications/web_app_constants.h"
 
 #include <ostream>
+#include <string>
+
+#include "components/webapps/browser/installable/installable_metrics.h"
 
 namespace web_app {
 
@@ -34,7 +37,71 @@
   }
 }
 
+std::string ConvertWebAppManagementToStringType(
+    const WebAppManagement::Type& source) {
+  switch (source) {
+    case WebAppManagement::Type::kSystem:
+      return "System";
+    case WebAppManagement::Type::kKiosk:
+      return "Kiosk";
+    case WebAppManagement::Type::kPolicy:
+      return "Policy";
+    case WebAppManagement::Type::kSubApp:
+      return "SubApp";
+    case WebAppManagement::Type::kWebAppStore:
+      return "WebAppStore";
+    case WebAppManagement::Type::kSync:
+      return "Sync";
+    case WebAppManagement::Type::kDefault:
+      return "Default";
+    case WebAppManagement::Type::kCommandLine:
+      return "CommandLine";
+  }
+}
+
 static_assert(OsHookType::kShortcuts == 0,
               "OsHookType enum should be zero based");
 
+std::string ConvertUninstallSourceToStringType(
+    const webapps::WebappUninstallSource& uninstall_source) {
+  switch (uninstall_source) {
+    case webapps::WebappUninstallSource::kUnknown:
+      return "Unknown";
+    case webapps::WebappUninstallSource::kAppMenu:
+      return "AppMenu";
+    case webapps::WebappUninstallSource::kAppsPage:
+      return "AppsPage";
+    case webapps::WebappUninstallSource::kOsSettings:
+      return "OS Settings";
+    case webapps::WebappUninstallSource::kSync:
+      return "Sync";
+    case webapps::WebappUninstallSource::kAppManagement:
+      return "App Management";
+    case webapps::WebappUninstallSource::kMigration:
+      return "Migration";
+    case webapps::WebappUninstallSource::kAppList:
+      return "App List";
+    case webapps::WebappUninstallSource::kShelf:
+      return "Shelf";
+    case webapps::WebappUninstallSource::kInternalPreinstalled:
+      return "Internal Preinstalled";
+    case webapps::WebappUninstallSource::kExternalPreinstalled:
+      return "External Preinstalled";
+    case webapps::WebappUninstallSource::kExternalPolicy:
+      return "External Policy";
+    case webapps::WebappUninstallSource::kSystemPreinstalled:
+      return "System Preinstalled";
+    case webapps::WebappUninstallSource::kPlaceholderReplacement:
+      return "Placeholder Replacement";
+    case webapps::WebappUninstallSource::kArc:
+      return "Arc";
+    case webapps::WebappUninstallSource::kSubApp:
+      return "SubApp";
+    case webapps::WebappUninstallSource::kStartupCleanup:
+      return "Startup Cleanup";
+    case webapps::WebappUninstallSource::kParentUninstall:
+      return "Parent App Uninstalled";
+  }
+}
+
 }  // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_constants.h b/chrome/browser/web_applications/web_app_constants.h
index 2a4bb4c..f143101 100644
--- a/chrome/browser/web_applications/web_app_constants.h
+++ b/chrome/browser/web_applications/web_app_constants.h
@@ -8,7 +8,9 @@
 #include <stddef.h>
 
 #include <iosfwd>
+#include <string>
 
+#include "components/webapps/browser/installable/installable_metrics.h"
 #include "third_party/blink/public/common/manifest/manifest.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom-forward.h"
 
@@ -54,6 +56,8 @@
 }  // namespace WebAppManagement
 
 std::ostream& operator<<(std::ostream& os, WebAppManagement::Type type);
+std::string ConvertWebAppManagementToStringType(
+    const WebAppManagement::Type& type);
 
 // Type of OS hook.
 //
@@ -257,6 +261,10 @@
 
 using ResultCallback = base::OnceCallback<void(Result)>;
 
+// Convert the uninstall source to string for easy printing.
+std::string ConvertUninstallSourceToStringType(
+    const webapps::WebappUninstallSource& uninstall_source);
+
 }  // namespace web_app
 
 #endif  // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_CONSTANTS_H_
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.cc b/chrome/browser/web_applications/web_app_install_finalizer.cc
index 21d8bf8..db790bc 100644
--- a/chrome/browser/web_applications/web_app_install_finalizer.cc
+++ b/chrome/browser/web_applications/web_app_install_finalizer.cc
@@ -30,7 +30,6 @@
 #include "chrome/browser/web_applications/os_integration/web_app_shortcuts_menu.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
 #include "chrome/browser/web_applications/user_display_mode.h"
-#include "chrome/browser/web_applications/user_uninstalled_preinstalled_web_app_prefs.h"
 #include "chrome/browser/web_applications/web_app.h"
 #include "chrome/browser/web_applications/web_app_command_manager.h"
 #include "chrome/browser/web_applications/web_app_helpers.h"
@@ -246,8 +245,8 @@
          external_install_source == WebAppManagement::Type::kWebAppStore ||
          external_install_source == WebAppManagement::Type::kDefault);
 
-  UninstallExternalWebAppOrRemoveSource(app_id, external_install_source,
-                                        uninstall_source, std::move(callback));
+  ScheduleUninstallCommand(app_id, external_install_source, uninstall_source,
+                           std::move(callback));
 }
 
 void WebAppInstallFinalizer::UninstallExternalWebAppByUrl(
@@ -285,56 +284,18 @@
     webapps::WebappUninstallSource webapp_uninstall_source,
     UninstallWebAppCallback callback) {
   DCHECK(started_);
-
-  // Check that the source was from a known 'user' or allowed ones such
-  // as kMigration.
-  // WebappUninstallSource::kSync should not be included in this list.
-  DCHECK(
-      webapp_uninstall_source == webapps::WebappUninstallSource::kUnknown ||
-      webapp_uninstall_source == webapps::WebappUninstallSource::kAppMenu ||
-      webapp_uninstall_source == webapps::WebappUninstallSource::kAppsPage ||
-      webapp_uninstall_source == webapps::WebappUninstallSource::kOsSettings ||
-      webapp_uninstall_source ==
-          webapps::WebappUninstallSource::kAppManagement ||
-      webapp_uninstall_source == webapps::WebappUninstallSource::kMigration ||
-      webapp_uninstall_source == webapps::WebappUninstallSource::kAppList ||
-      webapp_uninstall_source == webapps::WebappUninstallSource::kShelf ||
-      webapp_uninstall_source == webapps::WebappUninstallSource::kSubApp);
-
-  const WebApp* app = GetWebAppRegistrar().GetAppById(app_id);
-  DCHECK(app);
-  DCHECK(app->CanUserUninstallWebApp());
-
-  if (app->IsPreinstalledApp()) {
-    // Update the default uninstalled web_app prefs if it is a preinstalled app
-    // but being removed by user.
-    const WebApp::ExternalConfigMap& config_map =
-        app->management_to_external_config_map();
-    auto it = config_map.find(WebAppManagement::kDefault);
-    DCHECK(it != config_map.end());
-    UserUninstalledPreinstalledWebAppPrefs(profile_->GetPrefs())
-        .Add(app_id, it->second.install_urls);
-  }
-
-  // UninstallWebApp can wipe out an app with multiple sources. This
-  // is the behavior from the old bookmark-app based system, which does not
-  // support incremental AddSource/RemoveSource. Here we are preserving that
-  // behavior for now.
-  // TODO(loyso): Implement different uninstall flows in UI. For example, we
-  // should separate UninstallWebAppFromSyncByUser from
-  // UninstallWebApp.
-  UninstallWebAppInternal(app_id, webapp_uninstall_source, std::move(callback));
+  // An external install source (or management type) is only required
+  // for apps that have been externally installed.
+  ScheduleUninstallCommand(app_id, /*external_install_source=*/absl::nullopt,
+                           webapp_uninstall_source, std::move(callback));
 }
 
 void WebAppInstallFinalizer::RetryIncompleteUninstalls(
     const base::flat_set<AppId>& apps_to_uninstall) {
   for (const AppId& app_id : apps_to_uninstall) {
-    command_manager_->ScheduleCommand(std::make_unique<WebAppUninstallCommand>(
-        app_id,
-        url::Origin::Create(registrar_->GetAppById(app_id)->start_url()),
-        profile_, os_integration_manager_, sync_bridge_, icon_manager_,
-        registrar_, install_manager_, this, translation_manager_,
-        webapps::WebappUninstallSource::kStartupCleanup, base::DoNothing()));
+    ScheduleUninstallCommand(app_id, /*external_install_source=*/absl::nullopt,
+                             webapps::WebappUninstallSource::kStartupCleanup,
+                             base::DoNothing());
   }
 }
 
@@ -397,9 +358,9 @@
   started_ = false;
 }
 
-void WebAppInstallFinalizer::SetRemoveSourceCallbackForTesting(
+void WebAppInstallFinalizer::SetRemoveManagementTypeCallbackForTesting(
     base::RepeatingCallback<void(const AppId&)> callback) {
-  install_source_removed_callback_for_testing_ = std::move(callback);
+  management_type_removed_callback_for_testing_ = std::move(callback);
 }
 
 void WebAppInstallFinalizer::SetSubsystems(
@@ -423,64 +384,6 @@
   command_manager_ = command_manager;
 }
 
-void WebAppInstallFinalizer::UninstallWebAppInternal(
-    const AppId& app_id,
-    webapps::WebappUninstallSource uninstall_source,
-    UninstallWebAppCallback callback) {
-  command_manager_->ScheduleCommand(std::make_unique<WebAppUninstallCommand>(
-      app_id, url::Origin::Create(registrar_->GetAppById(app_id)->start_url()),
-      profile_, os_integration_manager_, sync_bridge_, icon_manager_,
-      registrar_, install_manager_, this, translation_manager_,
-      uninstall_source, std::move(callback)));
-}
-
-void WebAppInstallFinalizer::UninstallExternalWebAppOrRemoveSource(
-    const AppId& app_id,
-    WebAppManagement::Type install_source,
-    webapps::WebappUninstallSource uninstall_source,
-    UninstallWebAppCallback callback) {
-  const WebApp* app = GetWebAppRegistrar().GetAppById(app_id);
-  if (!app) {
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE,
-        base::BindOnce(std::move(callback),
-                       webapps::UninstallResultCode::kNoAppToUninstall));
-    return;
-  }
-
-  if (app->HasOnlySource(install_source)) {
-    UninstallWebAppInternal(app_id, uninstall_source, std::move(callback));
-  } else {
-    // There is a chance that removed source type is NOT user uninstallable
-    // but the remaining source (after removal) types are user uninstallable.
-    // In this case, the following call will register os uninstallation.
-    MaybeRegisterOsUninstall(
-        app, install_source, *os_integration_manager_,
-        base::BindOnce(&WebAppInstallFinalizer::OnMaybeRegisterOsUninstall,
-                       weak_ptr_factory_.GetWeakPtr(), app_id, install_source,
-                       std::move(callback)));
-  }
-}
-
-void WebAppInstallFinalizer::OnMaybeRegisterOsUninstall(
-    const AppId& app_id,
-    WebAppManagement::Type source,
-    UninstallWebAppCallback callback,
-    OsHooksErrors os_hooks_errors) {
-  ScopedRegistryUpdate update(sync_bridge_);
-  WebApp* app_to_update = update->UpdateApp(app_id);
-  app_to_update->RemoveSource(source);
-  if (source == WebAppManagement::kSubApp) {
-    app_to_update->SetParentAppId(absl::nullopt);
-  }
-  if (install_source_removed_callback_for_testing_)
-    install_source_removed_callback_for_testing_.Run(app_id);
-
-  base::ThreadTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE, base::BindOnce(std::move(callback),
-                                webapps::UninstallResultCode::kSuccess));
-}
-
 void WebAppInstallFinalizer::SetWebAppManifestFieldsAndWriteData(
     const WebAppInstallInfo& web_app_info,
     std::unique_ptr<WebApp> web_app,
@@ -719,6 +622,24 @@
   }
 }
 
+void WebAppInstallFinalizer::ScheduleUninstallCommand(
+    const AppId& app_id,
+    absl::optional<WebAppManagement::Type> external_install_source,
+    webapps::WebappUninstallSource uninstall_source,
+    UninstallWebAppCallback callback) {
+  auto uninstall_command = std::make_unique<WebAppUninstallCommand>(
+      app_id, external_install_source, uninstall_source, std::move(callback),
+      profile_, os_integration_manager_, sync_bridge_, icon_manager_,
+      registrar_, install_manager_, translation_manager_);
+
+  if (management_type_removed_callback_for_testing_) {
+    uninstall_command->SetRemoveManagementTypeCallbackForTesting(  // IN-TEST
+        management_type_removed_callback_for_testing_);
+  }
+
+  command_manager_->ScheduleCommand(std::move(uninstall_command));
+}
+
 FileHandlerUpdateAction WebAppInstallFinalizer::GetFileHandlerUpdateAction(
     const AppId& app_id,
     const WebAppInstallInfo& new_web_app_info) {
diff --git a/chrome/browser/web_applications/web_app_install_finalizer.h b/chrome/browser/web_applications/web_app_install_finalizer.h
index 6721e6b..55b3d06 100644
--- a/chrome/browser/web_applications/web_app_install_finalizer.h
+++ b/chrome/browser/web_applications/web_app_install_finalizer.h
@@ -146,7 +146,7 @@
                      WebAppTranslationManager* translation_manager,
                      WebAppCommandManager* command_manager);
 
-  virtual void SetRemoveSourceCallbackForTesting(
+  virtual void SetRemoveManagementTypeCallbackForTesting(
       base::RepeatingCallback<void(const AppId&)>);
 
   Profile* profile() { return profile_; }
@@ -159,18 +159,18 @@
                                   bool is_placeholder,
                                   GURL install_url);
 
+  // Used to schedule a WebAppUninstallCommand. The |external_install_source|
+  // field is only required for external app uninstalls to verify OS
+  // unregistration, and is not used for sync/manual uninstalls.
+  void ScheduleUninstallCommand(
+      const AppId& app_id,
+      absl::optional<WebAppManagement::Type> external_install_source,
+      webapps::WebappUninstallSource uninstall_source,
+      UninstallWebAppCallback callback);
+
  private:
   using CommitCallback = base::OnceCallback<void(bool success)>;
 
-  void UninstallWebAppInternal(const AppId& app_id,
-                               webapps::WebappUninstallSource uninstall_surface,
-                               UninstallWebAppCallback callback);
-  void UninstallExternalWebAppOrRemoveSource(
-      const AppId& app_id,
-      WebAppManagement::Type install_source,
-      webapps::WebappUninstallSource uninstall_surface,
-      UninstallWebAppCallback callback);
-
   void OnMaybeRegisterOsUninstall(const AppId& app_id,
                                   WebAppManagement::Type source,
                                   UninstallWebAppCallback callback,
@@ -237,7 +237,7 @@
   bool started_ = false;
 
   base::RepeatingCallback<void(const AppId& app_id)>
-      install_source_removed_callback_for_testing_;
+      management_type_removed_callback_for_testing_;
 
   base::WeakPtrFactory<WebAppInstallFinalizer> weak_ptr_factory_{this};
 };
diff --git a/chrome/browser/web_applications/web_app_install_manager.cc b/chrome/browser/web_applications/web_app_install_manager.cc
index eba8ccc..5fde4395 100644
--- a/chrome/browser/web_applications/web_app_install_manager.cc
+++ b/chrome/browser/web_applications/web_app_install_manager.cc
@@ -226,15 +226,12 @@
     RepeatingUninstallCallback callback) {
   if (!started_)
     return;
-
   for (auto& app_id : web_apps) {
-    command_manager_->ScheduleCommand(std::make_unique<WebAppUninstallCommand>(
-        app_id,
-        url::Origin::Create(registrar_->GetAppById(app_id)->start_url()),
-        profile_, os_integration_manager_, sync_bridge_, icon_manager_,
-        registrar_, this, finalizer_, translation_manager_,
+    // Sync uninstalls do not require an install source to be passed.
+    finalizer_->ScheduleUninstallCommand(
+        app_id, /*external_install_source=*/absl::nullopt,
         webapps::WebappUninstallSource::kSync,
-        base::BindOnce(callback, app_id)));
+        base::BindOnce(callback, app_id));
   }
 }
 
diff --git a/chrome/browser/web_applications/web_app_install_manager_unittest.cc b/chrome/browser/web_applications/web_app_install_manager_unittest.cc
index bb2c428..82908e105 100644
--- a/chrome/browser/web_applications/web_app_install_manager_unittest.cc
+++ b/chrome/browser/web_applications/web_app_install_manager_unittest.cc
@@ -19,6 +19,7 @@
 #include "base/test/scoped_feature_list.h"
 #include "build/chromeos_buildflags.h"
 #include "chrome/browser/web_applications/commands/install_from_info_command.h"
+#include "chrome/browser/web_applications/commands/web_app_uninstall_command.h"
 #include "chrome/browser/web_applications/policy/web_app_policy_manager.h"
 #include "chrome/browser/web_applications/test/fake_data_retriever.h"
 #include "chrome/browser/web_applications/test/fake_web_app_database_factory.h"
@@ -295,15 +296,32 @@
   }
 
   webapps::UninstallResultCode UninstallPolicyWebAppByUrl(const GURL& app_url) {
+    absl::optional<AppId> app_id =
+        fake_registry_controller_->registrar().LookupExternalAppId(app_url);
+    if (!app_id.has_value()) {
+      return webapps::UninstallResultCode::kNoAppToUninstall;
+    }
+
     webapps::UninstallResultCode result;
     base::RunLoop run_loop;
-    finalizer().UninstallExternalWebAppByUrl(
-        app_url, WebAppManagement::kPolicy,
+    auto uninstall_command = std::make_unique<WebAppUninstallCommand>(
+        app_id.value(), WebAppManagement::kPolicy,
         webapps::WebappUninstallSource::kExternalPolicy,
         base::BindLambdaForTesting([&](webapps::UninstallResultCode code) {
           result = code;
           run_loop.Quit();
+        }),
+        profile(), &fake_registry_controller_->os_integration_manager(),
+        &fake_registry_controller_->sync_bridge(), &icon_manager(),
+        &registrar(), &install_manager(),
+        &fake_registry_controller_->translation_manager());
+    uninstall_command->SetRemoveManagementTypeCallbackForTesting(
+        base::BindLambdaForTesting([&](const AppId& app_id) {
+          // On removing the policy source, the web app can now be user
+          // uninstalled.
+          EXPECT_TRUE(finalizer().CanUserUninstallWebApp(app_id));
         }));
+    command_manager().ScheduleCommand(std::move(uninstall_command));
     run_loop.Run();
     return result;
   }
@@ -311,12 +329,19 @@
   webapps::UninstallResultCode UninstallWebApp(const AppId& app_id) {
     webapps::UninstallResultCode result;
     base::RunLoop run_loop;
-    finalizer().UninstallWebApp(
-        app_id, webapps::WebappUninstallSource::kAppMenu,
+
+    auto uninstall_command = std::make_unique<WebAppUninstallCommand>(
+        app_id, /*management_source=*/absl::nullopt,
+        webapps::WebappUninstallSource::kAppMenu,
         base::BindLambdaForTesting([&](webapps::UninstallResultCode code) {
           result = code;
           run_loop.Quit();
-        }));
+        }),
+        profile(), &fake_registry_controller_->os_integration_manager(),
+        &fake_registry_controller_->sync_bridge(), &icon_manager(),
+        &registrar(), &install_manager(),
+        &fake_registry_controller_->translation_manager());
+    command_manager().ScheduleCommand(std::move(uninstall_command));
     run_loop.Run();
     return result;
   }
@@ -542,7 +567,6 @@
   EXPECT_TRUE(registrar().GetAppById(app_id));
   EXPECT_FALSE(observer_uninstall_called);
   EXPECT_FALSE(WasPreinstalledWebAppUninstalled(app_id));
-  EXPECT_TRUE(finalizer().CanUserUninstallWebApp(app_id));
 }
 
 TEST_P(WebAppInstallManagerTest_SyncOnly,
@@ -580,7 +604,6 @@
   EXPECT_TRUE(registrar().GetAppById(app_id));
   EXPECT_FALSE(observer_uninstall_called);
   EXPECT_FALSE(WasPreinstalledWebAppUninstalled(app_id));
-  EXPECT_TRUE(finalizer().CanUserUninstallWebApp(app_id));
 }
 
 TEST_P(WebAppInstallManagerTest_SyncOnly, DefaultAndUser_UninstallWebApp) {
diff --git a/chrome/browser/web_applications/web_app_uninstall_job.cc b/chrome/browser/web_applications/web_app_uninstall_job.cc
new file mode 100644
index 0000000..e6c505f
--- /dev/null
+++ b/chrome/browser/web_applications/web_app_uninstall_job.cc
@@ -0,0 +1,142 @@
+// 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/web_applications/web_app_uninstall_job.h"
+
+#include <memory>
+
+#include "base/bind.h"
+#include "base/memory/ptr_util.h"
+#include "base/metrics/histogram_functions.h"
+#include "chrome/browser/web_applications/isolation_prefs_utils.h"
+#include "chrome/browser/web_applications/web_app.h"
+#include "chrome/browser/web_applications/web_app_icon_manager.h"
+#include "chrome/browser/web_applications/web_app_install_finalizer.h"
+#include "chrome/browser/web_applications/web_app_install_manager.h"
+#include "chrome/browser/web_applications/web_app_registrar.h"
+#include "chrome/browser/web_applications/web_app_registry_update.h"
+#include "chrome/browser/web_applications/web_app_sync_bridge.h"
+#include "chrome/browser/web_applications/web_app_translation_manager.h"
+#include "components/webapps/browser/uninstall_result_code.h"
+
+namespace web_app {
+
+// static
+std::unique_ptr<WebAppUninstallJob> WebAppUninstallJob::CreateAndStart(
+    const AppId& app_id,
+    const url::Origin& app_origin,
+    UninstallCallback callback,
+    OsIntegrationManager& os_integration_manager,
+    WebAppSyncBridge& sync_bridge,
+    WebAppIconManager& icon_manager,
+    WebAppRegistrar& registrar,
+    WebAppInstallManager& install_manager,
+    WebAppTranslationManager& translation_manager,
+    PrefService& profile_prefs) {
+  return base::WrapUnique(new WebAppUninstallJob(
+      app_id, app_origin, std::move(callback), os_integration_manager,
+      sync_bridge, icon_manager, registrar, install_manager,
+      translation_manager, profile_prefs));
+}
+
+WebAppUninstallJob::WebAppUninstallJob(
+    const AppId& app_id,
+    const url::Origin& app_origin,
+    UninstallCallback callback,
+    OsIntegrationManager& os_integration_manager,
+    WebAppSyncBridge& sync_bridge,
+    WebAppIconManager& icon_manager,
+    WebAppRegistrar& registrar,
+    WebAppInstallManager& install_manager,
+    WebAppTranslationManager& translation_manager,
+    PrefService& profile_prefs)
+    : app_id_(app_id),
+      callback_(std::move(callback)),
+      registrar_(&registrar),
+      sync_bridge_(&sync_bridge),
+      install_manager_(&install_manager) {
+  Start(app_origin, os_integration_manager, icon_manager, translation_manager,
+        profile_prefs);
+}
+
+WebAppUninstallJob::~WebAppUninstallJob() = default;
+
+void WebAppUninstallJob::Start(const url::Origin& app_origin,
+                               OsIntegrationManager& os_integration_manager,
+                               WebAppIconManager& icon_manager,
+                               WebAppTranslationManager& translation_manager,
+                               PrefService& profile_prefs) {
+  DCHECK(install_manager_);
+
+  DCHECK(state_ == State::kNotStarted);
+  state_ = State::kPendingDataDeletion;
+
+  // Note: It is supported to re-start an uninstall on startup, so
+  // `is_uninstalling()` is not checked. It is a class invariant that there can
+  // never be more than one uninstall task operating on the same web app at the
+  // same time.
+  {
+    ScopedRegistryUpdate update(sync_bridge_);
+    WebApp* app = update->UpdateApp(app_id_);
+    DCHECK(app);
+    app->SetIsUninstalling(true);
+  }
+  install_manager_->NotifyWebAppWillBeUninstalled(app_id_);
+
+  RemoveAppIsolationState(&profile_prefs, app_origin);
+
+  os_integration_manager.UninstallAllOsHooks(
+      app_id_, base::BindOnce(&WebAppUninstallJob::OnOsHooksUninstalled,
+                              weak_ptr_factory_.GetWeakPtr()));
+  icon_manager.DeleteData(app_id_,
+                          base::BindOnce(&WebAppUninstallJob::OnIconDataDeleted,
+                                         weak_ptr_factory_.GetWeakPtr()));
+
+  translation_manager.DeleteTranslations(
+      app_id_, base::BindOnce(&WebAppUninstallJob::OnTranslationDataDeleted,
+                              weak_ptr_factory_.GetWeakPtr()));
+}
+
+void WebAppUninstallJob::OnOsHooksUninstalled(OsHooksErrors errors) {
+  DCHECK(state_ == State::kPendingDataDeletion);
+  hooks_uninstalled_ = true;
+  base::UmaHistogramBoolean("WebApp.Uninstall.OsHookSuccess", errors.none());
+  errors_ = errors_ || errors.any();
+  MaybeFinishUninstall();
+}
+
+void WebAppUninstallJob::OnIconDataDeleted(bool success) {
+  DCHECK(state_ == State::kPendingDataDeletion);
+  app_data_deleted_ = true;
+  base::UmaHistogramBoolean("WebApp.Uninstall.IconDataSuccess", success);
+  errors_ = errors_ || !success;
+  MaybeFinishUninstall();
+}
+
+void WebAppUninstallJob::OnTranslationDataDeleted(bool success) {
+  DCHECK(state_ == State::kPendingDataDeletion);
+  translation_data_deleted_ = true;
+  errors_ = errors_ || !success;
+  MaybeFinishUninstall();
+}
+
+void WebAppUninstallJob::MaybeFinishUninstall() {
+  DCHECK(state_ == State::kPendingDataDeletion);
+  if (!hooks_uninstalled_ || !app_data_deleted_ || !translation_data_deleted_) {
+    return;
+  }
+  state_ = State::kDone;
+
+  base::UmaHistogramBoolean("WebApp.Uninstall.Result", !errors_);
+  {
+    DCHECK_NE(registrar_->GetAppById(app_id_), nullptr);
+    ScopedRegistryUpdate update(sync_bridge_);
+    update->DeleteApp(app_id_);
+  }
+  install_manager_->NotifyWebAppUninstalled(app_id_);
+  std::move(callback_).Run(errors_ ? webapps::UninstallResultCode::kError
+                                   : webapps::UninstallResultCode::kSuccess);
+}
+
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/web_app_uninstall_job.h b/chrome/browser/web_applications/web_app_uninstall_job.h
new file mode 100644
index 0000000..5edcb384
--- /dev/null
+++ b/chrome/browser/web_applications/web_app_uninstall_job.h
@@ -0,0 +1,112 @@
+// 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_WEB_APPLICATIONS_WEB_APP_UNINSTALL_JOB_H_
+#define CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_UNINSTALL_JOB_H_
+
+#include <memory>
+
+#include "base/callback.h"
+#include "base/memory/raw_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "chrome/browser/web_applications/os_integration/os_integration_manager.h"
+#include "chrome/browser/web_applications/web_app_id.h"
+#include "url/origin.h"
+
+class PrefService;
+
+namespace webapps {
+enum class UninstallResultCode;
+enum class WebappUninstallSource;
+}  // namespace webapps
+
+namespace web_app {
+
+class OsIntegrationManager;
+class WebAppIconManager;
+class WebAppInstallManager;
+class WebAppRegistrar;
+class WebAppSyncBridge;
+class WebAppTranslationManager;
+
+// Uninstalls a given web app by:
+// 1) Unregistering OS hooks.
+// 2) Deleting the app from the database.
+// 3) Deleting data on disk.
+// Extra invariants:
+// * There is never more than one uninstall task operating on the same app at
+//   the same time.
+class WebAppUninstallJob {
+ public:
+  using UninstallCallback =
+      base::OnceCallback<void(webapps::UninstallResultCode)>;
+
+  // static
+  static std::unique_ptr<WebAppUninstallJob> CreateAndStart(
+      const AppId& app_id,
+      const url::Origin& app_origin,
+      UninstallCallback callback,
+      OsIntegrationManager& os_integration_manager,
+      WebAppSyncBridge& sync_bridge,
+      WebAppIconManager& icon_manager,
+      WebAppRegistrar& registrar,
+      WebAppInstallManager& install_manager,
+      WebAppTranslationManager& translation_manager,
+      PrefService& profile_prefs);
+
+  ~WebAppUninstallJob();
+
+ private:
+  WebAppUninstallJob(const AppId& app_id,
+                     const url::Origin& app_origin,
+                     UninstallCallback callback,
+                     OsIntegrationManager& os_integration_manager,
+                     WebAppSyncBridge& sync_bridge,
+                     WebAppIconManager& icon_manager,
+                     WebAppRegistrar& registrar,
+                     WebAppInstallManager& install_manager,
+                     WebAppTranslationManager& translation_manager,
+                     PrefService& profile_prefs);
+
+  // The given `app_id` must correspond to an app in the `registrar`.
+  // This modifies the app to set `is_uninstalling()` to true, and delete the
+  // app from the registry after uninstallation is complete.
+  void Start(const url::Origin& app_origin,
+             OsIntegrationManager& os_integration_manager,
+             WebAppIconManager& icon_manager,
+             WebAppTranslationManager& translation_manager,
+             PrefService& profile_prefs);
+  void OnOsHooksUninstalled(OsHooksErrors errors);
+  void OnIconDataDeleted(bool success);
+  void OnTranslationDataDeleted(bool success);
+  void MaybeFinishUninstall();
+
+  enum class State {
+    kNotStarted = 0,
+    kPendingDataDeletion = 1,
+    kDone = 2,
+  } state_ = State::kNotStarted;
+
+  AppId app_id_;
+  UninstallCallback callback_;
+
+  // The WebAppUninstallJob is kicked off by the WebAppUninstallCommand
+  // and is constructed and destructed well within the lifetime of the
+  // Uninstall command. This ensures that this class is guaranteed to be
+  // destructed before any of the WebAppProvider systems shut down.
+  raw_ptr<WebAppRegistrar> registrar_;
+  raw_ptr<WebAppSyncBridge> sync_bridge_;
+  raw_ptr<WebAppInstallManager> install_manager_;
+
+  bool app_data_deleted_ = false;
+  bool translation_data_deleted_ = false;
+  bool hooks_uninstalled_ = false;
+  bool errors_ = false;
+
+  base::WeakPtrFactory<WebAppUninstallJob> weak_ptr_factory_{this};
+};
+
+}  // namespace web_app
+
+#endif  // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_UNINSTALL_JOB_H_
diff --git a/chrome/browser/webauthn/chrome_authenticator_request_delegate_unittest.cc b/chrome/browser/webauthn/chrome_authenticator_request_delegate_unittest.cc
index 0e4cbd1..e7d7083e 100644
--- a/chrome/browser/webauthn/chrome_authenticator_request_delegate_unittest.cc
+++ b/chrome/browser/webauthn/chrome_authenticator_request_delegate_unittest.cc
@@ -148,14 +148,14 @@
    public:
     void set_cable_data(
         device::FidoRequestType request_type,
-        std::vector<device::CableDiscoveryData> cable_data,
+        std::vector<device::CableDiscoveryData> data,
         const absl::optional<std::array<uint8_t, device::cablev2::kQRKeySize>>&
             qr_generator_key,
-        std::vector<std::unique_ptr<device::cablev2::Pairing>> v2_pairings)
+        std::vector<std::unique_ptr<device::cablev2::Pairing>> pairings)
         override {
-      this->cable_data = std::move(cable_data);
-      this->qr_key = qr_generator_key;
-      this->v2_pairings = std::move(v2_pairings);
+      cable_data = std::move(data);
+      qr_key = qr_generator_key;
+      v2_pairings = std::move(pairings);
     }
 
     void set_android_accessory_params(
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index a3a3d43..be78b53 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-main-1661384205-142099a268b36c6d5c4493880c31475b5b649143.profdata
+chrome-linux-main-1661428458-36b1c3e1f19082ebe3c36dccc7975c4d058522e8.profdata
diff --git a/chrome/build/mac-arm.pgo.txt b/chrome/build/mac-arm.pgo.txt
index 269aa45..021f43d 100644
--- a/chrome/build/mac-arm.pgo.txt
+++ b/chrome/build/mac-arm.pgo.txt
@@ -1 +1 @@
-chrome-mac-arm-main-1661384205-ea5cc04a4683d879d179c1c40d9deb92556c7135.profdata
+chrome-mac-arm-main-1661428458-ce280f925349fbc79bf216ab7fe81d44e06f9f37.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index e513c62..0f50a9c 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-main-1661384205-24ab0d1fad67efe658b33303579c02ffcfbd4023.profdata
+chrome-mac-main-1661428458-da3ec051db3857bae55fcdc227dc2d50881cbba3.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt
index ed97069..880edf11 100644
--- a/chrome/build/win32.pgo.txt
+++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@
-chrome-win32-main-1661384205-8deb92ce7f68f70b30dfc970fe22ad5e4ba40459.profdata
+chrome-win32-main-1661439478-72ee1eccc6dc8fa62adaf860d97bcb7c77c4f7fe.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 01bbb82..1844748 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-main-1661396378-853a8456258e1a4f7a21b3fe47ba032cc41c0919.profdata
+chrome-win64-main-1661439478-10d286446d6cb29eeeabc5a47c3b11e9cd5af5f5.profdata
diff --git a/chrome/common/extensions/api/desktop_capture.json b/chrome/common/extensions/api/desktop_capture.json
index 178d0a93..2edafc3 100644
--- a/chrome/common/extensions/api/desktop_capture.json
+++ b/chrome/common/extensions/api/desktop_capture.json
@@ -18,6 +18,12 @@
         "type": "string",
         "enum": ["include", "exclude"],
         "description": "Mirrors <a href=\"https://w3c.github.io/mediacapture-screen-share/#dom-systemaudiopreferenceenum\">SystemAudioPreferenceEnum</a>."
+      },
+      {
+        "id": "SelfCapturePreferenceEnum",
+        "type": "string",
+        "enum": ["include", "exclude"],
+        "description": "Mirrors <a href=\"https://w3c.github.io/mediacapture-screen-share/#dom-selfcapturepreferenceenum\">SelfCapturePreferenceEnum</a>."
       }
     ],
     "functions": [
@@ -48,6 +54,11 @@
                 "$ref": "SystemAudioPreferenceEnum",
                 "optional": true,
                 "description": "Mirrors <a href=\"https://w3c.github.io/mediacapture-screen-share/#dom-displaymediastreamconstraints-systemaudio\">systemAudio</a>."
+              },
+              "selfBrowserSurface": {
+                "$ref": "SelfCapturePreferenceEnum",
+                "optional": true,
+                "description": "Mirrors <a href=\"https://w3c.github.io/mediacapture-screen-share/#dom-displaymediastreamconstraints-selfbrowsersurface\">selfBrowserSurface</a>."
               }
             },
             "description": "Mirrors members of <a href=\"https://w3c.github.io/mediacapture-screen-share/#dom-displaymediastreamconstraints\">DisplayMediaStreamConstraints</a> which need to be applied before the user makes their selection, and must therefore be provided to chooseDesktopMedia() rather than be deferred to getUserMedia()."
diff --git a/chrome/common/net/x509_certificate_model_nss.cc b/chrome/common/net/x509_certificate_model_nss.cc
index fd755732..3fb34b0 100644
--- a/chrome/common/net/x509_certificate_model_nss.cc
+++ b/chrome/common/net/x509_certificate_model_nss.cc
@@ -14,8 +14,6 @@
 
 #include "chrome/third_party/mozilla_security_manager/nsNSSCertHelper.h"
 #include "chrome/third_party/mozilla_security_manager/nsNSSCertificate.h"
-#include "crypto/nss_util.h"
-#include "crypto/scoped_nss_types.h"
 #include "net/cert/x509_util_nss.h"
 
 namespace psm = mozilla_security_manager;
diff --git a/chrome/installer/setup/taskbar_util_unittest.cc b/chrome/installer/setup/taskbar_util_unittest.cc
index bee9e27..8220190 100644
--- a/chrome/installer/setup/taskbar_util_unittest.cc
+++ b/chrome/installer/setup/taskbar_util_unittest.cc
@@ -15,12 +15,12 @@
       registry_override_manager.OverrideRegistry(HKEY_CURRENT_USER));
 
   // By default, installer has not pinned chrome to taskbar.
-  EXPECT_FALSE(GetInstallerPinnedChromeToTaskbar());
+  EXPECT_FALSE(GetInstallerPinnedChromeToTaskbar().has_value());
 
   // Verify that GetInstallerPinnedChromeToTaskbar returns the values
   // set by SetInstallerPinnedChromeToTaskbar.
   ASSERT_TRUE(SetInstallerPinnedChromeToTaskbar(true));
-  EXPECT_TRUE(GetInstallerPinnedChromeToTaskbar());
+  EXPECT_TRUE(GetInstallerPinnedChromeToTaskbar().value());
   ASSERT_TRUE(SetInstallerPinnedChromeToTaskbar(false));
-  EXPECT_FALSE(GetInstallerPinnedChromeToTaskbar());
+  EXPECT_FALSE(GetInstallerPinnedChromeToTaskbar().value());
 }
diff --git a/chrome/installer/util/l10n_string_util.cc b/chrome/installer/util/l10n_string_util.cc
index 12b9fd2b..a06fb90d 100644
--- a/chrome/installer/util/l10n_string_util.cc
+++ b/chrome/installer/util/l10n_string_util.cc
@@ -85,12 +85,6 @@
   return localized_string;
 }
 
-std::wstring GetLocalizedStringF(UINT base_message_id, const std::wstring& a) {
-  return base::ReplaceStringPlaceholders(GetLocalizedString(base_message_id),
-                                         std::vector<std::wstring>(1, a),
-                                         nullptr);
-}
-
 // Here we generate the url spec with the Microsoft res:// scheme which is
 // explained here : http://support.microsoft.com/kb/220830
 std::wstring GetLocalizedEulaResource() {
diff --git a/chrome/installer/util/l10n_string_util.h b/chrome/installer/util/l10n_string_util.h
index 4b5d737..f19206c 100644
--- a/chrome/installer/util/l10n_string_util.h
+++ b/chrome/installer/util/l10n_string_util.h
@@ -38,10 +38,6 @@
 // canary Chrome).
 std::wstring GetLocalizedString(int base_message_id);
 
-// Returns the localized version of a string (obtained from GetLocalizedString)
-// with $1 replaced with |a|. Additionally, $$ is replaced by $.
-std::wstring GetLocalizedStringF(int base_message_id, const std::wstring& a);
-
 // Given the system language, return a url that points to the localized eula.
 // The empty string is returned on failure.
 std::wstring GetLocalizedEulaResource();
diff --git a/chrome/installer/util/taskbar_util.cc b/chrome/installer/util/taskbar_util.cc
index 5fa4249..2f04c28 100644
--- a/chrome/installer/util/taskbar_util.cc
+++ b/chrome/installer/util/taskbar_util.cc
@@ -140,19 +140,19 @@
   base::win::RegKey key;
   if (key.Create(HKEY_CURRENT_USER, install_static::GetRegistryPath().c_str(),
                  KEY_SET_VALUE) == ERROR_SUCCESS) {
-    return installed ? key.WriteValue(kInstallerPinned, 1) == ERROR_SUCCESS
-                     : key.DeleteValue(kInstallerPinned) == ERROR_SUCCESS;
+    return key.WriteValue(kInstallerPinned, installed ? 1 : 0) == ERROR_SUCCESS;
   }
   return false;
 }
 
-bool GetInstallerPinnedChromeToTaskbar() {
+absl::optional<bool> GetInstallerPinnedChromeToTaskbar() {
   base::win::RegKey key;
   if (key.Open(HKEY_CURRENT_USER, install_static::GetRegistryPath().c_str(),
                KEY_QUERY_VALUE | KEY_WOW64_32KEY) == ERROR_SUCCESS) {
     DWORD installer_pinned = 0;
     LONG result = key.ReadValueDW(kInstallerPinned, &installer_pinned);
-    return (result == ERROR_SUCCESS) && (installer_pinned != 0);
+    if (result == ERROR_SUCCESS)
+      return installer_pinned != 0;
   }
-  return false;
+  return absl::nullopt;
 }
diff --git a/chrome/installer/util/taskbar_util.h b/chrome/installer/util/taskbar_util.h
index c40a531..57c4a83 100644
--- a/chrome/installer/util/taskbar_util.h
+++ b/chrome/installer/util/taskbar_util.h
@@ -44,7 +44,12 @@
 // Returns true if registry key operation was successful, false otherwise.
 bool SetInstallerPinnedChromeToTaskbar(bool installed);
 
-// Returns whether the current user has an installer-pinned shortcut to Chrome.
-bool GetInstallerPinnedChromeToTaskbar();
+// Returns true if the current user has a Win10+ installer-pinned shortcut to
+// Chrome, false if the user doesn't and the installer at the time of the
+// install pinned some percentage of installs to the taskbar, and absl::nullopt
+// if the Chrome install was done before the installer pinned Chrome to the
+// taskbar for versions of Windows 10+ that support programmatic pinning to the
+// taskbar.
+absl::optional<bool> GetInstallerPinnedChromeToTaskbar();
 
 #endif  // CHROME_INSTALLER_UTIL_TASKBAR_UTIL_H_
diff --git a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
index 1525e045..33f48d72 100644
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -329,7 +329,7 @@
   // We use that so we don't have to make RenderView::OnFillPasswordForm()
   // protected.
   void SimulateOnFillPasswordForm(const PasswordFormFillData& fill_data) {
-    password_autofill_agent_->FillPasswordForm(fill_data);
+    password_autofill_agent_->SetPasswordFillData(fill_data);
   }
 
   void SendVisiblePasswordForms() {
@@ -3832,14 +3832,14 @@
 TEST_F(PasswordAutofillAgentTest,
        UpdateSuggestionsIfNewerCredentialsAreSupplied) {
   // Supply old fill data
-  password_autofill_agent_->FillPasswordForm(fill_data_);
+  password_autofill_agent_->SetPasswordFillData(fill_data_);
   // The username and password should have been autocompleted.
   CheckTextFieldsSuggestedState(kAliceUsername, true, kAlicePassword, true);
 
   // Change fill data
   fill_data_.password_field.value = u"a-changed-password";
   // Supply changed fill data
-  password_autofill_agent_->FillPasswordForm(fill_data_);
+  password_autofill_agent_->SetPasswordFillData(fill_data_);
   CheckTextFieldsSuggestedState(kAliceUsername, true, "a-changed-password",
                                 true);
 }
@@ -3847,7 +3847,7 @@
 TEST_F(PasswordAutofillAgentTest, SuggestLatestCredentials) {
   SimulateClosingTouchToFillIfAndroid(kUsernameName);
 
-  password_autofill_agent_->FillPasswordForm(fill_data_);
+  password_autofill_agent_->SetPasswordFillData(fill_data_);
   SimulateElementClick(kPasswordName);
   EXPECT_CALL(fake_driver_, ShowPasswordSuggestions);
   base::RunLoop().RunUntilIdle();
@@ -3855,7 +3855,7 @@
   // Change fill data
   fill_data_.username_field.value = u"a-changed-username";
 
-  password_autofill_agent_->FillPasswordForm(fill_data_);
+  password_autofill_agent_->SetPasswordFillData(fill_data_);
   SimulateElementClick(kPasswordName);
   // Empty value because nothing was typed into the field.
   CheckSuggestions(u"", true);
diff --git a/chrome/services/system_signals/linux/linux_system_signals_service.cc b/chrome/services/system_signals/linux/linux_system_signals_service.cc
index 4e64a1a..b7c19d9 100644
--- a/chrome/services/system_signals/linux/linux_system_signals_service.cc
+++ b/chrome/services/system_signals/linux/linux_system_signals_service.cc
@@ -8,6 +8,7 @@
 
 #include "components/device_signals/core/common/common_types.h"
 #include "components/device_signals/core/system_signals/file_system_service.h"
+#include "components/device_signals/core/system_signals/linux/linux_executable_metadata_service.h"
 #include "components/device_signals/core/system_signals/linux/linux_platform_delegate.h"
 #include "components/device_signals/core/system_signals/platform_delegate.h"
 
@@ -18,7 +19,10 @@
     : LinuxSystemSignalsService(
           std::move(receiver),
           device_signals::FileSystemService::Create(
-              std::make_unique<device_signals::LinuxPlatformDelegate>())) {}
+              std::make_unique<device_signals::LinuxPlatformDelegate>(),
+              std::make_unique<device_signals::LinuxExecutableMetadataService>(
+                  std::make_unique<device_signals::LinuxPlatformDelegate>()))) {
+}
 
 LinuxSystemSignalsService::LinuxSystemSignalsService(
     mojo::PendingReceiver<device_signals::mojom::SystemSignalsService> receiver,
diff --git a/chrome/services/system_signals/mac/mac_system_signals_service.mm b/chrome/services/system_signals/mac/mac_system_signals_service.mm
index 59342e3..4e04fff 100644
--- a/chrome/services/system_signals/mac/mac_system_signals_service.mm
+++ b/chrome/services/system_signals/mac/mac_system_signals_service.mm
@@ -8,6 +8,7 @@
 
 #include "components/device_signals/core/common/common_types.h"
 #include "components/device_signals/core/system_signals/file_system_service.h"
+#include "components/device_signals/core/system_signals/mac/mac_executable_metadata_service.h"
 #include "components/device_signals/core/system_signals/mac/mac_platform_delegate.h"
 #include "components/device_signals/core/system_signals/platform_delegate.h"
 
@@ -18,7 +19,9 @@
     : MacSystemSignalsService(
           std::move(receiver),
           device_signals::FileSystemService::Create(
-              std::make_unique<device_signals::MacPlatformDelegate>())) {}
+              std::make_unique<device_signals::MacPlatformDelegate>(),
+              std::make_unique<device_signals::MacExecutableMetadataService>(
+                  std::make_unique<device_signals::MacPlatformDelegate>()))) {}
 
 MacSystemSignalsService::MacSystemSignalsService(
     mojo::PendingReceiver<device_signals::mojom::SystemSignalsService> receiver,
diff --git a/chrome/services/system_signals/win/win_system_signals_service.cc b/chrome/services/system_signals/win/win_system_signals_service.cc
index 4d758bed..14409c7d 100644
--- a/chrome/services/system_signals/win/win_system_signals_service.cc
+++ b/chrome/services/system_signals/win/win_system_signals_service.cc
@@ -9,6 +9,7 @@
 #include "components/device_signals/core/common/common_types.h"
 #include "components/device_signals/core/system_signals/file_system_service.h"
 #include "components/device_signals/core/system_signals/platform_delegate.h"
+#include "components/device_signals/core/system_signals/win/win_executable_metadata_service.h"
 #include "components/device_signals/core/system_signals/win/win_platform_delegate.h"
 #include "components/device_signals/core/system_signals/win/wmi_client.h"
 #include "components/device_signals/core/system_signals/win/wmi_client_impl.h"
@@ -22,7 +23,9 @@
     : WinSystemSignalsService(
           std::move(receiver),
           device_signals::FileSystemService::Create(
-              std::make_unique<device_signals::WinPlatformDelegate>()),
+              std::make_unique<device_signals::WinPlatformDelegate>(),
+              std::make_unique<device_signals::WinExecutableMetadataService>(
+                  std::make_unique<device_signals::WinPlatformDelegate>())),
           std::make_unique<device_signals::WmiClientImpl>(),
           std::make_unique<device_signals::WscClientImpl>()) {}
 
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index c216606a..601f53e 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -3853,8 +3853,8 @@
         "../browser/ash/policy/networking/policy_certs_browsertest.cc",
         "../browser/ash/policy/reporting/metrics_reporting/metric_browsertest_utils.cc",
         "../browser/ash/policy/reporting/metrics_reporting/metric_browsertest_utils.h",
-        "../browser/ash/policy/reporting/metrics_reporting/network/network_info_sampler_browsertest.cc",
         "../browser/ash/policy/reporting/metrics_reporting/network/network_events_observer_browsertest.cc",
+        "../browser/ash/policy/reporting/metrics_reporting/network/network_info_sampler_browsertest.cc",
         "../browser/ash/policy/reporting/metrics_reporting/usb/usb_events_browsertest.cc",
         "../browser/ash/policy/reporting/user_added_removed/user_added_removed_reporter_browsertest.cc",
         "../browser/ash/policy/status_collector/child_status_collector_browsertest.cc",
@@ -3871,6 +3871,7 @@
         "../browser/ash/web_applications/camera_app/camera_app_integration_browsertest.cc",
         "../browser/ash/web_applications/diagnostics_app_integration_browsertest.cc",
         "../browser/ash/web_applications/eche_app_integration_browsertest.cc",
+        "../browser/ash/web_applications/face_ml_integration_browsertest.cc",
         "../browser/ash/web_applications/firmware_update_app_integration_browsertest.cc",
         "../browser/ash/web_applications/help_app/help_app_integration_browsertest.cc",
         "../browser/ash/web_applications/media_app/media_app_integration_browsertest.cc",
@@ -4142,6 +4143,7 @@
         "//ash/services/multidevice_setup/public/cpp:test_support",
         "//ash/webui/diagnostics_ui",
         "//ash/webui/eche_app_ui",
+        "//ash/webui/face_ml_app_ui",
         "//ash/webui/file_manager:constants",
         "//ash/webui/firmware_update_ui",
         "//ash/webui/help_app_ui",
@@ -4658,6 +4660,7 @@
       "../browser/lacros/field_trial_service_lacros_browsertest.cc",
       "../browser/lacros/file_manager_lacros_browsertest.cc",
       "../browser/lacros/idle_service_lacros_browsertest.cc",
+      "../browser/sync/test/lacros/sync_apps_toggle_sharing_lacros_browsertest.cc",
       "../browser/sync/test/lacros/sync_custom_passphrase_sharing_lacros_browsertest.cc",
       "../browser/upgrade_detector/get_installed_version_lacros_browsertest.cc",
     ]
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json
index c7b377f6..98b27091 100644
--- a/chrome/test/data/policy/policy_test_cases.json
+++ b/chrome/test/data/policy/policy_test_cases.json
@@ -8445,11 +8445,31 @@
     "can_be_recommended": true,
     "policy_pref_mapping_tests": [
       {
+        "policies": {},
+        "prefs": {
+          "settings.enable_screen_lock": {
+            "default_value": false
+          }
+        }
+      },
+      {
         "policies": {
           "ChromeOsLockOnIdleSuspend": true
         },
         "prefs": {
-          "settings.enable_screen_lock": {}
+          "settings.enable_screen_lock": {
+            "value": true
+          }
+        }
+      },
+      {
+        "policies": {
+          "ChromeOsLockOnIdleSuspend": false
+        },
+        "prefs": {
+          "settings.enable_screen_lock": {
+            "value": false
+          }
         }
       }
     ]
@@ -19714,5 +19734,25 @@
         }
       }
     ]
+  },
+  "BatterySaverModeAvailability": {
+    "os": [
+      "win",
+      "linux",
+      "mac"
+    ],
+    "policy_pref_mapping_tests": [
+      {
+        "policies": {
+          "BatterySaverModeAvailability": 2
+        },
+        "prefs": {
+          "performance_tuning.battery_saver_mode.state": {
+            "location": "local_state",
+            "value": 2
+          }
+        }
+      }
+    ]
   }
 }
diff --git a/chrome/test/data/webui/cr_components/chromeos/network/cr_policy_network_behavior_mojo_tests.js b/chrome/test/data/webui/cr_components/chromeos/network/cr_policy_network_behavior_mojo_tests.js
index 1d45ccf5..1fbbb3c 100644
--- a/chrome/test/data/webui/cr_components/chromeos/network/cr_policy_network_behavior_mojo_tests.js
+++ b/chrome/test/data/webui/cr_components/chromeos/network/cr_policy_network_behavior_mojo_tests.js
@@ -8,7 +8,7 @@
 import 'chrome://resources/mojo/chromeos/services/network_config/public/mojom/network_types.mojom-lite.js';
 
 import {CrPolicyNetworkBehaviorMojo} from 'chrome://resources/cr_components/chromeos/network/cr_policy_network_behavior_mojo.m.js';
-import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.js';
 import {Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 suite('CrPolicyNetworkBehaviorMojo', function() {
diff --git a/chrome/test/data/webui/cr_elements/cr_policy_indicator_behavior_tests.ts b/chrome/test/data/webui/cr_elements/cr_policy_indicator_behavior_tests.ts
index ee70944..733d2ebc 100644
--- a/chrome/test/data/webui/cr_elements/cr_policy_indicator_behavior_tests.ts
+++ b/chrome/test/data/webui/cr_elements/cr_policy_indicator_behavior_tests.ts
@@ -7,7 +7,7 @@
 // clang-format off
 import './cr_policy_strings.js';
 
-import {CrPolicyIndicatorBehavior, CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorBehavior, CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.js';
 import {isChromeOS} from 'chrome://resources/js/cr.m.js';
 import {mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
diff --git a/chrome/test/data/webui/cr_elements/cr_policy_indicator_tests.ts b/chrome/test/data/webui/cr_elements/cr_policy_indicator_tests.ts
index 7532bd12..623ce4d 100644
--- a/chrome/test/data/webui/cr_elements/cr_policy_indicator_tests.ts
+++ b/chrome/test/data/webui/cr_elements/cr_policy_indicator_tests.ts
@@ -3,14 +3,13 @@
 // found in the LICENSE file.
 
 // clang-format off
-import 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
-import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
+import 'chrome://resources/cr_elements/policy/cr_tooltip_icon.js';
 import './cr_policy_strings.js';
 
-import {CrPolicyIndicatorElement} from 'chrome://resources/cr_elements/policy/cr_policy_indicator.m.js';
-import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorElement} from 'chrome://resources/cr_elements/policy/cr_policy_indicator.js';
+import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.js';
 import {isChromeOS} from 'chrome://resources/js/cr.m.js';
-
 import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 // clang-format on
 
diff --git a/chrome/test/data/webui/cr_elements/cr_policy_pref_indicator_tests.ts b/chrome/test/data/webui/cr_elements/cr_policy_pref_indicator_tests.ts
index ed78c33..c0417da 100644
--- a/chrome/test/data/webui/cr_elements/cr_policy_pref_indicator_tests.ts
+++ b/chrome/test/data/webui/cr_elements/cr_policy_pref_indicator_tests.ts
@@ -3,9 +3,9 @@
 // found in the LICENSE file.
 
 // clang-format off
-import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 
-import {CrPolicyPrefIndicatorElement} from 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.m.js';
+import {CrPolicyPrefIndicatorElement} from 'chrome://resources/cr_elements/policy/cr_policy_pref_indicator.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
 
diff --git a/chrome/test/data/webui/settings/chromeos/os_about_page_tests.js b/chrome/test/data/webui/settings/chromeos/os_about_page_tests.js
index c3b023c..f4314e5 100644
--- a/chrome/test/data/webui/settings/chromeos/os_about_page_tests.js
+++ b/chrome/test/data/webui/settings/chromeos/os_about_page_tests.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 {CrPolicyIndicatorType} from '//resources/cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorType} from '//resources/cr_elements/policy/cr_policy_indicator_behavior.js';
 import {AboutPageBrowserProxyImpl, BrowserChannel, DeviceNameBrowserProxyImpl, DeviceNameState, LifetimeBrowserProxyImpl, Router, routes, SetDeviceNameResult, UpdateStatus} from 'chrome://os-settings/chromeos/os_settings.js';
 import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js';
 import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
diff --git a/chrome/test/data/webui/settings/password_view_test.ts b/chrome/test/data/webui/settings/password_view_test.ts
index 618e620..6c95f15 100644
--- a/chrome/test/data/webui/settings/password_view_test.ts
+++ b/chrome/test/data/webui/settings/password_view_test.ts
@@ -400,4 +400,21 @@
         await flushTasks();
         assertEquals(1, eventCount);
       });
+
+  test('Timeout listener closes the view page', async function() {
+    const passwordEntry =
+        createPasswordEntry({url: SITE, username: USERNAME, id: ID});
+
+    const page = await loadViewPage(passwordEntry);
+
+    assertTrue(
+        !!passwordManager.lastCallback.addPasswordManagerAuthTimeoutListener);
+    assertTrue(!!page.credential);
+
+    passwordManager.lastCallback.addPasswordManagerAuthTimeoutListener();
+    await flushTasks();
+
+    assertFalse(!!page.credential);
+    assertEquals(routes.PASSWORDS, Router.getInstance().getCurrentRoute());
+  });
 });
diff --git a/chrome/test/data/webui/settings/passwords_section_test.ts b/chrome/test/data/webui/settings/passwords_section_test.ts
index f66f3e48..d42fa5d5 100644
--- a/chrome/test/data/webui/settings/passwords_section_test.ts
+++ b/chrome/test/data/webui/settings/passwords_section_test.ts
@@ -1597,4 +1597,24 @@
     flush();
     assertFalse(toastManager.open);
   });
+
+  test('routingWithAuthTimeoutParamShowsRemovalDialog', function() {
+    const passwordEntry =
+        createPasswordEntry({url: 'goo.gl', username: 'bart'});
+    const passwordsSection = elementFactory.createPasswordsSection(
+        passwordManager, [passwordEntry], []);
+    const authTimeoutDialog = passwordsSection.$.authTimeoutDialog;
+
+    const params = new URLSearchParams();
+    params.set('authTimeout', 'true');
+    Router.getInstance().navigateTo(routes.PASSWORDS, params);
+
+    flush();
+    assertTrue(authTimeoutDialog.open);
+
+    authTimeoutDialog.close();
+    flush();
+    assertFalse(authTimeoutDialog.open);
+    assertFalse(!!Router.getInstance().getQueryParameters().get('authTimeout'));
+  });
 });
diff --git a/chrome/test/data/webui/settings/test_password_manager_proxy.ts b/chrome/test/data/webui/settings/test_password_manager_proxy.ts
index 5c8ca49..12a4c20 100644
--- a/chrome/test/data/webui/settings/test_password_manager_proxy.ts
+++ b/chrome/test/data/webui/settings/test_password_manager_proxy.ts
@@ -5,7 +5,7 @@
 /** @fileoverview Test implementation of PasswordManagerProxy. */
 
 // clang-format off
-import {AccountStorageOptInStateChangedListener, CredentialsChangedListener, PasswordCheckInteraction, PasswordCheckReferrer, PasswordCheckStatusChangedListener, PasswordExceptionListChangedListener, PasswordManagerProxy, PasswordsFileExportProgressListener, SavedPasswordListChangedListener} from 'chrome://settings/settings.js';
+import {AccountStorageOptInStateChangedListener, CredentialsChangedListener, PasswordCheckInteraction, PasswordCheckReferrer, PasswordCheckStatusChangedListener, PasswordExceptionListChangedListener, PasswordManagerProxy, PasswordsFileExportProgressListener, PasswordManagerAuthTimeoutListener, SavedPasswordListChangedListener} from 'chrome://settings/settings.js';
 import {assertEquals} from 'chrome://webui-test/chai_assert.js';
 import {TestBrowserProxy} from 'chrome://webui-test/test_browser_proxy.js';
 
@@ -78,6 +78,8 @@
         AccountStorageOptInStateChangedListener|null,
     addPasswordsFileExportProgressListener: PasswordsFileExportProgressListener|
     null,
+    addPasswordManagerAuthTimeoutListener: PasswordManagerAuthTimeoutListener|
+    null,
   };
 
   private plaintextPassword_: string = '';
@@ -147,6 +149,7 @@
       addWeakCredentialsListener: null,
       addAccountStorageOptInStateListener: null,
       addPasswordsFileExportProgressListener: null,
+      addPasswordManagerAuthTimeoutListener: null,
     };
   }
 
@@ -336,6 +339,14 @@
   removePasswordCheckStatusListener(_listener:
                                         PasswordCheckStatusChangedListener) {}
 
+  addPasswordManagerAuthTimeoutListener(
+      listener: PasswordManagerAuthTimeoutListener) {
+    this.lastCallback.addPasswordManagerAuthTimeoutListener = listener;
+  }
+
+  removePasswordManagerAuthTimeoutListener(
+      _listener: PasswordManagerAuthTimeoutListener) {}
+
   recordPasswordCheckInteraction(interaction: PasswordCheckInteraction) {
     this.methodCalled('recordPasswordCheckInteraction', interaction);
   }
diff --git a/chrome/updater/test/integration_tests.cc b/chrome/updater/test/integration_tests.cc
index dadbd86..5b327d29 100644
--- a/chrome/updater/test/integration_tests.cc
+++ b/chrome/updater/test/integration_tests.cc
@@ -633,7 +633,6 @@
   // Uninstall the idle updater.
   RunUninstallCmdLine();
   WaitForUpdaterExit();
-  ExpectClean();
 }
 #endif  // BUILDFLAG(IS_WIN)
 
@@ -665,7 +664,6 @@
   SetServerStarts(24);
   RunWake(0);
   WaitForUpdaterExit();
-  ExpectClean();
 }
 
 TEST_F(IntegrationTest, UninstallUpdaterWhenAllAppsUninstalled) {
@@ -683,7 +681,6 @@
   UninstallApp("test1");
   RunWake(0);
   WaitForUpdaterExit();
-  ExpectClean();
 }
 
 // Windows does not currently have a concept of app ownership, so this
diff --git a/chromeos/ash/components/audio/audio_device.cc b/chromeos/ash/components/audio/audio_device.cc
index 87b13d2..aa79ab9 100644
--- a/chromeos/ash/components/audio/audio_device.cc
+++ b/chromeos/ash/components/audio/audio_device.cc
@@ -154,6 +154,7 @@
   plugged_time = node.plugged_time;
   max_supported_channels = node.max_supported_channels;
   audio_effect = node.audio_effect;
+  number_of_volume_steps = node.number_of_volume_steps;
 }
 
 AudioDevice::AudioDevice(const AudioDevice& other) = default;
diff --git a/chromeos/ash/components/audio/audio_device.h b/chromeos/ash/components/audio/audio_device.h
index dd8133823..79b5fc1 100644
--- a/chromeos/ash/components/audio/audio_device.h
+++ b/chromeos/ash/components/audio/audio_device.h
@@ -103,6 +103,7 @@
   uint64_t plugged_time = 0;
   uint32_t max_supported_channels = 0;
   uint32_t audio_effect = 0;
+  int32_t number_of_volume_steps = 0;
 };
 
 typedef std::vector<AudioDevice> AudioDeviceList;
diff --git a/chromeos/ash/components/audio/cras_audio_handler.cc b/chromeos/ash/components/audio/cras_audio_handler.cc
index dac9c49..d616a27 100644
--- a/chromeos/ash/components/audio/cras_audio_handler.cc
+++ b/chromeos/ash/components/audio/cras_audio_handler.cc
@@ -683,6 +683,44 @@
   SetOutputVolumePercent(output_volume_ + adjust_by_percent);
 }
 
+void CrasAudioHandler::IncreaseOutputVolumeByOneStep() {
+  // Set all active devices to the same volume.
+  for (const auto& item : audio_devices_) {
+    const AudioDevice& device = item.second;
+    if (!device.is_input && device.active) {
+      int32_t volume_level =
+          std::round((double)output_volume_ *
+                     (double)device.number_of_volume_steps * 0.01);
+      if (volume_level == 0 && output_volume_ > 0) {
+        volume_level = 1;
+      }
+      // increase one level and convert to volume
+      output_volume_ = std::min(
+          100,
+          static_cast<int>(std::floor(((double)(volume_level + 1)) /
+                                      device.number_of_volume_steps * 100)));
+      SetOutputNodeVolumePercent(device.id, output_volume_);
+    }
+  }
+}
+
+void CrasAudioHandler::DecreaseOutputVolumeByOneStep() {
+  // Set all active devices to the same volume.
+  for (const auto& item : audio_devices_) {
+    const AudioDevice& device = item.second;
+    if (!device.is_input && device.active) {
+      int32_t volume_level =
+          std::round((double)output_volume_ *
+                     (double)device.number_of_volume_steps * 0.01);
+      // decrease one level and convert to volume
+      output_volume_ = std::max(
+          0, static_cast<int>(std::floor(((double)(volume_level - 1)) /
+                                         device.number_of_volume_steps * 100)));
+      SetOutputNodeVolumePercent(device.id, output_volume_);
+    }
+  }
+}
+
 void CrasAudioHandler::SetOutputMute(bool mute_on) {
   if (!SetOutputMuteInternal(mute_on))
     return;
diff --git a/chromeos/ash/components/audio/cras_audio_handler.h b/chromeos/ash/components/audio/cras_audio_handler.h
index 06acd43..3d01cc6a 100644
--- a/chromeos/ash/components/audio/cras_audio_handler.h
+++ b/chromeos/ash/components/audio/cras_audio_handler.h
@@ -306,6 +306,12 @@
   // (negative percentage).
   void AdjustOutputVolumeByPercent(int adjust_by_percent);
 
+  // Adjusts all active output devices' volume higher by one volume step.
+  void IncreaseOutputVolumeByOneStep();
+
+  // Adjusts all active output devices' volume lower by one volume step
+  void DecreaseOutputVolumeByOneStep();
+
   // Adjusts all active output devices' volume to a minimum audible level if it
   // is too low.
   void AdjustOutputVolumeToAudibleLevel();
diff --git a/chromeos/ash/components/audio/cras_audio_handler_unittest.cc b/chromeos/ash/components/audio/cras_audio_handler_unittest.cc
index 96366b49..c5258cd 100644
--- a/chromeos/ash/components/audio/cras_audio_handler_unittest.cc
+++ b/chromeos/ash/components/audio/cras_audio_handler_unittest.cc
@@ -2121,6 +2121,127 @@
   EXPECT_EQ(kVolume, audio_pref_handler_->GetOutputVolumeValue(&device));
 }
 
+TEST_P(CrasAudioHandlerTest, IncreaseOutputVolumeByOneStep) {
+  AudioNodeList audio_nodes =
+      GenerateAudioNodeList({kUSBHeadphone1, kUSBHeadphone2});
+  SetUpCrasAudioHandler(audio_nodes);
+  // USB 1 have 25 steps, mean we increase 100/25=4 % of volume per step.
+  // USB 1 start from volume 0 and increase one step expect increase to 4.
+  cras_audio_handler_->ChangeActiveNodes({kUSBHeadphone1->id});
+  cras_audio_handler_->SetOutputVolumePercent(0);
+  cras_audio_handler_->IncreaseOutputVolumeByOneStep();
+  EXPECT_EQ(4, cras_audio_handler_->GetOutputVolumePercent());
+  // 0   -> step0
+  // 1-4 -> step1
+  // 5-8 -> step2
+  // Inorder to let user feel volume change, increase step1 to step2.
+  // USB 1 start from volume 2 and increase one step, expect increase to 8.
+  cras_audio_handler_->SetOutputVolumePercent(2);
+  cras_audio_handler_->IncreaseOutputVolumeByOneStep();
+  EXPECT_EQ(8, cras_audio_handler_->GetOutputVolumePercent());
+  // 100 is max volume
+  cras_audio_handler_->SetOutputVolumePercent(100);
+  cras_audio_handler_->IncreaseOutputVolumeByOneStep();
+  EXPECT_EQ(100, cras_audio_handler_->GetOutputVolumePercent());
+  // can increase from 0 to 100
+  cras_audio_handler_->SetOutputVolumePercent(0);
+  for (int32_t i = 0; i < kUSBHeadphone1->number_of_volume_steps; ++i) {
+    cras_audio_handler_->IncreaseOutputVolumeByOneStep();
+  }
+  EXPECT_EQ(100, cras_audio_handler_->GetOutputVolumePercent());
+  // USB 2 have 16 steps, mean we increase 100/16=6.25 % of volume per step.
+  // USB 2 start from volume 0 and increase one step expect increase to 6;
+  cras_audio_handler_->ChangeActiveNodes({kUSBHeadphone2->id});
+  cras_audio_handler_->SetOutputVolumePercent(0);
+  cras_audio_handler_->IncreaseOutputVolumeByOneStep();
+  EXPECT_EQ(6, cras_audio_handler_->GetOutputVolumePercent());
+  // 0    -> step0
+  // 1-6  -> step1
+  // 7-12 -> step2
+  // Inorder to let user feel volume change, increase step1 to step2.
+  // USB 2 start from volume 4 and increase one step, expect increase to 12
+  cras_audio_handler_->SetOutputVolumePercent(4);
+  cras_audio_handler_->IncreaseOutputVolumeByOneStep();
+  EXPECT_EQ(12, cras_audio_handler_->GetOutputVolumePercent());
+  // USB 2 start from volume 0 and increase 4 step, expect increase to
+  // 25(6.25*4=25)
+  cras_audio_handler_->SetOutputVolumePercent(0);
+  for (int32_t i = 0; i < 4; ++i) {
+    cras_audio_handler_->IncreaseOutputVolumeByOneStep();
+  }
+  EXPECT_EQ(25, cras_audio_handler_->GetOutputVolumePercent());
+  // 100 is max
+  cras_audio_handler_->SetOutputVolumePercent(100);
+  cras_audio_handler_->IncreaseOutputVolumeByOneStep();
+  EXPECT_EQ(100, cras_audio_handler_->GetOutputVolumePercent());
+  // can increase from 0 to 100
+  cras_audio_handler_->SetOutputVolumePercent(0);
+  for (uint32_t i = 0; i < kUSBHeadphone2->number_of_volume_steps; ++i) {
+    cras_audio_handler_->IncreaseOutputVolumeByOneStep();
+  }
+  EXPECT_EQ(100, cras_audio_handler_->GetOutputVolumePercent());
+}
+
+TEST_P(CrasAudioHandlerTest, DecreaseOutputVolumeByOneStep) {
+  AudioNodeList audio_nodes =
+      GenerateAudioNodeList({kUSBHeadphone1, kUSBHeadphone2});
+  SetUpCrasAudioHandler(audio_nodes);
+  // USB 1 have 25 steps, mean we decrease 100/25=4 % of volume per step.
+  // USB 1 start from volume 4 and decrease one step expect decrease to 0;
+  cras_audio_handler_->ChangeActiveNodes({kUSBHeadphone1->id});
+  cras_audio_handler_->SetOutputVolumePercent(4);
+  cras_audio_handler_->DecreaseOutputVolumeByOneStep();
+  EXPECT_EQ(0, cras_audio_handler_->GetOutputVolumePercent());
+  // 0   -> step0
+  // 1-4 -> step1
+  // 4-8 -> step2
+  // Inorder to let user feel volume change, decrease step2 to step1.
+  // USB 1 start from volume 6 and decrease one step, expect decrease to 4
+  cras_audio_handler_->SetOutputVolumePercent(6);
+  cras_audio_handler_->DecreaseOutputVolumeByOneStep();
+  EXPECT_EQ(4, cras_audio_handler_->GetOutputVolumePercent());
+  // 0 is min volume
+  cras_audio_handler_->SetOutputVolumePercent(0);
+  cras_audio_handler_->DecreaseOutputVolumeByOneStep();
+  EXPECT_EQ(0, cras_audio_handler_->GetOutputVolumePercent());
+  // can decrease from 100 to 0
+  cras_audio_handler_->SetOutputVolumePercent(100);
+  for (int32_t i = 0; i < kUSBHeadphone1->number_of_volume_steps; ++i) {
+    cras_audio_handler_->DecreaseOutputVolumeByOneStep();
+  }
+  EXPECT_EQ(0, cras_audio_handler_->GetOutputVolumePercent());
+  // USB 2 have 16 steps, mean we decrease 100/16=6.25 % of volume per step.
+  // USB 2 start from volume 12 and decrease one step expect decrease to 6;
+  cras_audio_handler_->ChangeActiveNodes({kUSBHeadphone2->id});
+  cras_audio_handler_->SetOutputVolumePercent(12);
+  cras_audio_handler_->DecreaseOutputVolumeByOneStep();
+  EXPECT_EQ(6, cras_audio_handler_->GetOutputVolumePercent());
+  // 0    -> step0
+  // 1-6  -> step1
+  // 7-12 -> step2
+  // Inorder to let user feel volume change, decrease step2 to step1.
+  // USB 2 start from volume 10 and decrease one step, expect decrease to 6
+  cras_audio_handler_->SetOutputVolumePercent(10);
+  cras_audio_handler_->DecreaseOutputVolumeByOneStep();
+  EXPECT_EQ(6, cras_audio_handler_->GetOutputVolumePercent());
+  // USB 2 start from volume 25 and decrease 4 step, expect decrease to 0
+  cras_audio_handler_->SetOutputVolumePercent(25);
+  for (int32_t i = 0; i < 4; ++i) {
+    cras_audio_handler_->DecreaseOutputVolumeByOneStep();
+  }
+  EXPECT_EQ(0, cras_audio_handler_->GetOutputVolumePercent());
+  // 0 is min volume
+  cras_audio_handler_->SetOutputVolumePercent(0);
+  cras_audio_handler_->DecreaseOutputVolumeByOneStep();
+  EXPECT_EQ(0, cras_audio_handler_->GetOutputVolumePercent());
+  // can decrease from 100 to 0
+  cras_audio_handler_->SetOutputVolumePercent(100);
+  for (int32_t i = 0; i < kUSBHeadphone2->number_of_volume_steps; ++i) {
+    cras_audio_handler_->DecreaseOutputVolumeByOneStep();
+  }
+  EXPECT_EQ(0, cras_audio_handler_->GetOutputVolumePercent());
+}
+
 TEST_P(CrasAudioHandlerTest, RestartAudioClientWithCrasReady) {
   AudioNodeList audio_nodes = GenerateAudioNodeList({kInternalSpeaker});
   SetUpCrasAudioHandler(audio_nodes);
diff --git a/chromeos/ash/components/dbus/audio/cras_audio_client.cc b/chromeos/ash/components/dbus/audio/cras_audio_client.cc
index 7975a79..9ce558b 100644
--- a/chromeos/ash/components/dbus/audio/cras_audio_client.cc
+++ b/chromeos/ash/components/dbus/audio/cras_audio_client.cc
@@ -534,7 +534,7 @@
   }
 
   void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) override {
+      chromeos::WaitForServiceToBeAvailableCallback callback) override {
     cras_proxy_->WaitForServiceToBeAvailable(std::move(callback));
   }
 
diff --git a/chromeos/ash/components/dbus/audio/cras_audio_client.h b/chromeos/ash/components/dbus/audio/cras_audio_client.h
index c689049..63a75c7 100644
--- a/chromeos/ash/components/dbus/audio/cras_audio_client.h
+++ b/chromeos/ash/components/dbus/audio/cras_audio_client.h
@@ -242,7 +242,7 @@
 
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) = 0;
+      chromeos::WaitForServiceToBeAvailableCallback callback) = 0;
 
  protected:
   friend class CrasAudioClientTest;
diff --git a/chromeos/ash/components/dbus/audio/fake_cras_audio_client.cc b/chromeos/ash/components/dbus/audio/fake_cras_audio_client.cc
index 7e1461a..0269fc9 100644
--- a/chromeos/ash/components/dbus/audio/fake_cras_audio_client.cc
+++ b/chromeos/ash/components/dbus/audio/fake_cras_audio_client.cc
@@ -309,7 +309,7 @@
 }
 
 void FakeCrasAudioClient::WaitForServiceToBeAvailable(
-    WaitForServiceToBeAvailableCallback callback) {
+    chromeos::WaitForServiceToBeAvailableCallback callback) {
   std::move(callback).Run(true);
 }
 
diff --git a/chromeos/ash/components/dbus/audio/fake_cras_audio_client.h b/chromeos/ash/components/dbus/audio/fake_cras_audio_client.h
index b905411..40a9df76 100644
--- a/chromeos/ash/components/dbus/audio/fake_cras_audio_client.h
+++ b/chromeos/ash/components/dbus/audio/fake_cras_audio_client.h
@@ -87,7 +87,7 @@
       const std::map<std::string, std::string>& metadata) override;
   void ResendBluetoothBattery() override;
   void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) override;
+      chromeos::WaitForServiceToBeAvailableCallback callback) override;
 
   // Modifies an AudioNode from |node_list_| based on |audio_node.id|.
   // if the |audio_node.id| cannot be found in list, Add an
diff --git a/chromeos/ash/components/dbus/authpolicy/fake_authpolicy_client.cc b/chromeos/ash/components/dbus/authpolicy/fake_authpolicy_client.cc
index 453b3d3..7b8af01 100644
--- a/chromeos/ash/components/dbus/authpolicy/fake_authpolicy_client.cc
+++ b/chromeos/ash/components/dbus/authpolicy/fake_authpolicy_client.cc
@@ -302,7 +302,7 @@
 void FakeAuthPolicyClient::SetStarted(bool started) {
   started_ = started;
   if (started_) {
-    std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+    std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
     callbacks.swap(wait_for_service_to_be_available_callbacks_);
     for (size_t i = 0; i < callbacks.size(); ++i)
       std::move(callbacks[i]).Run(true /* service_is_available*/);
diff --git a/chromeos/ash/components/dbus/authpolicy/fake_authpolicy_client.h b/chromeos/ash/components/dbus/authpolicy/fake_authpolicy_client.h
index b6a6569..4be7837 100644
--- a/chromeos/ash/components/dbus/authpolicy/fake_authpolicy_client.h
+++ b/chromeos/ash/components/dbus/authpolicy/fake_authpolicy_client.h
@@ -180,7 +180,7 @@
 
   enterprise_management::ChromeDeviceSettingsProto device_policy_;
 
-  std::vector<WaitForServiceToBeAvailableCallback>
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback>
       wait_for_service_to_be_available_callbacks_;
 
   absl::optional<authpolicy::ErrorType> refresh_user_policy_error_;
diff --git a/chromeos/ash/components/dbus/biod/biod_client.cc b/chromeos/ash/components/dbus/biod/biod_client.cc
index 527b3e7..2be3bfec 100644
--- a/chromeos/ash/components/dbus/biod/biod_client.cc
+++ b/chromeos/ash/components/dbus/biod/biod_client.cc
@@ -61,7 +61,7 @@
 
   void StartEnrollSession(const std::string& user_id,
                           const std::string& label,
-                          ObjectPathCallback callback) override {
+                          chromeos::ObjectPathCallback callback) override {
     // If we are already in enroll session, just return an invalid ObjectPath.
     // The one who initially start the enroll session will have control
     // over the life cycle of the session.
@@ -107,7 +107,7 @@
         base::BindOnce(&OnVoidResponse, std::move(callback)));
   }
 
-  void StartAuthSession(ObjectPathCallback callback) override {
+  void StartAuthSession(chromeos::ObjectPathCallback callback) override {
     // If we are already in auth session, just return an invalid ObjectPath.
     // The one who initially start the auth session will have control
     // over the life cycle of the session.
@@ -250,7 +250,7 @@
   }
 
  private:
-  void OnStartEnrollSession(ObjectPathCallback callback,
+  void OnStartEnrollSession(chromeos::ObjectPathCallback callback,
                             dbus::Response* response) {
     dbus::ObjectPath result;
     if (response) {
@@ -280,7 +280,7 @@
     std::move(callback).Run(result);
   }
 
-  void OnStartAuthSession(ObjectPathCallback callback,
+  void OnStartAuthSession(chromeos::ObjectPathCallback callback,
                           dbus::Response* response) {
     dbus::ObjectPath result;
     if (response) {
diff --git a/chromeos/ash/components/dbus/biod/biod_client.h b/chromeos/ash/components/dbus/biod/biod_client.h
index 6168af0..6e4a5bd 100644
--- a/chromeos/ash/components/dbus/biod/biod_client.h
+++ b/chromeos/ash/components/dbus/biod/biod_client.h
@@ -104,7 +104,7 @@
   // the the human readable label the user gave the biometric.
   virtual void StartEnrollSession(const std::string& user_id,
                                   const std::string& label,
-                                  ObjectPathCallback callback) = 0;
+                                  chromeos::ObjectPathCallback callback) = 0;
 
   // Gets all the records registered with this biometric. |callback| is called
   // with all the object paths of the records with |user_id| after this method
@@ -119,7 +119,7 @@
 
   // Starts the biometric auth session. |callback| is called with the object
   // path of the auth session after the method succeeds.
-  virtual void StartAuthSession(ObjectPathCallback callback) = 0;
+  virtual void StartAuthSession(chromeos::ObjectPathCallback callback) = 0;
 
   // Requests the type of biometric. |callback| is called with the biometric
   // type after the method succeeds.
diff --git a/chromeos/ash/components/dbus/biod/fake_biod_client.cc b/chromeos/ash/components/dbus/biod/fake_biod_client.cc
index 85a06fef7..31e5485 100644
--- a/chromeos/ash/components/dbus/biod/fake_biod_client.cc
+++ b/chromeos/ash/components/dbus/biod/fake_biod_client.cc
@@ -147,7 +147,7 @@
 
 void FakeBiodClient::StartEnrollSession(const std::string& user_id,
                                         const std::string& label,
-                                        ObjectPathCallback callback) {
+                                        chromeos::ObjectPathCallback callback) {
   DCHECK_EQ(current_session_, FingerprintSession::NONE);
 
   // Create the enrollment with |user_id|, |label| and a empty fake fingerprint.
@@ -183,7 +183,7 @@
       FROM_HERE, base::BindOnce(std::move(callback), true));
 }
 
-void FakeBiodClient::StartAuthSession(ObjectPathCallback callback) {
+void FakeBiodClient::StartAuthSession(chromeos::ObjectPathCallback callback) {
   DCHECK_EQ(current_session_, FingerprintSession::NONE);
 
   current_session_ = FingerprintSession::AUTH;
diff --git a/chromeos/ash/components/dbus/biod/fake_biod_client.h b/chromeos/ash/components/dbus/biod/fake_biod_client.h
index 5fb781e..e7ab854a 100644
--- a/chromeos/ash/components/dbus/biod/fake_biod_client.h
+++ b/chromeos/ash/components/dbus/biod/fake_biod_client.h
@@ -64,11 +64,11 @@
   bool HasObserver(const Observer* observer) const override;
   void StartEnrollSession(const std::string& user_id,
                           const std::string& label,
-                          ObjectPathCallback callback) override;
+                          chromeos::ObjectPathCallback callback) override;
   void GetRecordsForUser(const std::string& user_id,
                          UserRecordsCallback callback) override;
   void DestroyAllRecords(chromeos::VoidDBusMethodCallback callback) override;
-  void StartAuthSession(ObjectPathCallback callback) override;
+  void StartAuthSession(chromeos::ObjectPathCallback callback) override;
   void RequestType(BiometricTypeCallback callback) override;
   void CancelEnrollSession(chromeos::VoidDBusMethodCallback callback) override;
   void EndAuthSession(chromeos::VoidDBusMethodCallback callback) override;
diff --git a/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.cc b/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.cc
index adc8a75..869e202 100644
--- a/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.cc
+++ b/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.cc
@@ -49,7 +49,7 @@
   }
 
   void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) override {
+      chromeos::WaitForServiceToBeAvailableCallback callback) override {
     proxy_->WaitForServiceToBeAvailable(std::move(callback));
   }
 
diff --git a/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.h b/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.h
index 243bac8..ee127a7b 100644
--- a/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.h
+++ b/chromeos/ash/components/dbus/cdm_factory_daemon/cdm_factory_daemon_client.h
@@ -46,7 +46,7 @@
   // Registers |callback| to run when the CdmFactoryDaemon service becomes
   // available.
   virtual void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) = 0;
+      chromeos::WaitForServiceToBeAvailableCallback callback) = 0;
 
  protected:
   // Initialize/Shutdown should be used instead.
diff --git a/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.cc b/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.cc
index a6a24d2..4eaff10 100644
--- a/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.cc
+++ b/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.cc
@@ -23,7 +23,7 @@
 }
 
 void FakeCdmFactoryDaemonClient::WaitForServiceToBeAvailable(
-    WaitForServiceToBeAvailableCallback callback) {
+    chromeos::WaitForServiceToBeAvailableCallback callback) {
   std::move(callback).Run(true);
 }
 
diff --git a/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.h b/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.h
index fb38b88..d3c22103 100644
--- a/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.h
+++ b/chromeos/ash/components/dbus/cdm_factory_daemon/fake_cdm_factory_daemon_client.h
@@ -29,7 +29,7 @@
       base::ScopedFD fd,
       base::OnceCallback<void(bool success)> callback) override;
   void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) override;
+      chromeos::WaitForServiceToBeAvailableCallback callback) override;
 };
 
 }  // namespace ash
diff --git a/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client.cc b/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client.cc
index 525fcfe5..355a785b 100644
--- a/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client.cc
+++ b/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client.cc
@@ -467,7 +467,7 @@
   }
 
   void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) override {
+      chromeos::WaitForServiceToBeAvailableCallback callback) override {
     debugdaemon_proxy_->WaitForServiceToBeAvailable(std::move(callback));
   }
 
diff --git a/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client.h b/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client.h
index 13cd20b..cee84fa8 100644
--- a/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client.h
+++ b/chromeos/ash/components/dbus/debug_daemon/debug_daemon_client.h
@@ -225,7 +225,7 @@
 
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) = 0;
+      chromeos::WaitForServiceToBeAvailableCallback callback) = 0;
 
   // A callback for SetOomScoreAdj().
   using SetOomScoreAdjCallback =
diff --git a/chromeos/ash/components/dbus/debug_daemon/fake_debug_daemon_client.cc b/chromeos/ash/components/dbus/debug_daemon/fake_debug_daemon_client.cc
index 3767a32..af7257e 100644
--- a/chromeos/ash/components/dbus/debug_daemon/fake_debug_daemon_client.cc
+++ b/chromeos/ash/components/dbus/debug_daemon/fake_debug_daemon_client.cc
@@ -230,7 +230,7 @@
 }
 
 void FakeDebugDaemonClient::WaitForServiceToBeAvailable(
-    WaitForServiceToBeAvailableCallback callback) {
+    chromeos::WaitForServiceToBeAvailableCallback callback) {
   if (service_is_available_) {
     base::ThreadTaskRunnerHandle::Get()->PostTask(
         FROM_HERE, base::BindOnce(std::move(callback), true));
@@ -256,7 +256,7 @@
   if (!is_available)
     return;
 
-  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
   for (auto& callback : callbacks)
     std::move(callback).Run(true);
diff --git a/chromeos/ash/components/dbus/debug_daemon/fake_debug_daemon_client.h b/chromeos/ash/components/dbus/debug_daemon/fake_debug_daemon_client.h
index f1299fd..6be2d6da 100644
--- a/chromeos/ash/components/dbus/debug_daemon/fake_debug_daemon_client.h
+++ b/chromeos/ash/components/dbus/debug_daemon/fake_debug_daemon_client.h
@@ -98,7 +98,7 @@
   void QueryDebuggingFeatures(QueryDevFeaturesCallback callback) override;
   void RemoveRootfsVerification(EnableDebuggingCallback callback) override;
   void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) override;
+      chromeos::WaitForServiceToBeAvailableCallback callback) override;
   void SetOomScoreAdj(const std::map<pid_t, int32_t>& pid_to_oom_score_adj,
                       SetOomScoreAdjCallback callback) override;
   void CupsAddManuallyConfiguredPrinter(
@@ -153,7 +153,7 @@
   int features_mask_;
 
   bool service_is_available_;
-  std::vector<WaitForServiceToBeAvailableCallback>
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback>
       pending_wait_for_service_to_be_available_callbacks_;
   std::set<std::string> printers_;
   std::vector<std::string> routes_;
diff --git a/chromeos/ash/components/dbus/hiberman/hiberman_client.h b/chromeos/ash/components/dbus/hiberman/hiberman_client.h
index 0c277d1..4610903 100644
--- a/chromeos/ash/components/dbus/hiberman/hiberman_client.h
+++ b/chromeos/ash/components/dbus/hiberman/hiberman_client.h
@@ -42,7 +42,7 @@
   // Actual DBus Methods:
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) = 0;
+      chromeos::WaitForServiceToBeAvailableCallback callback) = 0;
 
   // Resume from hibernate, if possible. Upon a successful resume from
   // hibernation, this function does not return, as execution continues in the
diff --git a/chromeos/ash/components/dbus/session_manager/fake_session_manager_client.cc b/chromeos/ash/components/dbus/session_manager/fake_session_manager_client.cc
index fd69700..ad598aa 100644
--- a/chromeos/ash/components/dbus/session_manager/fake_session_manager_client.cc
+++ b/chromeos/ash/components/dbus/session_manager/fake_session_manager_client.cc
@@ -272,7 +272,7 @@
 }
 
 void FakeSessionManagerClient::WaitForServiceToBeAvailable(
-    WaitForServiceToBeAvailableCallback callback) {
+    chromeos::WaitForServiceToBeAvailableCallback callback) {
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE, base::BindOnce(std::move(callback), true));
 }
diff --git a/chromeos/ash/components/dbus/session_manager/fake_session_manager_client.h b/chromeos/ash/components/dbus/session_manager/fake_session_manager_client.h
index d548a44..559eba88 100644
--- a/chromeos/ash/components/dbus/session_manager/fake_session_manager_client.h
+++ b/chromeos/ash/components/dbus/session_manager/fake_session_manager_client.h
@@ -68,7 +68,7 @@
   void RemoveObserver(Observer* observer) override;
   bool HasObserver(const Observer* observer) const override;
   void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) override;
+      chromeos::WaitForServiceToBeAvailableCallback callback) override;
   bool IsScreenLocked() const override;
   void EmitLoginPromptVisible() override;
   void EmitAshInitialized() override;
diff --git a/chromeos/ash/components/dbus/session_manager/session_manager_client.cc b/chromeos/ash/components/dbus/session_manager/session_manager_client.cc
index f3fcdb3..59aa1db 100644
--- a/chromeos/ash/components/dbus/session_manager/session_manager_client.cc
+++ b/chromeos/ash/components/dbus/session_manager/session_manager_client.cc
@@ -195,7 +195,7 @@
   }
 
   void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) override {
+      chromeos::WaitForServiceToBeAvailableCallback callback) override {
     session_manager_proxy_->WaitForServiceToBeAvailable(std::move(callback));
   }
 
diff --git a/chromeos/ash/components/dbus/session_manager/session_manager_client.h b/chromeos/ash/components/dbus/session_manager/session_manager_client.h
index 5c3ca61..4647457 100644
--- a/chromeos/ash/components/dbus/session_manager/session_manager_client.h
+++ b/chromeos/ash/components/dbus/session_manager/session_manager_client.h
@@ -145,7 +145,7 @@
 
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) = 0;
+      chromeos::WaitForServiceToBeAvailableCallback callback) = 0;
 
   // Returns the most recent screen-lock state received from session_manager.
   // This method should only be called by low-level code that is unable to
diff --git a/chromeos/ash/components/dbus/shill/fake_shill_manager_client.cc b/chromeos/ash/components/dbus/shill/fake_shill_manager_client.cc
index 89047a5..63496111 100644
--- a/chromeos/ash/components/dbus/shill/fake_shill_manager_client.cc
+++ b/chromeos/ash/components/dbus/shill/fake_shill_manager_client.cc
@@ -366,9 +366,10 @@
       interactive_delay_);
 }
 
-void FakeShillManagerClient::ConfigureService(const base::Value& properties,
-                                              ObjectPathCallback callback,
-                                              ErrorCallback error_callback) {
+void FakeShillManagerClient::ConfigureService(
+    const base::Value& properties,
+    chromeos::ObjectPathCallback callback,
+    ErrorCallback error_callback) {
   switch (simulate_configuration_result_) {
     case FakeShillSimulatedResult::kSuccess:
       break;
@@ -460,7 +461,7 @@
 void FakeShillManagerClient::ConfigureServiceForProfile(
     const dbus::ObjectPath& profile_path,
     const base::Value& properties,
-    ObjectPathCallback callback,
+    chromeos::ObjectPathCallback callback,
     ErrorCallback error_callback) {
   std::string profile_property;
   GetString(properties, shill::kProfileProperty, &profile_property);
@@ -469,7 +470,7 @@
 }
 
 void FakeShillManagerClient::GetService(const base::Value& properties,
-                                        ObjectPathCallback callback,
+                                        chromeos::ObjectPathCallback callback,
                                         ErrorCallback error_callback) {
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE, base::BindOnce(std::move(callback), dbus::ObjectPath()));
diff --git a/chromeos/ash/components/dbus/shill/fake_shill_manager_client.h b/chromeos/ash/components/dbus/shill/fake_shill_manager_client.h
index 85e119e..5d5a8b4 100644
--- a/chromeos/ash/components/dbus/shill/fake_shill_manager_client.h
+++ b/chromeos/ash/components/dbus/shill/fake_shill_manager_client.h
@@ -54,14 +54,14 @@
                          base::OnceClosure callback,
                          ErrorCallback error_callback) override;
   void ConfigureService(const base::Value& properties,
-                        ObjectPathCallback callback,
+                        chromeos::ObjectPathCallback callback,
                         ErrorCallback error_callback) override;
   void ConfigureServiceForProfile(const dbus::ObjectPath& profile_path,
                                   const base::Value& properties,
-                                  ObjectPathCallback callback,
+                                  chromeos::ObjectPathCallback callback,
                                   ErrorCallback error_callback) override;
   void GetService(const base::Value& properties,
-                  ObjectPathCallback callback,
+                  chromeos::ObjectPathCallback callback,
                   ErrorCallback error_callback) override;
   void ScanAndConnectToBestServices(base::OnceClosure callback,
                                     ErrorCallback error_callback) override;
diff --git a/chromeos/ash/components/dbus/shill/shill_client_helper.cc b/chromeos/ash/components/dbus/shill/shill_client_helper.cc
index f454a67..a84e83d2 100644
--- a/chromeos/ash/components/dbus/shill/shill_client_helper.cc
+++ b/chromeos/ash/components/dbus/shill/shill_client_helper.cc
@@ -107,7 +107,7 @@
 // Handles responses for methods with ObjectPath results and no status.
 void OnObjectPathMethodWithoutStatus(
     ShillClientHelper::RefHolder* ref_holder,
-    ObjectPathCallback callback,
+    chromeos::ObjectPathCallback callback,
     ShillClientHelper::ErrorCallback error_callback,
     dbus::Response* response) {
   if (!response) {
@@ -280,7 +280,7 @@
 
 void ShillClientHelper::CallObjectPathMethodWithErrorCallback(
     dbus::MethodCall* method_call,
-    ObjectPathCallback callback,
+    chromeos::ObjectPathCallback callback,
     ErrorCallback error_callback) {
   DCHECK(!callback.is_null());
   DCHECK(!error_callback.is_null());
diff --git a/chromeos/ash/components/dbus/shill/shill_client_helper.h b/chromeos/ash/components/dbus/shill/shill_client_helper.h
index eece531..81891003d 100644
--- a/chromeos/ash/components/dbus/shill/shill_client_helper.h
+++ b/chromeos/ash/components/dbus/shill/shill_client_helper.h
@@ -82,9 +82,10 @@
                       chromeos::VoidDBusMethodCallback callback);
 
   // Calls a method with an object path result where there is an error callback.
-  void CallObjectPathMethodWithErrorCallback(dbus::MethodCall* method_call,
-                                             ObjectPathCallback callback,
-                                             ErrorCallback error_callback);
+  void CallObjectPathMethodWithErrorCallback(
+      dbus::MethodCall* method_call,
+      chromeos::ObjectPathCallback callback,
+      ErrorCallback error_callback);
 
   // Calls a method with a value result.
   void CallValueMethod(dbus::MethodCall* method_call,
diff --git a/chromeos/ash/components/dbus/shill/shill_manager_client.cc b/chromeos/ash/components/dbus/shill/shill_manager_client.cc
index f38bb0c..348c428 100644
--- a/chromeos/ash/components/dbus/shill/shill_manager_client.cc
+++ b/chromeos/ash/components/dbus/shill/shill_manager_client.cc
@@ -134,7 +134,7 @@
   }
 
   void ConfigureService(const base::Value& properties,
-                        ObjectPathCallback callback,
+                        chromeos::ObjectPathCallback callback,
                         ErrorCallback error_callback) override {
     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
                                  shill::kConfigureServiceFunction);
@@ -146,7 +146,7 @@
 
   void ConfigureServiceForProfile(const dbus::ObjectPath& profile_path,
                                   const base::Value& properties,
-                                  ObjectPathCallback callback,
+                                  chromeos::ObjectPathCallback callback,
                                   ErrorCallback error_callback) override {
     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
                                  shill::kConfigureServiceForProfileFunction);
@@ -158,7 +158,7 @@
   }
 
   void GetService(const base::Value& properties,
-                  ObjectPathCallback callback,
+                  chromeos::ObjectPathCallback callback,
                   ErrorCallback error_callback) override {
     dbus::MethodCall method_call(shill::kFlimflamManagerInterface,
                                  shill::kGetServiceFunction);
diff --git a/chromeos/ash/components/dbus/shill/shill_manager_client.h b/chromeos/ash/components/dbus/shill/shill_manager_client.h
index 6365f83..5431ee9 100644
--- a/chromeos/ash/components/dbus/shill/shill_manager_client.h
+++ b/chromeos/ash/components/dbus/shill/shill_manager_client.h
@@ -203,20 +203,20 @@
   // Calls Manager.ConfigureService with |properties| which must be a
   // dictionary value describing a Shill service.
   virtual void ConfigureService(const base::Value& properties,
-                                ObjectPathCallback callback,
+                                chromeos::ObjectPathCallback callback,
                                 ErrorCallback error_callback) = 0;
 
   // Calls Manager.ConfigureServiceForProfile for |profile_path| with
   // |properties| which must be a dictionary value describing a Shill service.
   virtual void ConfigureServiceForProfile(const dbus::ObjectPath& profile_path,
                                           const base::Value& properties,
-                                          ObjectPathCallback callback,
+                                          chromeos::ObjectPathCallback callback,
                                           ErrorCallback error_callback) = 0;
 
   // Calls Manager.GetService with |properties| which must be a dictionary value
   // describing a Service.
   virtual void GetService(const base::Value& properties,
-                          ObjectPathCallback callback,
+                          chromeos::ObjectPathCallback callback,
                           ErrorCallback error_callback) = 0;
 
   // Force a fresh WiFi scan if a WiFi device is available as a way of
diff --git a/chromeos/ash/components/dbus/userdataauth/arc_quota_client.h b/chromeos/ash/components/dbus/userdataauth/arc_quota_client.h
index 16b77de..9ff89b1 100644
--- a/chromeos/ash/components/dbus/userdataauth/arc_quota_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/arc_quota_client.h
@@ -53,7 +53,7 @@
 
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) = 0;
+      chromeos::WaitForServiceToBeAvailableCallback callback) = 0;
 
   // Retrieve the ARC-related disk features supported.
   virtual void GetArcDiskFeatures(
diff --git a/chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client.h b/chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client.h
index b0aa750..6b115d80 100644
--- a/chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/cryptohome_misc_client.h
@@ -58,7 +58,7 @@
 
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) = 0;
+      chromeos::WaitForServiceToBeAvailableCallback callback) = 0;
 
   // Retrieves the system salt.
   virtual void GetSystemSalt(
diff --git a/chromeos/ash/components/dbus/userdataauth/cryptohome_pkcs11_client.h b/chromeos/ash/components/dbus/userdataauth/cryptohome_pkcs11_client.h
index 8cedd04..c71d13c 100644
--- a/chromeos/ash/components/dbus/userdataauth/cryptohome_pkcs11_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/cryptohome_pkcs11_client.h
@@ -49,7 +49,7 @@
 
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) = 0;
+      chromeos::WaitForServiceToBeAvailableCallback callback) = 0;
 
   // Checks if user's PKCS#11 token (chaps) is ready.
   virtual void Pkcs11IsTpmTokenReady(
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_arc_quota_client.cc b/chromeos/ash/components/dbus/userdataauth/fake_arc_quota_client.cc
index 527d6f96..f932f00 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_arc_quota_client.cc
+++ b/chromeos/ash/components/dbus/userdataauth/fake_arc_quota_client.cc
@@ -68,7 +68,7 @@
   if (!is_available)
     return;
 
-  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
   for (auto& callback : callbacks)
     std::move(callback).Run(true);
@@ -78,7 +78,7 @@
   DCHECK(!service_is_available_);
   service_reported_not_available_ = true;
 
-  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
   for (auto& callback : callbacks)
     std::move(callback).Run(false);
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_arc_quota_client.h b/chromeos/ash/components/dbus/userdataauth/fake_arc_quota_client.h
index eec798d..a53bf8f 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_arc_quota_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/fake_arc_quota_client.h
@@ -63,7 +63,7 @@
 
   // The list of callbacks passed to WaitForServiceToBeAvailable when the
   // service wasn't available.
-  std::vector<WaitForServiceToBeAvailableCallback>
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback>
       pending_wait_for_service_to_be_available_callbacks_;
 };
 
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.cc b/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.cc
index 836d459..2ea1dd7 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.cc
+++ b/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.cc
@@ -123,7 +123,7 @@
   if (!is_available)
     return;
 
-  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
   for (auto& callback : callbacks)
     std::move(callback).Run(true);
@@ -133,7 +133,7 @@
   DCHECK(!service_is_available_);
   service_reported_not_available_ = true;
 
-  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
   for (auto& callback : callbacks)
     std::move(callback).Run(false);
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.h b/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.h
index a6d4304..1fd38a48 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_misc_client.h
@@ -126,7 +126,7 @@
 
   // The list of callbacks passed to WaitForServiceToBeAvailable when the
   // service wasn't available.
-  std::vector<WaitForServiceToBeAvailableCallback>
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback>
       pending_wait_for_service_to_be_available_callbacks_;
 };
 
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_pkcs11_client.cc b/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_pkcs11_client.cc
index 750733a4d..66b2579 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_pkcs11_client.cc
+++ b/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_pkcs11_client.cc
@@ -70,7 +70,7 @@
   if (!is_available)
     return;
 
-  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
   for (auto& callback : callbacks)
     std::move(callback).Run(true);
@@ -80,7 +80,7 @@
   DCHECK(!service_is_available_);
   service_reported_not_available_ = true;
 
-  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
   for (auto& callback : callbacks)
     std::move(callback).Run(false);
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_pkcs11_client.h b/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_pkcs11_client.h
index 8cbb5a2..781eeda 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_pkcs11_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/fake_cryptohome_pkcs11_client.h
@@ -59,7 +59,7 @@
 
   // The list of callbacks passed to WaitForServiceToBeAvailable when the
   // service wasn't available.
-  std::vector<WaitForServiceToBeAvailableCallback>
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback>
       pending_wait_for_service_to_be_available_callbacks_;
 };
 
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_install_attributes_client.cc b/chromeos/ash/components/dbus/userdataauth/fake_install_attributes_client.cc
index f8bd055..3516825 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_install_attributes_client.cc
+++ b/chromeos/ash/components/dbus/userdataauth/fake_install_attributes_client.cc
@@ -173,7 +173,7 @@
   if (!is_available)
     return;
 
-  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
   for (auto& callback : callbacks)
     std::move(callback).Run(true);
@@ -183,7 +183,7 @@
   DCHECK(!service_is_available_);
   service_reported_not_available_ = true;
 
-  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
   for (auto& callback : callbacks)
     std::move(callback).Run(false);
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_install_attributes_client.h b/chromeos/ash/components/dbus/userdataauth/fake_install_attributes_client.h
index 0eb5ec9..8a9d02a 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_install_attributes_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/fake_install_attributes_client.h
@@ -116,7 +116,7 @@
 
   // The list of callbacks passed to WaitForServiceToBeAvailable when the
   // service wasn't available.
-  std::vector<WaitForServiceToBeAvailableCallback>
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback>
       pending_wait_for_service_to_be_available_callbacks_;
 };
 
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc b/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc
index d88c095..f7df29f 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc
+++ b/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.cc
@@ -1141,6 +1141,13 @@
   ReturnProtobufMethodCallback(reply, std::move(callback));
 }
 
+void FakeUserDataAuthClient::GetRecoveryRequest(
+    const ::user_data_auth::GetRecoveryRequestRequest& request,
+    GetRecoveryRequestCallback callback) {
+  ::user_data_auth::GetRecoveryRequestReply reply;
+  ReplyOnReturn auto_reply(&reply, std::move(callback));
+}
+
 void FakeUserDataAuthClient::GetAuthSessionStatus(
     const ::user_data_auth::GetAuthSessionStatusRequest& request,
     GetAuthSessionStatusCallback callback) {
@@ -1179,7 +1186,7 @@
 }
 
 void FakeUserDataAuthClient::RunPendingWaitForServiceToBeAvailableCallbacks() {
-  std::vector<WaitForServiceToBeAvailableCallback> callbacks;
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback> callbacks;
   callbacks.swap(pending_wait_for_service_to_be_available_callbacks_);
   for (auto& callback : callbacks)
     std::move(callback).Run(false);
diff --git a/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h b/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h
index 5128b25..0baece74 100644
--- a/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h
@@ -248,6 +248,9 @@
   void RemoveAuthFactor(
       const ::user_data_auth::RemoveAuthFactorRequest& request,
       RemoveAuthFactorCallback callback) override;
+  void GetRecoveryRequest(
+      const ::user_data_auth::GetRecoveryRequestRequest& request,
+      GetRecoveryRequestCallback callback) override;
   void GetAuthSessionStatus(
       const ::user_data_auth::GetAuthSessionStatusRequest& request,
       GetAuthSessionStatusCallback callback) override;
@@ -416,7 +419,7 @@
 
   // The list of callbacks passed to WaitForServiceToBeAvailable when the
   // service wasn't available.
-  std::vector<WaitForServiceToBeAvailableCallback>
+  std::vector<chromeos::WaitForServiceToBeAvailableCallback>
       pending_wait_for_service_to_be_available_callbacks_;
 
   // Other stuff/miscellaneous:
diff --git a/chromeos/ash/components/dbus/userdataauth/install_attributes_client.h b/chromeos/ash/components/dbus/userdataauth/install_attributes_client.h
index 5d3f316..a5bcb085 100644
--- a/chromeos/ash/components/dbus/userdataauth/install_attributes_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/install_attributes_client.h
@@ -59,7 +59,7 @@
 
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) = 0;
+      chromeos::WaitForServiceToBeAvailableCallback callback) = 0;
 
   // Retrieves an install attribute.
   virtual void InstallAttributesGet(
diff --git a/chromeos/ash/components/dbus/userdataauth/mock_userdataauth_client.h b/chromeos/ash/components/dbus/userdataauth/mock_userdataauth_client.h
index 9d28b17d..b86c485 100644
--- a/chromeos/ash/components/dbus/userdataauth/mock_userdataauth_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/mock_userdataauth_client.h
@@ -19,7 +19,7 @@
   ~MockUserDataAuthClient() override;
 
   void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) override;
+      chromeos::WaitForServiceToBeAvailableCallback callback) override;
   void AddObserver(Observer* observer) override;
   void RemoveObserver(Observer* observer) override;
 
@@ -181,6 +181,11 @@
                RemoveAuthFactorCallback callback),
               (override));
   MOCK_METHOD(void,
+              GetRecoveryRequest,
+              (const ::user_data_auth::GetRecoveryRequestRequest& request,
+               GetRecoveryRequestCallback callback),
+              (override));
+  MOCK_METHOD(void,
               GetAuthSessionStatus,
               (const ::user_data_auth::GetAuthSessionStatusRequest& request,
                GetAuthSessionStatusCallback callback),
diff --git a/chromeos/ash/components/dbus/userdataauth/userdataauth_client.cc b/chromeos/ash/components/dbus/userdataauth/userdataauth_client.cc
index 08fb4073..f36bb60 100644
--- a/chromeos/ash/components/dbus/userdataauth/userdataauth_client.cc
+++ b/chromeos/ash/components/dbus/userdataauth/userdataauth_client.cc
@@ -330,6 +330,14 @@
                     std::move(callback));
   }
 
+  void GetRecoveryRequest(
+      const ::user_data_auth::GetRecoveryRequestRequest& request,
+      GetRecoveryRequestCallback callback) override {
+    CallProtoMethod(::user_data_auth::kGetRecoveryRequest,
+                    ::user_data_auth::kUserDataAuthInterface, request,
+                    std::move(callback));
+  }
+
   void GetAuthSessionStatus(
       const ::user_data_auth::GetAuthSessionStatusRequest& request,
       GetAuthSessionStatusCallback callback) override {
diff --git a/chromeos/ash/components/dbus/userdataauth/userdataauth_client.h b/chromeos/ash/components/dbus/userdataauth/userdataauth_client.h
index 192fdfaa..db3ec131 100644
--- a/chromeos/ash/components/dbus/userdataauth/userdataauth_client.h
+++ b/chromeos/ash/components/dbus/userdataauth/userdataauth_client.h
@@ -99,6 +99,8 @@
       chromeos::DBusMethodCallback<::user_data_auth::UpdateAuthFactorReply>;
   using RemoveAuthFactorCallback =
       chromeos::DBusMethodCallback<::user_data_auth::RemoveAuthFactorReply>;
+  using GetRecoveryRequestCallback =
+      chromeos::DBusMethodCallback<::user_data_auth::GetRecoveryRequestReply>;
   using GetAuthSessionStatusCallback =
       chromeos::DBusMethodCallback<::user_data_auth::GetAuthSessionStatusReply>;
 
@@ -132,7 +134,7 @@
 
   // Runs the callback as soon as the service becomes available.
   virtual void WaitForServiceToBeAvailable(
-      WaitForServiceToBeAvailableCallback callback) = 0;
+      chromeos::WaitForServiceToBeAvailableCallback callback) = 0;
 
   // Queries if user's vault is mounted.
   virtual void IsMounted(const ::user_data_auth::IsMountedRequest& request,
@@ -294,6 +296,12 @@
       const ::user_data_auth::RemoveAuthFactorRequest& request,
       RemoveAuthFactorCallback callback) = 0;
 
+  // This is called when a user authenticates with recovery to obtain the
+  // request to be sent to the recovery service.
+  virtual void GetRecoveryRequest(
+      const ::user_data_auth::GetRecoveryRequestRequest& request,
+      GetRecoveryRequestCallback callback) = 0;
+
   // This is called when a user wants to get an AuthSession status.
   virtual void GetAuthSessionStatus(
       const ::user_data_auth::GetAuthSessionStatusRequest& request,
diff --git a/chromeos/dbus/common/dbus_method_call_status.h b/chromeos/dbus/common/dbus_method_call_status.h
index 291cae6..dd95b53a 100644
--- a/chromeos/dbus/common/dbus_method_call_status.h
+++ b/chromeos/dbus/common/dbus_method_call_status.h
@@ -45,10 +45,4 @@
 
 }  // namespace chromeos
 
-// TODO(https://crbug.com/1164001): remove when //chromeos/dbus moved to ash.
-namespace ash {
-using ::chromeos::ObjectPathCallback;
-using ::chromeos::WaitForServiceToBeAvailableCallback;
-}  // namespace ash
-
 #endif  // CHROMEOS_DBUS_COMMON_DBUS_METHOD_CALL_STATUS_H_
diff --git a/chromeos/strings/chromeos_strings_fa.xtb b/chromeos/strings/chromeos_strings_fa.xtb
index b62943c..e1983e2 100644
--- a/chromeos/strings/chromeos_strings_fa.xtb
+++ b/chromeos/strings/chromeos_strings_fa.xtb
@@ -662,7 +662,7 @@
 <translation id="7469648432129124067">درگاهی شناسایی شد</translation>
 <translation id="7481312909269577407">ارسال کردن</translation>
 <translation id="7487067081878637334">فناوری</translation>
-<translation id="7490813197707563893">نشانی واد</translation>
+<translation id="7490813197707563893">مک آدرس</translation>
 <translation id="7497215489070763236">گواهینامه مرکز صدور گواهی سرور</translation>
 <translation id="7502658306369382406">‏نشانی IPv6</translation>
 <translation id="7515998400212163428">Android</translation>
diff --git a/chromeos/tast_control.gni b/chromeos/tast_control.gni
index c3d1e777..291ce31f 100644
--- a/chromeos/tast_control.gni
+++ b/chromeos/tast_control.gni
@@ -9,6 +9,24 @@
 # To disable a specific test in chrome_all_tast_tests, add it the following
 # list and cite a bug.
 tast_disabled_tests_from_chrome_all = [
+  # crbug.com/1356506
+  "inputs.PhysicalKeyboardAutocorrect.en_us_2",
+  "inputs.VirtualKeyboardAccent",
+  "inputs.VirtualKeyboardAccessibility",
+  "inputs.VirtualKeyboardAutoShift",
+  "inputs.VirtualKeyboardChangeInput.tablet",
+  "inputs.VirtualKeyboardDeadKeys.french",
+  "inputs.VirtualKeyboardEnglishSettings",
+  "inputs.VirtualKeyboardGlideTyping.clamshell_a11y_docked",
+  "inputs.VirtualKeyboardGlideTyping.clamshell_a11y_floating",
+  "inputs.VirtualKeyboardHandwriting.docked",
+  "inputs.VirtualKeyboardHandwriting.floating",
+  "inputs.VirtualKeyboardLoginScreen.tablet",
+  "inputs.VirtualKeyboardMultipasteSuggestion.lacros",
+  "inputs.VirtualKeyboardTypingOmnibox",
+  "inputs.VirtualKeyboardTypingOmnibox.guest",
+  "inputs.VirtualKeyboardTypingUserMode.incognito",
+
   # crbug.com/1184931
   "health.ProbeBatteryMetrics",
 
diff --git a/components/BUILD.gn b/components/BUILD.gn
index ddc1bcefc..12b6044 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -139,6 +139,7 @@
     "//components/favicon/core:unit_tests",
     "//components/favicon_base:unit_tests",
     "//components/feature_engagement:unit_tests",
+    "//components/file_access:unit_tests",
     "//components/filename_generation:unit_tests",
     "//components/flags_ui:unit_tests",
     "//components/gcm_driver:unit_tests",
diff --git a/components/autofill/content/common/mojom/autofill_agent.mojom b/components/autofill/content/common/mojom/autofill_agent.mojom
index 65a019d..d8f60c7 100644
--- a/components/autofill/content/common/mojom/autofill_agent.mojom
+++ b/components/autofill/content/common/mojom/autofill_agent.mojom
@@ -99,13 +99,14 @@
 // There is one instance of this interface per render frame in the render
 // process.
 interface PasswordAutofillAgent {
-  // Fills a password form and prepare field autocomplete for multiple
-  // matching logins. Lets the renderer know if it should disable the popup
-  // because the browser process will own the popup UI.
-  FillPasswordForm(PasswordFormFillData form_data);
+  // Provides fill information for a password form, which can fill the form and
+  // prepare field autocomplete for multiple matching logins. Lets the renderer
+  // know if it should disable the popup because the browser process will own
+  // the popup UI.
+  SetPasswordFillData(PasswordFormFillData form_data);
 
   // Lets the renderer know that there are no saved credentials for filling.
-  // This is the "no results" equivalent of FillPasswordForm.
+  // This is the "no results" equivalent of SetPasswordFillData.
   InformNoSavedCredentials(bool should_show_popup_without_passwords);
 
   // Fills the given |credential| into the last focused text input.
diff --git a/components/autofill/content/renderer/password_autofill_agent.cc b/components/autofill/content/renderer/password_autofill_agent.cc
index 7fa1f1f1..481bbcb 100644
--- a/components/autofill/content/renderer/password_autofill_agent.cc
+++ b/components/autofill/content/renderer/password_autofill_agent.cc
@@ -1420,7 +1420,7 @@
 void PasswordAutofillAgent::OnProbablyFormSubmitted() {}
 
 // mojom::PasswordAutofillAgent:
-void PasswordAutofillAgent::FillPasswordForm(
+void PasswordAutofillAgent::SetPasswordFillData(
     const PasswordFormFillData& form_data) {
   std::unique_ptr<RendererSavePasswordProgressLogger> logger;
   if (logging_state_active_) {
diff --git a/components/autofill/content/renderer/password_autofill_agent.h b/components/autofill/content/renderer/password_autofill_agent.h
index 77fa8ac..8453103 100644
--- a/components/autofill/content/renderer/password_autofill_agent.h
+++ b/components/autofill/content/renderer/password_autofill_agent.h
@@ -130,7 +130,7 @@
   mojom::PasswordManagerDriver& GetPasswordManagerDriver();
 
   // mojom::PasswordAutofillAgent:
-  void FillPasswordForm(const PasswordFormFillData& form_data) override;
+  void SetPasswordFillData(const PasswordFormFillData& form_data) override;
   void InformNoSavedCredentials(
       bool should_show_popup_without_passwords) override;
   void FillIntoFocusedField(bool is_password,
diff --git a/components/autofill_assistant/browser/features.cc b/components/autofill_assistant/browser/features.cc
index 48dafce9..ce04038 100644
--- a/components/autofill_assistant/browser/features.cc
+++ b/components/autofill_assistant/browser/features.cc
@@ -77,6 +77,13 @@
     "AutofillAssistantGetPaymentsClientToken",
     base::FEATURE_ENABLED_BY_DEFAULT};
 
+// Whether Autofill Assistant should enable getting the list of trigger scripts
+// from the backend in a privacy sensitive way. This would enable in-CCT
+// triggering for users who have "Make Searches and Browsing Better" disabled.
+const base::Feature kAutofillAssistantGetTriggerScriptsByHashPrefix{
+    "AutofillAssistantGetTriggerScriptsByHashPrefix",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Whether Autofill Assistant should enable in-CCT triggering, i.e., requesting
 // and showing trigger scripts in CCTs without explicit user request. This
 // requires also specifying valid URL heuristics via
diff --git a/components/autofill_assistant/browser/features.h b/components/autofill_assistant/browser/features.h
index 1a5f159..6685b84 100644
--- a/components/autofill_assistant/browser/features.h
+++ b/components/autofill_assistant/browser/features.h
@@ -24,6 +24,7 @@
 extern const base::Feature kAutofillAssistantFullJsFlowStackTraces;
 extern const base::Feature kAutofillAssistantFullJsSnippetStackTraces;
 extern const base::Feature kAutofillAssistantGetPaymentsClientToken;
+extern const base::Feature kAutofillAssistantGetTriggerScriptsByHashPrefix;
 extern const base::Feature kAutofillAssistantInCCTTriggering;
 extern const base::Feature kAutofillAssistantInTabTriggering;
 extern const base::Feature kAutofillAssistantFeedbackChip;
diff --git a/components/autofill_assistant/browser/protocol_utils.cc b/components/autofill_assistant/browser/protocol_utils.cc
index 6a6384f..c094697 100644
--- a/components/autofill_assistant/browser/protocol_utils.cc
+++ b/components/autofill_assistant/browser/protocol_utils.cc
@@ -104,19 +104,8 @@
 }
 
 // static
-std::string ProtocolUtils::CreateCapabilitiesByHashRequest(
-    uint32_t hash_prefix_length,
-    const std::vector<uint64_t>& hash_prefix,
-    const ClientContextProto& client_context,
-    const ScriptParameters& script_parameters) {
-  GetCapabilitiesByHashPrefixRequestProto request;
-  request.set_hash_prefix_length(hash_prefix_length);
-  for (uint64_t prefix : hash_prefix) {
-    request.add_hash_prefix(prefix);
-  }
-  *request.mutable_script_parameters() =
-      script_parameters.ToProto(/* only_non_sensitive_allowlisted = */ true);
-
+ClientContextProto ProtocolUtils::CreateNonSensitiveContext(
+    const ClientContextProto& client_context) {
   ClientContextProto non_sensitive_context;
   if (client_context.has_locale()) {
     non_sensitive_context.set_locale(client_context.locale());
@@ -131,7 +120,44 @@
   if (client_context.has_platform_type()) {
     non_sensitive_context.set_platform_type(client_context.platform_type());
   }
-  *request.mutable_client_context() = non_sensitive_context;
+  return non_sensitive_context;
+}
+
+// static
+std::string ProtocolUtils::CreateCapabilitiesByHashRequest(
+    uint32_t hash_prefix_length,
+    const std::vector<uint64_t>& hash_prefix,
+    const ClientContextProto& client_context,
+    const ScriptParameters& script_parameters) {
+  GetCapabilitiesByHashPrefixRequestProto request;
+  request.set_hash_prefix_length(hash_prefix_length);
+  for (uint64_t prefix : hash_prefix) {
+    request.add_hash_prefix(prefix);
+  }
+  *request.mutable_script_parameters() =
+      script_parameters.ToProto(/* only_non_sensitive_allowlisted = */ true);
+  *request.mutable_client_context() = CreateNonSensitiveContext(client_context);
+
+  std::string serialized_request;
+  bool success = request.SerializeToString(&serialized_request);
+  DCHECK(success);
+  return serialized_request;
+}
+
+// static
+std::string ProtocolUtils::CreateTriggerScriptsByHashRequest(
+    uint32_t hash_prefix_length,
+    const std::vector<uint64_t>& hash_prefix,
+    const ClientContextProto& client_context,
+    const ScriptParameters& script_parameters) {
+  GetTriggerScriptsByHashPrefixRequestProto request;
+  request.set_hash_prefix_length(hash_prefix_length);
+  for (uint64_t prefix : hash_prefix) {
+    request.add_hash_prefix(prefix);
+  }
+  *request.mutable_script_parameters() =
+      script_parameters.ToProto(/* only_non_sensitive_allowlisted */ true);
+  *request.mutable_client_context() = CreateNonSensitiveContext(client_context);
 
   std::string serialized_request;
   bool success = request.SerializeToString(&serialized_request);
@@ -960,6 +986,26 @@
 }
 
 // static
+bool ProtocolUtils::ParseTriggerScriptsByHashPrefix(
+    const std::string& response,
+    std::vector<std::pair<std::string, std::string>>* domainScripts) {
+  DCHECK(domainScripts);
+
+  GetTriggerScriptsByHashPrefixResponseProto response_proto;
+  if (!response_proto.ParseFromString(response)) {
+    LOG(ERROR) << "Failed to parse trigger scripts by hash prefix response";
+    return false;
+  }
+
+  for (const auto& match : response_proto.match_info()) {
+    domainScripts->emplace_back(
+        match.domain(), match.trigger_scripts_response().SerializeAsString());
+  }
+
+  return true;
+}
+
+// static
 bool ProtocolUtils::ValidateTriggerCondition(
     const TriggerScriptConditionProto& trigger_condition) {
   switch (trigger_condition.type_case()) {
diff --git a/components/autofill_assistant/browser/protocol_utils.h b/components/autofill_assistant/browser/protocol_utils.h
index fb4e969..9486a1e76 100644
--- a/components/autofill_assistant/browser/protocol_utils.h
+++ b/components/autofill_assistant/browser/protocol_utils.h
@@ -41,6 +41,15 @@
       const ClientContextProto& client_context,
       const ScriptParameters& script_parameters);
 
+  // Create request to get trigger scripts via their url hash prefix.
+  // Note: Only a subset of allowed fields from |client_context| will be sent to
+  // the server.
+  static std::string CreateTriggerScriptsByHashRequest(
+      uint32_t hash_prefix_length,
+      const std::vector<uint64_t>& hash_prefix,
+      const ClientContextProto& client_context,
+      const ScriptParameters& script_parameters);
+
   // Convert |script_proto| to a script struct and if the script is valid, add
   // it to |scripts|.
   static void AddScript(const SupportedScriptProto& script_proto,
@@ -141,6 +150,13 @@
       absl::optional<int>* trigger_condition_timeout_ms,
       absl::optional<std::unique_ptr<ScriptParameters>>* script_parameters);
 
+  // Parse <domain, domain trigger scripts proto> pairs from the given
+  // |response| string and insert them into |domain_scripts|. Returns false if
+  // parsing failed or the proto contained invalid values.
+  static bool ParseTriggerScriptsByHashPrefix(
+      const std::string& response,
+      std::vector<std::pair<std::string, std::string>>* domainScripts);
+
   // Computes network stats for a roundtrip that returned |response| and
   // |response_info|, which were successfully parsed into |actions|.
   static RoundtripNetworkStats ComputeNetworkStats(
@@ -153,6 +169,8 @@
   // regexes that cannot be compiled).
   static bool ValidateTriggerCondition(
       const TriggerScriptConditionProto& trigger_condition);
+  static ClientContextProto CreateNonSensitiveContext(
+      const ClientContextProto& client_context);
   FRIEND_TEST_ALL_PREFIXES(ProtocolUtilsTest,
                            ValidateTriggerConditionsSimpleConditions);
   FRIEND_TEST_ALL_PREFIXES(ProtocolUtilsTest,
diff --git a/components/autofill_assistant/browser/protocol_utils_unittest.cc b/components/autofill_assistant/browser/protocol_utils_unittest.cc
index a969dec..7f2e1fb2 100644
--- a/components/autofill_assistant/browser/protocol_utils_unittest.cc
+++ b/components/autofill_assistant/browser/protocol_utils_unittest.cc
@@ -48,6 +48,36 @@
   ~ProtocolUtilsTest() override {}
 
   ClientContextProto client_context_proto_;
+
+ protected:
+  std::unique_ptr<GetTriggerScriptsResponseProto>
+  getTriggerScriptResponseProto() {
+    auto proto = std::make_unique<GetTriggerScriptsResponseProto>();
+    proto->add_additional_allowed_domains("example.com");
+    proto->add_additional_allowed_domains("other-example.com");
+
+    proto->set_trigger_condition_check_interval_ms(2000);
+    proto->set_trigger_condition_timeout_ms(500000);
+
+    auto* param_1 = proto->add_script_parameters();
+    param_1->set_name("param_1");
+    param_1->set_value("value_1");
+    auto* param_2 = proto->add_script_parameters();
+    param_2->set_name("param_2");
+    param_2->set_value("value_2");
+
+    TriggerScriptProto trigger_script_1;
+    *trigger_script_1.mutable_trigger_condition()->mutable_selector() =
+        ToSelectorProto("fake_element_1");
+    trigger_script_1.mutable_user_interface()->set_ui_timeout_ms(4000);
+    trigger_script_1.mutable_user_interface()->set_scroll_to_hide(false);
+    TriggerScriptProto trigger_script_2;
+
+    *proto->add_trigger_scripts() = trigger_script_1;
+    *proto->add_trigger_scripts() = trigger_script_2;
+
+    return proto;
+  }
 };
 
 TEST_F(ProtocolUtilsTest, ScriptMissingPath) {
@@ -188,6 +218,33 @@
           {"INTENT", "DUMMY_INTENT"}}));
 }
 
+TEST_F(ProtocolUtilsTest, CreateTriggerScriptsByHashRequest) {
+  ScriptParameters parameters = {
+      {{"key_a", "value_a"}, {"INTENT", "DUMMY_INTENT"}}};
+  GetTriggerScriptsByHashPrefixRequestProto request;
+  EXPECT_TRUE(
+      request.ParseFromString(ProtocolUtils::CreateTriggerScriptsByHashRequest(
+          16U, {13ULL, 17ULL}, client_context_proto_, parameters)));
+
+  LOG(INFO) << "ProtocolUtilsTest: request = " << request.ShortDebugString()
+            << "\n";
+  // Note: We can only send the following approved fields on the client_context:
+  ClientContextProto client_context;
+  client_context.set_locale(client_context_proto_.locale());
+  client_context.set_country(client_context_proto_.country());
+  client_context.mutable_chrome()->set_chrome_version(
+      client_context_proto_.chrome().chrome_version());
+  client_context.set_platform_type(ClientContextProto::PLATFORM_TYPE_ANDROID);
+  EXPECT_EQ(client_context, request.client_context());
+
+  EXPECT_EQ(request.hash_prefix_length(), 16U);
+  EXPECT_THAT(request.hash_prefix(), ElementsAre(13ULL, 17ULL));
+  EXPECT_THAT(
+      request.script_parameters(),
+      UnorderedElementsAreArray(base::flat_map<std::string, std::string>{
+          {"INTENT", "DUMMY_INTENT"}}));
+}
+
 TEST_F(ProtocolUtilsTest, AddScriptIgnoreInvalid) {
   SupportedScriptProto script_proto;
   std::vector<std::unique_ptr<Script>> scripts;
@@ -422,6 +479,40 @@
                           std::make_pair("param_2", "value_2")));
 }
 
+TEST_F(ProtocolUtilsTest, ParseTriggerScriptsByHashPrefixValid) {
+  GetTriggerScriptsByHashPrefixResponseProto proto;
+  // Add first GetTriggerScriptsResponseProto
+  auto* matchInfoProto1 = proto.add_match_info();
+  std::unique_ptr<GetTriggerScriptsResponseProto> triggerScriptResponse =
+      getTriggerScriptResponseProto();
+  matchInfoProto1->set_domain("https://adidas.com");
+  matchInfoProto1->mutable_trigger_scripts_response()->add_trigger_scripts();
+
+  // Add second GetTriggerScriptsResponseProto
+  auto* matchInfoProto2 = proto.add_match_info();
+  std::unique_ptr<GetTriggerScriptsResponseProto> triggerScriptResponse2 =
+      getTriggerScriptResponseProto();
+  matchInfoProto2->set_domain("https://nike.com");
+  matchInfoProto2->mutable_trigger_scripts_response()->add_trigger_scripts();
+
+  std::string proto_str;
+  proto.SerializeToString(&proto_str);
+
+  std::vector<std::pair<std::string, std::string>> domainScripts;
+  EXPECT_TRUE(ProtocolUtils::ParseTriggerScriptsByHashPrefix(proto_str,
+                                                             &domainScripts));
+  EXPECT_THAT(domainScripts, SizeIs(2));
+  EXPECT_EQ(domainScripts[0].first, "https://adidas.com");
+  EXPECT_EQ(domainScripts[1].first, "https://nike.com");
+}
+
+TEST_F(ProtocolUtilsTest, ParseTriggerScriptsByHashPrefixInvalid) {
+  std::vector<std::pair<std::string, std::string>> domainScripts;
+  EXPECT_FALSE(ProtocolUtils::ParseTriggerScriptsByHashPrefix("invalid",
+                                                              &domainScripts));
+  EXPECT_TRUE(domainScripts.empty());
+}
+
 TEST_F(ProtocolUtilsTest, TurnOffResizeVisualViewport) {
   GetTriggerScriptsResponseProto proto;
 
diff --git a/components/autofill_assistant/browser/service.proto b/components/autofill_assistant/browser/service.proto
index 1ef4d86..c77d264c 100644
--- a/components/autofill_assistant/browser/service.proto
+++ b/components/autofill_assistant/browser/service.proto
@@ -842,6 +842,47 @@
   reserved 1, 6 to 10;
 }
 
+// A privacy sensitive way to look up Trigger Scripts. Allows querying for
+// scripts by hashing the requested domain urls and sending only some of
+// the leading bits, such that the recipient will be unable to reconstruct the
+// original URL.
+message GetTriggerScriptsByHashPrefixRequestProto {
+  // Required. Number of bits in each hash prefix. Value must be in the range
+  // [15, 64].
+  optional uint32 hash_prefix_length = 1;
+  // Required. Hash prefixes for requested urls. The prefix will be taken as the
+  // first `hash_prefix_length` number of bits of this uint64. Other bits will
+  // be ignored. CityHash64 should be used to calculate the hashes. Encoding of
+  // the domain url prior to hashing should be UTF-8, it should include the
+  // http(s) header and exclude the last '/' character.
+  // Examples:
+  // - https://www.exampledomain.com
+  // - https://example.domain.com
+  // - https://domain.com
+  repeated uint64 hash_prefix = 2 [packed = true];
+  // The client context of the device for which you want to know script
+  // capabilities.
+  // NOTE: Currently, this will only contain the Chrome version number, locale
+  // and country for privacy reasons.
+  optional ClientContextProto client_context = 3;
+  // There is only a subset of parameters allowed to be sent from the client.
+  // INTENT parameter is required.
+  repeated ScriptParameterProto script_parameters = 4;
+}
+
+message GetTriggerScriptsByHashPrefixResponseProto {
+  message MatchInfoProto {
+    // The domain for which this trigger script is available.
+    optional string domain = 1;
+    optional GetTriggerScriptsResponseProto trigger_scripts_response = 2;
+  }
+  // Match information for the requested hash prefixes. No correlation should
+  // be assumed between the order of returned info and the order of requested
+  // prefixes. Clients are expected to match the returned urls to determine
+  // which responses they are interested in.
+  repeated MatchInfoProto match_info = 1;
+}
+
 // RPC request to fetch the available trigger scripts for a particular domain.
 message GetTriggerScriptsRequestProto {
   // The exact url for which to fetch the trigger scripts.
diff --git a/components/autofill_assistant/browser/service/rpc_type.h b/components/autofill_assistant/browser/service/rpc_type.h
index 3333c37..dc72135 100644
--- a/components/autofill_assistant/browser/service/rpc_type.h
+++ b/components/autofill_assistant/browser/service/rpc_type.h
@@ -13,9 +13,10 @@
   GET_TRIGGER_SCRIPTS,
   SUPPORTS_SCRIPT,
   GET_CAPABILITIES_BY_HASH_PREFIX,
+  GET_TRIGGER_SCRIPTS_BY_HASH_PREFIX,
   GET_USER_DATA,
   REPORT_PROGRESS,
 };
-}
+}  // namespace autofill_assistant
 
 #endif  // COMPONENTS_AUTOFILL_ASSISTANT_BROWSER_SERVICE_RPC_TYPE_H_
diff --git a/components/autofill_assistant/browser/startup_util.cc b/components/autofill_assistant/browser/startup_util.cc
index aad8bfb..aa8a1aa 100644
--- a/components/autofill_assistant/browser/startup_util.cc
+++ b/components/autofill_assistant/browser/startup_util.cc
@@ -17,6 +17,8 @@
 using autofill_assistant::features::kAutofillAssistant;
 using autofill_assistant::features::kAutofillAssistantChromeEntry;
 using autofill_assistant::features::kAutofillAssistantDirectActions;
+using autofill_assistant::features::
+    kAutofillAssistantGetTriggerScriptsByHashPrefix;
 using autofill_assistant::features::kAutofillAssistantLoadDFMForTriggerScripts;
 using autofill_assistant::features::kAutofillAssistantProactiveHelp;
 
@@ -81,7 +83,9 @@
   }
 
   DCHECK(script_parameters.GetRequestsTriggerScript().value_or(false));
-  if (!options.msbb_setting_enabled) {
+  if (!options.msbb_setting_enabled &&
+      !base::FeatureList::IsEnabled(
+          kAutofillAssistantGetTriggerScriptsByHashPrefix)) {
     VLOG(1) << "Invalid Autofill Assistant intent: REQUEST_TRIGGER_SCRIPT "
                "requires MSBB, but was turned off.";
     return StartupMode::SETTING_DISABLED;
diff --git a/components/autofill_assistant/browser/startup_util_unittest.cc b/components/autofill_assistant/browser/startup_util_unittest.cc
index 2929b3a6..011a0df 100644
--- a/components/autofill_assistant/browser/startup_util_unittest.cc
+++ b/components/autofill_assistant/browser/startup_util_unittest.cc
@@ -46,6 +46,7 @@
 
 using features::kAutofillAssistant;
 using features::kAutofillAssistantChromeEntry;
+using features::kAutofillAssistantGetTriggerScriptsByHashPrefix;
 using features::kAutofillAssistantLoadDFMForTriggerScripts;
 using features::kAutofillAssistantProactiveHelp;
 using ::testing::Eq;
@@ -57,9 +58,10 @@
 };
 
 // Shorthand for the full set of relevant features.
-const std::array<base::Feature, 4> kFullFeatureSet = {
+const std::array<base::Feature, 5> kFullFeatureSet = {
     kAutofillAssistant, kAutofillAssistantProactiveHelp,
-    kAutofillAssistantChromeEntry, kAutofillAssistantLoadDFMForTriggerScripts};
+    kAutofillAssistantChromeEntry, kAutofillAssistantLoadDFMForTriggerScripts,
+    kAutofillAssistantGetTriggerScriptsByHashPrefix};
 
 // Common script parameters to reuse.
 const base::flat_map<std::string, std::string> kRegularScript = {
@@ -160,6 +162,16 @@
 
   void TearDown() override { scoped_feature_list_.reset(); }
 
+  bool IsAnyFeatureSetEnabled(
+      const std::vector<std::vector<base::Feature>>& feature_sets) {
+    for (const auto& features : feature_sets) {
+      if (AreFeaturesEnabled(features)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   bool AreFeaturesEnabled(const std::vector<base::Feature>& features) const {
     for (const auto& feature : features) {
       if (!IsFeatureEnabled(feature)) {
@@ -246,7 +258,12 @@
               ? StartupMode::START_RPC_TRIGGER_SCRIPT
               : StartupMode::FEATURE_DISABLED));
 
-  // CCT, MSBB is off.
+  // CCT, MSBB is off, but kAutofillAssistantGetTriggerScriptsByHashPrefix might
+  // be enabled.
+  StartupMode expectedStartupMode =
+      IsFeatureEnabled(kAutofillAssistantGetTriggerScriptsByHashPrefix)
+          ? StartupMode::START_RPC_TRIGGER_SCRIPT
+          : StartupMode::SETTING_DISABLED;
   EXPECT_THAT(
       StartupUtil().ChooseStartupModeForIntent(
           TriggerContext{
@@ -257,7 +274,7 @@
            .feature_module_installed = true}),
       MatchingStartupMode(AreFeaturesEnabled({kAutofillAssistant,
                                               kAutofillAssistantProactiveHelp})
-                              ? StartupMode::SETTING_DISABLED
+                              ? expectedStartupMode
                               : StartupMode::FEATURE_DISABLED));
 
   // CCT, Proactive help is off.
diff --git a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc
index bc406689..c2f321c 100644
--- a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc
+++ b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.cc
@@ -10,7 +10,9 @@
 #include "components/autofill_assistant/browser/client_context.h"
 #include "components/autofill_assistant/browser/features.h"
 #include "components/autofill_assistant/browser/protocol_utils.h"
+#include "components/autofill_assistant/browser/public/autofill_assistant.h"
 #include "components/autofill_assistant/browser/script_parameters.h"
+#include "components/autofill_assistant/browser/service/service_request_sender.h"
 #include "components/autofill_assistant/browser/starter_platform_delegate.h"
 #include "components/autofill_assistant/browser/url_utils.h"
 #include "components/version_info/version_info.h"
@@ -18,6 +20,7 @@
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/navigation_controller.h"
 #include "net/http/http_status_code.h"
+#include "url/origin.h"
 
 namespace {
 
@@ -25,6 +28,10 @@
   return base::FeatureList::IsEnabled(
       autofill_assistant::features::kAutofillAssistantDialogOnboarding);
 }
+
+// Number of leading bits of the domain url hashes to send to the server.
+const uint32_t kHashPrefixSize = 15;
+
 }  // namespace
 
 namespace autofill_assistant {
@@ -52,6 +59,17 @@
 
 TriggerScriptCoordinator::~TriggerScriptCoordinator() = default;
 
+// |GetTriggerScriptsByHashPrefix| is only triggered for non-MSBB users
+// who have |kAutofillAssistantGetTriggerScriptsByHashPrefix| enabled.
+bool TriggerScriptCoordinator::ShouldGetTriggerScriptsByHashPrefix() {
+  return !starter_delegate_->GetCommonDependencies()
+              ->GetMakeSearchesAndBrowsingBetterEnabled(
+                  web_contents()->GetBrowserContext()) &&
+         base::FeatureList::IsEnabled(
+             autofill_assistant::features::
+                 kAutofillAssistantGetTriggerScriptsByHashPrefix);
+}
+
 void TriggerScriptCoordinator::Start(
     const GURL& deeplink_url,
     std::unique_ptr<TriggerContext> trigger_context,
@@ -75,15 +93,62 @@
   client_context.set_country(
       starter_delegate_->GetCommonDependencies()->GetCountryCode());
 
-  request_sender_->SendRequest(
-      get_trigger_scripts_server_,
-      ProtocolUtils::CreateGetTriggerScriptsRequest(
-          deeplink_url_, client_context,
-          trigger_context_->GetScriptParameters()),
-      ServiceRequestSender::AuthMode::API_KEY,
-      base::BindOnce(&TriggerScriptCoordinator::OnGetTriggerScripts,
-                     weak_ptr_factory_.GetWeakPtr()),
-      autofill_assistant::RpcType::GET_TRIGGER_SCRIPTS);
+  if (ShouldGetTriggerScriptsByHashPrefix()) {
+    uint64_t hash_prefix = AutofillAssistant::GetHashPrefix(
+        kHashPrefixSize, url::Origin::Create(GetCurrentURL()));
+
+    request_sender_->SendRequest(
+        get_trigger_scripts_server_,
+        ProtocolUtils::CreateTriggerScriptsByHashRequest(
+            kHashPrefixSize, {hash_prefix}, client_context,
+            trigger_context_->GetScriptParameters()),
+        ServiceRequestSender::AuthMode::API_KEY,
+        base::BindOnce(
+            &TriggerScriptCoordinator::OnGetTriggerScriptsByHashPrefix,
+            weak_ptr_factory_.GetWeakPtr()),
+        RpcType::GET_TRIGGER_SCRIPTS_BY_HASH_PREFIX);
+  } else {
+    request_sender_->SendRequest(
+        get_trigger_scripts_server_,
+        ProtocolUtils::CreateGetTriggerScriptsRequest(
+            deeplink_url_, client_context,
+            trigger_context_->GetScriptParameters()),
+        ServiceRequestSender::AuthMode::API_KEY,
+        base::BindOnce(&TriggerScriptCoordinator::OnGetTriggerScripts,
+                       weak_ptr_factory_.GetWeakPtr()),
+        autofill_assistant::RpcType::GET_TRIGGER_SCRIPTS);
+  }
+}
+
+void TriggerScriptCoordinator::OnGetTriggerScriptsByHashPrefix(
+    int http_status,
+    const std::string& response,
+    const ServiceRequestSender::ResponseInfo& response_info) {
+  if (http_status != net::HTTP_OK) {
+    Stop(Metrics::TriggerScriptFinishedState::GET_ACTIONS_FAILED);
+    return;
+  }
+
+  std::vector<std::pair<std::string, std::string>> domain_trigger_scripts;
+  if (!ProtocolUtils::ParseTriggerScriptsByHashPrefix(
+          response, &domain_trigger_scripts)) {
+    // TODO(b/242039152) record specific metric
+    Stop(Metrics::TriggerScriptFinishedState::GET_ACTIONS_PARSE_ERROR);
+    return;
+  }
+
+  // Check if any of the returned domains matches the current URL that the
+  // user is on. If there is a match, call the regular |OnGetTriggerScripts|.
+  url::Origin current_url = url::Origin::Create(deeplink_url_);
+  for (const auto& [matched_domain, trigger_script] : domain_trigger_scripts) {
+    if (current_url != url::Origin::Create(GURL(matched_domain))) {
+      continue;
+    }
+    OnGetTriggerScripts(http_status, trigger_script, response_info);
+    return;
+  }
+
+  Stop(Metrics::TriggerScriptFinishedState::NO_TRIGGER_SCRIPT_AVAILABLE);
 }
 
 void TriggerScriptCoordinator::OnGetTriggerScripts(
diff --git a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.h b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.h
index 7596f98..ff5cb07 100644
--- a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.h
+++ b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator.h
@@ -142,6 +142,11 @@
       int http_status,
       const std::string& response,
       const ServiceRequestSender::ResponseInfo& response_info);
+  void OnGetTriggerScriptsByHashPrefix(
+      int http_status,
+      const std::string& response,
+      const ServiceRequestSender::ResponseInfo& response_info);
+  bool ShouldGetTriggerScriptsByHashPrefix();
   void RegisterExperimentSyntheticFieldTrial(
       const ScriptParameters& parameters) const;
   GURL GetCurrentURL() const;
diff --git a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc
index bfde330..98cccba81 100644
--- a/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc
+++ b/components/autofill_assistant/browser/trigger_scripts/trigger_script_coordinator_unittest.cc
@@ -39,6 +39,9 @@
 
 namespace autofill_assistant {
 
+using autofill_assistant::features::kAutofillAssistantDialogOnboarding;
+using autofill_assistant::features::
+    kAutofillAssistantGetTriggerScriptsByHashPrefix;
 using ::base::test::RunOnceCallback;
 using ::testing::_;
 using ::testing::ElementsAre;
@@ -47,16 +50,17 @@
 using ::testing::IsEmpty;
 using ::testing::NiceMock;
 using ::testing::Return;
+using ::testing::SizeIs;
 using ::testing::UnorderedElementsAre;
 using ::testing::UnorderedElementsAreArray;
+using ::testing::ValuesIn;
 using ::testing::WithArg;
 
 std::unique_ptr<base::test::ScopedFeatureList> CreateScopedFeatureList(
-    bool dialog_onboarding) {
+    base::Feature feature,
+    bool feature_enabled) {
   auto scoped_feature_list = std::make_unique<base::test::ScopedFeatureList>();
-  scoped_feature_list->InitWithFeatureState(
-      autofill_assistant::features::kAutofillAssistantDialogOnboarding,
-      dialog_onboarding);
+  scoped_feature_list->InitWithFeatureState(feature, feature_enabled);
   return scoped_feature_list;
 }
 
@@ -258,6 +262,32 @@
              TriggerScriptProto::UNSPECIFIED_TRIGGER_UI_TYPE}}})));
 }
 
+TEST_F(TriggerScriptCoordinatorTest,
+       StopOnParsingError_GetScriptsByHashPrefix) {
+  // Disable MSBB and enable the feature that allows fetching by hash prefix
+  auto feature_list = CreateScopedFeatureList(
+      kAutofillAssistantGetTriggerScriptsByHashPrefix, true);
+  fake_platform_delegate_.fake_common_dependencies_.msbb_enabled_ = false;
+
+  EXPECT_CALL(*mock_request_sender_,
+              OnSendRequest(GURL(kFakeServerUrl), _, _,
+                            RpcType::GET_TRIGGER_SCRIPTS_BY_HASH_PREFIX))
+      .WillOnce(RunOnceCallback<2>(net::HTTP_OK, "invalid",
+                                   ServiceRequestSender::ResponseInfo{}));
+  EXPECT_CALL(
+      mock_callback_,
+      Run(Metrics::TriggerScriptFinishedState::GET_ACTIONS_PARSE_ERROR, _, _));
+
+  coordinator_->Start(GURL(kFakeDeepLink), std::make_unique<TriggerContext>(),
+                      mock_callback_.Get());
+  EXPECT_THAT(
+      GetUkmTriggerScriptFinished(ukm_recorder_),
+      ElementsAreArray(ToHumanReadableMetrics(
+          {{navigation_ids_[0],
+            {Metrics::TriggerScriptFinishedState::GET_ACTIONS_PARSE_ERROR,
+             TriggerScriptProto::UNSPECIFIED_TRIGGER_UI_TYPE}}})));
+}
+
 TEST_F(TriggerScriptCoordinatorTest, StopOnNoTriggerScriptsAvailable) {
   EXPECT_CALL(
       *mock_request_sender_,
@@ -278,6 +308,26 @@
              TriggerScriptProto::UNSPECIFIED_TRIGGER_UI_TYPE}}})));
 }
 
+TEST_F(TriggerScriptCoordinatorTest, UseRegularGetTriggerScriptsIfMsbbEnabled) {
+  // Even though the feature that allows fetching by hash prefix is enabled
+  auto feature_list = CreateScopedFeatureList(
+      kAutofillAssistantGetTriggerScriptsByHashPrefix, true);
+  // MSBB is also enabled
+  fake_platform_delegate_.fake_common_dependencies_.msbb_enabled_ = true;
+  // so make sure that we use the GetTriggerScripts endpoint
+  EXPECT_CALL(
+      *mock_request_sender_,
+      OnSendRequest(GURL(kFakeServerUrl), _, _, RpcType::GET_TRIGGER_SCRIPTS))
+      .Times(1);
+  EXPECT_CALL(*mock_request_sender_,
+              OnSendRequest(GURL(kFakeServerUrl), _, _,
+                            RpcType::GET_TRIGGER_SCRIPTS_BY_HASH_PREFIX))
+      .Times(0);
+
+  coordinator_->Start(GURL(kFakeDeepLink), std::make_unique<TriggerContext>(),
+                      mock_callback_.Get());
+}
+
 TEST_F(TriggerScriptCoordinatorTest, StartChecksStaticAndDynamicConditions) {
   GetTriggerScriptsResponseProto response;
   auto* trigger_condition_all_of = response.add_trigger_scripts()
@@ -1113,7 +1163,8 @@
 
 TEST_F(TriggerScriptCoordinatorTest,
        CancellingDialogOnboardingDoesNotStopTriggerScript) {
-  auto feature_list = CreateScopedFeatureList(/* dialog_onboarding= */ true);
+  auto feature_list =
+      CreateScopedFeatureList(kAutofillAssistantDialogOnboarding, true);
 
   GetTriggerScriptsResponseProto response;
   auto* script = response.add_trigger_scripts();
@@ -1182,7 +1233,8 @@
 
 TEST_F(TriggerScriptCoordinatorTest,
        RejectingBottomSheetOnboardingStopsTriggerScript) {
-  auto feature_list = CreateScopedFeatureList(/* dialog_onboarding= */ false);
+  auto feature_list =
+      CreateScopedFeatureList(kAutofillAssistantDialogOnboarding, false);
 
   GetTriggerScriptsResponseProto response;
   auto* script = response.add_trigger_scripts();
@@ -1732,4 +1784,122 @@
   EXPECT_THAT(GetUkmTriggerScriptFinished(ukm_recorder_), IsEmpty());
 }
 
+class TriggerScriptCoordinatorParameterizedTest
+    : public TriggerScriptCoordinatorTest,
+      public testing::WithParamInterface<std::pair<std::string, bool>> {
+ public:
+  void SetUp() override {
+    TriggerScriptCoordinatorTest::SetUp();
+    current_parameterized_url_ = GetParam().first;
+    is_matching_url = GetParam().second;
+  }
+
+  void TearDown() override { TriggerScriptCoordinatorTest::TearDown(); }
+
+ protected:
+  std::string current_parameterized_url_;
+  bool is_matching_url;
+};
+
+TEST_P(TriggerScriptCoordinatorParameterizedTest,
+       GetScriptsByHashPrefix_NonMsbbMatchCurrentDomainByUrlHost) {
+  // Disable MSBB and enable the feature that allows fetching by hash prefix
+  auto feature_list = CreateScopedFeatureList(
+      kAutofillAssistantGetTriggerScriptsByHashPrefix, true);
+  fake_platform_delegate_.fake_common_dependencies_.msbb_enabled_ = false;
+
+  // Create the GetTriggerScriptsByHashPrefixProtoResponse
+  GetTriggerScriptsByHashPrefixResponseProto response;
+  // nike.com, first time user, will *not* get matched
+  auto* nikeMatchInfo = response.add_match_info();
+  nikeMatchInfo->set_domain("https://nike.com/");
+  auto* nikeTriggerScript =
+      nikeMatchInfo->mutable_trigger_scripts_response()->add_trigger_scripts();
+  nikeTriggerScript->set_trigger_ui_type(
+      TriggerScriptProto::SHOPPING_CART_FIRST_TIME_USER);
+
+  // example.com, returning user, will get matched
+  auto* exampleMatchInfo = response.add_match_info();
+  exampleMatchInfo->set_domain(current_parameterized_url_);
+  auto* exampleTriggerScript =
+      exampleMatchInfo->mutable_trigger_scripts_response()
+          ->add_trigger_scripts();
+  exampleTriggerScript->set_trigger_ui_type(
+      TriggerScriptProto::SHOPPING_CART_RETURNING_USER);
+
+  std::string serialized_response;
+  response.SerializeToString(&serialized_response);
+
+  EXPECT_CALL(*mock_request_sender_,
+              OnSendRequest(GURL(kFakeServerUrl), _, _,
+                            RpcType::GET_TRIGGER_SCRIPTS_BY_HASH_PREFIX))
+      .WillOnce(RunOnceCallback<2>(net::HTTP_OK, serialized_response,
+                                   ServiceRequestSender::ResponseInfo{}));
+
+  if (is_matching_url) {
+    EXPECT_CALL(*mock_dynamic_trigger_conditions_,
+                OnUpdate(mock_web_controller_.get(), _))
+        .WillRepeatedly(RunOnceCallback<1>());
+    EXPECT_CALL(*mock_ui_delegate_, ShowTriggerScript).Times(1);
+  }
+
+  fake_platform_delegate_.is_first_time_user_ = false;
+  fake_platform_delegate_.show_onboarding_result_ = OnboardingResult::ACCEPTED;
+  fake_platform_delegate_.show_onboarding_result_shown_ = true;
+
+  base::flat_map<std::string, std::string> input_script_params{
+      {"DEBUG_BUNDLE_ID", "bundle_id"},
+      {"DEBUG_SOCKET_ID", "socket_id"},
+      {"DEBUG_BUNDLE_VERSION", "socket_version"},
+      {"FALLBACK_BUNDLE_ID", "fallback_id"},
+      {"FALLBACK_BUNDLE_VERSION", "fallback_version"}};
+
+  // The initial URL from which we initiate the check
+  std::string deep_link = "https://example.com/q?data=test";
+  coordinator_->Start(GURL(deep_link),
+                      std::make_unique<TriggerContext>(
+                          /* params = */ std::make_unique<ScriptParameters>(
+                              input_script_params),
+                          /* exp = */ "1,2,4",
+                          /* is_cct = */ true,
+                          /* onboarding_shown = */ true,
+                          /* is_direct_action = */ true,
+                          /* initial_url = */ "https://not-example.com/",
+                          /* is_in_chrome_triggered = */ true,
+                          /* is_externally_triggered = */ false,
+                          /* skip_autofill_assistant_onboarding = */ false),
+                      mock_callback_.Get());
+
+  if (!is_matching_url) {
+    EXPECT_THAT(GetUkmTriggerScriptShownToUsers(ukm_recorder_), SizeIs(0));
+    EXPECT_THAT(
+        GetUkmTriggerScriptFinished(ukm_recorder_),
+        ElementsAreArray(ToHumanReadableMetrics(
+            {{navigation_ids_[0],
+              {Metrics::TriggerScriptFinishedState::NO_TRIGGER_SCRIPT_AVAILABLE,
+               TriggerScriptProto::UNSPECIFIED_TRIGGER_UI_TYPE}}})));
+    return;
+  }
+  EXPECT_THAT(GetUkmTriggerScriptShownToUsers(ukm_recorder_),
+              ElementsAreArray(ToHumanReadableMetrics(
+                  {{navigation_ids_[0],
+                    {Metrics::TriggerScriptShownToUser::RUNNING,
+                     TriggerScriptProto::UNSPECIFIED_TRIGGER_UI_TYPE}},
+                   {navigation_ids_[0],
+                    {Metrics::TriggerScriptShownToUser::SHOWN_TO_USER,
+                     TriggerScriptProto::SHOPPING_CART_RETURNING_USER}}})));
+}
+
+const std::vector<std::pair<std::string, bool>> domains(
+    {{"https://example.com", true},
+     {"https://example.com/", true},
+     {"https://example.com/cart", true},
+     {"http://example.com", false},  // different scheme (http vs https)
+     {"https://adidas.com", false},
+     {"https://not-example.com", false}});
+
+INSTANTIATE_TEST_SUITE_P(TriggerScriptCoordinatorParameterizedTestSuite,
+                         TriggerScriptCoordinatorParameterizedTest,
+                         ValuesIn(domains));
+
 }  // namespace autofill_assistant
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb
index 48b6c42..1d3188c 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_af.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Wys inligting</translation>
 <translation id="3123473560110926937">Geblokkeer op sommige werwe</translation>
 <translation id="3143754809889689516">Speel van die begin af</translation>
+<translation id="3162899666601560689">Werwe kan webkoekies gebruik om jou blaai-ervaring beter te maak, byvoorbeeld, om jou aangemeld te hou of om items in jou inkopiemandjie te onthou</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> gestoorde data</translation>
 <translation id="3203366800380907218">Op die web</translation>
 <translation id="321187648315454507">Om <ph name="APP_NAME" /> vir jou kennisgewings te laat stuur, moet jy kennisgewings ook in <ph name="BEGIN_LINK" />Android-instellings<ph name="END_LINK" /> aanskakel.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Onderskrifte</translation>
 <translation id="8300705686683892304">Bestuur deur program</translation>
 <translation id="8324158725704657629">Moenie weer vra nie</translation>
+<translation id="834785183489258869">Terwyl jy in Incognito is, kan werwe nie jou webkoekies gebruik om jou blaai-aktiwiteit op verskillende werwe te sien nie, byvoorbeeld om advertensies te personaliseer. Kenmerke op sommige werwe sal dalk nie werk nie.</translation>
 <translation id="8372893542064058268">Laat agtergrondsinkronisering vir 'n spesifieke werf toe.</translation>
 <translation id="8376384591331888629">Insluitend derdeparty-webkoekies op hierdie werf</translation>
 <translation id="83792324527827022">'n Werf gebruik tans jou kamera en mikrofoon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb
index b5335228..17ef625 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_am.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">መረጃ አሳይ</translation>
 <translation id="3123473560110926937">በአንዳንድ ጣቢያዎች ላይ ታግዷል</translation>
 <translation id="3143754809889689516">ከመጀመሪያው አጫውት</translation>
+<translation id="3162899666601560689">ጣቢያዎች የአሰሳዎን ተሞክሮ ለማሻሻል ኩኪዎችን መጠቀም ይችላሉ፣ ለምሳሌ እርስዎ በመለያ እንደገቡ ማቆየት ወይም በግዢ ጋሪዎ ውስጥ ንጥሎችን ለማስታወስ</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> የተከማቸ ውሂብ</translation>
 <translation id="3203366800380907218">ከድሩ</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> ማሳወቂያዎችን እንዲልክልዎት ለማድረግ፣ በተጨማሪ በ <ph name="BEGIN_LINK" />Android ቅንብሮች<ph name="END_LINK" /> ውስጥ ማሳወቂያዎችን ያብሩ።</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">መግለጫ ጽሑፎች</translation>
 <translation id="8300705686683892304">በመተግበሪያ የሚተዳደር</translation>
 <translation id="8324158725704657629">ዳግም አትጠይቅ</translation>
+<translation id="834785183489258869">ማንነት በማያሳውቅ ሁኔታ ላይ ሳሉ ጣቢያዎች ለምሳሌ ማስታወቂያዎችን ግላዊነት ለማላበስ ብለው የእርስዎን ኩኪዎች በመጠቀም በተለያዩ ጣቢያዎች ላይ ያለዎትን የአሰሳ እንቅስቃሴ መመልከት አይችሉም። በአንዳንድ ጣቢያዎች ላይ ያሉ ባህሪያት ላይሰሩ ይችላሉ።</translation>
 <translation id="8372893542064058268">ለአንድ የተወሰነ ጣቢያ የጀርባ ስምረትን ይፍቀዱ።</translation>
 <translation id="8376384591331888629">በዚህ ጣቢያ ላይ የሶስተኛ ወገን ኩኪዎችን ጨምሮ</translation>
 <translation id="83792324527827022">አንድ ጣቢያ የእርስዎን ካሜራ እና ማይክሮፎን እየተጠቀመ ነው</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
index d5488fe..de4b893 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ar.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">عرض المعلومات</translation>
 <translation id="3123473560110926937">حظر الإعلانات في بعض المواقع</translation>
 <translation id="3143754809889689516">التشغيل من البداية</translation>
+<translation id="3162899666601560689">يسمح هذا الإجراء للمواقع الإلكترونية باستخدام ملفات تعريف الارتباط لتحسين تجربة التصفُّح، مثل إبقائك مُسجِّلاً الدخول أو تذكُّر عناصر في سلة التسوق.</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> من البيانات المخزّنة</translation>
 <translation id="3203366800380907218">من الويب</translation>
 <translation id="321187648315454507">‏للسماح لتطبيق <ph name="APP_NAME" /> بإرسال الإشعارات إليك، يُرجى أيضًا تفعيل الإشعارات في <ph name="BEGIN_LINK" />إعدادات Android<ph name="END_LINK" />.</translation>
@@ -332,6 +333,7 @@
 <translation id="8284326494547611709">الترجمة والشرح</translation>
 <translation id="8300705686683892304">تتم الإدارة من خلال التطبيق</translation>
 <translation id="8324158725704657629">عدم السؤال مرة أخرى</translation>
+<translation id="834785183489258869">في وضع التصفُّح المتخفي، لا يمكن للمواقع الإلكترونية استخدام ملفات تعريف الارتباط للاطّلاع على نشاط التصفُّح على المواقع الإلكترونية المختلفة، بهدف تقديم إعلانات مخصّصة لك مثلاً. قد لا تعمل الميزات على بعض المواقع الإلكترونية.</translation>
 <translation id="8372893542064058268">السماح لموقع إلكتروني معيّن بتشغيل "المزامنة في الخلفية"</translation>
 <translation id="8376384591331888629">تضمين ملفات تعريف الارتباط التابعة لجهات خارجية على هذا الموقع الإلكتروني</translation>
 <translation id="83792324527827022">هناك موقع إلكتروني يستخدم الميكروفون والكاميرا.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb
index 36946e4..3b18830 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">তথ্য দেখুৱাওক</translation>
 <translation id="3123473560110926937">কিছুমান ছাইটত অৱৰোধ কৰা আছে</translation>
 <translation id="3143754809889689516">আৰম্ভণিৰ পৰা প্লে’ কৰক</translation>
+<translation id="3162899666601560689">ছাইটসমূহে আপোনাৰ ব্ৰাউজিঙৰ অভিজ্ঞতা উন্নত কৰিবলৈ কুকিসমূহ ব্যৱহাৰ কৰিব পাৰে, যেনে, আপোনাক ছাইন ইন কৰি ৰাখিবলৈ অথবা আপোনাৰ শ্বপিং কার্টত থকা বস্তুবোৰ মনত ৰাখিবলৈ</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> ডেটা ষ্ট’ৰ কৰা আছে</translation>
 <translation id="3203366800380907218">ৱেবৰ পৰা</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" />ক আপোনালৈ জাননী পঠিয়াবলৈ দিবলৈ <ph name="BEGIN_LINK" />Android ছেটিংসমূহ<ph name="END_LINK" />তো জাননী অন কৰক।</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">কেপশ্বন</translation>
 <translation id="8300705686683892304">এপৰ দ্বাৰা পৰিচালিত</translation>
 <translation id="8324158725704657629">পুনৰ নুসুধিব</translation>
+<translation id="834785183489258869">ইনক’গনিট’ ম’ডত থকাৰ সময়ত, ছাইটসমূহে বিভিন্ন ছাইটত আপোনাৰ ব্ৰাউজিঙৰ কাৰ্যকলাপ চাবলৈ আপোনাৰ কুকিসমূহ ব্যৱহাৰ কৰিব নোৱাৰে; যেনে, বিজ্ঞাপন ব্যক্তিগতকৃত কৰা ইত্যাদি। কিছুমান ছাইটত সুবিধাসমূহে কাম নকৰিবও পাৰে।</translation>
 <translation id="8372893542064058268">কোনো নির্দিষ্ট ছাইটৰ বাবে নেপথ্যত ছিংক কৰাৰ অনুমতি দিয়ক।</translation>
 <translation id="8376384591331888629">এই ছাইটটোত থকা তৃতীয় পক্ষৰ কুকিসমূহো অন্তৰ্ভুক্ত কৰক</translation>
 <translation id="83792324527827022">এটা ছাইটে আপোনাৰ কেমেৰা আৰু মাইক্ৰ’ফ’ন ব্যৱহাৰ কৰি আছে</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb
index 85a1bdef..be143d1 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_az.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Məlumatı göstərin</translation>
 <translation id="3123473560110926937">Bəzi saytlarda bloklandı</translation>
 <translation id="3143754809889689516">Başdan oxudun</translation>
+<translation id="3162899666601560689">Saytlar baxış təcrübənizi yaxşılaşdırmaq üçün, məsələn, sizi daxil olmuş vəziyyətdə saxlamaq və ya alış-veriş səbətinizdəki elementləri yadda saxlamaq üçün kukilərdən istifadə edə bilər</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> saxlanılan data</translation>
 <translation id="3203366800380907218">Vebdən</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> tətbiqinə sizə bildiriş göndərmək icazəsi vermək üçün <ph name="BEGIN_LINK" />Android Ayarlarında<ph name="END_LINK" /> bildirişləri də aktiv edin.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Başlıqlar</translation>
 <translation id="8300705686683892304">Tədbiq tərəfindən idarə edilən</translation>
 <translation id="8324158725704657629">Daha soruşma</translation>
+<translation id="834785183489258869">Anonim rejimdə olduqda saytlar müxtəlif saytlarda axtarış fəaliyyətinizi görmək üçün kukilərinizdən istifadə edə bilmir (məsələn, reklamları fərdiləşdirmək üçün). Bəzi saytlardakı funksiyalar işləməyə bilər.</translation>
 <translation id="8372893542064058268">Xüsusi sayt üçün Arxa fon Sinxronizasiyasına icazə verin.</translation>
 <translation id="8376384591331888629">Bu saytdakı üçüncü tərəf kukilər daxil olmaqla</translation>
 <translation id="83792324527827022">Sayt kamera və mikrofonunuzdan istifadə edir</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb
index 7fcc55d..8bb2596 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_be.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Паказаць інфармацыю</translation>
 <translation id="3123473560110926937">Заблакіравана на некаторых сайтах</translation>
 <translation id="3143754809889689516">Прайграць з пачатку</translation>
+<translation id="3162899666601560689">Сайты могуць выкарыстоўваць файлы cookie для паляпшэння сваёй функцыянальнасці – напрыклад, для захавання інфармацыі пра тое, што вы ўвайшлі ва ўліковы запіс, або каб запамінаць тавары ў кошыку</translation>
 <translation id="3198916472715691905">Аб'ём захаваных даных: <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">З інтэрнэту</translation>
 <translation id="321187648315454507">Каб праграма "<ph name="APP_NAME" />" магла адпраўляць вам апавяшчэнні, таксама ўключыце іх у <ph name="BEGIN_LINK" />Наладах Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Субцітры</translation>
 <translation id="8300705686683892304">Пад кіраваннем праграмы</translation>
 <translation id="8324158725704657629">Больш не пытацца</translation>
+<translation id="834785183489258869">У рэжыме інкогніта сайты не могуць выкарыстоўваць файлы cookie для адсочвання вашых дзеянняў у браўзеры на розных сайтах у мэтах персаналізацыі рэкламы. На некаторых сайтах можа не працаваць частка функцый.</translation>
 <translation id="8372893542064058268">Дазволіць фонавую сінхранізацыю для канкрэтнага сайта.</translation>
 <translation id="8376384591331888629">У тым ліку староннія файлы cookie на гэтым сайце</translation>
 <translation id="83792324527827022">Сайт выкарыстоўвае камеру і мікрафон</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb
index 39ab61a..0118704 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bg.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Показване на информацията</translation>
 <translation id="3123473560110926937">Блокиране на някои сайтове</translation>
 <translation id="3143754809889689516">Възпроизвеждане от началото</translation>
+<translation id="3162899666601560689">Сайтовете могат да използват „бисквитки“ с цел по-добро сърфиране, например за да оставате в профила си или за да запомнят артикулите в пазарската ви кошница</translation>
 <translation id="3198916472715691905">Съхранявани данни: <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">От мрежата</translation>
 <translation id="321187648315454507">За да разрешите на <ph name="APP_NAME" /> да ви изпраща известия, те трябва да бъдат включени и от <ph name="BEGIN_LINK" />настройките на Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Надписи</translation>
 <translation id="8300705686683892304">Управлявани от приложение</translation>
 <translation id="8324158725704657629">Без повторно питане</translation>
+<translation id="834785183489258869">Докато сте в режим „инкогнито“, сайтовете не могат да използват „бисквитките“ ви, за да следят активността ви при сърфиране в различни сайтове, например с цел персонализиране на реклами. Функциите в някои сайтове може да не работят.</translation>
 <translation id="8372893542064058268">Разрешаване на синхронизирането на заден план за конкретен сайт.</translation>
 <translation id="8376384591331888629">Включително бисквитките на трети страни на този сайт</translation>
 <translation id="83792324527827022">Сайт използва камерата и микрофона ви</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb
index 760794b822..23abf14e 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bn.xtb
@@ -48,6 +48,7 @@
 <translation id="2107397443965016585">সাইটকে সুরক্ষিত কন্টেন্ট চালানোর অনুমতি দেওয়ার আগে জিজ্ঞাসা করুন (প্রস্তাবিত)</translation>
 <translation id="2146738493024040262">ইনস্ট্যান্ট অ্যাপ খুলুন</translation>
 <translation id="2148716181193084225">আজ</translation>
+<translation id="2155988908301433309">সবসময় মোবাইল সাইট দেখুন</translation>
 <translation id="2182457891543959921">আপনার আশেপাশের এলাকার একটি 3D ম্যাপ তৈরি করতে বা ক্যামেরার অবস্থান ট্র্যাক করতে কোনও সাইট অনুমোদন দেওয়ার আগে, একবার জিজ্ঞাসা করে নিন (সাজেস্ট করা হয়েছে)</translation>
 <translation id="2212565012507486665">কুকিগুলিকে অনুমতি দিন</translation>
 <translation id="2228071138934252756">তাছাড়া, যাতে <ph name="APP_NAME" /> আপনার ক্যামেরা অ্যাক্সেস করতে পারে, তার জন্য <ph name="BEGIN_LINK" />Android সেটিংসে<ph name="END_LINK" /> গিয়েও ক্যামেরা চালু করে দিন।</translation>
@@ -101,6 +102,7 @@
 <translation id="3115898365077584848">তথ্য দেখুন</translation>
 <translation id="3123473560110926937">কিছু সাইটে ব্লক করা হয়েছে</translation>
 <translation id="3143754809889689516">শুরু থেকে চালান</translation>
+<translation id="3162899666601560689">আপনার শপিং কার্টে বেছে নেওয়া আইটেমগুলি মনে রাখা বা সাইন-ইন সংক্রান্ত তথ্য সেভ করার মতো ব্রাউজিং অভিজ্ঞতা আরও ভাল করার জন্য সাইটগুলি কুকি ব্যবহার করতে পারবে</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> সংরক্ষিত ডেটা</translation>
 <translation id="3203366800380907218">ওয়েব থেকে</translation>
 <translation id="321187648315454507">তাছাড়া, যাতে <ph name="APP_NAME" /> আপনাকে বিজ্ঞপ্তি পাঠাতে পারে, তার জন্য <ph name="BEGIN_LINK" />Android সেটিংসে<ph name="END_LINK" /> গিয়েও বিজ্ঞপ্তি চালু করে দিন।</translation>
@@ -203,6 +205,7 @@
 <translation id="5505264765875738116">সাইট আপনাকে বিজ্ঞপ্তি পাঠাতে পারবে না</translation>
 <translation id="5516455585884385570">বিজ্ঞপ্তির সেটিংস খুলুন</translation>
 <translation id="5527111080432883924">ক্লিপবোর্ডের টেক্সট এবং ছবি পড়ার জন্য অনুমতি দেওয়ার আগে জিজ্ঞাসা করুন (প্রস্তাবিত)</translation>
+<translation id="5553273073880784901">সবসময় ডেস্কটপ সাইট দেখুন</translation>
 <translation id="5553374991681107062">লেটেস্ট</translation>
 <translation id="5556459405103347317">রিলোড করুন</translation>
 <translation id="5596627076506792578">আরও বিকল্পগুলি</translation>
@@ -331,6 +334,7 @@
 <translation id="8284326494547611709">পরিচয়লিপিগুলি</translation>
 <translation id="8300705686683892304">অ্যাপ ম্যানেজ করে</translation>
 <translation id="8324158725704657629">আর দেখতে চাই না</translation>
+<translation id="834785183489258869">ছদ্মবেশী মোডে থাকলে, বিভিন্ন ওয়েবসাইট জুড়ে বিজ্ঞাপন পছন্দ অনুযায়ী দেখানোর মতো ব্রাউজিং অ্যাক্টিভিটি দেখার জন্য সাইট কুকি ব্যবহার করতে পারে না। কিছু সাইটের ফিচার কাজ নাও করতে পারে।</translation>
 <translation id="8372893542064058268">একটি নির্দিষ্ট সাইটের জন্য পটভূমি সিঙ্কের অনুমতি দিন।</translation>
 <translation id="8376384591331888629">এই সাইটে থার্ড-পার্টি কুকি সহ</translation>
 <translation id="83792324527827022">একটি সাইট আপনার ক্যামেরা ও মাইক্রোফোন ব্যবহার করছে</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb
index 6c04fbd92..be8a283b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_bs.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Prikaži informacije</translation>
 <translation id="3123473560110926937">Blokirano na nekim web lokacijama</translation>
 <translation id="3143754809889689516">Reproduciraj od početka</translation>
+<translation id="3162899666601560689">Web lokacije mogu koristiti kolačiće da poboljšaju vaše iskustvo pregledanja, naprimjer, da ostanete prijavljeni ili da stavke u kolicima za kupovinu ostanu sačuvane</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> pohranjenih podataka</translation>
 <translation id="3203366800380907218">S interneta</translation>
 <translation id="321187648315454507">Da dozvolite da vam aplikacija <ph name="APP_NAME" /> šalje obavještenja, također uključite obavještenja u <ph name="BEGIN_LINK" />Postavkama Androida<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Titlovi</translation>
 <translation id="8300705686683892304">Upravlja aplikacija</translation>
 <translation id="8324158725704657629">Ne pitaj ponovo</translation>
+<translation id="834785183489258869">U anonimnom načinu rada web lokacije ne mogu koristiti kolačiće da vide vašu aktivnost pregledanja na različitim web lokacijama, npr. radi personaliziranja oglasa. Moguće je da funkcije neće raditi na nekim web lokacijama.</translation>
 <translation id="8372893542064058268">Dozvolite sinhronizaciju u pozadini za određenu web lokaciju.</translation>
 <translation id="8376384591331888629">Uključujući kolačiće treće strane na ovoj web lokaciji</translation>
 <translation id="83792324527827022">Web lokacija koristi vašu kameru i mikrofon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb
index 7d4121b..3a5f9f8 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ca.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Mostra la informació</translation>
 <translation id="3123473560110926937">Bloquejat en alguns llocs web</translation>
 <translation id="3143754809889689516">Reprodueix des del principi</translation>
+<translation id="3162899666601560689">Els llocs web poden fer servir galetes per millorar la teva experiència de navegació, per exemple, per mantenir la teva sessió iniciada o per recordar els elements que tens al carretó electrònic</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> de dades desades</translation>
 <translation id="3203366800380907218">Del web</translation>
 <translation id="321187648315454507">Perquè <ph name="APP_NAME" /> et pugui enviar notificacions, també has d'activar-les a la <ph name="BEGIN_LINK" />configuració d'Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Subtítols</translation>
 <translation id="8300705686683892304">Gestionats per aplicacions</translation>
 <translation id="8324158725704657629">No m'ho tornis a preguntar</translation>
+<translation id="834785183489258869">En mode d'incògnit, els llocs web no poden fer servir les teves galetes per veure la teva activitat de navegació en diferents llocs web, per exemple, per personalitzar els anuncis. Pot ser que les funcions d'alguns llocs web no funcionin.</translation>
 <translation id="8372893542064058268">Permet la sincronització en segon pla en un lloc concret.</translation>
 <translation id="8376384591331888629">Incloses les galetes de tercers en aquest lloc web</translation>
 <translation id="83792324527827022">Un lloc web està utilitzant la càmera i el micròfon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb
index 2d3e3cb..7fe6a3a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_cs.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Zobrazit informace</translation>
 <translation id="3123473560110926937">Na některých webech blokováno</translation>
 <translation id="3143754809889689516">Přehrát od začátku</translation>
+<translation id="3162899666601560689">Weby mohou používat soubory cookie ke zlepšování prostředí při prohlížení, například si pomocí nich mohou pamatovat vaše přihlášení a položky v nákupním košíku</translation>
 <translation id="3198916472715691905">Uložená data: <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">Z webu</translation>
 <translation id="321187648315454507">Pokud aplikaci <ph name="APP_NAME" /> chcete povolit, aby vám zasílala oznámení, zapněte oznámení také v <ph name="BEGIN_LINK" />Natavení Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Titulky</translation>
 <translation id="8300705686683892304">Spravováno aplikací</translation>
 <translation id="8324158725704657629">Příště se neptat</translation>
+<translation id="834785183489258869">V anonymním režimu weby nemohou používat soubory cookie ke sledování vaší aktivity prohlížení na různých webech, například k personalizaci reklam. Některé weby mohou přestat fungovat.</translation>
 <translation id="8372893542064058268">Povolit synchronizaci na pozadí konkrétnímu webu.</translation>
 <translation id="8376384591331888629">Včetně souborů cookie třetích stran na tomto webu</translation>
 <translation id="83792324527827022">Webové stránky používají váš fotoaparát a mikrofon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb
index 1cc7ca5..960641a3 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_cy.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Dangos Gwybodaeth</translation>
 <translation id="3123473560110926937">Wedi'u rhwystro ar rai gwefannau</translation>
 <translation id="3143754809889689516">Chwarae o'r dechrau</translation>
+<translation id="3162899666601560689">Gall gwefannau ddefnyddio cwcis i wella'ch profiad pori, er enghraifft, i'ch cadw bod wedi'ch mewngofnodi neu i gofio eitemau yn eich basged siopa</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> data a storiwyd</translation>
 <translation id="3203366800380907218">O'r we</translation>
 <translation id="321187648315454507">I ganiatáu i <ph name="APP_NAME" /> anfon hysbysiadau atoch, trowch hysbysiadau ymlaen yn <ph name="BEGIN_LINK" />Gosodiadau Android<ph name="END_LINK" /> hefyd.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Capsiynau</translation>
 <translation id="8300705686683892304">Wedi'u rheoli gan ap</translation>
 <translation id="8324158725704657629">Peidio â gofyn eto</translation>
+<translation id="834785183489258869">Pan fyddwch yn y modd Anhysbys, ni all gwefannau ddefnyddio'ch cwcis i weld eich gweithgarwch pori ar draws gwahanol wefannau, er enghraifft, i bersonoleiddio hysbysebion. Mae'n bosib na fydd nodweddion ar rai gwefannau yn gweithio.</translation>
 <translation id="8372893542064058268">Caniatáu Cysoni yn y Cefndir ar gyfer wefan benodol.</translation>
 <translation id="8376384591331888629">Gan gynnwys cwcis trydydd parti ar y wefan hon</translation>
 <translation id="83792324527827022">Mae gwefan yn defnyddio'ch camera a'ch meicroffon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
index 5fdb0ab..bbfd4cb 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_da.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Vis info</translation>
 <translation id="3123473560110926937">Blokeret på visse websites</translation>
 <translation id="3143754809889689516">Afspil fra begyndelsen</translation>
+<translation id="3162899666601560689">Websites kan bruge cookies til at forbedre din browseroplevelse ved f.eks. at sørge for, at du forbliver logget ind, eller ved at huske varerne i din kurv</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> gemte data</translation>
 <translation id="3203366800380907218">Fra nettet</translation>
 <translation id="321187648315454507">Aktivér også notifikationer i <ph name="BEGIN_LINK" />Android-indstillingerne<ph name="END_LINK" /> for at give <ph name="APP_NAME" /> tilladelse til at sende dig notifikationer.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Undertekster</translation>
 <translation id="8300705686683892304">Administreres af en app</translation>
 <translation id="8324158725704657629">Spørg ikke igen</translation>
+<translation id="834785183489258869">Når du er i inkognitotilstand, kan websites ikke bruge dine cookies til at se din browserhistorik på forskellige websites for f.eks. at tilpasse annoncer. Funktionerne på visse websites virker muligvis ikke.</translation>
 <translation id="8372893542064058268">Tillad synkronisering i baggrunden for et bestemt website.</translation>
 <translation id="8376384591331888629">Medtag tredjepartscookies på dette websites</translation>
 <translation id="83792324527827022">Et website anvender dit kamera og din mikrofon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
index 640d052..1bacaf9 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_de.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Informationen anzeigen</translation>
 <translation id="3123473560110926937">Auf einigen Websites blockiert</translation>
 <translation id="3143754809889689516">Von vorne abspielen</translation>
+<translation id="3162899666601560689">Websites können Cookies verwenden, um dir das Surfen zu erleichtern; zum Beispiel, damit du angemeldet bleibst oder Artikel in deinem Einkaufswagen gespeichert bleiben</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> gespeicherte Daten</translation>
 <translation id="3203366800380907218">Aus dem Web</translation>
 <translation id="321187648315454507">Damit <ph name="APP_NAME" /> dir Benachrichtigungen senden kann, musst du die Berechtigung für Benachrichtigungen auch in den <ph name="BEGIN_LINK" />Android-Einstellungen<ph name="END_LINK" /> aktivieren.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Untertitel</translation>
 <translation id="8300705686683892304">Von App verwaltet</translation>
 <translation id="8324158725704657629">Nicht mehr fragen</translation>
+<translation id="834785183489258869">Wenn der Inkognitomodus aktiviert ist, können Websites keine Cookies verwenden, um deine Browseraktivitäten auf anderen Websites zu sehen und beispielsweise zur Personalisierung von Werbung zu nutzen. Einige Websites funktionieren dann möglicherweise nicht mehr richtig.</translation>
 <translation id="8372893542064058268">Lässt die Hintergrundsynchronisierung für eine bestimmte Website zu.</translation>
 <translation id="8376384591331888629">Einschließlich Cookies von Drittanbietern auf dieser Website</translation>
 <translation id="83792324527827022">Eine Website verwendet deine Kamera und dein Mikrofon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb
index c1ce809..a96c3cb 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_el.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Πληροφορίες εκπομπής</translation>
 <translation id="3123473560110926937">Αποκλεισμός σε ορισμένους ιστοτόπους</translation>
 <translation id="3143754809889689516">Αναπαραγωγή από την αρχή</translation>
+<translation id="3162899666601560689">Οι ιστότοποι μπορούν να χρησιμοποιούν cookie για να βελτιώσουν την εμπειρία περιήγησής σας, για παράδειγμα, για να παραμείνετε συνδεδεμένοι ή να διατηρηθούν τα προϊόντα στο καλάθι αγορών σας.</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> αποθηκευμένα δεδομένα</translation>
 <translation id="3203366800380907218">Από τον ιστό</translation>
 <translation id="321187648315454507">Για να επιτρέψετε στην εφαρμογή <ph name="APP_NAME" /> να σας στέλνει ειδοποιήσεις, ενεργοποιήστε επίσης τις ειδοποιήσεις στις <ph name="BEGIN_LINK" />Ρυθμίσεις Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Υπότιτλοι</translation>
 <translation id="8300705686683892304">Διαχείριση από εφαρμογή</translation>
 <translation id="8324158725704657629">Να μην ερωτηθώ ξανά</translation>
+<translation id="834785183489258869">Ενώ βρίσκεστε σε κατάσταση ανώνυμης περιήγησης, οι ιστότοποι δεν μπορούν να χρησιμοποιήσουν τα cookie σας για να βλέπουν τη δραστηριότητα περιήγησής σας σε διαφορετικούς ιστοτόπους, για παράδειγμα, για την εξατομίκευση των διαφημίσεων. Ορισμένες λειτουργίες κάποιων ιστοτόπων μπορεί να μην είναι διαθέσιμες.</translation>
 <translation id="8372893542064058268">Να επιτρέπεται ο Συγχρονισμός παρασκηνίου για έναν συγκεκριμένο ιστότοπο.</translation>
 <translation id="8376384591331888629">Συμπεριλαμβάνονται cookie τρίτου μέρους σε αυτόν τον ιστότοπο</translation>
 <translation id="83792324527827022">Ένας ιστότοπος χρησιμοποιεί την κάμερα και το μικρόφωνό σας.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb
index a2ded569..80c17c5 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_en-GB.xtb
@@ -48,6 +48,7 @@
 <translation id="2107397443965016585">Ask before allowing sites to play protected content (recommended)</translation>
 <translation id="2146738493024040262">Open Instant App</translation>
 <translation id="2148716181193084225">Today</translation>
+<translation id="2155988908301433309">Always view mobile site</translation>
 <translation id="2182457891543959921">Ask before allowing sites to create a 3D map of your surroundings or track camera position (recommended)</translation>
 <translation id="2212565012507486665">Allow cookies</translation>
 <translation id="2228071138934252756">To let <ph name="APP_NAME" /> access your camera, also turn on camera in <ph name="BEGIN_LINK" />Android settings<ph name="END_LINK" />.</translation>
@@ -79,6 +80,7 @@
 <translation id="2653659639078652383">Submit</translation>
 <translation id="2677748264148917807">Leave</translation>
 <translation id="2687403674020088961">Block all cookies (not recommended)</translation>
+<translation id="2692299144678073135">Allow related sites to remember you across sites</translation>
 <translation id="2704606927547763573">Copied</translation>
 <translation id="2713106313042589954">Turn off camera</translation>
 <translation id="2717722538473713889">Email addresses</translation>
@@ -101,6 +103,7 @@
 <translation id="3115898365077584848">Show info</translation>
 <translation id="3123473560110926937">Blocked on some sites</translation>
 <translation id="3143754809889689516">Play from the beginning</translation>
+<translation id="3162899666601560689">Sites can use cookies to improve your browsing experience, for example to keep you signed in or to remember items in your shopping basket</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> stored data</translation>
 <translation id="3203366800380907218">From the web</translation>
 <translation id="321187648315454507">To let <ph name="APP_NAME" /> send you notifications, also turn on notifications in <ph name="BEGIN_LINK" />Android settings<ph name="END_LINK" />.</translation>
@@ -138,6 +141,7 @@
 <translation id="4002066346123236978">Title</translation>
 <translation id="4008040567710660924">Allow cookies for a specific site.</translation>
 <translation id="4046123991198612571">Next track</translation>
+<translation id="4048876521107516222">Related sites use cookies to help with things like keeping you signed in</translation>
 <translation id="4149994727733219643">Simplified view for web pages</translation>
 <translation id="4165986682804962316">Site settings</translation>
 <translation id="4169549551965910670">Connected to a USB device</translation>
@@ -203,6 +207,7 @@
 <translation id="5505264765875738116">Sites can't ask to send notifications</translation>
 <translation id="5516455585884385570">Open notification settings</translation>
 <translation id="5527111080432883924">Ask before allowing sites to read text and images from the clipboard (recommended)</translation>
+<translation id="5553273073880784901">Always view desktop site</translation>
 <translation id="5553374991681107062">Latest</translation>
 <translation id="5556459405103347317">Reload</translation>
 <translation id="5596627076506792578">More options</translation>
@@ -219,6 +224,7 @@
 <translation id="5887687176710214216">Last visited yesterday</translation>
 <translation id="5916664084637901428">On</translation>
 <translation id="5922853908706496913">Sharing your screen</translation>
+<translation id="5922967540311291836">Block third-party cookies:</translation>
 <translation id="5939518447894949180">Reset</translation>
 <translation id="5975083100439434680">Zoom out</translation>
 <translation id="5976059395673079613"><ph name="PERMISSION" /> – <ph name="WARNING_MESSAGE" /></translation>
@@ -309,6 +315,7 @@
 <translation id="7846076177841592234">Cancel selection</translation>
 <translation id="7846621471902887024">You'll be signed out of all sites.</translation>
 <translation id="7882806643839505685">Allow sound for a specific site.</translation>
+<translation id="789180354981963912">Block third-party cookies in Incognito:</translation>
 <translation id="7940722705963108451">Remind me</translation>
 <translation id="7986741934819883144">Select a contact</translation>
 <translation id="7999064672810608036">Are you sure that you want to clear all local data, including cookies, and reset all permissions for this website?</translation>
@@ -331,6 +338,7 @@
 <translation id="8284326494547611709">Captions</translation>
 <translation id="8300705686683892304">Managed by app</translation>
 <translation id="8324158725704657629">Don't ask again</translation>
+<translation id="834785183489258869">While in Incognito, sites can't use your cookies to see your browsing activity across different sites; for example, to personalise ads. Features on some sites may not work.</translation>
 <translation id="8372893542064058268">Allow Background Sync for a specific site.</translation>
 <translation id="8376384591331888629">Including third-party cookies on this site</translation>
 <translation id="83792324527827022">A site is using your camera and microphone</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
index 87c7dc6b2..7f9a9915 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Mostrar información</translation>
 <translation id="3123473560110926937">Bloqueados en algunos sitios</translation>
 <translation id="3143754809889689516">Reproducir desde el principio</translation>
+<translation id="3162899666601560689">Los sitios pueden usar cookies para mejorar la experiencia de navegación, por ejemplo, para mantener el acceso a ellos o recordar elementos del carrito de compras.</translation>
 <translation id="3198916472715691905">Datos almacenados: <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">Desde la Web</translation>
 <translation id="321187648315454507">Para permitir que <ph name="APP_NAME" /> te envíe notificaciones, actívalas también en la <ph name="BEGIN_LINK" />Configuración de Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Subtítulos</translation>
 <translation id="8300705686683892304">Administrados por una app</translation>
 <translation id="8324158725704657629">No volver a preguntar</translation>
+<translation id="834785183489258869">Cuando está activado el modo Incógnito, los sitios no pueden usar tus cookies para ver tu actividad de navegación en diferentes sitios, por ejemplo, para personalizar anuncios. Es posible que algunas funciones no puedan utilizarse en algunos sitios.</translation>
 <translation id="8372893542064058268">Permite la sincronización en segundo plano para un sitio específico.</translation>
 <translation id="8376384591331888629">Habilitar también cookies de terceros en este sitio</translation>
 <translation id="83792324527827022">Un sitio está utilizando la cámara y el micrófono</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
index c9b793a..a09ff0f 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Mostrar información</translation>
 <translation id="3123473560110926937">Bloqueados en algunos sitios</translation>
 <translation id="3143754809889689516">Reproducir desde el principio</translation>
+<translation id="3162899666601560689">Los sitios pueden usar cookies para mejorar tu experiencia de navegación, por ejemplo, para mantener tu sesión iniciada o recordar los artículos de tu carrito de la compra</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> de datos almacenados</translation>
 <translation id="3203366800380907218">Información del sitio web</translation>
 <translation id="321187648315454507">Para que <ph name="APP_NAME" /> pueda enviarte notificaciones, actívalas también en los <ph name="BEGIN_LINK" />ajustes de Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Subtítulos</translation>
 <translation id="8300705686683892304">Administrados por una aplicación</translation>
 <translation id="8324158725704657629">No volver a preguntar</translation>
+<translation id="834785183489258869">Mientras estás en modo Incógnito, los sitios no pueden usar las cookies para ver tu actividad de navegación en otros sitios con el objetivo de, por ejemplo, personalizar tus anuncios. Es posible que las funciones de algunos sitios no funcionen.</translation>
 <translation id="8372893542064058268">Permite la sincronización en segundo plano de un sitio específico.</translation>
 <translation id="8376384591331888629">Incluir cookies de terceros en este sitio</translation>
 <translation id="83792324527827022">Un sitio web está usando tu cámara y tu micrófono</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb
index 9be52cd..fb78471 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_et.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Kuva teave</translation>
 <translation id="3123473560110926937">Blokeeritud teatud saitidel</translation>
 <translation id="3143754809889689516">Esita algusest</translation>
+<translation id="3162899666601560689">Saidid võivad kasutada küpsisefaile teie sirvimiskogemuse täiustamiseks, näiteks selleks, et hoida teid sisselogituna või jätta meelde teie ostukorvis olevad esemed</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> salvestatud andmeid</translation>
 <translation id="3203366800380907218">Veebist</translation>
 <translation id="321187648315454507">Selleks et lubada rakendusel <ph name="APP_NAME" /> teile märguandeid saata, lülitage märguanded sisse ka <ph name="BEGIN_LINK" />Androidi seadetes<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Subtiitrid</translation>
 <translation id="8300705686683892304">Neid haldab rakendus</translation>
 <translation id="8324158725704657629">Ära enam küsi</translation>
+<translation id="834785183489258869">Inkognito režiimis ei saa saidid eri saitidel küpsisefailide kaudu teie sirvimistegevusi jälgida, näiteks selleks, et reklaame isikupärastada. Funktsioonid ei pruugi mõnel saidil toimida.</translation>
 <translation id="8372893542064058268">Konkreetse saidi jaoks taustal sünkroonimise lubamine.</translation>
 <translation id="8376384591331888629">Sh sellel saidil olevad kolmanda osapoole küpsisefailid</translation>
 <translation id="83792324527827022">Sait kasutab teie kaamerat ja mikrofoni</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb
index bb8bf7e7..77fb765 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_eu.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Erakutsi informazioa</translation>
 <translation id="3123473560110926937">Webgune batzuetan blokeatu dira iragarkiak</translation>
 <translation id="3143754809889689516">Erreproduzitu hasieratik</translation>
+<translation id="3162899666601560689">Webguneek cookieak erabil ditzakete arakatze-zerbitzua hobetzeko; adibidez, saioa hasita mantentzeko edo erosketa-saskiko produktuak gogoratzeko.</translation>
 <translation id="3198916472715691905">Gordetako datuak: <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">Saretik</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> aplikazioari jakinarazpenak bidaltzeko baimena emateko, jakinarazpenak bidaltzeko baimena aktibatu behar duzu <ph name="BEGIN_LINK" />Android-en ezarpenetan<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Azpitituluak</translation>
 <translation id="8300705686683892304">Aplikazio batek kudeatzen du</translation>
 <translation id="8324158725704657629">Ez galdetu berriro</translation>
+<translation id="834785183489258869">Ezkutuko moduan zaudenean, webguneek ezin dituzte erabili cookieak beste webguneetan egiten dituzun arakatze-jarduerak ikusteko, hala nola iragarkiak pertsonalizatzeko. Baliteke webgune batzuetako eginbideek ez funtzionatzea.</translation>
 <translation id="8372893542064058268">Baimendu atzeko planoko sinkronizazioa webgune zehatz batean.</translation>
 <translation id="8376384591331888629">Webgune honetako hirugarrenen cookieak barne</translation>
 <translation id="83792324527827022">Webgune bat kamera eta mikrofonoa erabiltzen ari da</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb
index 275ce74..6f8e5d3 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">نمایش دادن اطلاعات</translation>
 <translation id="3123473560110926937">در برخی سایت‌ها مسدود می‌شود</translation>
 <translation id="3143754809889689516">پخش از ابتدا</translation>
+<translation id="3162899666601560689">سایت‌ها می‌توانند از کوکی‌ها برای بهبود تجربه مرورتان استفاده کنند، مثلاً برای اینکه شما را درحالت واردشده به سیستم نگه دارند یا موارد موجود در سبد خریدتان را به‌خاطر بسپارند</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> داده‌های ذخیره شده</translation>
 <translation id="3203366800380907218">برگرفته از وب</translation>
 <translation id="321187648315454507">‏برای اینکه به <ph name="APP_NAME" /> اجازه دهید برایتان اعلان ارسال کند، اعلان‌ها را در <ph name="BEGIN_LINK" />تنظیمات Android<ph name="END_LINK" /> نیز روشن کنید.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">زیرنویس‌ها</translation>
 <translation id="8300705686683892304">مدیریت‌شده توسط برنامه</translation>
 <translation id="8324158725704657629">دوباره سؤال نشود</translation>
+<translation id="834785183489258869">در «حالت ناشناس»، سایت‌ها نمی‌توانند از کوکی‌های شما برای دیدن فعالیت مرور شما در سایت‌های مختلف و برای مثال شخصی‌سازی آگهی‌ها استفاده کنند. ممکن است ویژگی‌های برخی‌از سایت‌ها کار نکند.</translation>
 <translation id="8372893542064058268">«همگام‌سازی پس‌زمینه» را برای یک سایت خاص مجاز کنید.</translation>
 <translation id="8376384591331888629">شامل کوکی‌های شخص ثالث در این سایت می‌شود</translation>
 <translation id="83792324527827022">سایتی درحال استفاده از دوربین و میکروفونتان است</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb
index a02176b..8d7ad49 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fi.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Näytä tiedot</translation>
 <translation id="3123473560110926937">Estetty tietyillä sivustoilla</translation>
 <translation id="3143754809889689516">Toista alusta</translation>
+<translation id="3162899666601560689">Sivustot voivat käyttää evästeitä selauskokemuksesi parantamiseen, esimerkiksi pitää sinut kirjautuneena tai muistaa ostoskorisi sisällön</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> tallennettua tietoa</translation>
 <translation id="3203366800380907218">Verkosta</translation>
 <translation id="321187648315454507">Ota ilmoitukset käyttöön myös <ph name="BEGIN_LINK" />Androidin asetuksista<ph name="END_LINK" />, jotta <ph name="APP_NAME" /> voi lähettää sinulle ilmoituksia.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Tekstitykset</translation>
 <translation id="8300705686683892304">Sovelluksen ylläpitämät</translation>
 <translation id="8324158725704657629">Älä kysy uudestaan</translation>
+<translation id="834785183489258869">Kun olet incognito-tilassa, sivustot eivät näe selaustoimintaasi eri sivustoilla evästeiden kautta esim. personoidakseen mainoksia. Joidenkin sivustojen ominaisuudet eivät välttämättä toimi.</translation>
 <translation id="8372893542064058268">Salli taustasynkronointi tietyllä sivustolla.</translation>
 <translation id="8376384591331888629">Mukaan lukien kolmannen osapuolen evästeet tällä sivustolla</translation>
 <translation id="83792324527827022">Sivusto käyttää kameraasi ja mikrofoniasi</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb
index 318a9ef7..a7bb351 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fil.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Ipakita ang Impormasyon</translation>
 <translation id="3123473560110926937">Naka-block sa ilang site</translation>
 <translation id="3143754809889689516">I-play mula sa simula</translation>
+<translation id="3162899666601560689">Puwedeng gumamit ng cookies ang mga site para pahusayin ang iyong karanasan sa pag-browse, halimbawa, para mapanatili kang naka-sign in o para maalala ang mga item sa shopping cart mo</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> ang naka-store na data</translation>
 <translation id="3203366800380907218">Mula sa web</translation>
 <translation id="321187648315454507">Para payagan ang <ph name="APP_NAME" /> na magpadala sa iyo ng mga notification, i-on din ang mga notification sa <ph name="BEGIN_LINK" />Mga Setting ng Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Mga Caption</translation>
 <translation id="8300705686683892304">Pinapamahalaan ng app</translation>
 <translation id="8324158725704657629">Huwag nang itanong ulit</translation>
+<translation id="834785183489258869">Habang nasa Incognito, hindi magagamit ng mga site ang cookies mo para makita ang iyong aktibidad sa pag-browse sa iba't ibang site, halimbawa, para mag-personalize ng mga ad. Posibleng hindi gumana ang mga feature sa ilang site.</translation>
 <translation id="8372893542064058268">Payagan ang Pag-sync sa Background para sa isang partikular na site.</translation>
 <translation id="8376384591331888629">Kasama ang third-party na cookies sa site na ito</translation>
 <translation id="83792324527827022">Ginagamit ng isang site ang iyong camera at mikropono</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb
index 0488d89..449ae83 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fr-CA.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Afficher les renseignements</translation>
 <translation id="3123473560110926937">Annonces bloquées sur certains sites</translation>
 <translation id="3143754809889689516">Faire jouer depuis le début</translation>
+<translation id="3162899666601560689">Les sites peuvent utiliser des témoins afin d'améliorer votre expérience de navigation, par exemple en vous permettant de rester connecté ou en mémorisant des articles de votre panier d'achats</translation>
 <translation id="3198916472715691905">Stockage de données : <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">Du Web</translation>
 <translation id="321187648315454507">Pour autoriser <ph name="APP_NAME" /> à vous envoyer des notifications, vous devez aussi activer celles-ci dans les <ph name="BEGIN_LINK" />paramètres d'Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Sous-titres</translation>
 <translation id="8300705686683892304">Gérés par une application</translation>
 <translation id="8324158725704657629">Ne plus me demander</translation>
+<translation id="834785183489258869">Lorsque vous êtes en mode de navigation privée, les sites ne peuvent pas utiliser vos témoins pour voir votre activité de navigation sur différents sites (par exemple, pour personnaliser les annonces). Des fonctionnalités de certains sites pourraient ne pas fonctionner.</translation>
 <translation id="8372893542064058268">Autorisez la synchronisation en arrière-plan pour un site en particulier.</translation>
 <translation id="8376384591331888629">Y compris les témoins tiers sur ce site</translation>
 <translation id="83792324527827022">Un site utilise votre appareil photo et votre microphone</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
index 15a9c9f2..18148cd 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_fr.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Afficher les informations</translation>
 <translation id="3123473560110926937">Bloqué sur certains sites</translation>
 <translation id="3143754809889689516">Lire depuis le début</translation>
+<translation id="3162899666601560689">Les sites peuvent utiliser des cookies pour améliorer votre expérience de navigation, par exemple pour maintenir votre connexion ou mémoriser les articles de votre panier</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> de données stockées</translation>
 <translation id="3203366800380907218">Sur le Web</translation>
 <translation id="321187648315454507">Pour autoriser <ph name="APP_NAME" /> à vous envoyer des notifications, activez également celles-ci dans les <ph name="BEGIN_LINK" />paramètres Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Sous-titres</translation>
 <translation id="8300705686683892304">Gérés par l'application</translation>
 <translation id="8324158725704657629">Ne plus me demander</translation>
+<translation id="834785183489258869">Lorsque vous êtes en navigation privée, les sites ne peuvent pas utiliser vos cookies pour voir votre activité de navigation sur différents sites (par exemple, pour personnaliser les annonces). Les fonctionnalités de certains sites peuvent ne pas fonctionner.</translation>
 <translation id="8372893542064058268">Autorisez la synchronisation en arrière-plan pour un site spécifique.</translation>
 <translation id="8376384591331888629">Inclure les cookies tiers de ce site</translation>
 <translation id="83792324527827022">Un site utilise votre appareil photo et votre micro</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb
index 047e140..14fd468b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_gl.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Mostrar información</translation>
 <translation id="3123473560110926937">Anuncios bloqueados nalgúns sitios</translation>
 <translation id="3143754809889689516">Reproducir desde o principio</translation>
+<translation id="3162899666601560689">Os sitios poden utilizar cookies para mellorar a túa experiencia de navegación a través de funcións como manter a sesión iniciada ou lembrar artigos da túa cesta da compra</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> de datos almacenados</translation>
 <translation id="3203366800380907218">Da Web</translation>
 <translation id="321187648315454507">Para permitir que <ph name="APP_NAME" /> che envíe notificacións, actívaas tamén en <ph name="BEGIN_LINK" />Configuración de Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Subtítulos</translation>
 <translation id="8300705686683892304">Sitios xestionados pola aplicación</translation>
 <translation id="8324158725704657629">Non preguntar de novo</translation>
+<translation id="834785183489258869">Co modo de incógnito activado, os sitios web non poden utilizar cookies para ver a túa actividade de navegación en distintos sitios (por exemplo, para personalizar os anuncios). As funcións dalgúns sitios poden deixar de funcionar.</translation>
 <translation id="8372893542064058268">Permite a sincronización en segundo plano nun sitio específico.</translation>
 <translation id="8376384591331888629">Incluír as cookies de terceiros deste sitio</translation>
 <translation id="83792324527827022">Un sitio está utilizando a cámara e o micrófono</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb
index 9ceada5e..d8c3a3ed 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">માહિતી બતાવો</translation>
 <translation id="3123473560110926937">કેટલીક સાઇટ પર બ્લૉક થયેલું છે</translation>
 <translation id="3143754809889689516">શરૂઆતથી ચલાવો</translation>
+<translation id="3162899666601560689">તમને વધુ સારો બ્રાઉઝિંગ અનુભવ આપવા માટે, ઉદાહરણ તરીકે, તમને સાઇન ઇન કરીને રાખવા અથવા તમારા શૉપિંગ કાર્ટની આઇટમ યાદ રાખવા માટે, સાઇટ કુકીનો ઉપયોગ કરી શકે છે</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> સંગ્રહિત ડેટા</translation>
 <translation id="3203366800380907218">વેબ પરથી</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> તમને નોટિફિકેશન મોકલી શકે તે માટે <ph name="BEGIN_LINK" />Android સેટિંગ<ph name="END_LINK" />માં પણ નોટિફિકેશન ચાલુ કરો.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">કૅપ્શન્સ</translation>
 <translation id="8300705686683892304">ઍપ દ્વારા મેનેજ થતી</translation>
 <translation id="8324158725704657629">ફરીથી પૂછશો નહીં</translation>
+<translation id="834785183489258869">જ્યારે છૂપા મોડમાં હો, ત્યારે અલગ-અલગ સાઇટ પરની તમારી બ્રાઉઝિંગ પ્રવૃત્તિ જોવા માટે સાઇટ તમારી કુકીનો ઉપયોગ કરી શકશે નહીં, ઉદાહરણ તરીકે, જાહેરાતોને વ્યક્તિગત બનાવવા માટે. અમુક સુવિધાઓ કેટલીક સાઇટ પર કામ કરી શકશે નહીં.</translation>
 <translation id="8372893542064058268">ચોક્કસ સાઇટ માટે બૅકગ્રાઉન્ડ સિંકની મંજૂરી આપો.</translation>
 <translation id="8376384591331888629">આ સાઇટ પરની ત્રીજા પક્ષની કુકી શામેલ છે</translation>
 <translation id="83792324527827022">કોઈ સાઇટ તમારા કૅમેરા અને માઇક્રોફોનનો ઉપયોગ કરી રહી છે</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
index 735973ef..b99b892 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hi.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">जानकारी दिखाएं</translation>
 <translation id="3123473560110926937">कुछ साइटों पर ब्लॉक किए गए हैं</translation>
 <translation id="3143754809889689516">शुरू से चलाएं</translation>
+<translation id="3162899666601560689">साइटें आपके ब्राउज़ करने के अनुभव को बेहतर बनाने के लिए कुकी का इस्तेमाल कर सकती हैं. जैसे, आपको साइन इन बनाए रखने के लिए या आपने शॉपिंग कार्ट में जो आइटम सेव किए हैं उन्हें याद रखने के लिए</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> संग्रहित डेटा</translation>
 <translation id="3203366800380907218">वेब से</translation>
 <translation id="321187648315454507"><ph name="BEGIN_LINK" />Android की सेटिंग<ph name="END_LINK" /> में जाकर भी सूचनाएं चालू करें, ताकि <ph name="APP_NAME" /> आपको सूचनाएं भेज सके.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">कैप्शन</translation>
 <translation id="8300705686683892304">ऐप्लिकेशन मैनेज करता है</translation>
 <translation id="8324158725704657629">दोबारा न पूछें</translation>
+<translation id="834785183489258869">गुप्त मोड इस्तेमाल करने पर, अलग-अलग साइटों पर की गई आपकी ब्राउज़िंग गतिविधि देखने के लिए, साइटें, कुकी इस्तेमाल नहीं कर सकतीं. जैसे, लोगों के हिसाब से विज्ञापन दिखाने के लिए. हो सकता है कि कुछ साइटों पर खास सुविधाएं काम न करें.</translation>
 <translation id="8372893542064058268">किसी विशिष्ट साइट के लिए पृष्ठभूमि समन्वयन की अनुमति दें.</translation>
 <translation id="8376384591331888629">इस साइट पर मौजूद तीसरे पक्ष की कुकी शामिल करें</translation>
 <translation id="83792324527827022">कोई साइट आपके कैमरे और माइक्रोफ़ोन का इस्तेमाल कर रही है</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
index 485dbc8c..cfe6287 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Prikaži informacije</translation>
 <translation id="3123473560110926937">Blokirano na nekim web-lokacijama</translation>
 <translation id="3143754809889689516">Reproduciraj od početka</translation>
+<translation id="3162899666601560689">Web-lokacije mogu upotrebljavati kolačiće za poboljšanje vašeg doživljaja pregledavanja, primjerice da biste ostali prijavljeni ili da bi stavke u vašoj košarici ostale zapamćene</translation>
 <translation id="3198916472715691905">Pohranjeni podaci: <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">S weba</translation>
 <translation id="321187648315454507">Da bi vam aplikacija <ph name="APP_NAME" /> slati obavijesti, uključite obavijesti i u <ph name="BEGIN_LINK" />Androidovim postavkama<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Titlovi</translation>
 <translation id="8300705686683892304">Upravlja aplikacija</translation>
 <translation id="8324158725704657629">Više me ne pitaj</translation>
+<translation id="834785183489258869">Dok ste u anonimnom načinu, web-lokacije ne mogu upotrebljavati vaše kolačiće za uvid u vašu aktivnost pregledavanja na različitim web-lokacijama, primjerice radi prilagođavanja oglasa. Značajke na nekim web-lokacijama možda neće funkcionirati.</translation>
 <translation id="8372893542064058268">Omogućuje sinkronizaciju u pozadini za određenu web-lokaciju.</translation>
 <translation id="8376384591331888629">Uključujući kolačiće treće strane na ovoj web-lokaciji</translation>
 <translation id="83792324527827022">Web-lokacija upotrebljava vašu kameru i mikrofon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb
index 22bced2..1bde01f 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hu.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Információk megjelenítése</translation>
 <translation id="3123473560110926937">Letiltva egyes webhelyeken</translation>
 <translation id="3143754809889689516">Lejátszás az elejétől</translation>
+<translation id="3162899666601560689">A webhelyek használhatnak cookie-kat a böngészési élmény javítására például úgy, hogy bejelentkezve tartják Önt, illetve megjegyzik a kosarában lévő termékeket.</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> tárolt adat</translation>
 <translation id="3203366800380907218">Az internetről</translation>
 <translation id="321187648315454507">Ahhoz, hogy a(z) <ph name="APP_NAME" /> értesítéseket küldhessen, az értesítéseket az <ph name="BEGIN_LINK" />Android-beállítások<ph name="END_LINK" /> között is be kell kapcsolni.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Feliratok</translation>
 <translation id="8300705686683892304">Alkalmazás által kezelt</translation>
 <translation id="8324158725704657629">Ne jelenjen meg többé</translation>
+<translation id="834785183489258869">Inkognitó módban a webhelyek nem használhatják fel az Ön cookie-jait arra, hogy lássák a különböző webhelyeken végzett böngészési tevékenységeit például annak érdekében, hogy a hirdetéseket személyre szabják. Előfordulhat, hogy bizonyos webhelyek funkciói nem működnek majd megfelelően.</translation>
 <translation id="8372893542064058268">Háttérben történő szinkronizálás engedélyezése adott webhely esetében.</translation>
 <translation id="8376384591331888629">Az ezen a webhelyen található, harmadik felektől származó cookie-k is</translation>
 <translation id="83792324527827022">Egy webhely használja az Ön kameráját és mikrofonját</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb
index 1b71ac6..415e25b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_hy.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Ցուցադրել տեղեկությունները</translation>
 <translation id="3123473560110926937">Արգելափակված է որոշ կայքերում</translation>
 <translation id="3143754809889689516">Նվագարկել սկզբից</translation>
+<translation id="3162899666601560689">Ձեր աշխատանքը բարելավելու նպատակով կայքերը կարող են օգտագործել քուքիներ, օրինակ, որպեսզի պահեն ձեր ընտրած ապրանքները զամբյուղում կամ հիշեն ձեր մուտքը հաշիվ։</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> պահված տվյալներ</translation>
 <translation id="3203366800380907218">Համացանցից</translation>
 <translation id="321187648315454507">Որպեսզի <ph name="APP_NAME" />-ին թույլատրեք ձեզ ծանուցումներ ուղարկել, միացրեք նաև ծանուցումները <ph name="BEGIN_LINK" />Android-ի կարգավորումներում<ph name="END_LINK" />։</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Ենթագրեր</translation>
 <translation id="8300705686683892304">Հավելվածի կողմից կառավարվող</translation>
 <translation id="8324158725704657629">Նորից չհարցնել</translation>
+<translation id="834785183489258869">Ինկոգնիտո ռեժիմում կայքերը չեն կարող օգտագործել քուքիներ՝ դիտարկիչում ձեր գործողությունները տեսնելու համար, օրինակ, գովազդի անհատականացման նպատակով։ Որոշ կայքերում գործառույթները կարող են չաշխատել։</translation>
 <translation id="8372893542064058268">Թույլատրել ֆոնային համաժամացումը նշված կայքում:</translation>
 <translation id="8376384591331888629">Ներառել երրորդ կողմի քուքիներն այս կայքում</translation>
 <translation id="83792324527827022">Կայքն օգտագործում է ձեր տեսախցիկն ու խոսափողը</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
index 3510713..cf2d503 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_id.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Tampilkan Info</translation>
 <translation id="3123473560110926937">Diblokir di beberapa situs</translation>
 <translation id="3143754809889689516">Putar dari awal</translation>
+<translation id="3162899666601560689">Situs dapat menggunakan cookie untuk menyempurnakan pengalaman penjelajahan Anda, misalnya untuk membuat Anda tetap login atau untuk mengingat item di keranjang belanja Anda</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> data tersimpan</translation>
 <translation id="3203366800380907218">Dari web</translation>
 <translation id="321187648315454507">Untuk mengizinkan <ph name="APP_NAME" /> mengirimkan notifikasi, aktifkan juga notifikasi di <ph name="BEGIN_LINK" />Setelan Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Teks</translation>
 <translation id="8300705686683892304">Dikelola oleh aplikasi</translation>
 <translation id="8324158725704657629">Jangan tanya lagi</translation>
+<translation id="834785183489258869">Selama dalam mode Samaran, situs tidak dapat menggunakan cookie untuk melihat aktivitas penjelajahan Anda di berbagai situs, misalnya untuk mempersonalisasi iklan. Fitur tertentu di beberapa situs mungkin tidak berfungsi.</translation>
 <translation id="8372893542064058268">Mengizinkan Sinkronisasi Latar Belakang untuk situs tertentu.</translation>
 <translation id="8376384591331888629">Menyertakan cookie pihak ketiga di situs ini</translation>
 <translation id="83792324527827022">Situs menggunakan kamera dan mikrofon Anda</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb
index 07d6d56..bd8744d 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_is.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Sýna upplýsingar</translation>
 <translation id="3123473560110926937">Útilokaðar á sumum vefsvæðum</translation>
 <translation id="3143754809889689516">Spila frá byrjun</translation>
+<translation id="3162899666601560689">Vefsvæði geta notað fótspor til að bjóða þér upp á betri vefnotkun, til dæmis að vera áfram skráð(ur) inn eða muna hvað þú setur í innkaupakörfuna</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> af vistuðum gögnum</translation>
 <translation id="3203366800380907218">Af vefnum</translation>
 <translation id="321187648315454507">Til að leyfa <ph name="APP_NAME" /> að senda þér tilkynningar þarftu einnig að kveikja á þeim í <ph name="BEGIN_LINK" />stillingum Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Skjátextar</translation>
 <translation id="8300705686683892304">Stjórnað af forriti</translation>
 <translation id="8324158725704657629">Ekki spyrja aftur</translation>
+<translation id="834785183489258869">Þegar huliðsstilling er notuð geta vefsvæði ekki notað fótspor til að sjá vafranotkun þína á vefsvæðum, til dæmis til að sérsníða auglýsingar. Óvíst er að eiginleikar á sumum vefsvæðum virki.</translation>
 <translation id="8372893542064058268">Leyfa bakgrunnssamstillingu fyrir ákveðið vefsvæði.</translation>
 <translation id="8376384591331888629">Hafa fótspor þriðju aðila á þessu vefsvæði með</translation>
 <translation id="83792324527827022">Vefsvæði er að nota myndavélina þína og hljóðnemann</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
index 2afdf29..f0c2d3a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Mostra informazioni</translation>
 <translation id="3123473560110926937">Bloccati su alcuni siti</translation>
 <translation id="3143754809889689516">Riproduci dall'inizio</translation>
+<translation id="3162899666601560689">I siti possono utilizzare i cookie per migliorare la tua esperienza di navigazione, ad esempio per mantenere l'accesso o memorizzare gli articoli aggiunti al carrello</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> di dati memorizzati</translation>
 <translation id="3203366800380907218">Dal Web</translation>
 <translation id="321187648315454507">Per consentire all'app <ph name="APP_NAME" /> di inviarti notifiche, devi attivare le notifiche anche nelle <ph name="BEGIN_LINK" />Impostazioni Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Sottotitoli</translation>
 <translation id="8300705686683892304">Gestiti dall'app</translation>
 <translation id="8324158725704657629">Non chiedermelo più</translation>
+<translation id="834785183489258869">In modalità di navigazione in incognito, i siti non possono utilizzare i cookie per conoscere la tua attività di navigazione su diversi siti, ad esempio per personalizzare gli annunci. Le funzionalità su alcuni siti potrebbero non essere disponibili.</translation>
 <translation id="8372893542064058268">Consenti la sincronizzazione in background per un sito specifico.</translation>
 <translation id="8376384591331888629">Inclusi i cookie di terze parti su questo sito</translation>
 <translation id="83792324527827022">Un sito sta utilizzando la fotocamera e il microfono</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb
index 42a32c9..2265834 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">הצגת פרטים</translation>
 <translation id="3123473560110926937">חסומות בחלק מהאתרים</translation>
 <translation id="3143754809889689516">הפעלה מההתחלה</translation>
+<translation id="3162899666601560689">‏אתרים יכולים להשתמש בקובצי cookie כדי לשפר את חוויית הגלישה – למשל, כדי למנוע ניתוק שלך מהחשבון או כדי לזכור את הפריטים שהוספת לעגלת הקניות</translation>
 <translation id="3198916472715691905">נתונים מאוחסנים בנפח <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">מהאינטרנט</translation>
 <translation id="321187648315454507">‏כדי לאפשר ל-<ph name="APP_NAME" /> לשלוח לך התראות, צריך להפעיל אותן גם ב<ph name="BEGIN_LINK" />הגדרות Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">כתוביות</translation>
 <translation id="8300705686683892304">מנוהלים על-ידי אפליקציה</translation>
 <translation id="8324158725704657629">לא לשאול שוב</translation>
+<translation id="834785183489258869">‏במצב אנונימי, אתרים לא יכולים להשתמש בקובצי cookie כדי לקבל מידע על פעילות הגלישה שלך באתרים השונים, למשל לצורך הצגת מודעות בהתאמה אישית. ייתכן שתכונות באתרים מסוימים לא יפעלו.</translation>
 <translation id="8372893542064058268">אישור סנכרון ברקע לאתר ספציפי.</translation>
 <translation id="8376384591331888629">‏כולל קובצי cookie של צד שלישי באתר זה</translation>
 <translation id="83792324527827022">אתר כלשהו משתמש במצלמה ובמיקרופון שלך</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
index 4295595..308080b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">情報を表示</translation>
 <translation id="3123473560110926937">一部のサイトでブロックされています</translation>
 <translation id="3143754809889689516">最初から再生</translation>
+<translation id="3162899666601560689">サイトは、Cookie を使用してブラウジングの利便性を改善できます(ログイン状態の維持、ショッピング カートの中身の保存などが行えます)</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> の保存データ</translation>
 <translation id="3203366800380907218">ウェブから</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> に通知の送信を許可するには、<ph name="BEGIN_LINK" />Android の設定<ph name="END_LINK" />でも通知をオンにしてください。</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">字幕</translation>
 <translation id="8300705686683892304">アプリによる管理</translation>
 <translation id="8324158725704657629">次回から表示しない</translation>
+<translation id="834785183489258869">シークレット モードのとき、サイトは Cookie を使用して別のサイトでのあなたの閲覧アクティビティを確認できず、広告のカスタマイズなどを行えなくなります。一部のサイトで機能を使用できなくなる可能性があります。</translation>
 <translation id="8372893542064058268">特定のサイトに対してバックグラウンド同期を許可します。</translation>
 <translation id="8376384591331888629">このサイトでサードパーティの Cookie を許可する</translation>
 <translation id="83792324527827022">サイトでカメラとマイクが使用されています</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb
index fbc81d0..3d7f154 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ka.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">ინფორმაციის ჩვენება</translation>
 <translation id="3123473560110926937">დაბლოკილია ზოგიერთ საიტზე</translation>
 <translation id="3143754809889689516">დასაწყისიდან დაკვრა</translation>
+<translation id="3162899666601560689">საიტები გამოიყენებს ქუქი-ჩანაწერებს დათვალიერების პროცესის გასაუმჯობესებლად, მაგალითად, სისტემაში შესული მდგომარეობის შესანარჩუნებლად ან საყიდლების კალათაში დამატებული ერთეულების დასამახსოვრებლად</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> შენახული მონაცემები</translation>
 <translation id="3203366800380907218">ვებიდან</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" />-მა შეტყობინებები რომ გამოგიგზავნოთ, გაააქტიურეთ შეტყობინებებზე წვდომის ნებართვაც <ph name="BEGIN_LINK" />Android-ის პარამეტრებიდან<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">ტიტრები</translation>
 <translation id="8300705686683892304">იმართება აპის მიერ</translation>
 <translation id="8324158725704657629">აღარ მკითხო</translation>
+<translation id="834785183489258869">ინკოგნიტო რეჟიმში საიტები ვერ გამოიყენებს თქვენს ქუქი-ჩანაწერებს სხვადასხვა ვებსაიტის დათვალიერების აქტივობაზე წვდომისთვის, მაგალითად, რეკლამის პერსონალიზების მიზნით. ფუნქციებმა, შესაძლოა, არ იმუშაოს ზოგიერთ საიტზე.</translation>
 <translation id="8372893542064058268">კონკრეტული საიტისთვის ფონური სინქრონიზაციის დაშვება.</translation>
 <translation id="8376384591331888629">ამ საიტზე მესამე მხარის ქუქი-ჩანაწერების ჩათვლით</translation>
 <translation id="83792324527827022">ეს საიტი იყენებს თქვენს კამერასა და მიკროფონს</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb
index 839b5a00..ea85abb8 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_kk.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Ақпаратты көрсету</translation>
 <translation id="3123473560110926937">Кейбір сайттарда тыйым салынған</translation>
 <translation id="3143754809889689516">Басынан бастап ойнату</translation>
+<translation id="3162899666601560689">Сайттар шолуды жақсарту (мысалы, аккаунттан шығармау не сатып алу себетіңіздегі нәрселерді есте сақтау) үшін cookie файлдарын пайдалана алады.</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> сақталған деректері</translation>
 <translation id="3203366800380907218">Интернеттен</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> браузерінен хабарландырулар алу үшін <ph name="BEGIN_LINK" />Android параметрлерінде<ph name="END_LINK" /> оларды да қосыңыз.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Титрлер</translation>
 <translation id="8300705686683892304">Қолданба басқарады</translation>
 <translation id="8324158725704657629">Қайта сұралмасын</translation>
+<translation id="834785183489258869">Инкогнито режимінде болғанда, сайттар браузерді қолдану мәліметін көру (мысалы, жарнамаларды жекелендіру) үшін cookie файлдарын пайдалана алмайды. Кейбір сайттың функциялары жұмыс істемеуі мүмкін.</translation>
 <translation id="8372893542064058268">Белгілі бір сайт үшін фондық синхрондауға рұқсат беру.</translation>
 <translation id="8376384591331888629">Осы сайттағы үшінші тараптың cookie файлдарын қоса</translation>
 <translation id="83792324527827022">Сайт камера мен микрофонды пайдаланып жатыр.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb
index 409fcc1..78b0e480 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_km.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">បង្ហាញព័ត៌មាន</translation>
 <translation id="3123473560110926937">បាន​ទប់ស្កាត់នៅលើគេហទំព័រ​មួយចំនួន</translation>
 <translation id="3143754809889689516">ចាក់​ពីដំបូង</translation>
+<translation id="3162899666601560689">គេហទំព័រ​អាចប្រើខូគី ដើម្បី​កែលម្អ​បទពិសោធន៍​រុករក​របស់អ្នក ឧទាហរណ៍ ដើម្បីឱ្យអ្នក​បន្តចូលគណនី ឬចងចាំទំនិញ​នៅក្នុង​រទេះទិញទំនិញ​របស់អ្នក</translation>
 <translation id="3198916472715691905">ទិន្នន័យដែលបានផ្ទុក <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">​ពី​បណ្តាញ</translation>
 <translation id="321187648315454507">ដើម្បីអនុញ្ញាតឱ្យ <ph name="APP_NAME" /> ផ្ញើការជូនដំណឹង​ទៅអ្នក អ្នកក៏ត្រូវបើក​ការជូនដំណឹង​នៅក្នុង​<ph name="BEGIN_LINK" />ការកំណត់ Android<ph name="END_LINK" /> ផងដែរ។</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">អត្ថបទពិពណ៌នា</translation>
 <translation id="8300705686683892304">ស្ថិតក្រោមការគ្រប់គ្រង​របស់កម្មវិធី</translation>
 <translation id="8324158725704657629">កុំ​សួរ​ម្ដងទៀត</translation>
+<translation id="834785183489258869">នៅពេល​ប្រើមុខងារឯកជន គេហទំព័រមិន​អាចប្រើ​ខូគី ដើម្បីមើល​សកម្មភាព​រុករក​តាមអ៊ីនធឺណិត​របស់អ្នក​នៅលើ​គេហទំព័រ​ផ្សេងៗ ឧទាហរណ៍ ដើម្បីកំណត់​ការផ្សាយ​ពាណិជ្ជកម្ម​ឱ្យ​ស្របនឹងអ្នកបានទេ។ មុខងារ​នៅលើ​គេហទំព័រ​មួយចំនួន​អាចនឹងមិនដំណើរការទេ។</translation>
 <translation id="8372893542064058268">អនុញ្ញាតការធ្វើសមកាលកម្មផ្ទៃខាងក្រោយសម្រាប់គេហទំព័រជាក់លាក់។</translation>
 <translation id="8376384591331888629">រួមទាំងខូគីភាគីទីបី​នៅលើគេហទំព័រនេះ</translation>
 <translation id="83792324527827022">គេហទំព័រមួយ​កំពុង​ប្រើប្រាស់កាមេរ៉ា និងមីក្រូហ្វូនរបស់អ្នក</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb
index 01e2dff..1dff519 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_kn.xtb
@@ -48,6 +48,7 @@
 <translation id="2107397443965016585">ಸಂರಕ್ಷಿತ ವಿಷಯವನ್ನು ಪ್ಲೇ ಮಾಡಲು ಸೈಟ್‌ಗಳಿಗೆ ಅನುಮತಿಸುವ ಮೊದಲು ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="2146738493024040262">ತತ್‌ಕ್ಷಣದ ಅಪ್ಲಿಕೇಶನ್ ತೆರೆಯಿರಿ</translation>
 <translation id="2148716181193084225">ಇಂದು</translation>
+<translation id="2155988908301433309">ಯಾವಾಗಲೂ ಮೊಬೈಲ್ ಸೈಟ್ ಅನ್ನು ವೀಕ್ಷಿಸಿ</translation>
 <translation id="2182457891543959921">ನಿಮ್ಮ ಸುತ್ತಮುತ್ತಲಿನ 3D ನಕ್ಷೆಗಳನ್ನು ರಚಿಸಲು ಅಥವಾ ಕ್ಯಾಮರಾ ಸ್ಥಿತಿಯನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಸೈಟ್‌ಗೆ ಅನುಮತಿಸುವ ಮೊದಲು ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿರುವುದು)</translation>
 <translation id="2212565012507486665">ಕುಕೀಗಳನ್ನು ಅನುಮತಿಸಿ</translation>
 <translation id="2228071138934252756"><ph name="APP_NAME" /> ನಿಮ್ಮ ಕ್ಯಾಮರಾವನ್ನು ಪ್ರವೇಶಿಸುವುದಕ್ಕೆ ಅನುಮತಿಸಲು, <ph name="BEGIN_LINK" />Android ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="END_LINK" /> ಕ್ಯಾಮರಾವನ್ನು ಸಹ ಆನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.</translation>
@@ -101,6 +102,7 @@
 <translation id="3115898365077584848">ಮಾಹಿತಿಯನ್ನು ತೋರಿಸಿ</translation>
 <translation id="3123473560110926937">ಕೆಲವು ಸೈಟ್‌ಗಳಲ್ಲಿ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="3143754809889689516">ಆರಂಭದಿಂದ ಪ್ಲೇ ಮಾಡಿ</translation>
+<translation id="3162899666601560689">ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಅನುಭವವನ್ನು ಸುಧಾರಿಸಲು, ಉದಾಹರಣೆಗೆ, ನಿಮ್ಮನ್ನು ಸೈನ್ ಇನ್ ಆಗಿರಿಸಲು ಅಥವಾ ನಿಮ್ಮ ಶಾಪಿಂಗ್ ಕಾರ್ಟ್‌ನಲ್ಲಿರುವ ಐಟಂಗಳನ್ನು ನೆನಪಿಟ್ಟುಕೊಳ್ಳಲು ಸೈಟ್‌ಗಳು ಕುಕೀಗಳನ್ನು ಬಳಸಬಹುದು</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> ಸಂಗ್ರಹಿಸಿದ ಡೇಟಾ</translation>
 <translation id="3203366800380907218">ವೆಬ್‌ನಿಂದ</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> ನಿಮಗೆ ಅಧಿಸೂಚನೆಗಳನ್ನು ಕಳುಹಿಸುವುದಕ್ಕೆ ಅನುಮತಿಸಲು, <ph name="BEGIN_LINK" />Android ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ<ph name="END_LINK" /> ಅಧಿಸೂಚನೆಗಳನ್ನು ಸಹ ಆನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ.</translation>
@@ -203,6 +205,7 @@
 <translation id="5505264765875738116">ಅಧಿಸೂಚನೆಗಳನ್ನು ಕಳುಹಿಸಬಹುದೇ ಎಂದು ಸೈಟ್‌ಗಳು ಕೇಳಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
 <translation id="5516455585884385570">ಅಧಿಸೂಚನೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆಯಿರಿ</translation>
 <translation id="5527111080432883924">ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಿರುವ ಪಠ್ಯ ಮತ್ತು ಚಿತ್ರಗಳನ್ನು ನೋಡಲು ಸೈಟ್‌ಗೆ ಅನುಮತಿಸುವ ಮುನ್ನ ಕೇಳಿ (ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ)</translation>
+<translation id="5553273073880784901">ಯಾವಾಗಲೂ ಡೆಸ್ಕ್‌ಟಾಪ್ ಸೈಟ್ ಅನ್ನು ವೀಕ್ಷಿಸಿ</translation>
 <translation id="5553374991681107062">ಇತ್ತೀಚಿನದು</translation>
 <translation id="5556459405103347317">ಮರುಲೋಡ್‌</translation>
 <translation id="5596627076506792578">ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳು</translation>
@@ -331,6 +334,7 @@
 <translation id="8284326494547611709">ಶೀರ್ಷಿಕೆಗಳು</translation>
 <translation id="8300705686683892304">ಆ್ಯಪ್ ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗಿದೆ</translation>
 <translation id="8324158725704657629">ಮತ್ತೆ ಕೇಳಬೇಡ</translation>
+<translation id="834785183489258869">ಅಜ್ಞಾತ ಮೋಡ್‌ನಲ್ಲಿ ಇರುವಾಗ, ವಿವಿಧ ಸೈಟ್‌ಗಳಾದ್ಯಂತ ನಿಮ್ಮ ಬ್ರೌಸಿಂಗ್ ಚಟುವಟಿಕೆಯನ್ನು ನೋಡಲು, ಉದಾಹರಣೆಗೆ, ಜಾಹೀರಾತುಗಳನ್ನು ವೈಯಕ್ತೀಕರಿಸುವುದಕ್ಕಾಗಿ ನಿಮ್ಮ ಕುಕೀಗಳನ್ನು ಬಳಸಲು ಸೈಟ್‌ಗಳಿಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಫೀಚರ್‌ಗಳು ಕೆಲವು ಸೈಟ್‌ಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೇ ಇರಬಹುದು.</translation>
 <translation id="8372893542064058268">ನಿರ್ದಿಷ್ಟ ಸೈಟ್‌ಗಾಗಿ ಹಿನ್ನೆಲೆ ಸಿಂಕ್‌ ಅನುಮತಿಸಿ.</translation>
 <translation id="8376384591331888629">ಈ ಸೈಟ್‌ನಲ್ಲಿನ ಥರ್ಡ್ ಪಾರ್ಟಿ ಕುಕೀಗಳನ್ನು ಒಳಗೊಂಡಿದೆ</translation>
 <translation id="83792324527827022">ಒಂದು ಸೈಟ್ ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಹಾಗೂ ಮೈಕ್ರೊಫೋನ್ ಅನ್ನು ಬಳಸುತ್ತಿದೆ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
index b72c2a71..e361135a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ko.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">정보 표시</translation>
 <translation id="3123473560110926937">일부 사이트에서 차단됨</translation>
 <translation id="3143754809889689516">처음부터 재생</translation>
+<translation id="3162899666601560689">사이트에서 사용자의 로그인 상태를 유지하거나 장바구니에 담긴 상품을 기억하는 등 탐색 환경을 개선하기 위해 쿠키를 사용할 수 있습니다.</translation>
 <translation id="3198916472715691905">저장 데이터 <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">웹에서 찾은 정보</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" />에서 알림을 전송하도록 허용하려면 <ph name="BEGIN_LINK" />Android 설정<ph name="END_LINK" />에서도 알림을 사용 설정하세요.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">자막</translation>
 <translation id="8300705686683892304">앱에서 관리함</translation>
 <translation id="8324158725704657629">다시 묻지 않음</translation>
+<translation id="834785183489258869">시크릿 모드에 있는 동안에는 사이트에서 사용자의 다양한 사이트 탐색 활동 정보를 이용해 광고 맞춤설정 등의 작업을 하는 데 쿠키를 사용할 수 없습니다. 일부 사이트에서는 기능이 작동하지 않을 수 있습니다.</translation>
 <translation id="8372893542064058268">특정 사이트에서 백그라운드 동기화를 허용합니다.</translation>
 <translation id="8376384591331888629">이 사이트의 타사 쿠키 포함</translation>
 <translation id="83792324527827022">사이트에서 카메라와 마이크를 사용 중입니다.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
index cb0ae10..0ddcfff1 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ky.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Маалыматты көрсөтүү</translation>
 <translation id="3123473560110926937">Айрым сайттарда бөгөттөлдү</translation>
 <translation id="3143754809889689516">Башынан баштап ойнотуу</translation>
+<translation id="3162899666601560689">Серептөөнү ыңгайлаштыруу, мисалы, аккаунттан чыгарбоо же арабадагы сатып алган нерселериңизди эстеп калуу үчүн сайттар cookie файлдарын колдоно алышат</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> сакталган дайындар</translation>
 <translation id="3203366800380907218">Интернеттен алынды</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> колдонмосуна билдирмелерди жөнөтүүгө уруксат берүү үчүн, <ph name="BEGIN_LINK" />Android Жөндөөлөрүнөн<ph name="END_LINK" /> билдирмелерди күйгүзүңүз.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Коштомо жазуулар</translation>
 <translation id="8300705686683892304">Колдонмо тарабынан башкарылууда</translation>
 <translation id="8324158725704657629">Экинчи суралбасын</translation>
+<translation id="834785183489258869">Жашыруун режимде, сайттар cookie файлдарыңыз аркылуу сиз көргөн вебсайттарды көрө албайт (мисалы, жарнамаларды жекелештирүү үчүн). Функциялар айрым сайттарда иштебеши мүмкүн.</translation>
 <translation id="8372893542064058268">Белгилүү бир сайт фондо шайкештирилишине уруксат берүү.</translation>
 <translation id="8376384591331888629">Бул сайттагы үчүнчү тараптын cookie файлдары камтылган</translation>
 <translation id="83792324527827022">Сайт камераңызды жана микрофонуңузду колдонуп жатат</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb
index 1975f5b..3b3457c 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lo.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">ສະແດງຂໍ້ມູນ</translation>
 <translation id="3123473560110926937">ບລັອກໃນບາງເວັບໄຊ</translation>
 <translation id="3143754809889689516">ຫຼິ້ນແຕ່ເລີ່ມຕົ້ນ</translation>
+<translation id="3162899666601560689">ເວັບໄຊສາມາດໃຊ້ຄຸກກີ້ເພື່ອປັບປຸງປະສົບການທ່ອງເວັບຂອງທ່ານ, ຕົວຢ່າງ: ເພື່ອໃຫ້ທ່ານສືບຕໍ່ຢູ່ໃນລະບົບ ຫຼື ຈື່ລາຍການຕ່າງໆໃນກະຕ່າຊື້ເຄື່ອງຂອງທ່ານ</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> ຂໍ້​ມູນ​ເກັບ​ຮັກ​ສາ​ໄວ້</translation>
 <translation id="3203366800380907218">​ຈາກ​ເວັບ​ໄຊ</translation>
 <translation id="321187648315454507">ເພື່ອອະນຸຍາດໃຫ້ <ph name="APP_NAME" /> ສົ່ງການແຈ້ງເຕືອນໃຫ້ທ່ານ, ກະລຸນາເປີດການແຈ້ງເຕືອນໃນ <ph name="BEGIN_LINK" />ການຕັ້ງຄ່າ Android<ph name="END_LINK" /> ນຳ.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">ຄໍາບັນຍາຍພາບ</translation>
 <translation id="8300705686683892304">ຈັດການໂດຍແອັບ</translation>
 <translation id="8324158725704657629">ຢ່າຖາມອີກ</translation>
+<translation id="834785183489258869">ເມື່ອຢູ່ໃນໂໝດບໍ່ເປີດເຜີຍຕົວຕົນ, ເວັບໄຊຈະບໍ່ສາມາດໃຊ້ຄຸກກີ້ຂອງທ່ານເພື່ອເບິ່ງການເຄື່ອນໄຫວການທ່ອງເວັບຂອງທ່ານໃນເວັບໄຊຕ່າງໆໄດ້ ຕົວຢ່າງ: ເພື່ອປັບແຕ່ງໂຄສະນາໃຫ້ເປັນແບບສ່ວນຕົວ. ຄຸນສົມບັດຢູ່ບາງເວັບໄຊອາດບໍ່ເຮັດວຽກ.</translation>
 <translation id="8372893542064058268">ອະນຸຍາດການຊິ້ງຂໍ້ມູນໃນພື້ນຫຼັງສຳລັບເວັບໄຊສະເພາະໃດໜຶ່ງ.</translation>
 <translation id="8376384591331888629">ຮວມທັງຄຸກກີ້ພາກສ່ວນທີສາມໃນເວັບໄຊນີ້</translation>
 <translation id="83792324527827022">ເວັບໄຊກຳລັງໃຊ້ກ້ອງ ແລະ ໄມໂຄຣໂຟນຂອງທ່ານຢູ່</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb
index dd4b5125..56918d6 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lt.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Rodyti informaciją</translation>
 <translation id="3123473560110926937">Užblokuota kai kuriose svetainėse</translation>
 <translation id="3143754809889689516">Paleisti nuo pradžios</translation>
+<translation id="3162899666601560689">Svetainės gali naudoti slapukus naršymo kokybei pagerinti, pavyzdžiui, kad liktumėte prisijungę ar būtų įsimintos pirkinių krepšelyje esančios prekės</translation>
 <translation id="3198916472715691905">Išsaugota duomenų: <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">Iš žiniatinklio</translation>
 <translation id="321187648315454507">Norėdami leisti „<ph name="APP_NAME" />“ siųsti pranešimus, taip pat įjunkite juos <ph name="BEGIN_LINK" />„Android“ nustatymuose<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Subtitrai</translation>
 <translation id="8300705686683892304">Valdo programa</translation>
 <translation id="8324158725704657629">Daugiau neklausti</translation>
+<translation id="834785183489258869">Kai įjungtas inkognito režimas, svetainės negali naudoti slapukų, siekdamos sužinoti apie naršymo veiklą skirtingose svetainėse, pavyzdžiui, kad galėtų suasmeninti skelbimus. Funkcijos gali neveikti kai kuriose svetainėse.</translation>
 <translation id="8372893542064058268">Leisti fono sinchronizavimą konkrečioje svetainėje.</translation>
 <translation id="8376384591331888629">Įskaitant trečiosios šalies slapukus jūsų svetainėje</translation>
 <translation id="83792324527827022">Svetainėje naudojamas jūsų fotoaparatas ir mikrofonas</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb
index e544baac..f2cac16 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_lv.xtb
@@ -79,6 +79,7 @@
 <translation id="2653659639078652383">Iesniegt</translation>
 <translation id="2677748264148917807">Iziet</translation>
 <translation id="2687403674020088961">Bloķēt visus sīkfailus (nav ieteicams)</translation>
+<translation id="2692299144678073135">Atļaut saistītām vietnēm saglabāt jūsu informāciju dažādās vietnēs</translation>
 <translation id="2704606927547763573">Nokopēts</translation>
 <translation id="2713106313042589954">Izslēgt kameru</translation>
 <translation id="2717722538473713889">E-pasta adreses</translation>
@@ -101,6 +102,7 @@
 <translation id="3115898365077584848">Rādīt informāciju</translation>
 <translation id="3123473560110926937">Bloķētas dažās vietnēs</translation>
 <translation id="3143754809889689516">Atskaņot no sākuma</translation>
+<translation id="3162899666601560689">Vietnes drīkst izmantot sīkfailus, lai uzlabotu pārlūkošanas pieredzi, piemēram, lai nodrošinātu ilgstošu pierakstīšanos vai saglabātu pirkumu grozā ievietotās preces.</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> saglabātu datu</translation>
 <translation id="3203366800380907218">No tīmekļa</translation>
 <translation id="321187648315454507">Lai atļautu lietotnei <ph name="APP_NAME" /> sūtīt jums paziņojumus, ieslēdziet paziņojumus arī <ph name="BEGIN_LINK" />Android iestatījumos<ph name="END_LINK" />.</translation>
@@ -138,6 +140,7 @@
 <translation id="4002066346123236978">Nosaukums</translation>
 <translation id="4008040567710660924">Atļaut sīkfailus konkrētai vietnei.</translation>
 <translation id="4046123991198612571">Nākamais ieraksts</translation>
+<translation id="4048876521107516222">Saistītajās vietnēs tiek izmantoti sīkfaili, lai palīdzētu, piemēram, palikt pierakstītam kontā.</translation>
 <translation id="4149994727733219643">Vienkāršots tīmekļa lapu skatījums</translation>
 <translation id="4165986682804962316">Vietnes iestatījumi</translation>
 <translation id="4169549551965910670">Izveidots savienojums ar USB ierīci.</translation>
@@ -219,6 +222,7 @@
 <translation id="5887687176710214216">Pēdējoreiz apmeklēta vakar</translation>
 <translation id="5916664084637901428">Iesl.</translation>
 <translation id="5922853908706496913">Notiek jūsu ekrāna kopīgošana</translation>
+<translation id="5922967540311291836">Bloķēt trešo pušu sīkfailus:</translation>
 <translation id="5939518447894949180">Atiestatīt</translation>
 <translation id="5975083100439434680">Tālināt</translation>
 <translation id="5976059395673079613"><ph name="PERMISSION" /> — <ph name="WARNING_MESSAGE" /></translation>
@@ -309,6 +313,7 @@
 <translation id="7846076177841592234">Atcelt atlasi</translation>
 <translation id="7846621471902887024">Jūs tiksiet izrakstīts no visām vietnēm.</translation>
 <translation id="7882806643839505685">Atļaut skaņu konkrētai vietnei</translation>
+<translation id="789180354981963912">Bloķēt trešo pušu sīkfailus inkognito režīmā:</translation>
 <translation id="7940722705963108451">Atgādināt</translation>
 <translation id="7986741934819883144">Kontaktpersonas atlase</translation>
 <translation id="7999064672810608036">Vai tiešām vēlaties notīrīt visus ar šo vietni saistītos lokālos datus, tostarp sīkfailus, un atiestatīt visas atļaujas?</translation>
@@ -331,6 +336,7 @@
 <translation id="8284326494547611709">Subtitri</translation>
 <translation id="8300705686683892304">Pārvalda lietotne</translation>
 <translation id="8324158725704657629">Nejautāt atkārtoti</translation>
+<translation id="834785183489258869">Inkognito režīmā vietnes nedrīkst izmantot sīkfailus, lai skatītu jūsu pārlūkošanas darbības dažādās vietnēs, piemēram, reklāmu personalizēšanai. Noteiktās vietnēs funkcijas var nedarboties.</translation>
 <translation id="8372893542064058268">Atļaut sinhronizāciju fonā konkrētai vietnei</translation>
 <translation id="8376384591331888629">Arī šajā vietnē esošos trešo pušu sīkfailus</translation>
 <translation id="83792324527827022">Kāda vietne izmanto jūsu kameru un mikrofonu</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb
index 9cd8e5f..27ca58f 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mk.xtb
@@ -48,6 +48,7 @@
 <translation id="2107397443965016585">Прашај пред да дозволиш сајтовите да пуштаат заштитени содржини (се препорачува)</translation>
 <translation id="2146738493024040262">Отвори ја инстант апликацијата</translation>
 <translation id="2148716181193084225">Денес</translation>
+<translation id="2155988908301433309">Секогаш прикажувај сајт за мобилен</translation>
 <translation id="2182457891543959921">Прашувај пред да им дозволиш на сајтовите да создадат 3D-карта на опкружувањето или да ја следат позицијата на камерата (препорачано)</translation>
 <translation id="2212565012507486665">Дозволи колачиња</translation>
 <translation id="2228071138934252756">За да овозможите <ph name="APP_NAME" /> да пристапува до вашата камера, вклучете ја дозволата за камерата и во <ph name="BEGIN_LINK" />Поставки за Android<ph name="END_LINK" />.</translation>
@@ -79,6 +80,7 @@
 <translation id="2653659639078652383">Испрати</translation>
 <translation id="2677748264148917807">Напушти</translation>
 <translation id="2687403674020088961">Блокирај ги сите колачиња (не се препорачува)</translation>
+<translation id="2692299144678073135">Дозволете поврзаните сајтови да ве памтат на сајтовите</translation>
 <translation id="2704606927547763573">Копирано</translation>
 <translation id="2713106313042589954">Исклучи ја камерата</translation>
 <translation id="2717722538473713889">Адреси за е-пошта</translation>
@@ -101,6 +103,7 @@
 <translation id="3115898365077584848">Прикажи ги информациите</translation>
 <translation id="3123473560110926937">Блокирано на некои сајтови</translation>
 <translation id="3143754809889689516">Пушти од почеток</translation>
+<translation id="3162899666601560689">Сајтовите може да користат колачиња за да го подобрат вашето доживување со прелистувањето, на пример, да ве одржат најавени или да запомнат ставки во кошничката за купување</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> складирани податоци</translation>
 <translation id="3203366800380907218">Од интернет</translation>
 <translation id="321187648315454507">За да овозможите <ph name="APP_NAME" /> да ви испраќа известувања, вклучете ја дозволата за известувања и во <ph name="BEGIN_LINK" />Поставки за Android<ph name="END_LINK" />.</translation>
@@ -138,6 +141,7 @@
 <translation id="4002066346123236978">Наслов</translation>
 <translation id="4008040567710660924">Дозволете колачиња за конкретен сајт.</translation>
 <translation id="4046123991198612571">Следна песна</translation>
+<translation id="4048876521107516222">Поврзани сајтови користат колачиња за да ви помогнат со нешта, како да ве задржат најавени</translation>
 <translation id="4149994727733219643">Поедноставен приказ за веб-страници</translation>
 <translation id="4165986682804962316">Поставки на локација</translation>
 <translation id="4169549551965910670">Поврзано со USB-уред</translation>
@@ -203,6 +207,7 @@
 <translation id="5505264765875738116">Сајтовите не можат да прашуваат дали да испраќаат известувања</translation>
 <translation id="5516455585884385570">Отвори ги поставките за известувања</translation>
 <translation id="5527111080432883924">Прашај пред да им дозволиш на сајтовите да читаат текст и слики од привремената меморија (се препорачува)</translation>
+<translation id="5553273073880784901">Секогаш прикажувај сајт за компјутер</translation>
 <translation id="5553374991681107062">Најнови</translation>
 <translation id="5556459405103347317">Повторно вчитај</translation>
 <translation id="5596627076506792578">Повеќе опции</translation>
@@ -219,6 +224,7 @@
 <translation id="5887687176710214216">Последно посетено вчера</translation>
 <translation id="5916664084637901428">Вклучено</translation>
 <translation id="5922853908706496913">Се споделува екранот</translation>
+<translation id="5922967540311291836">Блокирајте колачиња од трети страни:</translation>
 <translation id="5939518447894949180">Ресетирај</translation>
 <translation id="5975083100439434680">Одзумирај</translation>
 <translation id="5976059395673079613"><ph name="PERMISSION" /> - <ph name="WARNING_MESSAGE" /></translation>
@@ -309,6 +315,7 @@
 <translation id="7846076177841592234">Откажи избор</translation>
 <translation id="7846621471902887024">Ќе ве одјавиме од сите сајтови.</translation>
 <translation id="7882806643839505685">Дозволете го звукот за одреден сајт.</translation>
+<translation id="789180354981963912">Блокирајте колачиња од трети страни во „Инкогнито“:</translation>
 <translation id="7940722705963108451">Потсети ме</translation>
 <translation id="7986741934819883144">Изберете контакт</translation>
 <translation id="7999064672810608036">Дали сте сигурни дека сакате да ги исчистите сите локални податоци, вклучувајќи ги колачињата, и да ги ресетирате сите дозволи за веб-локацијата?</translation>
@@ -331,6 +338,7 @@
 <translation id="8284326494547611709">Титлови</translation>
 <translation id="8300705686683892304">Управувани од апликација</translation>
 <translation id="8324158725704657629">Не прашувај повторно</translation>
+<translation id="834785183489258869">Додека сте во „Инкогнито“, сајтовите не може да ги користат колачињата за да ја гледаат вашата активност од прелистувањето на различни сајтови, на пример, за персонализирање реклами. Функциите на некои сајтови може да не функционираат</translation>
 <translation id="8372893542064058268">Дозволи Синхронизација во заднина за одреден сајт.</translation>
 <translation id="8376384591331888629">Вклучувајќи колачиња од трети страни</translation>
 <translation id="83792324527827022">Сајтот ги користи камерата и микрофонот</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb
index 973d3f9..56e7dd7 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ml.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">വിവരങ്ങൾ കാണിക്കുക</translation>
 <translation id="3123473560110926937">ചില സൈറ്റുകളിൽ ബ്ലോക്ക് ചെയ്‌തിരിക്കുന്നു</translation>
 <translation id="3143754809889689516">തുടക്കം മുതൽ പ്ലേ ചെയ്യുക</translation>
+<translation id="3162899666601560689">നിങ്ങളുടെ ബ്രൗസിംഗ് അനുഭവം മെച്ചപ്പെടുത്താൻ സൈറ്റുകൾക്ക് കുക്കികൾ ഉപയോഗിക്കാവുന്നതാണ്, ഉദാഹരണത്തിന്, സൈൻ ഇൻ ചെയ്‌ത നിലയിൽ തുടരാനോ ഷോപ്പിംഗ് കാർട്ടിലെ ഇനങ്ങൾ ഓർമ്മിക്കാനോ പോലുള്ള കാര്യങ്ങൾക്ക്</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> സംഭരിച്ച വിവരം</translation>
 <translation id="3203366800380907218">വെബിൽ നിന്ന്</translation>
 <translation id="321187648315454507">അറിയിപ്പുകൾ അയയ്ക്കാൻ <ph name="APP_NAME" /> ആപ്പിനെ അനുവദിക്കുന്നതിന്, <ph name="BEGIN_LINK" />Android ക്രമീകരണത്തിലും<ph name="END_LINK" /> അറിയിപ്പുകൾ ഓണാക്കുക.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">അടിക്കുറിപ്പുകൾ</translation>
 <translation id="8300705686683892304">ആപ്പ് മാനേജ് ചെയ്യുന്നത്</translation>
 <translation id="8324158725704657629">വീണ്ടും ആവശ്യപ്പെടരുത്</translation>
+<translation id="834785183489258869">അദൃശ്യ മോഡിലായിരിക്കുമ്പോൾ, വ്യത്യസ്‌ത സൈറ്റുകളിലുടനീളമുള്ള നിങ്ങളുടെ ബ്രൗസിംഗ് ആക്റ്റിവിറ്റി കാണാൻ സൈറ്റുകൾക്ക് നിങ്ങളുടെ കുക്കികൾ ഉപയോഗിക്കാനാകില്ല. ഉദാഹരണത്തിന്, പരസ്യങ്ങൾ വ്യക്തിപരമാക്കാൻ. ചില സൈറ്റുകളിലെ ഫീച്ചറുകൾ പ്രവർത്തിച്ചേക്കില്ല.</translation>
 <translation id="8372893542064058268">ഒരു പ്രത്യേക സൈറ്റിന് വേണ്ടി പശ്ചാത്തലം സമന്വയിപ്പിക്കൽ അനുവദിക്കുക.</translation>
 <translation id="8376384591331888629">ഈ സൈറ്റിൽ മൂന്നാം കക്ഷി കുക്കികളെ ഉൾപ്പെടുത്തുന്നു</translation>
 <translation id="83792324527827022">ഒരു സൈറ്റ് നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ഉപയോഗിക്കുന്നു</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb
index acf51c5..57dc31c 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mn.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Мэдээллийг харуулах</translation>
 <translation id="3123473560110926937">Зарим сайт дээр блоклосон</translation>
 <translation id="3143754809889689516">Эхнээс нь тоглуулах</translation>
+<translation id="3162899666601560689">Сайтууд нь, жишээлбэл таныг нэвтэрсэн хэвээр байлгах эсвэл таны худалдан авалтын сагсны зүйлсийг санах зэргээр таны үзэх туршлагыг сайжруулахад күүки ашиглах боломжтой</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> хадгалсан өгөгдөл</translation>
 <translation id="3203366800380907218">Вебээс</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" />-д танд мэдэгдэл илгээхийг зөвшөөрөхийн тулд мэдэгдлийг мөн <ph name="BEGIN_LINK" />Андройдын тохиргоо<ph name="END_LINK" />-нд асаана уу.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Тайлбар</translation>
 <translation id="8300705686683892304">Аппаар удирддаг</translation>
 <translation id="8324158725704657629">Дахиж бүү асуу</translation>
+<translation id="834785183489258869">Сайтууд нь Нууцлалтай байх үедээ, жишээлбэл зарыг хувийн болгохын тулд өөр сайт дээрх таны хөтчийн үйл ажиллагааг харах зорилгоор таны күүкиг ашиглах боломжгүй. Зарим сайтын онцлогууд ажиллахгүй байж болзошгүй.</translation>
 <translation id="8372893542064058268">Тодорхой сайтад дэвсгэрт синк хийхийг зөвшөөрнө.</translation>
 <translation id="8376384591331888629">Энэ сайт дээрх гуравдагч талын күүкитэй цуг</translation>
 <translation id="83792324527827022">Сайт таны камер болон микрофоныг ашиглаж байна</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
index 8580767..d60f31b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
@@ -48,6 +48,7 @@
 <translation id="2107397443965016585">साइटना संरक्षित आशय प्ले करू देण्याआधी विचारा (शिफारस केली जाते)</translation>
 <translation id="2146738493024040262">झटपट ॲप्स उघडा</translation>
 <translation id="2148716181193084225">आज</translation>
+<translation id="2155988908301433309">नेहमी मोबाइल साइट पहा</translation>
 <translation id="2182457891543959921">साइटना तुमच्या आसपासच्या परिसराचा 3D नकाशा तयार करू किंवा कॅमेर्‍याचे स्थान ट्रॅक करू देण्याआधी विचारा (शिफारस केलेले)</translation>
 <translation id="2212565012507486665">कुकींना अनुमती द्या</translation>
 <translation id="2228071138934252756"><ph name="APP_NAME" /> ला तुमचा कॅमेरा ॲक्सेस करू देण्यासाठी, <ph name="BEGIN_LINK" />Android सेटिंग्ज<ph name="END_LINK" /> मध्येदेखील कॅमेरा सुरू करा.</translation>
@@ -101,6 +102,7 @@
 <translation id="3115898365077584848">माहिती दाखवा</translation>
 <translation id="3123473560110926937">काही साइटवर ब्लॉक केले आहे</translation>
 <translation id="3143754809889689516">सुरवातीपासून प्ले करा</translation>
+<translation id="3162899666601560689">तुमच्या ब्राउझिंग अनुभवात सुधारणा करण्यासाठी, उदाहरणार्थ, तुम्हाला साइन इन केलेले ठेवण्यासाठी किंवा तुमच्या शॉपिंग कार्टमधील आयटम लक्षात ठेवण्यासाठी साइट कुकी वापरू शकतात</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> संचयित केलेला डेटा</translation>
 <translation id="3203366800380907218">वेबवरील</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> ने तुम्हाला सूचना पाठवण्यासाठी, <ph name="BEGIN_LINK" />Android सेटिंग्ज<ph name="END_LINK" /> मध्येदेखील सूचना सुरू करा.</translation>
@@ -203,6 +205,7 @@
 <translation id="5505264765875738116">साइट सूचना पाठवण्यास सांगू शकत नाहीत</translation>
 <translation id="5516455585884385570">सूचना सेटिंग्ज उघडा</translation>
 <translation id="5527111080432883924">साइटला क्लिपबोर्डमधून मजकूर आणि इमेज रीड करण्याची अनुमती देण्यापूर्वी विचारा (शिफारस केली)</translation>
+<translation id="5553273073880784901">नेहमी डेस्कटॉप साइट पहा</translation>
 <translation id="5553374991681107062">नवीनतम</translation>
 <translation id="5556459405103347317">रीलोड करा</translation>
 <translation id="5596627076506792578">अधिक पर्याय</translation>
@@ -331,6 +334,7 @@
 <translation id="8284326494547611709">मथळे</translation>
 <translation id="8300705686683892304">ॲपद्वारे व्यवस्थापित</translation>
 <translation id="8324158725704657629">पुन्हा विचारू नका</translation>
+<translation id="834785183489258869">गुप्त मोडमध्ये असताना, वेगवेगळ्या साइटवरील तुमची ब्राउझिंग अ‍ॅक्टिव्हिटी पाहण्यासाठी साइट तुमच्या कुकी वापरू शकत नाहीत. उदाहरणार्थ, जाहिराती पर्सनलाइझ करण्याकरिता. काही साइटवर वैशिष्ट्ये कदाचित काम करणार नाहीत.</translation>
 <translation id="8372893542064058268">विशिष्ट साइटसाठी पार्श्वभूमी संकालनासाठी अनुमती द्या.</translation>
 <translation id="8376384591331888629">या साइटवरील तृतीय-पक्ष कुकीच्या समावेशासह</translation>
 <translation id="83792324527827022">साइट तुमचा कॅमेरा आणि मायक्रोफोन वापरत आहे</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb
index 3b9b10f..a755ea6f 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ms.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Tunjukkan Maklumat</translation>
 <translation id="3123473560110926937">Disekat di sesetengah tapak</translation>
 <translation id="3143754809889689516">Mainkan dari permulaan</translation>
+<translation id="3162899666601560689">Tapak boleh menggunakan kuki untuk memperbaik pengalaman penyemakan imbas anda, contohnya, untuk mengekalkan log masuk anda atau untuk mengingat item dalam troli beli-belah anda</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> data disimpan</translation>
 <translation id="3203366800380907218">Daripada web</translation>
 <translation id="321187648315454507">Untuk membolehkan <ph name="APP_NAME" /> menghantar pemberitahuan kepada anda, hidupkan juga pemberitahuan dalam <ph name="BEGIN_LINK" />Tetapan Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Kapsyen</translation>
 <translation id="8300705686683892304">Diurus oleh apl</translation>
 <translation id="8324158725704657629">Jangan tanya lagi</translation>
+<translation id="834785183489258869">Semasa dalam mod Inkognito, laman tidak boleh menggunakan kuki anda untuk melihat aktiviti penyemakan imbas anda merentas beberapa laman yang berlainan, contohnya, untuk memeribadikan iklan. Ciri pada sesetengah laman mungkin tidak berfungsi.</translation>
 <translation id="8372893542064058268">Benarkan Penyegerakan Latar Belakang untuk tapak tertentu</translation>
 <translation id="8376384591331888629">Termasuk kuki pihak ketiga pada tapak ini</translation>
 <translation id="83792324527827022">Suatu tapak sedang menggunakan kamera dan mikrofon anda</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb
index 5e3556c4..3fbcd70 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_my.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">အချက်အလက်များကို ပြသရန်</translation>
 <translation id="3123473560110926937">အချို့ဝဘ်ဆိုက်များတွင် ပိတ်ထားသည်</translation>
 <translation id="3143754809889689516">အစမှ ကစားရန်</translation>
+<translation id="3162899666601560689">သင်၏ဝဘ်ကြည့်ရှုမှု ပိုကောင်းမွန်စေရန် ဥပမာအားဖြင့် အမြဲလက်မှတ်ထိုးဝင်ထားရန် သို့မဟုတ် ဈေးခြင်းတောင်းထဲရှိ အရာများ မှတ်ထားရန်တို့အတွက် ဝဘ်ဆိုက်များက ကွတ်ကီးများကို အသုံးပြုနိုင်သည်</translation>
 <translation id="3198916472715691905">သိမ်းထားသော ဒေတာ <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">ဝဘ်ပေါ်မှ</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> က အကြောင်းကြားချက်များ ပေးပို့နိုင်ရန် <ph name="BEGIN_LINK" />Android ဆက်တင်များ<ph name="END_LINK" /> တွင်လည်း အကြောင်းကြားချက်များ ဖွင့်ပါ။</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">စာတန်းများ</translation>
 <translation id="8300705686683892304">အက်ပ်က စီမံခန့်ခွဲထားသည်</translation>
 <translation id="8324158725704657629">ထပ်မမေးပါနှင့်</translation>
+<translation id="834785183489258869">ရုပ်ဖျက်မုဒ်သုံးနေစဉ် ဥပမာ- ကြော်ငြာများကို ပုဂ္ဂိုလ်ရေးသီးသန့်ပြုလုပ်ရန်အတွက် မတူညီသည့် ဝဘ်ဆိုက်များတစ်လျှောက်ရှိ သင့်ကြည့်ရှုခြင်းများကို မြင်ရရန် ဝဘ်ဆိုက်များက သင်၏ကွတ်ကီးများကို မသုံးနိုင်ပါ။ ဝဘ်ဆိုက်အချို့ရှိ ဝန်ဆောင်မှုများ အလုပ်မလုပ်နိုင်လောက်ပါ။</translation>
 <translation id="8372893542064058268">တိကျသည့်ဆိုက်အတွက် နောက်ခံတွင်စင့်ခ်လုပ်ခြင်းကို ခွင့်ပြုပါ</translation>
 <translation id="8376384591331888629">ဤဝဘ်ဆိုက်ရှိ ပြင်ပကုမ္ပဏီကွတ်ကီးများ အပါအဝင်</translation>
 <translation id="83792324527827022">ဝဘ်ဆိုက်တစ်ခုက သင့်ကင်မရာနှင့် မိုက်ကရိုဖုန်းကို အသုံးပြုနေသည်</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb
index decdbdf5..ae5edfa 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ne.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">जानकारी देखाउनुहोस्</translation>
 <translation id="3123473560110926937">केही साइटका हकमा रोक लगाइएको छ</translation>
 <translation id="3143754809889689516">सुरुबाट प्ले गर्नुहोस्</translation>
+<translation id="3162899666601560689">साइटहरूले तपाईंलाई राम्रो ब्राउजिङ अनुभव दिन कुकीहरूको प्रयोग गर्न सक्छन्। उदाहरणको लागि साइटहरूले कुकीहरूको प्रयोग गरी तपाईंलाई साइन इन अवस्थामै राख्न वा तपाईंको किनमेलको कार्टमा भएका वस्तुहरू सम्झन सक्छन्।</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> भण्डारण डेटा</translation>
 <translation id="3203366800380907218">वेबबाट प्राप्त</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> लाई तपाईंलाई सूचनाहरू पठाउन दिन <ph name="BEGIN_LINK" />Android का सेटिङ<ph name="END_LINK" />मा गई सूचनाहरू पनि अन गर्नुहोस्।</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">क्याप्सन</translation>
 <translation id="8300705686683892304">अनुप्रयोगले व्यवस्थापन गरेको</translation>
 <translation id="8324158725704657629">फेरि नसोधियोस्</translation>
+<translation id="834785183489258869">इन्कोग्निटो मोडमा ब्राउज गर्दा साइटहरूले तपाईंले गर्नुभएका गतिविधिअनुसार विज्ञापन देखाउने जस्ता प्रयोजनका लागि विभिन्न साइटहरूमा तपाईंले ब्राउजर प्रयोग गरी गर्नुभएका गतिविधि हेर्न तपाईंका कुकीहरू प्रयोग गर्न सक्दैनन्। केही साइटका सुविधाहरूले काम नगर्न सक्छन्।</translation>
 <translation id="8372893542064058268">कुनै विशेष साइटलाई पृष्ठभूमिमा सिंक गर्ने सुविधाको प्रयोग गर्ने अनुमति दिनुहोस्।</translation>
 <translation id="8376384591331888629">यस साइटका तेस्रो पक्षीय कुकीसमेत</translation>
 <translation id="83792324527827022">कुनै साइटले तपाईंको क्यामेरा र माइक्रोफोन प्रयोग गर्दै छ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
index 360641a..e3c0b90 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_nl.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Informatie bekijken</translation>
 <translation id="3123473560110926937">Geblokkeerd op bepaalde sites</translation>
 <translation id="3143754809889689516">Afspelen vanaf het begin</translation>
+<translation id="3162899666601560689">Sites mogen cookies gebruiken om de browsefunctionaliteit te verbeteren, bijvoorbeeld door je ingelogd te houden of door artikelen in je winkelwagen te onthouden</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> opgeslagen gegevens</translation>
 <translation id="3203366800380907218">Van internet</translation>
 <translation id="321187648315454507">Als je wilt dat <ph name="APP_NAME" /> je meldingen stuurt, moet je meldingen ook aanzetten via de <ph name="BEGIN_LINK" />Android-instellingen<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Ondertiteling</translation>
 <translation id="8300705686683892304">Beheerd door app</translation>
 <translation id="8324158725704657629">Niet meer vragen</translation>
+<translation id="834785183489258869">Als je de incognitomodus gebruikt, kunnen sites je cookies niet gebruiken om je browse-activiteit op verschillende sites te bekijken, bijvoorbeeld om advertenties te personaliseren. Functies op bepaalde sites werken misschien niet.</translation>
 <translation id="8372893542064058268">Synchronisatie op de achtergrond toestaan voor een specifieke site.</translation>
 <translation id="8376384591331888629">Inclusief cookies van derden op deze site</translation>
 <translation id="83792324527827022">Een site gebruikt de camera en microfoon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb
index 31750fda..f590e5a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Vis informasjon</translation>
 <translation id="3123473560110926937">Blokkert på enkelte nettsteder</translation>
 <translation id="3143754809889689516">Spill av fra begynnelsen</translation>
+<translation id="3162899666601560689">Nettsteder kan bruke informasjonskapsler for å gi deg en bedre surfeopplevelse, for eksempel for å holde deg pålogget eller huske varene i handlekurven din</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> lagrede data</translation>
 <translation id="3203366800380907218">Fra nettet</translation>
 <translation id="321187648315454507">For at <ph name="APP_NAME" /> skal kunne sende deg varsler, må du også slå på varsler i <ph name="BEGIN_LINK" />Android-innstillingene<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Teksting</translation>
 <translation id="8300705686683892304">Administreres av app</translation>
 <translation id="8324158725704657629">Ikke spør igjen</translation>
+<translation id="834785183489258869">Når du er i Inkognitomodus, kan ikke nettsteder bruke informasjonskapsler til å se nettleseraktiviteten din på andre nettsteder, for eksempel for å vise deg personlig tilpassede annonser. Det kan hende at funksjoner på noen nettsteder ikke fungerer.</translation>
 <translation id="8372893542064058268">Tillat bakgrunnssynkronisering for et bestemt nettsted.</translation>
 <translation id="8376384591331888629">Inkludert informasjonskapsler fra tredjeparter på dette nettstedet</translation>
 <translation id="83792324527827022">Et nettsted bruker kameraet ditt og mikrofonen din</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb
index 8b04f97..f03ccd8e 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">ସୂଚନା ଦେଖାନ୍ତୁ</translation>
 <translation id="3123473560110926937">କିଛି ସାଇଟ୍‍ଗୁଡ଼ିକରେ ଅବରୋଧ କରାଯାଇଛି</translation>
 <translation id="3143754809889689516">ଆରମ୍ଭରୁ ଚଲାନ୍ତୁ</translation>
+<translation id="3162899666601560689">ଆପଣଙ୍କୁ ସାଇନ୍ ଇନ୍ ରଖିବା କିମ୍ବା ଆପଣଙ୍କ ସପିଂ କାର୍ଟରେ ଥିବା ଆଇଟମଗୁଡ଼ିକୁ ମନେରଖିବା ପରି ଆପଣଙ୍କ ବ୍ରାଉଜିଂ ଅନୁଭୂତିକୁ ଉନ୍ନତ କରିବା ନିମନ୍ତେ ସାଇଟଗୁଡ଼ିକ କୁକୀଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିପାରିବ</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> ଷ୍ଟୋର୍ ହୋ‍ଇଥିବା ଡାଟା</translation>
 <translation id="3203366800380907218">ୱେବରୁ</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" />କୁ ଆପଣଙ୍କୁ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପଠାଇବାକୁ ଅନୁମତି ଦେବା ପାଇଁ, <ph name="BEGIN_LINK" />Android ସେଟିଂସ<ph name="END_LINK" />ରେ ମଧ୍ୟ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଚାଲୁ କରନ୍ତୁ।</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">କ୍ୟାପସନ୍</translation>
 <translation id="8300705686683892304">ଆପ୍ ଦ୍ୱାରା ପରିଚାଳିତ</translation>
 <translation id="8324158725704657629">ପୁଣି ପଚାର ନାହିଁ</translation>
+<translation id="834785183489258869">ଇନକଗ୍ନିଟୋ ମୋଡରେ ଥିବା ସମୟରେ, ବିଜ୍ଞାପନଗୁଡ଼ିକୁ ପର୍ସନାଲାଇଜ୍ କରିବା ପରି ବିଭିନ୍ନ ସାଇଟରେ ଆପଣଙ୍କ ବ୍ରାଉଜିଂ କାର୍ଯ୍ୟକଳାପକୁ ଦେଖିବା ନିମନ୍ତେ ସାଇଟଗୁଡ଼ିକ କୁକୀଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିପାରିବ ନାହିଁ। କିଛି ସାଇଟରେ ଫିଚରଗୁଡ଼ିକ କାମ କରିନପାରେ।</translation>
 <translation id="8372893542064058268">ଏକ ନିର୍ଦ୍ଦିଷ୍ଟ ସାଇଟ୍ ପାଇଁ ପୃଷ୍ଟପଟ ସିଙ୍କ୍‌କୁ ଅନୁମତି ଦିଅନ୍ତୁ।</translation>
 <translation id="8376384591331888629">ଏହି ସାଇଟରେ ଥିବା ତୃତୀୟ-ପକ୍ଷ କୁକୀଗୁଡ଼ିକ ସମେତ</translation>
 <translation id="83792324527827022">କୌଣସି ସାଇଟ୍ ଆପଣଙ୍କ କ୍ୟାମେରା ଏବଂ ମାଇକ୍ରୋଫୋନକୁ ବ୍ୟବହାର କରୁଛି</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb
index 3e875ce..8a11b64 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pa.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">ਜਾਣਕਾਰੀ ਦਿਖਾਓ</translation>
 <translation id="3123473560110926937">ਕੁਝ ਸਾਈਟਾਂ 'ਤੇ ਬਲਾਕ ਕੀਤੇ ਗਏ</translation>
 <translation id="3143754809889689516">ਸ਼ੁਰੂ ਤੋਂ ਚਲਾਓ</translation>
+<translation id="3162899666601560689">ਸਾਈਟਾਂ ਤੁਹਾਡੇ ਬ੍ਰਾਊਜ਼ਿੰਗ ਅਨੁਭਵ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ ਕੁਕੀਜ਼ ਨੂੰ ਵਰਤ ਸਕਦੀਆਂ ਹਨ, ਉਦਾਹਰਨ ਲਈ, ਤੁਹਾਨੂੰ ਸਾਈਨ-ਇਨ ਜਾਂ ਤੁਹਾਡੇ ਖਰੀਦਦਾਰੀ ਕਾਰਟ ਵਿਚਲੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਯਾਦ ਰੱਖਣ ਲਈ</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> ਸਟੋਰ ਕੀਤਾ ਡਾਟਾ</translation>
 <translation id="3203366800380907218">ਵੈੱਬ ਤੋਂ</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> ਨੂੰ ਤੁਹਾਨੂੰ ਸੂਚਨਾਵਾਂ ਭੇਜਣ ਦੇਣ ਲਈ, <ph name="BEGIN_LINK" />Android ਸੈਟਿੰਗਾਂ<ph name="END_LINK" /> ਵਿੱਚ ਸੂਚਨਾਵਾਂ ਵੀ ਚਾਲੂ ਕਰੋ।</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">ਸੁਰਖੀਆਂ</translation>
 <translation id="8300705686683892304">ਐਪ ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ</translation>
 <translation id="8324158725704657629">ਦੁਬਾਰਾ ਨਾ ਪੁੱਛੋ</translation>
+<translation id="834785183489258869">ਇਨਕੋਗਨਿਟੋ ਵਿੱਚ ਹੋਣ ਵੇਲੇ, ਸਾਈਟਾਂ ਵੱਖ-ਵੱਖ ਸਾਈਟਾਂ ਵਿਚਲੀ ਤੁਹਾਡੀ ਬ੍ਰਾਊਜ਼ਿੰਗ ਸਰਗਰਮੀ ਦੇਖਣ ਲਈ ਕੁਕੀਜ਼ ਨੂੰ ਨਹੀਂ ਵਰਤ ਸਕਦੀਆਂ, ਉਦਾਹਰਨ ਲਈ, ਵਿਗਿਆਪਨਾਂ ਨੂੰ ਵਿਅਕਤੀਗਤ ਬਣਾਉਣ ਵਾਸਤੇ। ਸ਼ਾਇਦ ਕੁਝ ਸਾਈਟਾਂ 'ਤੇ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਕੰਮ ਨਾ ਕਰਨ।</translation>
 <translation id="8372893542064058268">ਇੱਕ ਖ਼ਾਸ ਸਾਈਟ ਲਈ ਬੈਕਗ੍ਰਾਊਂਡ ਸਿੰਕ ਦੀ ਆਗਿਆ ਦਿਓ।</translation>
 <translation id="8376384591331888629">ਇਸ ਸਾਈਟ 'ਤੇ ਤੀਜੀ-ਧਿਰ ਦੀਆਂ ਕੁਕੀਜ਼ ਸਮੇਤ</translation>
 <translation id="83792324527827022">ਕੋਈ ਸਾਈਟ ਤੁਹਾਡਾ ਕੈਮਰਾ ਅਤੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਵਰਤ ਰਹੀ ਹੈ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb
index 3f19da0..a609b897 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pl.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Pokaż informacje</translation>
 <translation id="3123473560110926937">Blokowane na niektórych stronach</translation>
 <translation id="3143754809889689516">Odtwórz od początku</translation>
+<translation id="3162899666601560689">Strony mogą używać plików cookie dla Twojej wygody, by na przykład zapamiętać Twoje logowanie lub zawartość koszyka</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> zapisanych danych</translation>
 <translation id="3203366800380907218">Z sieci</translation>
 <translation id="321187648315454507">Aby zezwolić aplikacji <ph name="APP_NAME" /> na wysyłanie do Ciebie powiadomień, musisz je też włączyć w <ph name="BEGIN_LINK" />ustawieniach Androida<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Napisy</translation>
 <translation id="8300705686683892304">Zarządzane przez aplikację</translation>
 <translation id="8324158725704657629">Nie pytaj ponownie</translation>
+<translation id="834785183489258869">W trybie incognito strony nie mogą używać plików cookie do śledzenia Twojej aktywności związanej z przeglądaniem różnych stron, na przykład w celu personalizowania reklam. W niektórych witrynach mogą nie działać funkcje.</translation>
 <translation id="8372893542064058268">Zezwalaj na synchronizowanie w tle z określoną stroną.</translation>
 <translation id="8376384591331888629">Również pliki cookie innych firm na tej stronie</translation>
 <translation id="83792324527827022">Strona używa kamery i mikrofonu</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
index 2448c385..f6386d58 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-BR.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Mostrar informações</translation>
 <translation id="3123473560110926937">Bloqueados em alguns sites</translation>
 <translation id="3143754809889689516">Reproduzir do início</translation>
+<translation id="3162899666601560689">Os sites podem usar cookies para melhorar sua experiência de navegação, como manter sua conta conectada ou se lembrar dos itens em um carrinho de compras</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> de dados armazenados</translation>
 <translation id="3203366800380907218">Da Web</translation>
 <translation id="321187648315454507">Para permitir que o app <ph name="APP_NAME" /> envie notificações, também é necessário ativá-las nas <ph name="BEGIN_LINK" />configurações do Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Legendas</translation>
 <translation id="8300705686683892304">Gerenciados por app</translation>
 <translation id="8324158725704657629">Não perguntar novamente</translation>
+<translation id="834785183489258869">Na navegação anônima, os sites não podem usar seus cookies para ver suas atividades de navegação em outras páginas, por exemplo, para personalizar anúncios. Os recursos de alguns sites podem não funcionar.</translation>
 <translation id="8372893542064058268">Permitir a sincronização em segundo plano para um site específico.</translation>
 <translation id="8376384591331888629">Incluir também os cookies de terceiros desse site</translation>
 <translation id="83792324527827022">Um site está usando sua câmera e seu microfone</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb
index 74068e1..47c8763 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_pt-PT.xtb
@@ -48,6 +48,7 @@
 <translation id="2107397443965016585">Perguntar antes de permitir que os sites reproduzam conteúdos protegidos (recomendado)</translation>
 <translation id="2146738493024040262">Abrir app instantânea</translation>
 <translation id="2148716181193084225">Hoje</translation>
+<translation id="2155988908301433309">Ver sempre o site para dispositivos móveis</translation>
 <translation id="2182457891543959921">Perguntar antes de permitir que os sites criem um mapa 3D do ambiente à sua volta ou monitorizem a posição da câmara (recomendado)</translation>
 <translation id="2212565012507486665">Permitir cookies</translation>
 <translation id="2228071138934252756">Para permitir que a app <ph name="APP_NAME" /> aceda à câmara, ative também a câmara nas <ph name="BEGIN_LINK" />Definições do Android<ph name="END_LINK" />.</translation>
@@ -101,6 +102,7 @@
 <translation id="3115898365077584848">Mostrar informações</translation>
 <translation id="3123473560110926937">Bloqueado em alguns sites.</translation>
 <translation id="3143754809889689516">Reproduzir desde o início</translation>
+<translation id="3162899666601560689">Os sites podem utilizar cookies para melhorar a experiência de navegação, por exemplo, para manter a sua sessão iniciada ou memorizar os artigos no seu carrinho de compras.</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> de dados armazenados</translation>
 <translation id="3203366800380907218">Da Web</translation>
 <translation id="321187648315454507">Para permitir que a app <ph name="APP_NAME" /> lhe envie notificações, ative também as notificações nas <ph name="BEGIN_LINK" />Definições do Android<ph name="END_LINK" />.</translation>
@@ -203,6 +205,7 @@
 <translation id="5505264765875738116">Os sites não podem pedir para enviar notificações.</translation>
 <translation id="5516455585884385570">Abrir definições de notificação</translation>
 <translation id="5527111080432883924">Perguntar antes de autorizar os sites a ler texto e imagens da área de transferência (recomendado).</translation>
+<translation id="5553273073880784901">Ver sempre o site para computador</translation>
 <translation id="5553374991681107062">Mais recentes</translation>
 <translation id="5556459405103347317">Recarregar</translation>
 <translation id="5596627076506792578">Mais opções</translation>
@@ -331,6 +334,7 @@
 <translation id="8284326494547611709">Legendas</translation>
 <translation id="8300705686683892304">Geridos por aplicação</translation>
 <translation id="8324158725704657629">Não perguntar novamente</translation>
+<translation id="834785183489258869">Quando estiver na Navegação anónima, os sites não podem utilizar cookies para ver a sua atividade de navegação em diferentes sites, por exemplo, para personalizar anúncios. As funcionalidades em alguns sites podem não funcionar.</translation>
 <translation id="8372893542064058268">Permitir Sincronização em segundo plano num site específico.</translation>
 <translation id="8376384591331888629">Incluindo cookies de terceiros neste site</translation>
 <translation id="83792324527827022">Um site está a utilizar a sua câmara e microfone.</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
index 4c993b00..8a4c9d3 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ro.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Afișează informațiile</translation>
 <translation id="3123473560110926937">Blocate pe anumite site-uri</translation>
 <translation id="3143754809889689516">Redă de la început</translation>
+<translation id="3162899666601560689">Site-urile pot folosi cookie-uri pentru a-ți îmbunătăți experiența de navigare, de exemplu, pentru a te menține conectat(ă) sau pentru a reține articolele din coșul de cumpărături</translation>
 <translation id="3198916472715691905">Date stocate: <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">De pe web</translation>
 <translation id="321187648315454507">Pentru a permite aplicației <ph name="APP_NAME" /> să îți trimită notificări, activează notificările și în <ph name="BEGIN_LINK" />Setările Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Subtitrări</translation>
 <translation id="8300705686683892304">Gestionate de aplicație</translation>
 <translation id="8324158725704657629">Nu mai întreba</translation>
+<translation id="834785183489258869">În modul incognito, site-urile nu pot folosi cookie-urile pentru a vedea activitatea ta de navigare de pe diferite site-uri, de exemplu, pentru a personaliza anunțurile. Este posibil ca funcțiile de pe anumite site-uri să nu funcționeze.</translation>
 <translation id="8372893542064058268">Permite sincronizarea în fundal pentru un anumit site.</translation>
 <translation id="8376384591331888629">Inclusiv cookie-urile terță parte de pe acest site</translation>
 <translation id="83792324527827022">Un site folosește camera foto și microfonul</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
index e0bdf6c..2de0c9df 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Показать информацию</translation>
 <translation id="3123473560110926937">Заблокировано на некоторых сайтах</translation>
 <translation id="3143754809889689516">Воспроизвести с начала</translation>
+<translation id="3162899666601560689">Сайты могут использовать файлы cookie, чтобы сделать работу в браузере более удобной, например запоминая товары в корзине или информацию о том, что вы уже вошли в аккаунт</translation>
 <translation id="3198916472715691905">В памяти занято: <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">Из интернета</translation>
 <translation id="321187648315454507">Чтобы получать уведомления из приложения "<ph name="APP_NAME" />", включите их в <ph name="BEGIN_LINK" />настройках Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Субтитры</translation>
 <translation id="8300705686683892304">Под управлением приложения</translation>
 <translation id="8324158725704657629">Больше не спрашивать</translation>
+<translation id="834785183489258869">В режиме инкогнито сайты не могут использовать файлы cookie, чтобы отслеживать ваши действия в браузере, например для показа персонализированной рекламы. Из-за этого функции некоторых сайтов могут стать недоступными.</translation>
 <translation id="8372893542064058268">Разрешить фоновую синхронизацию для конкретного сайта</translation>
 <translation id="8376384591331888629">В том числе сторонние файлы cookie на сайте</translation>
 <translation id="83792324527827022">Сайт использует вашу камеру и микрофон</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb
index c5ca135..3b56d45 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_si.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">තතු පෙන්වන්න</translation>
 <translation id="3123473560110926937">සමහර වෙබ් අඩවිවල අවහිර කෙරේ</translation>
 <translation id="3143754809889689516">ආරම්භයේ සිට ධාවන කරන්න</translation>
+<translation id="3162899666601560689">වෙබ් අඩවි ඔබේ බ්‍රවුස කිරීමේ අත්දැකීම වැඩිදියුණු කිරීමට, උදාහරණයක් වශයෙන්, ඔබව පුරනය කර තබා ගැනීමට හෝ ඔබේ සාප්පු සවාරි කරත්තයේ අයිතම මතක තබා ගැනීමට කුකී භාවිත කළ හැක</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> ගබඩා කළ දත්ත</translation>
 <translation id="3203366800380907218">වෙබය වෙතින්</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> හට ඔබට දැනුම්දීම් එවීමට ඉඩ දීමට <ph name="BEGIN_LINK" />Android සැකසීම්<ph name="END_LINK" /> තුළ දැනුම්දීම්ද ක්‍රියාත්මක කරන්න.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">සිරස්තල</translation>
 <translation id="8300705686683892304">යෙදුමෙන් කළමනා කෙරෙන</translation>
 <translation id="8324158725704657629">නැවත නොඅසන්න</translation>
+<translation id="834785183489258869">අප්‍රසිද්ධව සිටින අතරතුර, විවිධ අඩවි හරහා ඔබගේ බ්‍රවුස් කිරීමේ ක්‍රියාකාරකම් බැලීමට, උදාහරණයක් වශයෙන්, වෙළඳ දැන්වීම් පෞද්ගලිකකරණය කිරීමට අඩවිවලට ඔබගේ කුකි භාවිත කළ නොහැකිය. සමහර අඩවිවල විශේෂාංග ක්‍රියා නොකළ හැකිය.</translation>
 <translation id="8372893542064058268">නිශ්චිත අඩවියක් සඳහා පසුබිම සමමුහුර්ත කිරීමට ඉඩ දෙන්න.</translation>
 <translation id="8376384591331888629">මෙම අඩවියෙහි තෙවන පාර්ශ්ව කුකි ඇතුළුව</translation>
 <translation id="83792324527827022">වෙබ් අඩවියක් ඔබේ කැමරාව සහ මයික්‍රොෆෝනය භාවිත කරයි</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
index 030ec4e..6175e9f 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sk.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Zobraziť informácie</translation>
 <translation id="3123473560110926937">Blokované na niektorých weboch</translation>
 <translation id="3143754809889689516">Prehrať od začiatku</translation>
+<translation id="3162899666601560689">Weby môžu pomocou súborov cookie zlepšovať vaše prostredie prehliadania, napríklad zabrániť odhláseniu alebo zapamätať si položky vo vašom nákupnom košíku</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> uložených dát</translation>
 <translation id="3203366800380907218">Z webu</translation>
 <translation id="321187648315454507">Ak chcete povoliť aplikácii <ph name="APP_NAME" /> odosielať vám upozornenia, zapnite ich aj v <ph name="BEGIN_LINK" />nastaveniach Androidu<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Titulky</translation>
 <translation id="8300705686683892304">Spravované aplikáciou</translation>
 <translation id="8324158725704657629">Nabudúce sa nepýtať</translation>
+<translation id="834785183489258869">Weby v režime inkognito nemôžu pomocou súborov cookie zobraziť vašu aktivitu prehliadania v rámci rôznych webov (napríklad na prispôsobenie reklám). Funkcie na niektorých weboch nemusia fungovať.</translation>
 <translation id="8372893542064058268">Povoliť synchronizáciu na pozadí na konkrétnom webe.</translation>
 <translation id="8376384591331888629">Vrátane súborov cookie tretích strán na tomto webe</translation>
 <translation id="83792324527827022">Váš fotoaparát a mikrofón používa nejaký web</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb
index fd839d7..d240672f 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sl.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Pokaži informacije</translation>
 <translation id="3123473560110926937">Blokirano na nekaterih spletnih mestih</translation>
 <translation id="3143754809889689516">Predvajaj od začetka</translation>
+<translation id="3162899666601560689">Spletna mesta lahko uporabljajo piškotke za izboljšanje izkušnje brskanja, in sicer tako, da na primer poskrbijo, da ostanete prijavljeni, ali si zapomnijo izdelke v nakupovalnem vozičku.</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> shranjenih podatkov</translation>
 <translation id="3203366800380907218">Iz spleta</translation>
 <translation id="321187648315454507">Če želite, da vam aplikacija <ph name="APP_NAME" /> pošilja obvestila, obvestila vklopite tudi v <ph name="BEGIN_LINK" />nastavitvah za Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Napisi</translation>
 <translation id="8300705686683892304">Upravlja aplikacija</translation>
 <translation id="8324158725704657629">Ne vprašaj me več</translation>
+<translation id="834785183489258869">Ko uporabljate anonimni način, spletna mesta ne morejo uporabljati piškotkov za ogled dejavnosti brskanja na različnih spletnih mestih, na primer za osebno prilagajanje oglasov. Funkcije na nekaterih spletnih mestih morda ne bodo delovale.</translation>
 <translation id="8372893542064058268">Dovoli sinhroniziranje v ozadju za določeno spletno mesto.</translation>
 <translation id="8376384591331888629">Vključno s piškotki drugih mest na tem spletnem mestu</translation>
 <translation id="83792324527827022">Spletno mesto uporablja kamero in mikrofon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb
index 54328c9..947c994 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sq.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Shfaq informacionin</translation>
 <translation id="3123473560110926937">Bllokuar në disa sajte</translation>
 <translation id="3143754809889689516">Luaj nga fillimi</translation>
+<translation id="3162899666601560689">Sajtet mund t'i përdorin kukit për të përmirësuar përvojën e shfletimit, për shembull për të të mbajtur të identifikuar ose për të kujtuar artikujt në karrocën e blerjeve</translation>
 <translation id="3198916472715691905">Të dhënat e ruajtura <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">Nga uebi</translation>
 <translation id="321187648315454507">Për të lejuar që <ph name="APP_NAME" /> të të dërgojë njoftime, aktivizo gjithashtu njoftimet në <ph name="BEGIN_LINK" />Cilësimet e Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Titrat</translation>
 <translation id="8300705686683892304">Menaxhuar nga aplikacioni</translation>
 <translation id="8324158725704657629">Mos pyet më</translation>
+<translation id="834785183489258869">Në modalitetin "e fshehtë", sajtet nuk mund t'i përdorin kukit e tua për të parë aktivitetin e shfletimit nëpër sajte të ndryshme, p.sh. për të personalizuar reklamat. Veçoritë në disa sajte mund të mos funksionojnë.</translation>
 <translation id="8372893542064058268">Lejo "Sinkronizimin në sfond" për një sajt specifik.</translation>
 <translation id="8376384591331888629">Duke përfshirë kukit e palëve të treta në këtë sajt</translation>
 <translation id="83792324527827022">Një sajt po përdor kamerën dhe mikrofonin tënd</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb
index 2ffc291a..0356ba42 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sr-Latn.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Prikaži informacije</translation>
 <translation id="3123473560110926937">Blokirano na nekim sajtovima</translation>
 <translation id="3143754809889689516">Pusti ispočetka</translation>
+<translation id="3162899666601560689">Sajtovi mogu da koriste kolačiće za poboljšanje doživljaja pregledanja, na primer, da biste ostali prijavljeni ili da bi stavke u vašoj korpi za kupovinu ostale sačuvane</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> sačuvanih podataka</translation>
 <translation id="3203366800380907218">Sa veba</translation>
 <translation id="321187648315454507">Da biste dozvolili da vam <ph name="APP_NAME" /> šalje obaveštenja, uključite obaveštenja i u <ph name="BEGIN_LINK" />Android podešavanjima<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Titl</translation>
 <translation id="8300705686683892304">Upravlja aplikacija</translation>
 <translation id="8324158725704657629">Ne pitaj ponovo</translation>
+<translation id="834785183489258869">Kada ste u režimu bez arhiviranja, sajtovi ne mogu da koriste kolačiće da bi videli vaše aktivnosti pregledanja na različitim sajtovima, na primer, za personalizaciju oglasa. Funkcije na nekim sajtovima mogu da ne rade.</translation>
 <translation id="8372893542064058268">Dozvolite Sinhronizaciju u pozadini za određeni sajt.</translation>
 <translation id="8376384591331888629">Uključujući kolačiće trećih strana na ovom sajtu</translation>
 <translation id="83792324527827022">Sajt koristi kameru i mikrofon</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb
index 1f68314..8b21543 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sr.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Прикажи информације</translation>
 <translation id="3123473560110926937">Блокирано на неким сајтовима</translation>
 <translation id="3143754809889689516">Пусти испочетка</translation>
+<translation id="3162899666601560689">Сајтови могу да користе колачиће за побољшање доживљаја прегледања, на пример, да бисте остали пријављени или да би ставке у вашој корпи за куповину остале сачуване</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> сачуваних података</translation>
 <translation id="3203366800380907218">Са веба</translation>
 <translation id="321187648315454507">Да бисте дозволили да вам <ph name="APP_NAME" /> шаље обавештења, укључите обавештења и у <ph name="BEGIN_LINK" />Android подешавањима<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Титл</translation>
 <translation id="8300705686683892304">Управља апликација</translation>
 <translation id="8324158725704657629">Не питај поново</translation>
+<translation id="834785183489258869">Када сте у режиму без архивирања, сајтови не могу да користе колачиће да би видели ваше активности прегледања на различитим сајтовима, на пример, за персонализацију огласа. Функције на неким сајтовима могу да не раде.</translation>
 <translation id="8372893542064058268">Дозволите Синхронизацију у позадини за одређени сајт.</translation>
 <translation id="8376384591331888629">Укључујући колачиће трећих страна на овом сајту</translation>
 <translation id="83792324527827022">Сајт користи камеру и микрофон</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
index 8a429d2..b2ea34b 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sv.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Visa info</translation>
 <translation id="3123473560110926937">Blockeras på vissa webbplatser</translation>
 <translation id="3143754809889689516">Spela upp från början</translation>
+<translation id="3162899666601560689">Webbplatser får förbättra surfupplevelsen med hjälp av cookies, till exempel genom att låta dig förbli inloggad eller spara vad du har lagt till i kundvagnen</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> sparad data</translation>
 <translation id="3203366800380907218">Från webben</translation>
 <translation id="321187648315454507">Om du vill få aviseringar från <ph name="APP_NAME" /> måste du även aktivera aviseringar i <ph name="BEGIN_LINK" />Android-inställningarna<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Textning</translation>
 <translation id="8300705686683892304">Hanteras av app</translation>
 <translation id="8324158725704657629">Fråga inte igen</translation>
+<translation id="834785183489258869">I inkognitoläget får inte webbplatser se din webbaktivitet på olika webbplatser med hjälp av cookies, för att till exempel anpassa annonser. Vissa webbplatsers funktioner kanske inte fungerar.</translation>
 <translation id="8372893542064058268">Tillåt bakgrundssynkronisering för en specifik webbplats.</translation>
 <translation id="8376384591331888629">Inkludera cookies från tredje part på den här webbplatsen</translation>
 <translation id="83792324527827022">En webbplats använder kameran och mikrofonen</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb
index 3274dcc1..ba13574 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_sw.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Onyesha Maelezo</translation>
 <translation id="3123473560110926937">Yamezuiwa kwenye baadhi ya tovuti</translation>
 <translation id="3143754809889689516">Cheza kuanzia mwanzo</translation>
+<translation id="3162899666601560689">Tovuti zinaweza kutumia vidakuzi ili kuboresha hali yako ya kuvinjari, kwa mfano, ili kufanya ubaki ukiwa umeingia katika akaunti au kukumbuka bidhaa zilizo kwenye kikapu chako cha ununuzi</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> za data iliyohifadhiwa</translation>
 <translation id="3203366800380907218">Kutoka kwenye wavuti</translation>
 <translation id="321187648315454507">Ili uruhusu <ph name="APP_NAME" /> ikutumie arifa, washa pia arifa katika <ph name="BEGIN_LINK" />Mipangilio ya Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Manukuu</translation>
 <translation id="8300705686683892304">Zinazodhibitiwa na programu</translation>
 <translation id="8324158725704657629">Usiniulize tena</translation>
+<translation id="834785183489258869">Katika hali fiche, tovuti haziwezi kutumia vidakuzi vyako kuona shughuli zako za kuvinjari kwenye tovuti mbalimbali, kwa mfano, ili kukuonyesha matangazo yanayokufaa zaidi. Huenda vipengele kwenye baadhi ya tovuti visifanye kazi.</translation>
 <translation id="8372893542064058268">Ruhusu Usawazishaji wa Chini Chini wa tovuti mahususi.</translation>
 <translation id="8376384591331888629">Vikiwemo vidakuzi vya wengine kwenye tovuti hii</translation>
 <translation id="83792324527827022">Tovuti inatumia kamera na maikrofoni yako</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb
index ee6c622..834e232 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">தகவலைக் காட்டு</translation>
 <translation id="3123473560110926937">சில தளங்களில் தடுக்கப்பட்டுள்ளன</translation>
 <translation id="3143754809889689516">முதலிலிருந்து இயக்கு</translation>
+<translation id="3162899666601560689">உங்கள் உலாவல் அனுபவத்தை மேம்படுத்துவதற்காக (எ.கா., உங்களை உள்நுழைந்தபடியே வைத்திருப்பது, உங்கள் ஷாப்பிங் கார்ட்டில் உள்ளவற்றை நினைவில் கொள்வது போன்றவை) குக்கீகளைத் தளங்கள் பயன்படுத்த முடியும்</translation>
 <translation id="3198916472715691905">சேமிக்கப்பட்ட தரவு: <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">இணையத்தில் இருந்து</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> ஆப்ஸ் உங்களுக்கு அறிவிப்புகளை அனுப்ப அனுமதிப்பதற்கு <ph name="BEGIN_LINK" />Android அமைப்புகளிலும்<ph name="END_LINK" /> அறிவிப்புகளுக்கான அனுமதியை இயக்கவும்.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">வசனங்கள்</translation>
 <translation id="8300705686683892304">ஆப்ஸ் நிர்வகிப்பவை</translation>
 <translation id="8324158725704657629">மீண்டும் கேட்காதே</translation>
+<translation id="834785183489258869">மறைநிலையில் உள்ளபோது, விளம்பரங்களைப் பிரத்தியேகமாக்குவது போன்ற செயல்களைச் செய்வதற்காக வெவ்வேறு தளங்களில் உங்கள் உலாவல் செயல்பாட்டைப் பார்க்க, தளங்களால் குக்கீகளைப் பயன்படுத்த முடியாது. சில தளங்களில் உள்ள குறிப்பிட்ட அம்சங்கள் செயல்படாமல் போகக்கூடும்.</translation>
 <translation id="8372893542064058268">குறிப்பிட்ட தளத்திற்கு, பின்னணி ஒத்திசைவை அனுமதி.</translation>
 <translation id="8376384591331888629">மூன்றாம் தரப்பின் குக்கீகளை இந்தத் தளத்தில் அனுமதி</translation>
 <translation id="83792324527827022">ஒரு தளம் உங்கள் மைக்ரோஃபோனையும் கேமராவையும் பயன்படுத்துகிறது</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
index 7e0ce679..b9861f3a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_te.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">సమాచారాన్ని చూపు</translation>
 <translation id="3123473560110926937">కొన్ని సైట్‌లలో బ్లాక్ చేయబడింది</translation>
 <translation id="3143754809889689516">ప్రారంభం నుండి ప్లే చేయి</translation>
+<translation id="3162899666601560689">సైట్‌లు మీ బ్రౌజింగ్ అనుభవాన్ని మెరుగుపరచడానికి కుక్కీలను ఉపయోగిస్తాయి, ఉదాహరణకు, మిమ్మల్ని సైన్ ఇన్ చేసి ఉంచడం లేదా మీ షాపింగ్ కార్ట్‌లోని ఐటెమ్‌లను గుర్తు చేయడం లాంటివి</translation>
 <translation id="3198916472715691905">నిల్వ చేసిన డేటా <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">వెబ్ నుండి</translation>
 <translation id="321187648315454507">మీకు నోటిఫికేషన్‌లను పంపడానికి <ph name="APP_NAME" />ని అనుమతించేందుకు, <ph name="BEGIN_LINK" />Android సెట్టింగ్‌ల<ph name="END_LINK" />లో కూడా నోటిఫికేషన్‌లను ఆన్ చేయండి.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">క్యాప్షన్‌లు</translation>
 <translation id="8300705686683892304">యాప్ ద్వారా నిర్వహించబడుతున్నవి</translation>
 <translation id="8324158725704657629">మళ్లీ అడగవద్దు</translation>
+<translation id="834785183489258869">అజ్ఞాతం మోడ్‌లో ఉండగా, వివిధ సైట్‌లలో మీ బ్రౌజింగ్ యాక్టివిటీని చూడటానికి సైట్‌లు మీ కుక్కీలను ఉపయోగించలేవు, ఉదాహరణకు, యాడ్‌లను వ్యక్తిగతీకరించడం. కొన్ని సైట్‌లలోని ఫీచర్‌లు సరిగ్గా పని చేయకపోవచ్చు.</translation>
 <translation id="8372893542064058268">నిర్దిష్ట సైట్ కోసం నేపథ్య సింక్‌ను అనుమతిస్తుంది.</translation>
 <translation id="8376384591331888629">ఈ సైట్‌లో థర్డ్ పార్టీ కుకీలు చేర్చబడుతున్నాయి</translation>
 <translation id="83792324527827022">ఒక సైట్ మీ కెమెరాను, మైక్రోఫోన్‌ను ఉపయోగిస్తోంది</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
index d9bd9d5..79b7cc8 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_th.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">แสดงข้อมูล</translation>
 <translation id="3123473560110926937">บล็อกในบางเว็บไซต์</translation>
 <translation id="3143754809889689516">เริ่มเล่นตั้งแต่ต้น</translation>
+<translation id="3162899666601560689">เว็บไซต์จะใช้คุกกี้เพื่อปรับปรุงประสบการณ์การท่องเว็บได้ เช่น ให้คุณลงชื่อเข้าใช้ต่อไปเรื่อยๆ หรือจำรายการในรถเข็นช็อปปิ้ง</translation>
 <translation id="3198916472715691905">ข้อมูลที่จัดเก็บมี <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">จากเว็บ</translation>
 <translation id="321187648315454507">หากต้องการอนุญาตให้ <ph name="APP_NAME" /> ส่งการแจ้งเตือนให้คุณ ให้เปิดใช้การแจ้งเตือนใน<ph name="BEGIN_LINK" />การตั้งค่า Android<ph name="END_LINK" /> ด้วย</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">คำบรรยาย</translation>
 <translation id="8300705686683892304">จัดการโดยแอป</translation>
 <translation id="8324158725704657629">ไม่ต้องถามอีก</translation>
+<translation id="834785183489258869">ขณะอยู่ในโหมดไม่ระบุตัวตน เว็บไซต์จะไม่สามารถใช้คุกกี้เพื่อดูกิจกรรมการท่องเว็บของคุณในเว็บไซต์ต่างๆ สำหรับวัตถุประสงค์อย่างเช่นการปรับโฆษณาตามโปรไฟล์ของคุณ ฟีเจอร์ในบางเว็บไซต์อาจใช้งานไม่ได้</translation>
 <translation id="8372893542064058268">อนุญาตให้ใช้การซิงค์ในแบ็กกราวด์สำหรับเว็บไซต์ที่เจาะจง</translation>
 <translation id="8376384591331888629">รวมคุกกี้ของบุคคลที่สามในเว็บไซต์นี้</translation>
 <translation id="83792324527827022">มีเว็บไซต์กำลังใช้กล้องถ่ายรูปและไมโครโฟน</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
index 89c12b9c..56e4cd8 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_tr.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Bilgileri Göster</translation>
 <translation id="3123473560110926937">Bazı sitelerde engellendi</translation>
 <translation id="3143754809889689516">Baştan oynat</translation>
+<translation id="3162899666601560689">Siteler size daha iyi bir göz atma deneyimi sunmak, örneğin, oturumunuzu açık tutmak veya alışveriş sepetinizdeki ürünleri hatırlamak için çerez kullanabilir</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> depolanmış veri</translation>
 <translation id="3203366800380907218">Web'den</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> uygulamasının size bildirim gönderebilmesi için <ph name="BEGIN_LINK" />Android Ayarları<ph name="END_LINK" />'nda da bildirimleri açın.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Altyazılar</translation>
 <translation id="8300705686683892304">Uygulama tarafından yönetiliyor</translation>
 <translation id="8324158725704657629">Tekrar sorma</translation>
+<translation id="834785183489258869">Gizli moddayken siteler, örneğin reklamları kişiselleştirmek amacıyla farklı sitelerde tarama etkinliğinizi görmek için çerezlerinizi kullanamaz. Bazı sitelerdeki özellikler çalışmayabilir.</translation>
 <translation id="8372893542064058268">Belirli bir site için Arka Plan Senkronizasyonuna izin verin.</translation>
 <translation id="8376384591331888629">Bu sitedeki üçüncü taraf çerezler dahil</translation>
 <translation id="83792324527827022">Bir site kameranızı ve mikrofonunuzu kullanıyor</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb
index 88df4843..030d22fb 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Показати інформацію</translation>
 <translation id="3123473560110926937">Заблоковано на деяких сайтах</translation>
 <translation id="3143754809889689516">Відтворити з початку</translation>
+<translation id="3162899666601560689">Сайти можуть використовувати файли cookie, щоб покращувати веб-перегляд, наприклад не виходити з облікового запису чи запам'ятовувати товари в кошику для покупок</translation>
 <translation id="3198916472715691905">У пам'яті зайнято <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">З Інтернету</translation>
 <translation id="321187648315454507">Щоб дозволити додатку <ph name="APP_NAME" /> надсилати вам сповіщення, також увімкніть їх у <ph name="BEGIN_LINK" />налаштуваннях Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Субтитри</translation>
 <translation id="8300705686683892304">Керуються додатком</translation>
 <translation id="8324158725704657629">Не запитувати знову</translation>
+<translation id="834785183489258869">В анонімному режимі сайти не можуть використовувати файли cookie для перегляду ваших дій у веб-переглядачі, зокрема, щоб персоналізувати рекламу. Функції на деяких сайтах можуть не працювати.</translation>
 <translation id="8372893542064058268">сайті.</translation>
 <translation id="8376384591331888629">Зокрема файли cookie третіх сторін на цьому сайті</translation>
 <translation id="83792324527827022">Сайт використовує камеру та мікрофон</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
index f327dd6..cf5f824 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">معلومات دکھائیں</translation>
 <translation id="3123473560110926937">بعض سائٹس پر مسدود ہے</translation>
 <translation id="3143754809889689516">شروع سے چلائیں</translation>
+<translation id="3162899666601560689">سائٹس آپ کے براؤزنگ کے تجربہ کو، مثال کے طور پر، آپ کو سائن ان رکھنے یا آپ کی شاپنگ کارٹ میں آئٹمز کو یاد رکھنے کے لیے، بہتر بنانے کے لیے کوکیز کا استعمال کر سکتی ہیں</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> اسٹور کردہ ڈیٹا</translation>
 <translation id="3203366800380907218">ویب سے</translation>
 <translation id="321187648315454507">‏<ph name="APP_NAME" /> کو آپ کو اطلاعات بھیجنے کی سہولت دینے کے لیے، <ph name="BEGIN_LINK" />Android کی ترتیبات<ph name="END_LINK" /> میں بھی اطلاعات آن کریں۔</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">کیپشنز</translation>
 <translation id="8300705686683892304">ایپ کے زیر انتظام ہیں</translation>
 <translation id="8324158725704657629">دوبارہ مت پوچھیں</translation>
+<translation id="834785183489258869">پوشیدگی موڈ میں ہونے پر سائٹس مختلف سائٹس میں آپ کی براؤزنگ سرگرمی کو دیکھنے کے لیے آپ کی کوکیز کا استعمال نہیں کر سکتیں، مثال کے طور پر اشتہارات کو ذاتی نوعیت کا بنانا۔ ہو سکتا ہے کہ کچھ سائٹس پر خصوصیات کام نہ کریں۔</translation>
 <translation id="8372893542064058268">کسی مخصوص سائٹ کیلئے پس منظر کی مطابقت پذیری کی اجازت دیں۔</translation>
 <translation id="8376384591331888629">اس سائٹ میں فریق ثالث کوکیز سمیت</translation>
 <translation id="83792324527827022">ایک سائٹ آپ کا کیمرا اور مائیکروفون استعمال کر رہی ہے</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb
index 23c71e1..a08768fd 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_uz.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Ma’lumotlarni ko‘rsatish</translation>
 <translation id="3123473560110926937">Ayrim saytlarda bloklangan</translation>
 <translation id="3143754809889689516">Boshidan ijro etish</translation>
+<translation id="3162899666601560689">Saytlar sahifalarni kezishingizni yaxshilash, jumladan, kirish axborotingiz yoki xarid qutingizni eslab qolish uchun cookie fayllardan foydalanishi mumkin</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> xotira band</translation>
 <translation id="3203366800380907218">Internetdan</translation>
 <translation id="321187648315454507"><ph name="APP_NAME" /> sizga bildirishnomalar yuborishi uchun <ph name="BEGIN_LINK" />Android sozlamalari<ph name="END_LINK" /> orqali bildirishnomalarni yoqing.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Taglavhalar</translation>
 <translation id="8300705686683892304">Ilova boshqaruvida</translation>
 <translation id="8324158725704657629">Boshqa soʻralmasin</translation>
+<translation id="834785183489258869">Inkognito rejimida cookie fayllaringiz yopiq boʻladi va saytlar reklamalarni sizga moslashtirish uchun brauzerdagi faoliyatingizni kuzata olmaydi. Ayrim saytlardagi funksiyalar ishlamay qolishi mumkin.</translation>
 <translation id="8372893542064058268">Ko‘rsatilgan sayt uchun fonda sinxronlashga ruxsat berish.</translation>
 <translation id="8376384591331888629">Bu saytdagi tashqi cookie fayllariga ham</translation>
 <translation id="83792324527827022">Sayt kamera va mikrofondan foydalanmoqda</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
index 7533dc2..34ed84f1 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_vi.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Hiển thị thông tin</translation>
 <translation id="3123473560110926937">Đã chặn trên một số trang web</translation>
 <translation id="3143754809889689516">Phát từ đầu</translation>
+<translation id="3162899666601560689">Các trang web có thể dùng cookie để cải thiện trải nghiệm duyệt web của bạn, chẳng hạn như để duy trì trạng thái đăng nhập hoặc ghi nhớ các mục có trong giỏ hàng</translation>
 <translation id="3198916472715691905">Dữ liệu đã lưu trữ: <ph name="STORAGE_AMOUNT" /></translation>
 <translation id="3203366800380907218">Trên web</translation>
 <translation id="321187648315454507">Để cho phép <ph name="APP_NAME" /> gửi thông báo cho bạn, hãy bật cả thông báo trong phần <ph name="BEGIN_LINK" />Cài đặt Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Phụ đề</translation>
 <translation id="8300705686683892304">Do ứng dụng quản lý</translation>
 <translation id="8324158725704657629">Không hỏi lại</translation>
+<translation id="834785183489258869">Ở chế độ Ẩn danh, các trang web không thể dùng cookie để giám sát hoạt động duyệt web của bạn trên nhiều trang web, chẳng hạn như để điều chỉnh quảng cáo cho phù hợp với bạn. Các tính năng trên một số trang web có thể không hoạt động.</translation>
 <translation id="8372893542064058268">Cho phép Đồng bộ hóa dưới nền cho trang web cụ thể.</translation>
 <translation id="8376384591331888629">Bao gồm cả cookie của bên thứ ba trên trang web này</translation>
 <translation id="83792324527827022">Một trang web đang sử dụng máy ảnh và micrô của bạn</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
index d6b172f4..c8d1589 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">显示信息</translation>
 <translation id="3123473560110926937">已禁止部分网站显示广告</translation>
 <translation id="3143754809889689516">从头播放</translation>
+<translation id="3162899666601560689">网站可以使用 Cookie 来提升您的浏览体验,例如让您保持登录状态或记住您购物车中的商品</translation>
 <translation id="3198916472715691905">已存储 <ph name="STORAGE_AMOUNT" /> 数据</translation>
 <translation id="3203366800380907218">来自网络</translation>
 <translation id="321187648315454507">若要允许 <ph name="APP_NAME" /> 向您发送通知,您还需在 <ph name="BEGIN_LINK" />Android 设置<ph name="END_LINK" />中开启通知。</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">字幕</translation>
 <translation id="8300705686683892304">由应用管理</translation>
 <translation id="8324158725704657629">别再询问</translation>
+<translation id="834785183489258869">不过,在无痕模式下,网站无法使用 Cookie 查看您在各个不同网站上的浏览活动,因而无法实现某些功能或目的(例如为您展示个性化广告)。某些网站上的功能可能无法正常运行。</translation>
 <translation id="8372893542064058268">允许特定网站进行后台同步。</translation>
 <translation id="8376384591331888629">包括此网站上的第三方 Cookie</translation>
 <translation id="83792324527827022">有一个网站正在使用您的摄像头和麦克风</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb
index 27a98aa..e88ad9a 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-HK.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">顯示資料</translation>
 <translation id="3123473560110926937">在部分網站上設定封鎖</translation>
 <translation id="3143754809889689516">從頭開始播放</translation>
+<translation id="3162899666601560689">網站可使用 Cookie 來改善瀏覽體驗,例如讓您保持登入狀態或記住購物車中的商品</translation>
 <translation id="3198916472715691905">已使用 <ph name="STORAGE_AMOUNT" /> 儲存空間</translation>
 <translation id="3203366800380907218">來自網絡</translation>
 <translation id="321187648315454507">如要讓 <ph name="APP_NAME" /> 傳送通知,請一併在 <ph name="BEGIN_LINK" />Android 設定<ph name="END_LINK" />中開啟通知功能。</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">字幕</translation>
 <translation id="8300705686683892304">由應用程式管理</translation>
 <translation id="8324158725704657629">不要再詢問</translation>
+<translation id="834785183489258869">在無痕模式中,網站不能使用 Cookie 查看您在各網站的瀏覽活動,例如放送個人化廣告。部分網站的功能可能會無法正常運作。</translation>
 <translation id="8372893542064058268">允許特定網站執行背景同步功能。</translation>
 <translation id="8376384591331888629">包括在此網站上的第三方 Cookie</translation>
 <translation id="83792324527827022">有網站正在使用您的相機和麥克風</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
index c88ee07..f39f6d7 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">顯示資訊</translation>
 <translation id="3123473560110926937">在某些網站上設定封鎖</translation>
 <translation id="3143754809889689516">從頭播放</translation>
+<translation id="3162899666601560689">網站可使用 Cookie 改善瀏覽體驗,例如讓你保持登入狀態,或記住購物車中的商品</translation>
 <translation id="3198916472715691905">儲存了 <ph name="STORAGE_AMOUNT" /> 的資料</translation>
 <translation id="3203366800380907218">來自網路</translation>
 <translation id="321187648315454507">如要允許 <ph name="APP_NAME" /> 傳送通知,請一併在 <ph name="BEGIN_LINK" />Android 設定<ph name="END_LINK" />中開啟通知功能。</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">字幕</translation>
 <translation id="8300705686683892304">由應用程式管理</translation>
 <translation id="8324158725704657629">不要再詢問</translation>
+<translation id="834785183489258869">在無痕模式中,網站無法使用 Cookie 查看你在各網站的瀏覽活動,也無法提供個人化廣告等服務。某些網站的功能可能無法運作。</translation>
 <translation id="8372893542064058268">允許特定網站執行背景同步處理作業。</translation>
 <translation id="8376384591331888629">包括這個網站上的第三方 Cookie</translation>
 <translation id="83792324527827022">有網站正在使用你的攝影機和麥克風</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb
index ec2e59b..fa51624 100644
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zu.xtb
@@ -101,6 +101,7 @@
 <translation id="3115898365077584848">Khombisa ulwazi</translation>
 <translation id="3123473560110926937">Kuvinjelwe kwamanye amasayithi</translation>
 <translation id="3143754809889689516">Dlala kusukela ekuqaleni</translation>
+<translation id="3162899666601560689">Amasayithi angasebenzisa amakhukhi ukuthuthukisa ukuzizwela kwakho kokuphequlula, ngokwesibonelo, ukukugcina ungene ngemvume noma ukukhumbula izinto ezikukalishi yakho yokuthenga.</translation>
 <translation id="3198916472715691905"><ph name="STORAGE_AMOUNT" /> idatha egciniwe</translation>
 <translation id="3203366800380907218">Kusuka kuwebhu</translation>
 <translation id="321187648315454507">Ukuze uvumele i-<ph name="APP_NAME" /> ukuthi ikuthumele izaziso, vula nezaziso <ph name="BEGIN_LINK" />Kumasethingi e-Android<ph name="END_LINK" />.</translation>
@@ -331,6 +332,7 @@
 <translation id="8284326494547611709">Amazwibela</translation>
 <translation id="8300705686683892304">Kuphethwe uhlelo lokusebenza</translation>
 <translation id="8324158725704657629">Ungabuzi futhi</translation>
+<translation id="834785183489258869">Lapho uku-incognito, amasayithi awakwazi ukusebenzisa amakhukhi akho ukubona umsebenzi wakho wokuphequlula kumasayithi ahlukahlukene, ngokwesibonelo, ukwenza izikhangiso ngokwezifiso. Izakhi ezikwamanye amasayithi zingase zingasebenzi.</translation>
 <translation id="8372893542064058268">Vumela ukuvumelanisa kwangemuva kwesayithi elithile.</translation>
 <translation id="8376384591331888629">Kuhlanganise namakhukhi enkampani yangaphandle kule webhusayithi</translation>
 <translation id="83792324527827022">Isayithi lisebenzisa ikhamera nemakrofoni yakho</translation>
diff --git a/components/cast_streaming/browser/cast_streaming_session.cc b/components/cast_streaming/browser/cast_streaming_session.cc
index f505fcd..aeeca16 100644
--- a/components/cast_streaming/browser/cast_streaming_session.cc
+++ b/components/cast_streaming/browser/cast_streaming_session.cc
@@ -118,9 +118,7 @@
 absl::optional<mojo::ScopedDataPipeConsumerHandle>
 CastStreamingSession::ReceiverSessionClient::InitializeAudioConsumer(
     const StreamingInitializationInfo& initialization_info) {
-  if (!initialization_info.audio_stream_info) {
-    return absl::nullopt;
-  }
+  DCHECK(initialization_info.audio_stream_info);
 
   // Create the audio data pipe.
   mojo::ScopedDataPipeProducerHandle data_pipe_producer;
@@ -134,7 +132,6 @@
   // this object and |client_| is guaranteed to outlive this object. Here,
   // the duration is set to kNoTimestamp so the audio renderer does not block.
   // Audio frames duration is not known ahead of time in mirroring.
-  DCHECK(!audio_consumer_);
   audio_consumer_ = std::make_unique<StreamConsumer>(
       initialization_info.audio_stream_info->receiver, media::kNoTimestamp,
       std::move(data_pipe_producer),
@@ -149,9 +146,7 @@
 absl::optional<mojo::ScopedDataPipeConsumerHandle>
 CastStreamingSession::ReceiverSessionClient::InitializeVideoConsumer(
     const StreamingInitializationInfo& initialization_info) {
-  if (!initialization_info.video_stream_info) {
-    return absl::nullopt;
-  }
+  DCHECK(initialization_info.video_stream_info);
 
   // Create the video data pipe.
   mojo::ScopedDataPipeProducerHandle data_pipe_producer;
@@ -169,7 +164,6 @@
   // senders do not send data for a long period of time. We end up with
   // overlapping video frames but this is fine since the media pipeline mostly
   // considers the playout time when deciding which frame to present or play
-  DCHECK(!video_consumer_);
   video_consumer_ = std::make_unique<StreamConsumer>(
       initialization_info.video_stream_info->receiver, base::Minutes(10),
       std::move(data_pipe_producer),
@@ -290,14 +284,12 @@
     playback_command_dispatcher_->OnRemotingSessionEnded();
   }
 
-  audio_consumer_.reset();
-  video_consumer_.reset();
-
   switch (reason) {
     case ReceiversDestroyingReason::kEndOfSession:
       client_->OnSessionEnded();
       break;
     case ReceiversDestroyingReason::kRenegotiated:
+      client_->OnSessionReinitializationPending();
       break;
   }
 }
@@ -316,11 +308,13 @@
 void CastStreamingSession::ReceiverSessionClient::OnDataTimeout() {
   DLOG(ERROR) << __func__ << ": Session ended due to timeout";
   receiver_session_.reset();
+  client_->OnSessionEnded();
 }
 
 void CastStreamingSession::ReceiverSessionClient::OnCastChannelClosed() {
   DLOG(ERROR) << __func__ << ": Session ended due to cast channel closure";
   receiver_session_.reset();
+  client_->OnSessionEnded();
 }
 
 base::WeakPtr<CastStreamingSession::ReceiverSessionClient>
diff --git a/components/cast_streaming/browser/cast_streaming_session.h b/components/cast_streaming/browser/cast_streaming_session.h
index f06ea03..2f6d9ca 100644
--- a/components/cast_streaming/browser/cast_streaming_session.h
+++ b/components/cast_streaming/browser/cast_streaming_session.h
@@ -58,6 +58,10 @@
     virtual void OnVideoBufferReceived(
         media::mojom::DecoderBufferPtr buffer) = 0;
 
+    // Called when a session is being renegotiated but has not yet completed
+    // configuration.
+    virtual void OnSessionReinitializationPending() = 0;
+
     // Called on receiver session reinitialization. It is guaranteed that at
     // least one of |audio_stream_info| or |video_stream_info| will be set.
     virtual void OnSessionReinitialization(
diff --git a/components/cast_streaming/browser/demuxer_stream_data_provider.h b/components/cast_streaming/browser/demuxer_stream_data_provider.h
index ed05be5..055359c 100644
--- a/components/cast_streaming/browser/demuxer_stream_data_provider.h
+++ b/components/cast_streaming/browser/demuxer_stream_data_provider.h
@@ -70,6 +70,7 @@
   void OnNewStreamInfo(ConfigType config,
                        mojo::ScopedDataPipeConsumerHandle handle) {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+    is_new_stream_info_pending_ = false;
     config_ = std::move(config);
     next_stream_info_ =
         StreamInfoType::element_type::New(config_, std::move(handle));
@@ -80,6 +81,13 @@
     }
   }
 
+  // Stops reading frames until a new StreamInfo has been applied by a call to
+  // OnNewStreamInfo().
+  void WaitForNewStreamInfo() {
+    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+    is_new_stream_info_pending_ = true;
+  }
+
   // Sets the buffer to be passed to the renderer process as part of the
   // response to the ongoing GetBuffer() request.
   void ProvideBuffer(media::mojom::DecoderBufferPtr buffer) {
@@ -126,14 +134,18 @@
       return;
     }
 
+    current_callback_ = std::move(callback);
+    if (is_new_stream_info_pending_) {
+      return;
+    }
+
     if (next_stream_info_) {
-      std::move(callback).Run(
-          GetBufferResponseType::element_type::NewStreamInfo(
+      std::move(current_callback_)
+          .Run(GetBufferResponseType::element_type::NewStreamInfo(
               std::move(next_stream_info_)));
       return;
     }
 
-    current_callback_ = std::move(callback);
     request_buffer_.Run(
         base::BindOnce(&DemuxerStreamClient::OnNoBuffersAvailable, client_));
   }
@@ -149,6 +161,10 @@
     }
   }
 
+  // Set by WaitForNewStreamInfo() to signify that a new StreamInfo is expected
+  // and all GetBuffer() calls prior to this change should be blocked.
+  bool is_new_stream_info_pending_ = false;
+
   // The most recently set config.
   ConfigType config_;
 
diff --git a/components/cast_streaming/browser/receiver_session_impl.cc b/components/cast_streaming/browser/receiver_session_impl.cc
index a09ddfc..0117495f 100644
--- a/components/cast_streaming/browser/receiver_session_impl.cc
+++ b/components/cast_streaming/browser/receiver_session_impl.cc
@@ -143,6 +143,15 @@
   video_demuxer_stream_data_provider_->ProvideBuffer(std::move(buffer));
 }
 
+void ReceiverSessionImpl::OnSessionReinitializationPending() {
+  if (audio_demuxer_stream_data_provider_) {
+    audio_demuxer_stream_data_provider_->WaitForNewStreamInfo();
+  }
+  if (video_demuxer_stream_data_provider_) {
+    video_demuxer_stream_data_provider_->WaitForNewStreamInfo();
+  }
+}
+
 void ReceiverSessionImpl::OnSessionReinitialization(
     StreamingInitializationInfo initialization_info,
     absl::optional<mojo::ScopedDataPipeConsumerHandle> audio_pipe_consumer,
diff --git a/components/cast_streaming/browser/receiver_session_impl.h b/components/cast_streaming/browser/receiver_session_impl.h
index 40e4f04c..e33ad82 100644
--- a/components/cast_streaming/browser/receiver_session_impl.h
+++ b/components/cast_streaming/browser/receiver_session_impl.h
@@ -84,6 +84,7 @@
       override;
   void OnAudioBufferReceived(media::mojom::DecoderBufferPtr buffer) override;
   void OnVideoBufferReceived(media::mojom::DecoderBufferPtr buffer) override;
+  void OnSessionReinitializationPending() override;
   void OnSessionReinitialization(
       StreamingInitializationInfo initialization_info,
       absl::optional<mojo::ScopedDataPipeConsumerHandle> audio_pipe_consumer,
diff --git a/components/cast_streaming/browser/stream_consumer.cc b/components/cast_streaming/browser/stream_consumer.cc
index 8450477..bc388c09 100644
--- a/components/cast_streaming/browser/stream_consumer.cc
+++ b/components/cast_streaming/browser/stream_consumer.cc
@@ -47,9 +47,9 @@
   }
 }
 
-StreamConsumer::~StreamConsumer() {
-  receiver_->SetConsumer(nullptr);
-}
+// NOTE: Do NOT call into |receiver_| methods here, as the object may no longer
+// be valid at time of this object's destruction.
+StreamConsumer::~StreamConsumer() = default;
 
 void StreamConsumer::ReadFrame(base::OnceClosure no_frames_available_cb) {
   DCHECK(!is_read_pending_);
@@ -61,7 +61,6 @@
 
 void StreamConsumer::CloseDataPipeOnError() {
   DLOG(WARNING) << "[ssrc:" << receiver_->ssrc() << "] Data pipe closed.";
-  receiver_->SetConsumer(nullptr);
   pipe_watcher_.Cancel();
   data_pipe_.reset();
 }
diff --git a/components/cast_streaming/renderer/BUILD.gn b/components/cast_streaming/renderer/BUILD.gn
index 56869b8..fdbf09fa 100644
--- a/components/cast_streaming/renderer/BUILD.gn
+++ b/components/cast_streaming/renderer/BUILD.gn
@@ -131,10 +131,18 @@
 }
 
 source_set("web_codecs") {
-  sources = [ "web_codecs/delegating_decoder_buffer_provider.h" ]
+  sources = [
+    "web_codecs/delegating_decoder_buffer_provider.h",
+    "web_codecs/stream_control_channel.cc",
+    "web_codecs/stream_control_channel.h",
+  ]
   public_deps = [
+    ":buffer_requester",
     ":decoder_buffer_provider",
     "//base",
+    "//components/cast_streaming/public/mojom",
+    "//media/mojo/common",
+    "//media/mojo/mojom",
   ]
   visibility = [ ":*" ]
 }
diff --git a/components/cast_streaming/renderer/public/decoder_buffer_provider.h b/components/cast_streaming/renderer/public/decoder_buffer_provider.h
index a2fa8f7..5e72f5e 100644
--- a/components/cast_streaming/renderer/public/decoder_buffer_provider.h
+++ b/components/cast_streaming/renderer/public/decoder_buffer_provider.h
@@ -10,11 +10,21 @@
 #include "base/memory/weak_ptr.h"
 
 namespace media {
+class AudioDecoderConfig;
 class DecoderBuffer;
+class VideoDecoderConfig;
 }
 
 namespace cast_streaming {
 
+template <typename TConfigType>
+class DecoderBufferProvider;
+
+using AudioDecoderBufferProvider =
+    DecoderBufferProvider<media::AudioDecoderConfig>;
+using VideoDecoderBufferProvider =
+    DecoderBufferProvider<media::VideoDecoderConfig>;
+
 // This class provides a way for a caller to asynchronously request a new
 // buffer, as well as provide information associated with the buffers which it
 // returns.
diff --git a/components/cast_streaming/renderer/web_codecs/stream_control_channel.cc b/components/cast_streaming/renderer/web_codecs/stream_control_channel.cc
new file mode 100644
index 0000000..b78ccffb
--- /dev/null
+++ b/components/cast_streaming/renderer/web_codecs/stream_control_channel.cc
@@ -0,0 +1,74 @@
+// 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/cast_streaming/renderer/web_codecs/stream_control_channel.h"
+
+#include <utility>
+
+namespace cast_streaming::webcodecs {
+
+StreamControlChannel::StreamControlChannel(
+    Client* client,
+    mojo::PendingAssociatedReceiver<mojom::DemuxerConnector> receiver,
+    scoped_refptr<base::SequencedTaskRunner> task_runner)
+    : client_(client),
+      task_runner_(std::move(task_runner)),
+      receiver_(this, std::move(receiver), task_runner_) {
+  DCHECK(client_);
+  DCHECK(task_runner_);
+}
+
+StreamControlChannel::~StreamControlChannel() = default;
+
+void StreamControlChannel::OnJavascriptConfigured() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  has_javascript_been_configured_ = true;
+
+  if (enable_receiver_callback_) {
+    std::move(enable_receiver_callback_).Run();
+  }
+}
+
+void StreamControlChannel::OnNewBufferProvider(
+    base::WeakPtr<AudioDecoderBufferProvider> ptr) {
+  client_->OnNewAudioBufferProvider(std::move(ptr));
+}
+
+void StreamControlChannel::OnNewBufferProvider(
+    base::WeakPtr<VideoDecoderBufferProvider> ptr) {
+  client_->OnNewVideoBufferProvider(std::move(ptr));
+}
+
+void StreamControlChannel::EnableReceiver(EnableReceiverCallback callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  enable_receiver_callback_ = std::move(callback);
+
+  if (has_javascript_been_configured_) {
+    std::move(enable_receiver_callback_).Run();
+  }
+}
+
+void StreamControlChannel::OnStreamsInitialized(
+    mojom::AudioStreamInitializationInfoPtr audio_stream_info,
+    mojom::VideoStreamInitializationInfoPtr video_stream_info) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+  if (audio_stream_info) {
+    mojom::AudioStreamInfoPtr& stream_init_info =
+        audio_stream_info->stream_initialization_info;
+    audio_buffer_requester_ = std::make_unique<AudioBufferRequester>(
+        this, std::move(stream_init_info->decoder_config),
+        std::move(stream_init_info->data_pipe),
+        std::move(audio_stream_info->buffer_requester), task_runner_);
+  }
+  if (video_stream_info) {
+    mojom::VideoStreamInfoPtr& stream_init_info =
+        video_stream_info->stream_initialization_info;
+    video_buffer_requester_ = std::make_unique<VideoBufferRequester>(
+        this, std::move(stream_init_info->decoder_config),
+        std::move(stream_init_info->data_pipe),
+        std::move(video_stream_info->buffer_requester), task_runner_);
+  }
+}
+
+}  // namespace cast_streaming::webcodecs
diff --git a/components/cast_streaming/renderer/web_codecs/stream_control_channel.h b/components/cast_streaming/renderer/web_codecs/stream_control_channel.h
new file mode 100644
index 0000000..e63b79b3
--- /dev/null
+++ b/components/cast_streaming/renderer/web_codecs/stream_control_channel.h
@@ -0,0 +1,83 @@
+// 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_CAST_STREAMING_RENDERER_WEB_CODECS_STREAM_CONTROL_CHANNEL_H_
+#define COMPONENTS_CAST_STREAMING_RENDERER_WEB_CODECS_STREAM_CONTROL_CHANNEL_H_
+
+#include <memory>
+
+#include "base/memory/scoped_refptr.h"
+#include "base/sequence_checker.h"
+#include "base/task/sequenced_task_runner.h"
+#include "components/cast_streaming/public/mojom/demuxer_connector.mojom.h"
+#include "components/cast_streaming/renderer/buffer_requester.h"
+#include "components/cast_streaming/renderer/public/decoder_buffer_provider.h"
+#include "mojo/public/cpp/bindings/associated_receiver.h"
+#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
+
+namespace cast_streaming::webcodecs {
+
+// This class handles synchronization between JavaScript configuration of the
+// receiver and the mojo API used for requesting audio and video buffers.
+class StreamControlChannel : public mojom::DemuxerConnector,
+                             public AudioBufferRequester::Client,
+                             public VideoBufferRequester::Client {
+ public:
+  class Client {
+   public:
+    virtual ~Client() = default;
+
+    virtual void OnNewAudioBufferProvider(
+        base::WeakPtr<AudioDecoderBufferProvider> ptr) = 0;
+    virtual void OnNewVideoBufferProvider(
+        base::WeakPtr<VideoDecoderBufferProvider> ptr) = 0;
+  };
+
+  StreamControlChannel(
+      Client* client,
+      mojo::PendingAssociatedReceiver<mojom::DemuxerConnector> receiver,
+      scoped_refptr<base::SequencedTaskRunner> task_runner);
+
+  ~StreamControlChannel() override;
+
+  // To be called when javascript has successfully configured the receiver.
+  void OnJavascriptConfigured();
+
+ private:
+  // AudioBufferRequester::Client implementation.
+  void OnNewBufferProvider(
+      base::WeakPtr<AudioDecoderBufferProvider> ptr) override;
+
+  // VideoBufferRequester::Client implementation.
+  void OnNewBufferProvider(
+      base::WeakPtr<VideoDecoderBufferProvider> ptr) override;
+
+  // mojom::DemuxerConnector implementation.
+  void EnableReceiver(EnableReceiverCallback callback) override;
+  void OnStreamsInitialized(
+      mojom::AudioStreamInitializationInfoPtr audio_stream_info,
+      mojom::VideoStreamInitializationInfoPtr video_stream_info) override;
+
+  // Synchronization between the browser-process sender as configured over mojo
+  // and the javascript used to display this cast stream. Each of these
+  // initializations may occur in either order (or either may not occur in the
+  // case where streaming is not initiated), so these variables are needed to
+  // correctly synchronize around these two conditions.
+  bool has_javascript_been_configured_ = false;
+  EnableReceiverCallback enable_receiver_callback_;
+
+  Client* const client_;
+
+  scoped_refptr<base::SequencedTaskRunner> task_runner_;
+
+  std::unique_ptr<AudioBufferRequester> audio_buffer_requester_;
+  std::unique_ptr<VideoBufferRequester> video_buffer_requester_;
+  mojo::AssociatedReceiver<mojom::DemuxerConnector> receiver_;
+
+  SEQUENCE_CHECKER(sequence_checker_);
+};
+
+}  // namespace cast_streaming::webcodecs
+
+#endif  // COMPONENTS_CAST_STREAMING_RENDERER_WEB_CODECS_STREAM_CONTROL_CHANNEL_H_
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json
index 93e3e48..cb23c70 100644
--- a/components/certificate_transparency/data/log_list.json
+++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@
 {
-  "version": "11.1",
-  "log_list_timestamp": "2022-08-24T12:56:41Z",
+  "version": "11.2",
+  "log_list_timestamp": "2022-08-25T12:54:00Z",
   "operators": [
     {
       "name": "Google",
diff --git a/components/consent_auditor/consent_auditor_impl_unittest.cc b/components/consent_auditor/consent_auditor_impl_unittest.cc
index 6743bcb..1b7af7b 100644
--- a/components/consent_auditor/consent_auditor_impl_unittest.cc
+++ b/components/consent_auditor/consent_auditor_impl_unittest.cc
@@ -14,8 +14,8 @@
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/test/simple_test_clock.h"
-#include "base/time/default_clock.h"
 #include "base/time/time.h"
+#include "base/values.h"
 #include "components/consent_auditor/pref_names.h"
 #include "components/prefs/testing_pref_service.h"
 #include "components/sync/protocol/user_consent_specifics.pb.h"
@@ -54,7 +54,7 @@
 // A helper function to load the |description|, |confirmation|, |version|,
 // and |locale|, in that order, from a record for the |feature| in
 // the |consents| dictionary.
-void LoadEntriesFromLocalConsentRecord(const base::Value* consents,
+void LoadEntriesFromLocalConsentRecord(const base::Value::Dict& consents,
                                        const std::string& feature,
                                        std::string* description,
                                        std::string* confirmation,
@@ -62,27 +62,19 @@
                                        std::string* locale) {
   SCOPED_TRACE(::testing::Message() << "|feature| = " << feature);
 
-  const base::Value* record =
-      consents->FindKeyOfType(feature, base::Value::Type::DICTIONARY);
+  const base::Value::Dict* record = consents.FindDict(feature);
   ASSERT_TRUE(record);
   SCOPED_TRACE(::testing::Message() << "|record| = " << record);
 
-  const base::Value* description_entry =
-      record->FindKey(kLocalConsentDescriptionKey);
-  const base::Value* confirmation_entry =
-      record->FindKey(kLocalConsentConfirmationKey);
-  const base::Value* version_entry = record->FindKey(kLocalConsentVersionKey);
-  const base::Value* locale_entry = record->FindKey(kLocalConsentLocaleKey);
+  *description = *record->FindString(kLocalConsentDescriptionKey);
+  *confirmation = *record->FindString(kLocalConsentConfirmationKey);
+  *version = *record->FindString(kLocalConsentVersionKey);
+  *locale = *record->FindString(kLocalConsentLocaleKey);
 
-  ASSERT_TRUE(description_entry);
-  ASSERT_TRUE(confirmation_entry);
-  ASSERT_TRUE(version_entry);
-  ASSERT_TRUE(locale_entry);
-
-  *description = description_entry->GetString();
-  *confirmation = confirmation_entry->GetString();
-  *version = version_entry->GetString();
-  *locale = locale_entry->GetString();
+  ASSERT_TRUE(description);
+  ASSERT_TRUE(confirmation);
+  ASSERT_TRUE(version);
+  ASSERT_TRUE(locale);
 }
 
 class FakeConsentSyncBridge : public ConsentSyncBridge {
@@ -168,9 +160,8 @@
   consent_auditor()->RecordLocalConsent("feature1", kFeature1Description,
                                         kFeature1Confirmation);
   ASSERT_TRUE(pref_service()->HasPrefPath(prefs::kLocalConsentsDictionary));
-  const base::Value* consents =
-      pref_service()->GetDictionary(prefs::kLocalConsentsDictionary);
-  ASSERT_TRUE(consents);
+  const base::Value::Dict& consents =
+      pref_service()->GetValueDict(prefs::kLocalConsentsDictionary);
 
   std::string description, confirmation, version, locale;
   LoadEntriesFromLocalConsentRecord(consents, "feature1", &description,
@@ -193,9 +184,8 @@
   EXPECT_EQ(kCurrentAppLocale, locale);
 
   // They are two separate records; the latter did not overwrite the former.
-  EXPECT_EQ(2u, consents->DictSize());
-  EXPECT_TRUE(
-      consents->FindKeyOfType("feature1", base::Value::Type::DICTIONARY));
+  EXPECT_EQ(2u, consents.size());
+  EXPECT_TRUE(consents.FindDict("feature1"));
 
   // Overwrite an existing consent, this time use a different product version
   // and a different locale.
@@ -219,7 +209,7 @@
   EXPECT_EQ(kFeature2NewAppLocale, locale);
 
   // We still have two records.
-  EXPECT_EQ(2u, consents->DictSize());
+  EXPECT_EQ(2u, consents.size());
 }
 
 TEST_F(ConsentAuditorImplTest, RecordGaiaConsentAsUserConsent) {
diff --git a/components/cronet/android/api.txt b/components/cronet/android/api.txt
index 76479bb..65fe260 100644
--- a/components/cronet/android/api.txt
+++ b/components/cronet/android/api.txt
@@ -301,20 +301,6 @@
   public abstract void rewind(org.chromium.net.UploadDataSink) throws java.io.IOException;
   public void close() throws java.io.IOException;
 }
-final class org.chromium.net.UploadDataProviders$ByteBufferUploadProvider extends org.chromium.net.UploadDataProvider {
-  public long getLength();
-  public void read(org.chromium.net.UploadDataSink, java.nio.ByteBuffer);
-  public void rewind(org.chromium.net.UploadDataSink);
-}
-interface org.chromium.net.UploadDataProviders$FileChannelProvider {
-  public abstract java.nio.channels.FileChannel getChannel() throws java.io.IOException;
-}
-final class org.chromium.net.UploadDataProviders$FileUploadProvider extends org.chromium.net.UploadDataProvider {
-  public long getLength() throws java.io.IOException;
-  public void read(org.chromium.net.UploadDataSink, java.nio.ByteBuffer) throws java.io.IOException;
-  public void rewind(org.chromium.net.UploadDataSink) throws java.io.IOException;
-  public void close() throws java.io.IOException;
-}
 public final class org.chromium.net.UploadDataProviders {
   public static org.chromium.net.UploadDataProvider create(java.io.File);
   public static org.chromium.net.UploadDataProvider create(android.os.ParcelFileDescriptor);
@@ -402,4 +388,4 @@
   public abstract java.lang.String getProxyServer();
   public abstract long getReceivedByteCount();
 }
-Stamp: bfdd219e38031474ec7a93b265352d94
+Stamp: d1a9021c3d37c25d7c22d453097e465e
diff --git a/components/cronet/tools/update_api.py b/components/cronet/tools/update_api.py
index 7707927..a107adf 100755
--- a/components/cronet/tools/update_api.py
+++ b/components/cronet/tools/update_api.py
@@ -39,6 +39,10 @@
 # for example 'Foo$1'.
 UNNAMED_CLASS_RE = re.compile(r'.*\$[0-9]')
 
+# javap still prints internal (package private, nested...) classes even though
+# -protected is passed so they need to be filtered out.
+INTERNAL_CLASS_RE = re.compile(r'^(?!public ((final|abstract) )?class).*')
+
 JAR_PATH = os.path.join(build_utils.JAVA_HOME, 'bin', 'jar')
 JAVAP_PATH = os.path.join(build_utils.JAVA_HOME, 'bin', 'javap')
 
@@ -89,8 +93,7 @@
     if CLASS_RE.match(line):
       skip_to_next_class = (
           # Skip internal classes, they aren't exposed.
-          UNNAMED_CLASS_RE.match(line)
-      )
+          UNNAMED_CLASS_RE.match(line)) or (INTERNAL_CLASS_RE.match(line))
     if skip_to_next_class:
       skip_to_next_class = line != '}'
       continue
diff --git a/components/desks_storage/core/desk_sync_bridge.cc b/components/desks_storage/core/desk_sync_bridge.cc
index e3a2d95..51dbbd4 100644
--- a/components/desks_storage/core/desk_sync_bridge.cc
+++ b/components/desks_storage/core/desk_sync_bridge.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/check_op.h"
+#include "base/containers/contains.h"
 #include "base/guid.h"
 #include "base/json/json_writer.h"
 #include "base/memory/ptr_util.h"
@@ -98,7 +99,7 @@
 
 // Parses the content of `record_list` into `*desk_templates`.
 absl::optional<syncer::ModelError> ParseDeskTemplatesOnBackendSequence(
-    std::map<base::GUID, std::unique_ptr<DeskTemplate>>* desk_templates,
+    base::flat_map<base::GUID, std::unique_ptr<DeskTemplate>>* desk_templates,
     std::unique_ptr<ModelTypeStore::RecordList> record_list) {
   DCHECK(desk_templates);
   DCHECK(desk_templates->empty());
@@ -1421,8 +1422,9 @@
 bool DeskSyncBridge::HasUserTemplateWithName(const std::u16string& name) {
   return std::find_if(
              desk_template_entries_.begin(), desk_template_entries_.end(),
-             [&name](std::pair<const base::GUID,
-                               std::unique_ptr<ash::DeskTemplate>>& entry) {
+             [&name](
+                 const std::pair<base::GUID,
+                                 std::unique_ptr<ash::DeskTemplate>>& entry) {
                return entry.second->template_name() == name;
              }) != desk_template_entries_.end();
 }
@@ -1431,13 +1433,7 @@
   const base::GUID uuid = base::GUID::ParseCaseInsensitive(uuid_str);
   if (!uuid.is_valid())
     return false;
-  return std::find_if(
-             desk_template_entries_.begin(), desk_template_entries_.end(),
-             [&uuid](
-                 const std::pair<const base::GUID,
-                                 std::unique_ptr<ash::DeskTemplate>>& entry) {
-               return entry.first == uuid;
-             }) != desk_template_entries_.end();
+  return base::Contains(desk_template_entries_, uuid);
 }
 
 }  // namespace desks_storage
diff --git a/components/desks_storage/core/desk_sync_bridge.h b/components/desks_storage/core/desk_sync_bridge.h
index cd6520da..09f6cb4b 100644
--- a/components/desks_storage/core/desk_sync_bridge.h
+++ b/components/desks_storage/core/desk_sync_bridge.h
@@ -9,6 +9,7 @@
 #include <string>
 #include <vector>
 
+#include "base/containers/flat_map.h"
 #include "base/guid.h"
 #include "base/memory/weak_ptr.h"
 #include "base/scoped_observation.h"
@@ -107,7 +108,8 @@
   DeskModel::DeleteEntryStatus DeleteAllEntries();
 
  private:
-  using DeskEntries = std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>;
+  using DeskEntries =
+      base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>;
 
   // Notify all observers that the model is loaded;
   void NotifyDeskModelLoaded();
diff --git a/components/desks_storage/core/desk_template_util.cc b/components/desks_storage/core/desk_template_util.cc
index f64dbf7..020c6e4 100644
--- a/components/desks_storage/core/desk_template_util.cc
+++ b/components/desks_storage/core/desk_template_util.cc
@@ -11,10 +11,11 @@
 ash::DeskTemplate* FindOtherEntryWithName(
     const std::u16string& name,
     const base::GUID& uuid,
-    const std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>& entries) {
+    const base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>&
+        entries) {
   auto iter = std::find_if(
       entries.begin(), entries.end(),
-      [name, uuid](const std::pair<const base::GUID,
+      [name, uuid](const std::pair<base::GUID,
                                    std::unique_ptr<ash::DeskTemplate>>& entry) {
         // Name duplication is allowed if one of the templates is an admin
         // template.
diff --git a/components/desks_storage/core/desk_template_util.h b/components/desks_storage/core/desk_template_util.h
index f666500f..5f6a054 100644
--- a/components/desks_storage/core/desk_template_util.h
+++ b/components/desks_storage/core/desk_template_util.h
@@ -5,9 +5,12 @@
 #ifndef COMPONENTS_DESKS_STORAGE_CORE_DESK_TEMPLATE_UTIL_H_
 #define COMPONENTS_DESKS_STORAGE_CORE_DESK_TEMPLATE_UTIL_H_
 
+#include <memory>
 #include <string>
 
 #include "ash/public/cpp/desk_template.h"
+#include "base/containers/flat_map.h"
+#include "base/guid.h"
 
 namespace desks_storage {
 
@@ -16,7 +19,8 @@
 ash::DeskTemplate* FindOtherEntryWithName(
     const std::u16string& name,
     const base::GUID& uuid,
-    const std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>& entries);
+    const base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>&
+        entries);
 
 }  // namespace desk_template_util
 
diff --git a/components/desks_storage/core/desk_template_util_unittests.cc b/components/desks_storage/core/desk_template_util_unittests.cc
index f16a15a..4b5fb0ae 100644
--- a/components/desks_storage/core/desk_template_util_unittests.cc
+++ b/components/desks_storage/core/desk_template_util_unittests.cc
@@ -5,7 +5,7 @@
 #include "components/desks_storage/core/desk_template_util.h"
 
 #include <string>
-#include "base/time/time.h"
+#include <utility>
 
 #include "base/time/time.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -15,14 +15,14 @@
 using DeskTemplateUtilTest = testing::Test;
 
 TEST_F(DeskTemplateUtilTest, FindDuplicateEntry) {
-  std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>> entries;
-  const base::GUID uuid = base::GUID::GenerateRandomV4();
+  base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>> entries;
+  base::GUID uuid = base::GUID::GenerateRandomV4();
   auto desk_template = std::make_unique<ash::DeskTemplate>(
       uuid, ash::DeskTemplateSource::kUser, "Template 1", base::Time::Now(),
       ash::DeskTemplateType::kTemplate);
   entries[uuid] = std::move(desk_template);
 
-  const base::GUID new_uuid = base::GUID::GenerateRandomV4();
+  base::GUID new_uuid = base::GUID::GenerateRandomV4();
   auto new_desk_template = std::make_unique<ash::DeskTemplate>(
       new_uuid, ash::DeskTemplateSource::kUser, "Template 1", base::Time::Now(),
       ash::DeskTemplateType::kTemplate);
@@ -32,14 +32,14 @@
 }
 
 TEST_F(DeskTemplateUtilTest, FindNoDuplicateEntryInFilledMap) {
-  std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>> entries;
-  const base::GUID uuid = base::GUID::GenerateRandomV4();
+  base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>> entries;
+  base::GUID uuid = base::GUID::GenerateRandomV4();
   auto desk_template = std::make_unique<ash::DeskTemplate>(
       uuid, ash::DeskTemplateSource::kUser, "Template 1", base::Time::Now(),
       ash::DeskTemplateType::kTemplate);
   entries[uuid] = std::move(desk_template);
 
-  const base::GUID new_uuid = base::GUID::GenerateRandomV4();
+  base::GUID new_uuid = base::GUID::GenerateRandomV4();
   auto new_desk_template = std::make_unique<ash::DeskTemplate>(
       new_uuid, ash::DeskTemplateSource::kUser, "Template 2", base::Time::Now(),
       ash::DeskTemplateType::kTemplate);
@@ -49,8 +49,8 @@
 }
 
 TEST_F(DeskTemplateUtilTest, FindNoDuplicateEntryInAOneElementMap) {
-  std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>> entries;
-  const base::GUID uuid = base::GUID::GenerateRandomV4();
+  base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>> entries;
+  base::GUID uuid = base::GUID::GenerateRandomV4();
   auto desk_template = std::make_unique<ash::DeskTemplate>(
       uuid, ash::DeskTemplateSource::kUser, "Template 1", base::Time::Now(),
       ash::DeskTemplateType::kTemplate);
diff --git a/components/desks_storage/core/local_desk_data_manager.cc b/components/desks_storage/core/local_desk_data_manager.cc
index f1fa18e4..ac2f0bd 100644
--- a/components/desks_storage/core/local_desk_data_manager.cc
+++ b/components/desks_storage/core/local_desk_data_manager.cc
@@ -4,7 +4,10 @@
 
 #include "components/desks_storage/core/local_desk_data_manager.h"
 
+#include <utility>
+
 #include "ash/public/cpp/desk_template.h"
+#include "base/containers/contains.h"
 #include "base/files/dir_reader_posix.h"
 #include "base/files/file_util.h"
 #include "base/guid.h"
@@ -147,7 +150,7 @@
     saved_desks_list_[desk_type];
   }
   auto entries = std::make_unique<
-      std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>();
+      base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>();
   auto cache_status = std::make_unique<LocalDeskDataManager::CacheStatus>();
   // Load the cache.
   task_runner_->PostTaskAndReply(
@@ -239,7 +242,7 @@
     return;
   }
 
-  base::GUID uuid = new_entry->uuid();
+  const base::GUID uuid = new_entry->uuid();
   if (!uuid.is_valid()) {
     *status = DeskModel::AddOrUpdateEntryStatus::kInvalidArgument;
     std::move(callback).Run(*status);
@@ -258,19 +261,16 @@
   std::unique_ptr<ash::DeskTemplate> deserialize_entry =
       desk_template_conversion::ParseDeskTemplateFromSource(
           template_base_value, new_entry->source());
-  bool is_update =
-      std::find_if(
-          saved_desks_list_[desk_type].begin(),
-          saved_desks_list_[desk_type].end(),
-          [&uuid](const std::pair<const base::GUID,
-                                  std::unique_ptr<ash::DeskTemplate>>& entry) {
-            return entry.first == uuid;
-          }) != saved_desks_list_[desk_type].end();
+  auto& saved_desks = saved_desks_list_[desk_type];
+  auto existing_it = saved_desks.find(uuid);
   std::unique_ptr<ash::DeskTemplate> old_entry = nullptr;
-  if (is_update)
-    old_entry = saved_desks_list_[desk_type][uuid]->Clone();
-
-  saved_desks_list_[desk_type][uuid] = std::move(deserialize_entry);
+  bool is_update = existing_it != saved_desks.end();
+  if (is_update) {
+    old_entry = existing_it->second->Clone();
+    existing_it->second = std::move(deserialize_entry);
+  } else {
+    saved_desks[uuid] = std::move(deserialize_entry);
+  }
 
   task_runner_->PostTaskAndReply(
       FROM_HERE,
@@ -304,9 +304,11 @@
   // `entry` is used to keep track of the deleted entry in case we need to
   // rollback the deletion if the file operation fails to delete it.
   auto entry = std::make_unique<
-      std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>();
-  (*entry)[uuid] = std::move(saved_desks_list_[desk_type][uuid]);
-  saved_desks_list_[desk_type].erase(uuid);
+      base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>();
+  auto& saved_desks = saved_desks_list_[desk_type];
+  auto existing_it = saved_desks.find(uuid);
+  (*entry)[uuid] = std::move(existing_it->second);
+  saved_desks_list_[desk_type].erase(existing_it);
   task_runner_->PostTaskAndReply(
       FROM_HERE,
       base::BindOnce(&LocalDeskDataManager::DeleteEntryTask,
@@ -329,7 +331,7 @@
   // be deleted by the file system. This is used to rollback the deletion of
   // those fail to delete files.
   auto entries = std::make_unique<
-      std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>();
+      base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>();
 
   // Deletes all desk templates and save and recall desks.
   for (auto& saved_desk : saved_desks_list_) {
@@ -420,7 +422,8 @@
 void LocalDeskDataManager::EnsureCacheIsLoaded(
     const base::FilePath& user_data_dir_path,
     CacheStatus* cache_status_ptr,
-    std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>* entries_ptr) {
+    base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>*
+        entries_ptr) {
   base::DirReaderPosix user_data_dir_reader(
       user_data_dir_path.AsUTF8Unsafe().c_str());
   base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
@@ -512,7 +515,8 @@
 
 void LocalDeskDataManager::DeleteAllEntriesTask(
     DeskModel::DeleteEntryStatus* out_status_ptr,
-    std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>* out_entries_ptr) {
+    base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>*
+        out_entries_ptr) {
   base::DirReaderPosix dir_reader(
       local_saved_desk_path_.AsUTF8Unsafe().c_str());
   if (!dir_reader.IsValid()) {
@@ -549,7 +553,8 @@
 
 void LocalDeskDataManager::OnDeleteEntry(
     std::unique_ptr<DeskModel::DeleteEntryStatus> status_ptr,
-    std::unique_ptr<std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>
+    std::unique_ptr<
+        base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>
         entries_ptr,
     DeskModel::DeleteEntryCallback callback) {
   auto cache_status = std::make_unique<LocalDeskDataManager::CacheStatus>();
@@ -564,15 +569,7 @@
 ash::DeskTemplateType LocalDeskDataManager::GetDeskTypeOfUuid(
     const base::GUID uuid) const {
   for (const auto& [desk_type, saved_desk] : saved_desks_list_) {
-    bool found_uuid =
-        std::find_if(
-            saved_desk.begin(), saved_desk.end(),
-            [&uuid](
-                const std::pair<const base::GUID,
-                                std::unique_ptr<ash::DeskTemplate>>& entry) {
-              return entry.first == uuid;
-            }) != saved_desk.end();
-    if (found_uuid)
+    if (base::Contains(saved_desk, uuid))
       return desk_type;
   }
   return ash::DeskTemplateType::kTemplate;
@@ -580,7 +577,8 @@
 
 void LocalDeskDataManager::MoveEntriesIntoCache(
     std::unique_ptr<CacheStatus> cache_status_ptr,
-    std::unique_ptr<std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>
+    std::unique_ptr<
+        base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>
         entries_ptr) {
   cache_status_ = *cache_status_ptr;
   for (auto& [uuid, template_entry] : *entries_ptr) {
diff --git a/components/desks_storage/core/local_desk_data_manager.h b/components/desks_storage/core/local_desk_data_manager.h
index 9e41afd..f2e6c04 100644
--- a/components/desks_storage/core/local_desk_data_manager.h
+++ b/components/desks_storage/core/local_desk_data_manager.h
@@ -5,10 +5,10 @@
 #ifndef COMPONENTS_DESKS_STORAGE_CORE_LOCAL_DESK_DATA_MANAGER_H_
 #define COMPONENTS_DESKS_STORAGE_CORE_LOCAL_DESK_DATA_MANAGER_H_
 
-#include <map>
 #include <memory>
 
 #include "ash/public/cpp/desk_template.h"
+#include "base/containers/flat_map.h"
 #include "base/files/file_path.h"
 #include "base/guid.h"
 #include "base/memory/ref_counted.h"
@@ -90,7 +90,8 @@
   void EnsureCacheIsLoaded(
       const base::FilePath& user_data_dir_path,
       CacheStatus* cache_status_ptr,
-      std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>* entries_ptr);
+      base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>*
+          entries_ptr);
 
   // Add or update an entry by `new_entry`'s UUID.
   void AddOrUpdateEntryTask(const base::GUID uuid,
@@ -114,12 +115,14 @@
   // Delete all entries.
   void DeleteAllEntriesTask(
       DeskModel::DeleteEntryStatus* status_ptr,
-      std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>* entries_ptr);
+      base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>*
+          entries_ptr);
 
   // Wrapper method to call DeleteEntryCallback.
   void OnDeleteEntry(
       std::unique_ptr<DeskModel::DeleteEntryStatus> status_ptr,
-      std::unique_ptr<std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>
+      std::unique_ptr<
+          base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>
           entries_ptr,
       DeskModel::DeleteEntryCallback callback);
 
@@ -129,7 +132,8 @@
   // Wrapper method to load the read files into the `saved_desks_list_` cache.
   void MoveEntriesIntoCache(
       std::unique_ptr<CacheStatus> cache_status_ptr,
-      std::unique_ptr<std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>
+      std::unique_ptr<
+          base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>>
           entries_ptr);
 
   // Task runner used to schedule tasks on the IO thread.
@@ -149,10 +153,11 @@
   // Cache status of the templates cache for both desk types.
   CacheStatus cache_status_;
 
-  using SavedDesks = std::map<base::GUID, std::unique_ptr<ash::DeskTemplate>>;
+  using SavedDesks =
+      base::flat_map<base::GUID, std::unique_ptr<ash::DeskTemplate>>;
 
   // In memory cache of saved desks based on their type.
-  std::map<ash::DeskTemplateType, SavedDesks> saved_desks_list_;
+  base::flat_map<ash::DeskTemplateType, SavedDesks> saved_desks_list_;
 
   // Weak pointer factory for posting tasks to task runner.
   base::WeakPtrFactory<LocalDeskDataManager> weak_ptr_factory_{this};
diff --git a/components/device_signals/core/system_signals/BUILD.gn b/components/device_signals/core/system_signals/BUILD.gn
index 59de635..f6aa027 100644
--- a/components/device_signals/core/system_signals/BUILD.gn
+++ b/components/device_signals/core/system_signals/BUILD.gn
@@ -4,12 +4,14 @@
 
 static_library("system_signals") {
   public = [
+    "executable_metadata_service.h",
     "file_system_service.h",
     "platform_delegate.h",
     "platform_utils.h",
   ]
 
   sources = [
+    "executable_metadata_service.cc",
     "file_system_service.cc",
     "hashing_utils.cc",
     "hashing_utils.h",
@@ -42,6 +44,8 @@
 source_set("test_support") {
   testonly = true
   sources = [
+    "mock_executable_metadata_service.cc",
+    "mock_executable_metadata_service.h",
     "mock_file_system_service.cc",
     "mock_file_system_service.h",
     "mock_platform_delegate.cc",
@@ -77,4 +81,13 @@
   if (is_win) {
     deps += [ "//components/device_signals/core/system_signals/win:unit_tests" ]
   }
+
+  if (is_mac) {
+    deps += [ "//components/device_signals/core/system_signals/mac:unit_tests" ]
+  }
+
+  if (is_linux) {
+    deps +=
+        [ "//components/device_signals/core/system_signals/linux:unit_tests" ]
+  }
 }
diff --git a/components/device_signals/core/system_signals/base_platform_delegate.cc b/components/device_signals/core/system_signals/base_platform_delegate.cc
index 5f2340e..dbe7cfb2 100644
--- a/components/device_signals/core/system_signals/base_platform_delegate.cc
+++ b/components/device_signals/core/system_signals/base_platform_delegate.cc
@@ -59,22 +59,4 @@
   return running_map;
 }
 
-FilePathMap<ExecutableMetadata> BasePlatformDelegate::GetAllExecutableMetadata(
-    const FilePathSet& file_paths) {
-  FilePathMap<bool> files_are_running_map = AreExecutablesRunning(file_paths);
-
-  FilePathMap<ExecutableMetadata> file_paths_to_metadata_map;
-  for (const auto& file_path : file_paths) {
-    ExecutableMetadata executable_metadata;
-
-    if (files_are_running_map.contains(file_path)) {
-      executable_metadata.is_running = files_are_running_map[file_path];
-    }
-
-    file_paths_to_metadata_map[file_path] = executable_metadata;
-  }
-
-  return file_paths_to_metadata_map;
-}
-
 }  // namespace device_signals
diff --git a/components/device_signals/core/system_signals/base_platform_delegate.h b/components/device_signals/core/system_signals/base_platform_delegate.h
index cbc08cc8..ecf3c7e7 100644
--- a/components/device_signals/core/system_signals/base_platform_delegate.h
+++ b/components/device_signals/core/system_signals/base_platform_delegate.h
@@ -18,16 +18,11 @@
   // PlatformDelegate:
   bool PathIsReadable(const base::FilePath& file_path) const override;
   bool DirectoryExists(const base::FilePath& file_path) const override;
-  FilePathMap<ExecutableMetadata> GetAllExecutableMetadata(
+  FilePathMap<bool> AreExecutablesRunning(
       const FilePathSet& file_paths) override;
 
  protected:
   BasePlatformDelegate();
-
-  // Returns a map of file paths to whether a currently running process was
-  // spawned from that file. The set of file paths in the map are specified by
-  // `file_paths`.
-  FilePathMap<bool> AreExecutablesRunning(const FilePathSet& file_paths);
 };
 
 }  // namespace device_signals
diff --git a/components/device_signals/core/system_signals/executable_metadata_service.cc b/components/device_signals/core/system_signals/executable_metadata_service.cc
new file mode 100644
index 0000000..1ff7ba4
--- /dev/null
+++ b/components/device_signals/core/system_signals/executable_metadata_service.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 "components/device_signals/core/system_signals/executable_metadata_service.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/check.h"
+#include "build/build_config.h"
+
+namespace device_signals {
+
+ExecutableMetadataService::ExecutableMetadataService(
+    std::unique_ptr<PlatformDelegate> platform_delegate)
+    : platform_delegate_(std::move(platform_delegate)) {
+  DCHECK(platform_delegate_);
+}
+
+ExecutableMetadataService::~ExecutableMetadataService() = default;
+
+}  // namespace device_signals
diff --git a/components/device_signals/core/system_signals/executable_metadata_service.h b/components/device_signals/core/system_signals/executable_metadata_service.h
new file mode 100644
index 0000000..a883b535
--- /dev/null
+++ b/components/device_signals/core/system_signals/executable_metadata_service.h
@@ -0,0 +1,33 @@
+// 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_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_EXECUTABLE_METADATA_SERVICE_H_
+#define COMPONENTS_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_EXECUTABLE_METADATA_SERVICE_H_
+
+#include <memory>
+
+#include "components/device_signals/core/system_signals/platform_delegate.h"
+
+namespace device_signals {
+
+struct ExecutableMetadata;
+
+class ExecutableMetadataService {
+ public:
+  virtual ~ExecutableMetadataService();
+
+  // Collects and returns executable metadata for all the files in `file_paths`.
+  virtual FilePathMap<ExecutableMetadata> GetAllExecutableMetadata(
+      const FilePathSet& file_paths) = 0;
+
+ protected:
+  explicit ExecutableMetadataService(
+      std::unique_ptr<PlatformDelegate> platform_delegate);
+
+  std::unique_ptr<PlatformDelegate> platform_delegate_;
+};
+
+}  // namespace device_signals
+
+#endif  // COMPONENTS_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_EXECUTABLE_METADATA_SERVICE_H_
diff --git a/components/device_signals/core/system_signals/file_system_service.cc b/components/device_signals/core/system_signals/file_system_service.cc
index d638a868..2d4fa57 100644
--- a/components/device_signals/core/system_signals/file_system_service.cc
+++ b/components/device_signals/core/system_signals/file_system_service.cc
@@ -7,9 +7,11 @@
 #include <memory>
 #include <utility>
 
+#include "base/check.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "components/device_signals/core/common/common_types.h"
+#include "components/device_signals/core/system_signals/executable_metadata_service.h"
 #include "components/device_signals/core/system_signals/hashing_utils.h"
 #include "components/device_signals/core/system_signals/platform_delegate.h"
 
@@ -30,7 +32,9 @@
 
 class FileSystemServiceImpl : public FileSystemService {
  public:
-  explicit FileSystemServiceImpl(std::unique_ptr<PlatformDelegate> delegate);
+  explicit FileSystemServiceImpl(
+      std::unique_ptr<PlatformDelegate> delegate,
+      std::unique_ptr<ExecutableMetadataService> executable_metadata_service);
   ~FileSystemServiceImpl() override;
 
   // FileSystemService:
@@ -42,17 +46,25 @@
 
  private:
   std::unique_ptr<PlatformDelegate> delegate_;
+  std::unique_ptr<ExecutableMetadataService> executable_metadata_service_;
 };
 
 // static
 std::unique_ptr<FileSystemService> FileSystemService::Create(
-    std::unique_ptr<PlatformDelegate> delegate) {
-  return std::make_unique<FileSystemServiceImpl>(std::move(delegate));
+    std::unique_ptr<PlatformDelegate> delegate,
+    std::unique_ptr<ExecutableMetadataService> executable_metadata_service) {
+  return std::make_unique<FileSystemServiceImpl>(
+      std::move(delegate), std::move(executable_metadata_service));
 }
 
 FileSystemServiceImpl::FileSystemServiceImpl(
-    std::unique_ptr<PlatformDelegate> delegate)
-    : delegate_(std::move(delegate)) {}
+    std::unique_ptr<PlatformDelegate> delegate,
+    std::unique_ptr<ExecutableMetadataService> executable_metadata_service)
+    : delegate_(std::move(delegate)),
+      executable_metadata_service_(std::move(executable_metadata_service)) {
+  DCHECK(delegate_);
+  DCHECK(executable_metadata_service_);
+}
 
 FileSystemServiceImpl::~FileSystemServiceImpl() = default;
 
@@ -100,7 +112,7 @@
   }
 
   auto collected_executable_metadata =
-      delegate_->GetAllExecutableMetadata(executable_paths);
+      executable_metadata_service_->GetAllExecutableMetadata(executable_paths);
 
   for (const auto& path_metadata_pair : collected_executable_metadata) {
     if (!resolved_paths_to_item_map.contains(path_metadata_pair.first)) {
diff --git a/components/device_signals/core/system_signals/file_system_service.h b/components/device_signals/core/system_signals/file_system_service.h
index f6a7903..bbad09de 100644
--- a/components/device_signals/core/system_signals/file_system_service.h
+++ b/components/device_signals/core/system_signals/file_system_service.h
@@ -14,6 +14,7 @@
 
 namespace device_signals {
 
+class ExecutableMetadataService;
 enum class PresenceValue;
 class PlatformDelegate;
 struct FileSystemItem;
@@ -25,7 +26,8 @@
 
   // Creates a FileSystemService instance using the given `delegate`.
   static std::unique_ptr<FileSystemService> Create(
-      std::unique_ptr<PlatformDelegate> delegate);
+      std::unique_ptr<PlatformDelegate> delegate,
+      std::unique_ptr<ExecutableMetadataService> executable_metadata_service);
 
   // Collects and returns the file system items' signals as requested by
   // `options`.
diff --git a/components/device_signals/core/system_signals/file_system_service_unittest.cc b/components/device_signals/core/system_signals/file_system_service_unittest.cc
index 57fd867..540a5fc 100644
--- a/components/device_signals/core/system_signals/file_system_service_unittest.cc
+++ b/components/device_signals/core/system_signals/file_system_service_unittest.cc
@@ -13,6 +13,8 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "components/device_signals/core/common/common_types.h"
+#include "components/device_signals/core/system_signals/executable_metadata_service.h"
+#include "components/device_signals/core/system_signals/mock_executable_metadata_service.h"
 #include "components/device_signals/core/system_signals/mock_platform_delegate.h"
 #include "components/device_signals/core/system_signals/platform_delegate.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -61,10 +63,16 @@
         std::make_unique<testing::StrictMock<MockPlatformDelegate>>();
     mock_platform_delegate_ = mock_platform_delegate.get();
 
-    file_system_service_ =
-        FileSystemService::Create(std::move(mock_platform_delegate));
+    auto mock_executable_metadata_service =
+        std::make_unique<testing::StrictMock<MockExecutableMetadataService>>();
+    mock_executable_metadata_service_ = mock_executable_metadata_service.get();
 
-    ON_CALL(*mock_platform_delegate_, GetAllExecutableMetadata(FilePathSet()))
+    file_system_service_ =
+        FileSystemService::Create(std::move(mock_platform_delegate),
+                                  std::move(mock_executable_metadata_service));
+
+    ON_CALL(*mock_executable_metadata_service_,
+            GetAllExecutableMetadata(FilePathSet()))
         .WillByDefault(Return(FilePathMap<ExecutableMetadata>()));
   }
 
@@ -85,6 +93,8 @@
   }
 
   testing::StrictMock<MockPlatformDelegate>* mock_platform_delegate_;
+  testing::StrictMock<MockExecutableMetadataService>*
+      mock_executable_metadata_service_;
   std::unique_ptr<FileSystemService> file_system_service_;
 };
 
@@ -120,7 +130,7 @@
       PresenceValue::kNotFound, PresenceValue::kAccessDenied,
       PresenceValue::kFound};
 
-  EXPECT_CALL(*mock_platform_delegate_,
+  EXPECT_CALL(*mock_executable_metadata_service_,
               GetAllExecutableMetadata(FilePathSet()));
 
   auto file_system_items = file_system_service_->GetSignals(options);
@@ -168,7 +178,7 @@
   options.push_back(
       CreateOptions(scoped_dir.GetPath(), /*compute_sha256=*/true, false));
 
-  EXPECT_CALL(*mock_platform_delegate_,
+  EXPECT_CALL(*mock_executable_metadata_service_,
               GetAllExecutableMetadata(FilePathSet()));
 
   auto file_system_items = file_system_service_->GetSignals(options);
@@ -220,7 +230,7 @@
   FilePathMap<ExecutableMetadata> result_metadata_map;
   result_metadata_map.insert({first_found_path_resolved, executable_metadata});
 
-  EXPECT_CALL(*mock_platform_delegate_,
+  EXPECT_CALL(*mock_executable_metadata_service_,
               GetAllExecutableMetadata(expected_path_set))
       .WillOnce(Return(result_metadata_map));
 
diff --git a/components/device_signals/core/system_signals/linux/BUILD.gn b/components/device_signals/core/system_signals/linux/BUILD.gn
index a8b4da3..c345bd4 100644
--- a/components/device_signals/core/system_signals/linux/BUILD.gn
+++ b/components/device_signals/core/system_signals/linux/BUILD.gn
@@ -3,9 +3,15 @@
 # found in the LICENSE file.
 
 static_library("linux") {
-  public = [ "linux_platform_delegate.h" ]
+  public = [
+    "linux_executable_metadata_service.h",
+    "linux_platform_delegate.h",
+  ]
 
-  sources = [ "linux_platform_delegate.cc" ]
+  sources = [
+    "linux_executable_metadata_service.cc",
+    "linux_platform_delegate.cc",
+  ]
 
   public_deps = [
     "//components/device_signals/core/common",
@@ -15,3 +21,18 @@
 
   deps = [ "//base" ]
 }
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [ "linux_executable_metadata_service_unittest.cc" ]
+
+  deps = [
+    ":linux",
+    "//base",
+    "//components/device_signals/core/common",
+    "//components/device_signals/core/system_signals",
+    "//components/device_signals/core/system_signals:test_support",
+    "//testing/gmock",
+    "//testing/gtest",
+  ]
+}
diff --git a/components/device_signals/core/system_signals/linux/linux_executable_metadata_service.cc b/components/device_signals/core/system_signals/linux/linux_executable_metadata_service.cc
new file mode 100644
index 0000000..ebd39a5
--- /dev/null
+++ b/components/device_signals/core/system_signals/linux/linux_executable_metadata_service.cc
@@ -0,0 +1,40 @@
+// 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/device_signals/core/system_signals/linux/linux_executable_metadata_service.h"
+
+#include <utility>
+
+#include "base/files/file_path.h"
+#include "components/device_signals/core/common/common_types.h"
+
+namespace device_signals {
+
+LinuxExecutableMetadataService::LinuxExecutableMetadataService(
+    std::unique_ptr<PlatformDelegate> platform_delegate)
+    : ExecutableMetadataService(std::move(platform_delegate)) {}
+
+LinuxExecutableMetadataService::~LinuxExecutableMetadataService() = default;
+
+FilePathMap<ExecutableMetadata>
+LinuxExecutableMetadataService::GetAllExecutableMetadata(
+    const FilePathSet& file_paths) {
+  FilePathMap<bool> files_are_running_map =
+      platform_delegate_->AreExecutablesRunning(file_paths);
+
+  FilePathMap<ExecutableMetadata> file_paths_to_metadata_map;
+  for (const auto& file_path : file_paths) {
+    ExecutableMetadata executable_metadata;
+
+    if (files_are_running_map.contains(file_path)) {
+      executable_metadata.is_running = files_are_running_map[file_path];
+    }
+
+    file_paths_to_metadata_map[file_path] = executable_metadata;
+  }
+
+  return file_paths_to_metadata_map;
+}
+
+}  // namespace device_signals
diff --git a/components/device_signals/core/system_signals/linux/linux_executable_metadata_service.h b/components/device_signals/core/system_signals/linux/linux_executable_metadata_service.h
new file mode 100644
index 0000000..390f88c
--- /dev/null
+++ b/components/device_signals/core/system_signals/linux/linux_executable_metadata_service.h
@@ -0,0 +1,27 @@
+// 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_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_LINUX_LINUX_EXECUTABLE_METADATA_SERVICE_H_
+#define COMPONENTS_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_LINUX_LINUX_EXECUTABLE_METADATA_SERVICE_H_
+
+#include <memory>
+
+#include "components/device_signals/core/system_signals/executable_metadata_service.h"
+
+namespace device_signals {
+
+class LinuxExecutableMetadataService : public ExecutableMetadataService {
+ public:
+  explicit LinuxExecutableMetadataService(
+      std::unique_ptr<PlatformDelegate> platform_delegate);
+  ~LinuxExecutableMetadataService() override;
+
+  // Collects and return executable metadata for all the files in `file_paths`.
+  FilePathMap<ExecutableMetadata> GetAllExecutableMetadata(
+      const FilePathSet& file_paths) override;
+};
+
+}  // namespace device_signals
+
+#endif  // COMPONENTS_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_LINUX_LINUX_EXECUTABLE_METADATA_SERVICE_H_
diff --git a/components/device_signals/core/system_signals/linux/linux_executable_metadata_service_unittest.cc b/components/device_signals/core/system_signals/linux/linux_executable_metadata_service_unittest.cc
new file mode 100644
index 0000000..026878b
--- /dev/null
+++ b/components/device_signals/core/system_signals/linux/linux_executable_metadata_service_unittest.cc
@@ -0,0 +1,84 @@
+// 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/device_signals/core/system_signals/linux/linux_executable_metadata_service.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/files/file_path.h"
+#include "components/device_signals/core/common/common_types.h"
+#include "components/device_signals/core/system_signals/mock_platform_delegate.h"
+#include "components/device_signals/core/system_signals/platform_delegate.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using testing::Return;
+
+namespace device_signals {
+
+namespace {
+
+ExecutableMetadata CreateExecutableMetadata(bool is_running) {
+  ExecutableMetadata metadata;
+  metadata.is_running = is_running;
+  return metadata;
+}
+
+}  // namespace
+
+class LinuxExecutableMetadataServiceTest : public testing::Test {
+ protected:
+  LinuxExecutableMetadataServiceTest() {
+    auto mock_platform_delegate = std::make_unique<MockPlatformDelegate>();
+    mock_platform_delegate_ = mock_platform_delegate.get();
+
+    executable_metadata_service_ =
+        std::make_unique<LinuxExecutableMetadataService>(
+            std::move(mock_platform_delegate));
+  }
+
+  MockPlatformDelegate* mock_platform_delegate_;
+  std::unique_ptr<LinuxExecutableMetadataService> executable_metadata_service_;
+};
+
+TEST_F(LinuxExecutableMetadataServiceTest, GetAllExecutableMetadata_Empty) {
+  FilePathSet empty_set;
+
+  EXPECT_CALL(*mock_platform_delegate_, AreExecutablesRunning(empty_set))
+      .WillOnce(Return(FilePathMap<bool>()));
+
+  FilePathMap<ExecutableMetadata> empty_map;
+  EXPECT_EQ(executable_metadata_service_->GetAllExecutableMetadata(empty_set),
+            empty_map);
+}
+
+TEST_F(LinuxExecutableMetadataServiceTest, GetAllExecutableMetadata_Success) {
+  base::FilePath running_path =
+      base::FilePath::FromUTF8Unsafe("/some/running/file/path");
+  base::FilePath not_running_path =
+      base::FilePath::FromUTF8Unsafe("/some/file/path");
+
+  FilePathSet executable_files;
+  executable_files.insert(running_path);
+  executable_files.insert(not_running_path);
+
+  FilePathMap<bool> is_running_map;
+  is_running_map.insert({running_path, true});
+  is_running_map.insert({not_running_path, false});
+
+  EXPECT_CALL(*mock_platform_delegate_, AreExecutablesRunning(executable_files))
+      .WillOnce(Return(is_running_map));
+
+  FilePathMap<ExecutableMetadata> expected_metadata_map;
+  expected_metadata_map.insert({running_path, CreateExecutableMetadata(true)});
+  expected_metadata_map.insert(
+      {not_running_path, CreateExecutableMetadata(false)});
+
+  EXPECT_EQ(
+      executable_metadata_service_->GetAllExecutableMetadata(executable_files),
+      expected_metadata_map);
+}
+
+}  // namespace device_signals
diff --git a/components/device_signals/core/system_signals/mac/BUILD.gn b/components/device_signals/core/system_signals/mac/BUILD.gn
index a9fe889f..74ebc54c9 100644
--- a/components/device_signals/core/system_signals/mac/BUILD.gn
+++ b/components/device_signals/core/system_signals/mac/BUILD.gn
@@ -3,9 +3,15 @@
 # found in the LICENSE file.
 
 static_library("mac") {
-  public = [ "mac_platform_delegate.h" ]
+  public = [
+    "mac_executable_metadata_service.h",
+    "mac_platform_delegate.h",
+  ]
 
-  sources = [ "mac_platform_delegate.mm" ]
+  sources = [
+    "mac_executable_metadata_service.mm",
+    "mac_platform_delegate.mm",
+  ]
 
   public_deps = [
     "//components/device_signals/core/common",
@@ -15,3 +21,18 @@
 
   deps = [ "//base" ]
 }
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [ "mac_executable_metadata_service_unittest.mm" ]
+
+  deps = [
+    ":mac",
+    "//base",
+    "//components/device_signals/core/common",
+    "//components/device_signals/core/system_signals",
+    "//components/device_signals/core/system_signals:test_support",
+    "//testing/gmock",
+    "//testing/gtest",
+  ]
+}
diff --git a/components/device_signals/core/system_signals/mac/mac_executable_metadata_service.h b/components/device_signals/core/system_signals/mac/mac_executable_metadata_service.h
new file mode 100644
index 0000000..3622eb6
--- /dev/null
+++ b/components/device_signals/core/system_signals/mac/mac_executable_metadata_service.h
@@ -0,0 +1,27 @@
+// 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_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_MAC_MAC_EXECUTABLE_METADATA_SERVICE_H_
+#define COMPONENTS_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_MAC_MAC_EXECUTABLE_METADATA_SERVICE_H_
+
+#include <memory>
+
+#include "components/device_signals/core/system_signals/executable_metadata_service.h"
+
+namespace device_signals {
+
+class MacExecutableMetadataService : public ExecutableMetadataService {
+ public:
+  explicit MacExecutableMetadataService(
+      std::unique_ptr<PlatformDelegate> platform_delegate);
+  ~MacExecutableMetadataService() override;
+
+  // Collects and return executable metadata for all the files in `file_paths`.
+  FilePathMap<ExecutableMetadata> GetAllExecutableMetadata(
+      const FilePathSet& file_paths) override;
+};
+
+}  // namespace device_signals
+
+#endif  // COMPONENTS_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_MAC_MAC_EXECUTABLE_METADATA_SERVICE_H_
diff --git a/components/device_signals/core/system_signals/mac/mac_executable_metadata_service.mm b/components/device_signals/core/system_signals/mac/mac_executable_metadata_service.mm
new file mode 100644
index 0000000..61c6da1
--- /dev/null
+++ b/components/device_signals/core/system_signals/mac/mac_executable_metadata_service.mm
@@ -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.
+
+#include "components/device_signals/core/system_signals/mac/mac_executable_metadata_service.h"
+
+#include <utility>
+
+#include "base/files/file_path.h"
+#include "components/device_signals/core/common/common_types.h"
+
+namespace device_signals {
+
+MacExecutableMetadataService::MacExecutableMetadataService(
+    std::unique_ptr<PlatformDelegate> platform_delegate)
+    : ExecutableMetadataService(std::move(platform_delegate)) {}
+
+MacExecutableMetadataService::~MacExecutableMetadataService() = default;
+
+FilePathMap<ExecutableMetadata>
+MacExecutableMetadataService::GetAllExecutableMetadata(
+    const FilePathSet& file_paths) {
+  // TODO(b:231326198): Add support for Mac app bundles.
+  FilePathMap<bool> files_are_running_map =
+      platform_delegate_->AreExecutablesRunning(file_paths);
+
+  FilePathMap<ExecutableMetadata> file_paths_to_metadata_map;
+  for (const auto& file_path : file_paths) {
+    ExecutableMetadata executable_metadata;
+
+    if (files_are_running_map.contains(file_path)) {
+      executable_metadata.is_running = files_are_running_map[file_path];
+    }
+
+    file_paths_to_metadata_map[file_path] = executable_metadata;
+  }
+
+  return file_paths_to_metadata_map;
+}
+
+}  // namespace device_signals
diff --git a/components/device_signals/core/system_signals/mac/mac_executable_metadata_service_unittest.mm b/components/device_signals/core/system_signals/mac/mac_executable_metadata_service_unittest.mm
new file mode 100644
index 0000000..3da28ec
--- /dev/null
+++ b/components/device_signals/core/system_signals/mac/mac_executable_metadata_service_unittest.mm
@@ -0,0 +1,84 @@
+// 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/device_signals/core/system_signals/mac/mac_executable_metadata_service.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/files/file_path.h"
+#include "components/device_signals/core/common/common_types.h"
+#include "components/device_signals/core/system_signals/mock_platform_delegate.h"
+#include "components/device_signals/core/system_signals/platform_delegate.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using testing::Return;
+
+namespace device_signals {
+
+namespace {
+
+ExecutableMetadata CreateExecutableMetadata(bool is_running) {
+  ExecutableMetadata metadata;
+  metadata.is_running = is_running;
+  return metadata;
+}
+
+}  // namespace
+
+class MacExecutableMetadataServiceTest : public testing::Test {
+ protected:
+  MacExecutableMetadataServiceTest() {
+    auto mock_platform_delegate = std::make_unique<MockPlatformDelegate>();
+    mock_platform_delegate_ = mock_platform_delegate.get();
+
+    executable_metadata_service_ =
+        std::make_unique<MacExecutableMetadataService>(
+            std::move(mock_platform_delegate));
+  }
+
+  MockPlatformDelegate* mock_platform_delegate_;
+  std::unique_ptr<MacExecutableMetadataService> executable_metadata_service_;
+};
+
+TEST_F(MacExecutableMetadataServiceTest, GetAllExecutableMetadata_Empty) {
+  FilePathSet empty_set;
+
+  EXPECT_CALL(*mock_platform_delegate_, AreExecutablesRunning(empty_set))
+      .WillOnce(Return(FilePathMap<bool>()));
+
+  FilePathMap<ExecutableMetadata> empty_map;
+  EXPECT_EQ(executable_metadata_service_->GetAllExecutableMetadata(empty_set),
+            empty_map);
+}
+
+TEST_F(MacExecutableMetadataServiceTest, GetAllExecutableMetadata_Success) {
+  base::FilePath running_path =
+      base::FilePath::FromUTF8Unsafe("/some/running/file/path");
+  base::FilePath not_running_path =
+      base::FilePath::FromUTF8Unsafe("/some/file/path");
+
+  FilePathSet executable_files;
+  executable_files.insert(running_path);
+  executable_files.insert(not_running_path);
+
+  FilePathMap<bool> is_running_map;
+  is_running_map.insert({running_path, true});
+  is_running_map.insert({not_running_path, false});
+
+  EXPECT_CALL(*mock_platform_delegate_, AreExecutablesRunning(executable_files))
+      .WillOnce(Return(is_running_map));
+
+  FilePathMap<ExecutableMetadata> expected_metadata_map;
+  expected_metadata_map.insert({running_path, CreateExecutableMetadata(true)});
+  expected_metadata_map.insert(
+      {not_running_path, CreateExecutableMetadata(false)});
+
+  EXPECT_EQ(
+      executable_metadata_service_->GetAllExecutableMetadata(executable_files),
+      expected_metadata_map);
+}
+
+}  // namespace device_signals
diff --git a/components/device_signals/core/system_signals/mock_executable_metadata_service.cc b/components/device_signals/core/system_signals/mock_executable_metadata_service.cc
new file mode 100644
index 0000000..2308064
--- /dev/null
+++ b/components/device_signals/core/system_signals/mock_executable_metadata_service.cc
@@ -0,0 +1,18 @@
+// 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/device_signals/core/system_signals/mock_executable_metadata_service.h"
+
+#include <memory>
+
+#include "components/device_signals/core/system_signals/mock_platform_delegate.h"
+
+namespace device_signals {
+
+MockExecutableMetadataService::MockExecutableMetadataService()
+    : ExecutableMetadataService(std::make_unique<MockPlatformDelegate>()) {}
+
+MockExecutableMetadataService::~MockExecutableMetadataService() = default;
+
+}  // namespace device_signals
diff --git a/components/device_signals/core/system_signals/mock_executable_metadata_service.h b/components/device_signals/core/system_signals/mock_executable_metadata_service.h
new file mode 100644
index 0000000..91f7d97f
--- /dev/null
+++ b/components/device_signals/core/system_signals/mock_executable_metadata_service.h
@@ -0,0 +1,28 @@
+// 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_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_MOCK_EXECUTABLE_METADATA_SERVICE_H_
+#define COMPONENTS_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_MOCK_EXECUTABLE_METADATA_SERVICE_H_
+
+#include "base/files/file_path.h"
+#include "components/device_signals/core/common/common_types.h"
+#include "components/device_signals/core/system_signals/executable_metadata_service.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+namespace device_signals {
+
+class MockExecutableMetadataService : public ExecutableMetadataService {
+ public:
+  MockExecutableMetadataService();
+  ~MockExecutableMetadataService() override;
+
+  MOCK_METHOD(FilePathMap<ExecutableMetadata>,
+              GetAllExecutableMetadata,
+              (const FilePathSet&),
+              (override));
+};
+
+}  // namespace device_signals
+
+#endif  // COMPONENTS_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_MOCK_EXECUTABLE_METADATA_SERVICE_H_
diff --git a/components/device_signals/core/system_signals/mock_platform_delegate.h b/components/device_signals/core/system_signals/mock_platform_delegate.h
index a08ed546..c8ce761 100644
--- a/components/device_signals/core/system_signals/mock_platform_delegate.h
+++ b/components/device_signals/core/system_signals/mock_platform_delegate.h
@@ -23,8 +23,8 @@
               ResolveFilePath,
               (const base::FilePath&, base::FilePath*),
               (override));
-  MOCK_METHOD(FilePathMap<ExecutableMetadata>,
-              GetAllExecutableMetadata,
+  MOCK_METHOD(FilePathMap<bool>,
+              AreExecutablesRunning,
               (const FilePathSet&),
               (override));
 };
diff --git a/components/device_signals/core/system_signals/platform_delegate.h b/components/device_signals/core/system_signals/platform_delegate.h
index 3cc0ed1..470886f4 100644
--- a/components/device_signals/core/system_signals/platform_delegate.h
+++ b/components/device_signals/core/system_signals/platform_delegate.h
@@ -14,8 +14,6 @@
 
 namespace device_signals {
 
-struct ExecutableMetadata;
-
 struct CustomFilePathComparator {
   bool operator()(const base::FilePath& a, const base::FilePath& b) const;
 };
@@ -42,8 +40,10 @@
   virtual bool ResolveFilePath(const base::FilePath& file_path,
                                base::FilePath* resolved_file_path) = 0;
 
-  // Collects and return executable metadata for all the files in `file_paths`.
-  virtual FilePathMap<ExecutableMetadata> GetAllExecutableMetadata(
+  // Returns a map of file paths to whether a currently running process was
+  // spawned from that file. The set of file paths in the map are specified by
+  // `file_paths`.
+  virtual FilePathMap<bool> AreExecutablesRunning(
       const FilePathSet& file_paths) = 0;
 };
 
diff --git a/components/device_signals/core/system_signals/win/BUILD.gn b/components/device_signals/core/system_signals/win/BUILD.gn
index 9c81e5b7..e2ca1d2a 100644
--- a/components/device_signals/core/system_signals/win/BUILD.gn
+++ b/components/device_signals/core/system_signals/win/BUILD.gn
@@ -4,6 +4,7 @@
 
 static_library("win") {
   public = [
+    "win_executable_metadata_service.h",
     "win_platform_delegate.h",
     "wmi_client.h",
     "wmi_client_impl.h",
@@ -12,6 +13,7 @@
   ]
 
   sources = [
+    "win_executable_metadata_service.cc",
     "win_platform_delegate.cc",
     "wmi_client.cc",
     "wmi_client_impl.cc",
@@ -51,6 +53,7 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "win_executable_metadata_service_unittest.cc",
     "win_platform_delegate_unittest.cc",
     "wmi_client_impl_unittest.cc",
     "wsc_client_impl_unittest.cc",
@@ -61,6 +64,8 @@
     ":win",
     "//base",
     "//base/test:test_support",
+    "//components/device_signals/core/system_signals",
+    "//components/device_signals/core/system_signals:test_support",
     "//testing/gmock",
     "//testing/gtest",
     "//third_party/abseil-cpp:absl",
diff --git a/components/device_signals/core/system_signals/win/win_executable_metadata_service.cc b/components/device_signals/core/system_signals/win/win_executable_metadata_service.cc
new file mode 100644
index 0000000..f7a1cac
--- /dev/null
+++ b/components/device_signals/core/system_signals/win/win_executable_metadata_service.cc
@@ -0,0 +1,42 @@
+// 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/device_signals/core/system_signals/win/win_executable_metadata_service.h"
+
+#include <utility>
+
+#include "base/files/file_path.h"
+#include "components/device_signals/core/common/common_types.h"
+
+namespace device_signals {
+
+WinExecutableMetadataService::WinExecutableMetadataService(
+    std::unique_ptr<PlatformDelegate> platform_delegate)
+    : ExecutableMetadataService(std::move(platform_delegate)) {}
+
+WinExecutableMetadataService::~WinExecutableMetadataService() = default;
+
+FilePathMap<ExecutableMetadata>
+WinExecutableMetadataService::GetAllExecutableMetadata(
+    const FilePathSet& file_paths) {
+  FilePathMap<bool> files_are_running_map =
+      platform_delegate_->AreExecutablesRunning(file_paths);
+
+  FilePathMap<ExecutableMetadata> file_paths_to_metadata_map;
+  for (const auto& file_path : file_paths) {
+    ExecutableMetadata executable_metadata;
+
+    if (files_are_running_map.contains(file_path)) {
+      executable_metadata.is_running = files_are_running_map[file_path];
+    }
+
+    // TODO(b:231472950): Add public key hash signal.
+    // TODO(b:231472965): Add product version and name signals.
+    file_paths_to_metadata_map[file_path] = executable_metadata;
+  }
+
+  return file_paths_to_metadata_map;
+}
+
+}  // namespace device_signals
diff --git a/components/device_signals/core/system_signals/win/win_executable_metadata_service.h b/components/device_signals/core/system_signals/win/win_executable_metadata_service.h
new file mode 100644
index 0000000..5c89867
--- /dev/null
+++ b/components/device_signals/core/system_signals/win/win_executable_metadata_service.h
@@ -0,0 +1,27 @@
+// 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_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_WIN_WIN_EXECUTABLE_METADATA_SERVICE_H_
+#define COMPONENTS_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_WIN_WIN_EXECUTABLE_METADATA_SERVICE_H_
+
+#include <memory>
+
+#include "components/device_signals/core/system_signals/executable_metadata_service.h"
+
+namespace device_signals {
+
+class WinExecutableMetadataService : public ExecutableMetadataService {
+ public:
+  explicit WinExecutableMetadataService(
+      std::unique_ptr<PlatformDelegate> platform_delegate);
+  ~WinExecutableMetadataService() override;
+
+  // Collects and return executable metadata for all the files in `file_paths`.
+  FilePathMap<ExecutableMetadata> GetAllExecutableMetadata(
+      const FilePathSet& file_paths) override;
+};
+
+}  // namespace device_signals
+
+#endif  // COMPONENTS_DEVICE_SIGNALS_CORE_SYSTEM_SIGNALS_WIN_WIN_EXECUTABLE_METADATA_SERVICE_H_
diff --git a/components/device_signals/core/system_signals/win/win_executable_metadata_service_unittest.cc b/components/device_signals/core/system_signals/win/win_executable_metadata_service_unittest.cc
new file mode 100644
index 0000000..e751bb245
--- /dev/null
+++ b/components/device_signals/core/system_signals/win/win_executable_metadata_service_unittest.cc
@@ -0,0 +1,84 @@
+// 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/device_signals/core/system_signals/win/win_executable_metadata_service.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/files/file_path.h"
+#include "components/device_signals/core/common/common_types.h"
+#include "components/device_signals/core/system_signals/mock_platform_delegate.h"
+#include "components/device_signals/core/system_signals/platform_delegate.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using testing::Return;
+
+namespace device_signals {
+
+namespace {
+
+ExecutableMetadata CreateExecutableMetadata(bool is_running) {
+  ExecutableMetadata metadata;
+  metadata.is_running = is_running;
+  return metadata;
+}
+
+}  // namespace
+
+class WinExecutableMetadataServiceTest : public testing::Test {
+ protected:
+  WinExecutableMetadataServiceTest() {
+    auto mock_platform_delegate = std::make_unique<MockPlatformDelegate>();
+    mock_platform_delegate_ = mock_platform_delegate.get();
+
+    executable_metadata_service_ =
+        std::make_unique<WinExecutableMetadataService>(
+            std::move(mock_platform_delegate));
+  }
+
+  MockPlatformDelegate* mock_platform_delegate_;
+  std::unique_ptr<WinExecutableMetadataService> executable_metadata_service_;
+};
+
+TEST_F(WinExecutableMetadataServiceTest, GetAllExecutableMetadata_Empty) {
+  FilePathSet empty_set;
+
+  EXPECT_CALL(*mock_platform_delegate_, AreExecutablesRunning(empty_set))
+      .WillOnce(Return(FilePathMap<bool>()));
+
+  FilePathMap<ExecutableMetadata> empty_map;
+  EXPECT_EQ(executable_metadata_service_->GetAllExecutableMetadata(empty_set),
+            empty_map);
+}
+
+TEST_F(WinExecutableMetadataServiceTest, GetAllExecutableMetadata_Success) {
+  base::FilePath running_path =
+      base::FilePath::FromUTF8Unsafe("C:\\some\\running\\file\\path.exe");
+  base::FilePath not_running_path =
+      base::FilePath::FromUTF8Unsafe("C:\\some\\file\\path.exe");
+
+  FilePathSet executable_files;
+  executable_files.insert(running_path);
+  executable_files.insert(not_running_path);
+
+  FilePathMap<bool> is_running_map;
+  is_running_map.insert({running_path, true});
+  is_running_map.insert({not_running_path, false});
+
+  EXPECT_CALL(*mock_platform_delegate_, AreExecutablesRunning(executable_files))
+      .WillOnce(Return(is_running_map));
+
+  FilePathMap<ExecutableMetadata> expected_metadata_map;
+  expected_metadata_map.insert({running_path, CreateExecutableMetadata(true)});
+  expected_metadata_map.insert(
+      {not_running_path, CreateExecutableMetadata(false)});
+
+  EXPECT_EQ(
+      executable_metadata_service_->GetAllExecutableMetadata(executable_files),
+      expected_metadata_map);
+}
+
+}  // namespace device_signals
diff --git a/components/digital_asset_links/digital_asset_links_handler.cc b/components/digital_asset_links/digital_asset_links_handler.cc
index c0a683b..9ae15eb 100644
--- a/components/digital_asset_links/digital_asset_links_handler.cc
+++ b/components/digital_asset_links/digital_asset_links_handler.cc
@@ -85,22 +85,29 @@
          target_value.find(package->GetString()) != target_value.end();
 }
 
-bool StatementHasMatchingFingerprint(const base::Value& statement,
-                                     const std::string& target_fingerprint) {
+bool StatementHasMatchingFingerprint(
+    const base::Value& statement,
+    const std::vector<std::string>& target_fingerprints) {
   const base::Value* fingerprints = statement.FindPathOfType(
       {"target", "sha256_cert_fingerprints"}, base::Value::Type::LIST);
 
   if (!fingerprints)
     return false;
 
-  for (const auto& fingerprint : fingerprints->GetListDeprecated()) {
-    if (fingerprint.is_string() &&
-        fingerprint.GetString() == target_fingerprint) {
-      return true;
+  for (const std::string& target_fingerprint : target_fingerprints) {
+    bool verified_fingerprint = false;
+    for (const auto& fingerprint : fingerprints->GetListDeprecated()) {
+      if (fingerprint.is_string() &&
+          fingerprint.GetString() == target_fingerprint) {
+        verified_fingerprint = true;
+        break;
+      }
     }
+    if (!verified_fingerprint)
+      return false;
   }
 
-  return false;
+  return true;
 }
 
 // Shows a warning message in the DevTools console.
@@ -135,7 +142,7 @@
 
 void DigitalAssetLinksHandler::OnURLLoadComplete(
     std::string relationship,
-    absl::optional<std::string> fingerprint,
+    absl::optional<std::vector<std::string>> fingerprints,
     std::map<std::string, std::set<std::string>> target_values,
     std::unique_ptr<std::string> response_body) {
   int response_code = -1;
@@ -165,14 +172,14 @@
       *response_body,
       base::BindOnce(&DigitalAssetLinksHandler::OnJSONParseResult,
                      weak_ptr_factory_.GetWeakPtr(), std::move(relationship),
-                     std::move(fingerprint), std::move(target_values)));
+                     std::move(fingerprints), std::move(target_values)));
 
   url_loader_.reset(nullptr);
 }
 
 void DigitalAssetLinksHandler::OnJSONParseResult(
     std::string relationship,
-    absl::optional<std::string> fingerprint,
+    absl::optional<std::vector<std::string>> fingerprints,
     std::map<std::string, std::set<std::string>> target_values,
     data_decoder::DataDecoder::ValueOrError result) {
   if (!result.has_value()) {
@@ -205,8 +212,8 @@
       continue;
     }
 
-    if (fingerprint &&
-        !StatementHasMatchingFingerprint(statement, *fingerprint)) {
+    if (fingerprints &&
+        !StatementHasMatchingFingerprint(statement, *fingerprints)) {
       failures.push_back("Statement failure matching fingerprint.");
       continue;
     }
@@ -237,13 +244,13 @@
 bool DigitalAssetLinksHandler::CheckDigitalAssetLinkRelationshipForAndroidApp(
     const std::string& web_domain,
     const std::string& relationship,
-    const std::string& fingerprint,
+    std::vector<std::string> fingerprints,
     const std::string& package,
     RelationshipCheckResultCallback callback) {
   // TODO(rayankans): Should we also check the namespace here?
   return CheckDigitalAssetLinkRelationship(
-      web_domain, relationship, fingerprint, {{"package_name", {package}}},
-      std::move(callback));
+      web_domain, relationship, std::move(fingerprints),
+      {{"package_name", {package}}}, std::move(callback));
 }
 
 bool DigitalAssetLinksHandler::CheckDigitalAssetLinkRelationshipForWebApk(
@@ -258,7 +265,7 @@
 bool DigitalAssetLinksHandler::CheckDigitalAssetLinkRelationship(
     const std::string& web_domain,
     const std::string& relationship,
-    const absl::optional<std::string>& fingerprint,
+    absl::optional<std::vector<std::string>> fingerprints,
     const std::map<std::string, std::set<std::string>>& target_values,
     RelationshipCheckResultCallback callback) {
   // TODO(peconn): Propagate the use of url::Origin backwards to clients.
@@ -314,8 +321,8 @@
   url_loader_->DownloadToStringOfUnboundedSizeUntilCrashAndDie(
       shared_url_loader_factory_.get(),
       base::BindOnce(&DigitalAssetLinksHandler::OnURLLoadComplete,
-                     weak_ptr_factory_.GetWeakPtr(), relationship, fingerprint,
-                     target_values));
+                     weak_ptr_factory_.GetWeakPtr(), relationship,
+                     std::move(fingerprints), target_values));
 
   return true;
 }
diff --git a/components/digital_asset_links/digital_asset_links_handler.h b/components/digital_asset_links/digital_asset_links_handler.h
index ee36b65..d637044 100644
--- a/components/digital_asset_links/digital_asset_links_handler.h
+++ b/components/digital_asset_links/digital_asset_links_handler.h
@@ -71,7 +71,7 @@
   bool CheckDigitalAssetLinkRelationshipForAndroidApp(
       const std::string& web_domain,
       const std::string& relationship,
-      const std::string& fingerprint,
+      std::vector<std::string> fingerprints,
       const std::string& package,
       RelationshipCheckResultCallback callback);
 
@@ -94,7 +94,7 @@
   bool CheckDigitalAssetLinkRelationship(
       const std::string& web_domain,
       const std::string& relationship,
-      const absl::optional<std::string>& fingerprint,
+      absl::optional<std::vector<std::string>> fingerprints,
       const std::map<std::string, std::set<std::string>>& target_values,
       RelationshipCheckResultCallback callback);
 
@@ -106,14 +106,14 @@
  private:
   void OnURLLoadComplete(
       std::string relationship,
-      absl::optional<std::string> fingerprint,
+      absl::optional<std::vector<std::string>> fingerprints,
       std::map<std::string, std::set<std::string>> target_values,
       std::unique_ptr<std::string> response_body);
 
   // Callback for the DataDecoder.
   void OnJSONParseResult(
       std::string relationship,
-      absl::optional<std::string> fingerprint,
+      absl::optional<std::vector<std::string>> fingerprints,
       std::map<std::string, std::set<std::string>> target_values,
       data_decoder::DataDecoder::ValueOrError result);
 
diff --git a/components/digital_asset_links/digital_asset_links_handler_unittest.cc b/components/digital_asset_links/digital_asset_links_handler_unittest.cc
index bb429f4..6fd35c6 100644
--- a/components/digital_asset_links/digital_asset_links_handler_unittest.cc
+++ b/components/digital_asset_links/digital_asset_links_handler_unittest.cc
@@ -42,6 +42,17 @@
     ]
   }
 }, {
+  "relation": ["multiple_fingerprints"],
+  "target": {
+    "namespace": "android_app",
+    "package_name": "com.example.muliple_fingerprints",
+    "sha256_cert_fingerprints": [
+      "64:2F:D4:BE:1C:4D:F8:36:2E:D3:50:C4:69:53:96:A1:3D:14:0A:23:AD:2F:BF:EB:6E:C6:E4:64:54:3B:34:C1",
+      "FA:2A:03:CB:38:9C:F3:BE:28:E3:CA:7F:DA:2E:FA:4F:4A:96:F3:BC:45:2C:08:A2:16:A1:5D:FD:AB:46:BC:9D",
+      "FA:2A:03:CB:38:9C:F3:BE:28:E3:CA:7F:DA:2E:FA:4F:4A:96:F3:BC:45:2C:08:A2:16:A1:5D:FD:AB:46:BC:EE"
+    ]
+  }
+}, {
   "relation": ["delegate_permission/common.query_webapk"],
   "target": {
     "namespace": "web",
@@ -53,9 +64,9 @@
 const char kDomain[] = "https://www.example.com";
 const char kValidPackage[] = "com.example.firstapp";
 const char kValidRelation[] = "delegate_permission/common.handle_all_urls";
-const char kValidFingerprint[] =
+const std::vector<std::string> kValidFingerprint{
     "64:2F:D4:BE:1C:4D:F8:36:2E:D3:50:C4:69:53:96:A1:3D:14:0A:23:AD:2F:BF:EB:"
-    "6E:C6:E4:64:54:3B:34:C1";
+    "6E:C6:E4:64:54:3B:34:C1"};
 
 }  // namespace
 
@@ -161,8 +172,9 @@
 
 TEST_F(DigitalAssetLinksHandlerTest, SignatureMismatch) {
   DigitalAssetLinksHandler handler(GetSharedURLLoaderFactory());
+  std::vector<std::string> valid_fingerprints{"66:66:66:66:66:66"};
   handler.CheckDigitalAssetLinkRelationshipForAndroidApp(
-      kDomain, kValidRelation, "66:66:66:66:66:66", kValidPackage,
+      kDomain, kValidRelation, valid_fingerprints, kValidPackage,
       base::BindOnce(&DigitalAssetLinksHandlerTest::OnRelationshipCheckComplete,
                      base::Unretained(this)));
   AddResponse(kStatementList);
@@ -304,4 +316,41 @@
   EXPECT_EQ(result_, RelationshipCheckResult::kFailure);
 }
 
+TEST_F(DigitalAssetLinksHandlerTest, PositiveResponseMultipleFingerprints) {
+  DigitalAssetLinksHandler handler(GetSharedURLLoaderFactory());
+  std::vector<std::string> valid_fingerprints{
+      "64:2F:D4:BE:1C:4D:F8:36:2E:D3:50:C4:69:53:96:A1:3D:14:0A:23:AD:2F:BF:EB:"
+      "6E:C6:E4:64:54:3B:34:C1",
+      "FA:2A:03:CB:38:9C:F3:BE:28:E3:CA:7F:DA:2E:FA:4F:4A:96:F3:BC:45:2C:08:A2:"
+      "16:A1:5D:FD:AB:46:BC:9D"};
+  handler.CheckDigitalAssetLinkRelationshipForAndroidApp(
+      "https://www.example.com", "multiple_fingerprints", valid_fingerprints,
+      "com.example.muliple_fingerprints",
+      base::BindOnce(&DigitalAssetLinksHandlerTest::OnRelationshipCheckComplete,
+                     base::Unretained(this)));
+  AddResponse(kStatementList);
+
+  EXPECT_EQ(1, num_invocations_);
+  EXPECT_EQ(result_, RelationshipCheckResult::kSuccess);
+}
+
+TEST_F(DigitalAssetLinksHandlerTest, NegativeResponseMissingOneFingerprint) {
+  DigitalAssetLinksHandler handler(GetSharedURLLoaderFactory());
+  std::vector<std::string> valid_fingerprints{
+      "64:2F:D4:BE:1C:4D:F8:36:2E:D3:50:C4:69:53:96:A1:3D:14:0A:23:AD:2F:BF:EB:"
+      "6E:C6:E4:64:54:3B:34:C1",
+      "FA:2A:03:CB:38:9C:F3:BE:28:E3:CA:7F:DA:2E:FA:4F:4A:96:F3:BC:45:2C:08:A2:"
+      "16:A1:5D:FD:AB:46:AA:AA",  // Missing in statement list.
+  };
+  handler.CheckDigitalAssetLinkRelationshipForAndroidApp(
+      "https://www.example.com", "multiple_fingerprints", valid_fingerprints,
+      "com.example.muliple_fingerprints",
+      base::BindOnce(&DigitalAssetLinksHandlerTest::OnRelationshipCheckComplete,
+                     base::Unretained(this)));
+  AddResponse(kStatementList);
+
+  EXPECT_EQ(1, num_invocations_);
+  EXPECT_EQ(result_, RelationshipCheckResult::kFailure);
+}
+
 }  // namespace digital_asset_links
diff --git a/components/exo/shell_surface.cc b/components/exo/shell_surface.cc
index 71df0e90..a138abe 100644
--- a/components/exo/shell_surface.cc
+++ b/components/exo/shell_surface.cc
@@ -242,9 +242,6 @@
   // state doesn't change.
   ScopedConfigure scoped_configure(this, true);
   widget_->SetFullscreen(fullscreen);
-
-  if (root_surface())
-    root_surface()->OnFullscreenStateChanged(fullscreen);
 }
 
 void ShellSurface::SetPopup() {
diff --git a/components/exo/surface.cc b/components/exo/surface.cc
index 863110b7..e9484dc 100644
--- a/components/exo/surface.cc
+++ b/components/exo/surface.cc
@@ -1647,9 +1647,4 @@
   return nullptr;
 }
 
-void Surface::OnFullscreenStateChanged(bool fullscreen) {
-  for (SurfaceObserver& observer : observers_)
-    observer.OnFullscreenStateChanged(fullscreen);
-}
-
 }  // namespace exo
diff --git a/components/exo/surface.h b/components/exo/surface.h
index b38af788..97103dc 100644
--- a/components/exo/surface.h
+++ b/components/exo/surface.h
@@ -426,8 +426,6 @@
   // if one can not be determined. See go/secure-exo-ids for more details.
   SecurityDelegate* GetSecurityDelegate();
 
-  void OnFullscreenStateChanged(bool fullscreen);
-
  private:
   struct State {
     State();
diff --git a/components/exo/surface_observer.h b/components/exo/surface_observer.h
index 19aa577d..8ec8b9f4 100644
--- a/components/exo/surface_observer.h
+++ b/components/exo/surface_observer.h
@@ -45,8 +45,6 @@
   // Starts or ends throttling.
   virtual void ThrottleFrameRate(bool on) {}
 
-  virtual void OnFullscreenStateChanged(bool fullscreen) {}
-
  protected:
   virtual ~SurfaceObserver() {}
 };
diff --git a/components/exo/wayland/BUILD.gn b/components/exo/wayland/BUILD.gn
index e38f1bd..0c104b8 100644
--- a/components/exo/wayland/BUILD.gn
+++ b/components/exo/wayland/BUILD.gn
@@ -30,8 +30,6 @@
     "wayland_display_output.h",
     "wayland_display_util.cc",
     "wayland_display_util.h",
-    "wayland_dmabuf_feedback_manager.cc",
-    "wayland_dmabuf_feedback_manager.h",
     "wayland_input_delegate.cc",
     "wayland_input_delegate.h",
     "wayland_pointer_delegate.cc",
@@ -65,8 +63,6 @@
     "zcr_stylus.h",
     "zcr_vsync_feedback.cc",
     "zcr_vsync_feedback.h",
-    "zwp_linux_dmabuf.cc",
-    "zwp_linux_dmabuf.h",
     "zwp_linux_explicit_synchronization.cc",
     "zwp_linux_explicit_synchronization.h",
   ]
@@ -76,7 +72,6 @@
   deps = [
     "//base",
     "//build:chromeos_buildflags",
-    "//build/config/linux/libdrm",
     "//components/exo",
     "//components/exo:buildflags",
     "//components/exo/wayland/protocol:aura_shell_protocol",
@@ -97,7 +92,6 @@
     "//third_party/wayland-protocols:keyboard_configuration_protocol",
     "//third_party/wayland-protocols:keyboard_extension_protocol",
     "//third_party/wayland-protocols:keyboard_shortcuts_inhibit_protocol",
-    "//third_party/wayland-protocols:linux_dmabuf_protocol",
     "//third_party/wayland-protocols:linux_explicit_synchronization_protocol",
     "//third_party/wayland-protocols:notification_shell_protocol",
     "//third_party/wayland-protocols:pointer_constraints_protocol",
@@ -123,19 +117,30 @@
     "//ui/events:dom_keycode_converter",
     "//ui/events:events_base",
     "//ui/events/devices:devices",
-    "//ui/gfx/linux:drm",
-    "//ui/ozone",
     "//ui/views",
     "//ui/wm:wm",
     "//ui/wm/public",
   ]
 
-  if (is_chromeos_ash) {
-    deps += [
-      "//ash",
-      "//ash/public/cpp",
-      "//chromeos/ui/base",
+  if (use_ozone) {
+    sources += [
+      "zwp_linux_dmabuf.cc",
+      "zwp_linux_dmabuf.h",
     ]
+
+    deps += [
+      "//build/config/linux/libdrm",
+      "//third_party/wayland-protocols:linux_dmabuf_protocol",
+      "//ui/ozone",
+    ]
+
+    if (is_chromeos_ash) {
+      deps += [
+        "//ash",
+        "//ash/public/cpp",
+        "//chromeos/ui/base",
+      ]
+    }
   }
 
   if (use_xkbcommon) {
diff --git a/components/exo/wayland/clients/client_base.cc b/components/exo/wayland/clients/client_base.cc
index 2b0c8c8..ba2e3eb 100644
--- a/components/exo/wayland/clients/client_base.cc
+++ b/components/exo/wayland/clients/client_base.cc
@@ -136,10 +136,7 @@
                      uint32_t id,
                      const char* interface,
                      uint32_t version) {
-  auto* data_tuple = static_cast<
-      std::tuple<ClientBase::Globals*, const ClientBase::InitParams&>*>(data);
-  ClientBase::Globals* globals = std::get<0>(*data_tuple);
-  const ClientBase::InitParams& params = std::get<1>(*data_tuple);
+  ClientBase::Globals* globals = static_cast<ClientBase::Globals*>(data);
 
   if (strcmp(interface, "wl_compositor") == 0) {
     globals->compositor.reset(static_cast<wl_compositor*>(
@@ -161,8 +158,7 @@
         wl_registry_bind(registry, id, &zaura_shell_interface, 34)));
   } else if (strcmp(interface, "zwp_linux_dmabuf_v1") == 0) {
     globals->linux_dmabuf.reset(static_cast<zwp_linux_dmabuf_v1*>(
-        wl_registry_bind(registry, id, &zwp_linux_dmabuf_v1_interface,
-                         params.linux_dmabuf_version)));
+        wl_registry_bind(registry, id, &zwp_linux_dmabuf_v1_interface, 2)));
   } else if (strcmp(interface, "wl_subcompositor") == 0) {
     globals->subcompositor.reset(static_cast<wl_subcompositor*>(
         wl_registry_bind(registry, id, &wl_subcompositor_interface, 1)));
@@ -474,9 +470,7 @@
     return false;
   }
   registry_.reset(wl_display_get_registry(display_.get()));
-
-  std::tuple<Globals*, const InitParams&> data(&globals_, params);
-  wl_registry_add_listener(registry_.get(), &g_registry_listener, &data);
+  wl_registry_add_listener(registry_.get(), &g_registry_listener, &globals_);
 
   wl_display_roundtrip(display_.get());
 
@@ -945,7 +939,7 @@
   std::unique_ptr<Buffer> buffer;
 #if defined(USE_GBM)
   if (device_) {
-    buffer = CreateDrmBuffer(size, drm_format, nullptr, 0, bo_usage, y_invert_);
+    buffer = CreateDrmBuffer(size, drm_format, bo_usage, y_invert_);
     CHECK(buffer) << "Can't create drm buffer";
   }
 #endif
@@ -1050,8 +1044,6 @@
 std::unique_ptr<ClientBase::Buffer> ClientBase::CreateDrmBuffer(
     const gfx::Size& size,
     int32_t drm_format,
-    const uint64_t* drm_modifiers,
-    const unsigned int drm_modifiers_count,
     int32_t bo_usage,
     bool y_invert) {
   std::unique_ptr<Buffer> buffer;
@@ -1063,14 +1055,8 @@
     }
 
     buffer = std::make_unique<Buffer>();
-    if (drm_modifiers_count == 0) {
-      buffer->bo.reset(gbm_bo_create(device_.get(), size.width(), size.height(),
-                                     drm_format, bo_usage));
-    } else {
-      buffer->bo.reset(gbm_bo_create_with_modifiers(
-          device_.get(), size.width(), size.height(), drm_format, drm_modifiers,
-          drm_modifiers_count));
-    }
+    buffer->bo.reset(gbm_bo_create(device_.get(), size.width(), size.height(),
+                                   drm_format, bo_usage));
     if (!buffer->bo) {
       LOG(ERROR) << "Can't create gbm buffer";
       return nullptr;
diff --git a/components/exo/wayland/clients/client_base.h b/components/exo/wayland/clients/client_base.h
index 8dc4c21..8b5fb7d 100644
--- a/components/exo/wayland/clients/client_base.h
+++ b/components/exo/wayland/clients/client_base.h
@@ -70,7 +70,6 @@
     bool use_release_fences = false;
     bool use_stylus = false;
     absl::optional<std::string> wayland_socket = {};
-    uint32_t linux_dmabuf_version = ZWP_LINUX_DMABUF_V1_MODIFIER_SINCE_VERSION;
   };
 
   struct Globals {
@@ -137,8 +136,6 @@
                                        bool add_buffer_listener = true);
   std::unique_ptr<Buffer> CreateDrmBuffer(const gfx::Size& size,
                                           int32_t drm_format,
-                                          const uint64_t* modifiers,
-                                          const unsigned int modifiers_count,
                                           int32_t bo_usage,
                                           bool y_invert);
   ClientBase::Buffer* DequeueBuffer();
diff --git a/components/exo/wayland/server.cc b/components/exo/wayland/server.cc
index b1d75a9..20c3d46 100644
--- a/components/exo/wayland/server.cc
+++ b/components/exo/wayland/server.cc
@@ -59,7 +59,6 @@
 #include "components/exo/wayland/server_util.h"
 #include "components/exo/wayland/surface_augmenter.h"
 #include "components/exo/wayland/wayland_display_output.h"
-#include "components/exo/wayland/wayland_dmabuf_feedback_manager.h"
 #include "components/exo/wayland/wayland_watcher.h"
 #include "components/exo/wayland/wl_compositor.h"
 #include "components/exo/wayland/wl_data_device_manager.h"
@@ -288,11 +287,8 @@
   wl_global_create(wl_display_.get(), &wl_compositor_interface,
                    kWlCompositorVersion, this, bind_compositor);
   wl_global_create(wl_display_.get(), &wl_shm_interface, 1, display_, bind_shm);
-  wayland_feedback_manager_ =
-      std::make_unique<WaylandDmabufFeedbackManager>(display_);
   wl_global_create(wl_display_.get(), &zwp_linux_dmabuf_v1_interface,
-                   wayland_feedback_manager_->GetVersionSupportedByPlatform(),
-                   wayland_feedback_manager_.get(), bind_linux_dmabuf);
+                   kZwpLinuxDmabufVersion, display_, bind_linux_dmabuf);
   wl_global_create(wl_display_.get(), &wl_subcompositor_interface, 1, display_,
                    bind_subcompositor);
   for (const auto& display : display::Screen::GetScreen()->GetAllDisplays())
diff --git a/components/exo/wayland/server.h b/components/exo/wayland/server.h
index d5f8921..2b401ef1 100644
--- a/components/exo/wayland/server.h
+++ b/components/exo/wayland/server.h
@@ -37,7 +37,6 @@
 struct WaylandXdgShell;
 struct WaylandZxdgShell;
 struct WaylandRemoteShellData;
-class WaylandDmabufFeedbackManager;
 class WestonTest;
 class WaylandWatcher;
 
@@ -130,7 +129,6 @@
   display::ScopedDisplayObserver display_observer_{this};
   std::unique_ptr<wayland::WaylandWatcher> wayland_watcher_;
   base::FilePath socket_path_;
-  std::unique_ptr<WaylandDmabufFeedbackManager> wayland_feedback_manager_;
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
   std::unique_ptr<WaylandKeyboardExtension> zcr_keyboard_extension_data_;
diff --git a/components/exo/wayland/server_util.cc b/components/exo/wayland/server_util.cc
index a57730a3..960998e 100644
--- a/components/exo/wayland/server_util.cc
+++ b/components/exo/wayland/server_util.cc
@@ -36,10 +36,6 @@
 
 }  // namespace
 
-void SetImplementation(wl_resource* resource, const void* implementation) {
-  wl_resource_set_implementation(resource, implementation, nullptr, nullptr);
-}
-
 uint32_t TimeTicksToMilliseconds(base::TimeTicks ticks) {
   return (ticks - base::TimeTicks()).InMilliseconds();
 }
diff --git a/components/exo/wayland/server_util.h b/components/exo/wayland/server_util.h
index 8e2ec7fc7..8b20ebd 100644
--- a/components/exo/wayland/server_util.h
+++ b/components/exo/wayland/server_util.h
@@ -48,8 +48,6 @@
                                  DestroyUserData<T>);
 }
 
-void SetImplementation(wl_resource* resource, const void* implementation);
-
 // Convert a timestamp to a time value that can be used when interfacing
 // with wayland. Note that we cast a int64_t value to uint32_t which can
 // potentially overflow.
diff --git a/components/exo/wayland/test/integration/buffer_checker_test.cc b/components/exo/wayland/test/integration/buffer_checker_test.cc
index f2530566..78d2d56 100644
--- a/components/exo/wayland/test/integration/buffer_checker_test.cc
+++ b/components/exo/wayland/test/integration/buffer_checker_test.cc
@@ -2,14 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <drm_fourcc.h>
 #include <gbm.h>
-#include <sys/mman.h>
 #include <cstdint>
 #include <iterator>
 #include <vector>
 
-#include "base/containers/contains.h"
 #include "base/containers/flat_map.h"
 #include "base/containers/queue.h"
 #include "base/logging.h"
@@ -26,25 +23,18 @@
 
 namespace {
 
-std::string DrmCodeToString(uint32_t drm_format) {
+std::string DrmCodeToString(uint64_t drm_format) {
   return std::string{static_cast<char>(drm_format),
                      static_cast<char>(drm_format >> 8),
                      static_cast<char>(drm_format >> 16),
                      static_cast<char>(drm_format >> 24), 0};
 }
 
-std::string DrmCodeToBufferFormatString(int32_t drm_format) {
+std::string DrmCodeToBufferFormatString(uint64_t drm_format) {
   return gfx::BufferFormatToString(
       ui::GetBufferFormatFromFourCCFormat(drm_format));
 }
 
-std::string DrmModifiersToString(std::vector<uint64_t> drm_modifiers) {
-  std::stringstream ss;
-  for (uint64_t drm_modifier : drm_modifiers)
-    ss << "0x" << std::hex << drm_modifier << " ";
-  return ss.str();
-}
-
 }  // namespace
 
 namespace exo {
@@ -53,11 +43,6 @@
 
 namespace {
 
-#define WL_ARRAY_FOR_EACH(pos, array, type)                             \
-  for (pos = (type)(array)->data;                                       \
-       (const char*)pos < ((const char*)(array)->data + (array)->size); \
-       (pos)++)
-
 class BufferCheckerTestClient : public ::exo::wayland::clients::ClientBase {
  public:
   explicit BufferCheckerTestClient() = default;
@@ -113,8 +98,7 @@
 
         current_buffer = CreateDrmBuffer(
             gfx::Size(surface_size_.width(), surface_size_.height()), format,
-            nullptr, 0, ui::BufferUsageToGbmFlags(current_usage),
-            /*y_invert=*/false);
+            ui::BufferUsageToGbmFlags(current_usage), /*y_invert=*/false);
         if (!current_buffer) {
           LOG(ERROR) << "Unable to create buffer for drm: "
                      << DrmCodeToString(format) << " gfx::BufferFormat: "
@@ -129,80 +113,7 @@
                 << " gfx::BufferFormat: " << DrmCodeToBufferFormatString(format)
                 << " gfx::BufferUsage "
                 << gfx::BufferUsageToString(current_usage);
-
-      wl_surface_damage(surface_.get(), 0, 0, surface_size_.width(),
-                        surface_size_.height());
-      wl_surface_attach(surface_.get(), current_buffer->buffer.get(), 0, 0);
-
-      frame_callback.reset(wl_surface_frame(surface_.get()));
-      wl_callback_add_listener(frame_callback.get(), &frame_listener,
-                               &callback_pending);
-      callback_pending = true;
-      wl_surface_commit(surface_.get());
-
-      wl_display_flush(display_.get());
-    } while (wl_display_dispatch(display_.get()) != -1);
-
-    LOG(ERROR)
-        << "Expected to return from inside the loop. Wayland disconnected?";
-    return false;
-  }
-
-  bool FormatAndModifierSupported(uint32_t format,
-                                  std::vector<uint64_t> modifiers) {
-    std::vector<gfx::BufferUsage> supported_usages;
-    bool callback_pending = false;
-    std::unique_ptr<wl_callback> frame_callback;
-    wl_callback_listener frame_listener = {
-        [](void* data, struct wl_callback*, uint32_t) {
-          *(static_cast<bool*>(data)) = false;
-        }};
-
-    std::unique_ptr<Buffer> current_buffer;
-    do {
-      if (callback_pending)
-        continue;
-
-      if (current_buffer) {
-        LOG(INFO) << "Successfully used buffer with drm format: "
-                  << DrmCodeToString(format)
-                  << " drm modifiers: " << DrmModifiersToString(modifiers)
-                  << " gfx::BufferFormat: "
-                  << DrmCodeToBufferFormatString(format);
-        return true;
-      }
-
-      if (wl_display_get_error(display_.get())) {
-        LOG(ERROR) << "Wayland error encountered";
-        return false;
-      }
-
-      if (modifiers.size() == 1 && modifiers[0] == DRM_FORMAT_MOD_INVALID) {
-        current_buffer = CreateDrmBuffer(
-            gfx::Size(surface_size_.width(), surface_size_.height()), format,
-            nullptr, 0, ui::BufferUsageToGbmFlags(gfx::BufferUsage::GPU_READ),
-            /*y_invert=*/false);
-      } else {
-        current_buffer = CreateDrmBuffer(
-            gfx::Size(surface_size_.width(), surface_size_.height()), format,
-            modifiers.data(), modifiers.size(),
-            ui::BufferUsageToGbmFlags(gfx::BufferUsage::GPU_READ),
-            /*y_invert=*/false);
-      }
-      if (!current_buffer) {
-        LOG(ERROR) << "Unable to create buffer for drm format: "
-                   << DrmCodeToString(format)
-                   << " drm modifiers: " << DrmModifiersToString(modifiers)
-                   << " gfx::BufferFormat: "
-                   << DrmCodeToBufferFormatString(format);
-        return false;
-      }
-
-      LOG(INFO) << "Attempting to use buffer with format drm format: "
-                << DrmCodeToString(format)
-                << " drm modifiers: " << DrmModifiersToString(modifiers)
-                << " gfx::BufferFormat: "
-                << DrmCodeToBufferFormatString(format);
+      ;
 
       wl_surface_damage(surface_.get(), 0, 0, surface_size_.width(),
                         surface_size_.height());
@@ -223,188 +134,7 @@
   }
 
   std::vector<uint32_t> reported_formats;
-  base::flat_map<uint32_t, std::vector<uint64_t>> reported_format_modifier_map;
-
-  struct WaylandDmabufFeedbackFormat {
-    uint32_t format;
-    uint32_t padding;
-    uint64_t modifier;
-  };
-
-  struct DmabufFeedbackTranche {
-    dev_t target_device;
-    uint32_t flags;
-    base::flat_map<uint32_t, std::vector<uint64_t>> format_modifier_map;
-  };
-
-  struct DmabufFeedback {
-    dev_t main_device;
-    std::vector<WaylandDmabufFeedbackFormat> format_table;
-    std::vector<DmabufFeedbackTranche> tranches;
-    DmabufFeedbackTranche pending_tranche;
-  };
-
-  DmabufFeedback current_feedback_;
-  DmabufFeedback pending_feedback_;
-
-  void HandleFeedbackDone(zwp_linux_dmabuf_feedback_v1* dmabuf_feedback) {
-    current_feedback_ = pending_feedback_;
-    pending_feedback_ = {};
-
-    reported_formats.clear();
-    reported_format_modifier_map.clear();
-    for (DmabufFeedbackTranche tranche : current_feedback_.tranches) {
-      for (const auto& [format, modifiers] : tranche.format_modifier_map) {
-        if (!base::Contains(reported_formats, format)) {
-          reported_formats.push_back(format);
-        }
-        if (!reported_format_modifier_map.contains(format)) {
-          reported_format_modifier_map[format] = std::vector<uint64_t>();
-        }
-
-        for (uint64_t modifier : modifiers) {
-          if (!base::Contains(reported_format_modifier_map[format], modifier)) {
-            reported_format_modifier_map[format].push_back(modifier);
-          }
-        }
-      }
-    }
-  }
-
-  void HandleFeedbackFormatTable(
-      zwp_linux_dmabuf_feedback_v1* zwp_linux_dmabuf_feedback_v1,
-      int32_t fd,
-      uint32_t size) {
-    ASSERT_TRUE(pending_feedback_.format_table.empty());
-
-    WaylandDmabufFeedbackFormat* format_table =
-        static_cast<WaylandDmabufFeedbackFormat*>(
-            mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0));
-    uint32_t table_size = size / sizeof(WaylandDmabufFeedbackFormat);
-    for (uint32_t i = 0; i < table_size; i++) {
-      pending_feedback_.format_table.push_back(format_table[i]);
-    }
-    munmap(format_table, size);
-    close(fd);
-  }
-
-  void HandleFeedbackMainDevice(zwp_linux_dmabuf_feedback_v1* dmabuf_feedback,
-                                wl_array* dev) {
-    memcpy(&pending_feedback_.main_device, dev->data, sizeof(dev));
-  }
-
-  void HandleFeedbackTrancheDone(
-      zwp_linux_dmabuf_feedback_v1* dmabuf_feedback) {
-    pending_feedback_.tranches.push_back(pending_feedback_.pending_tranche);
-    pending_feedback_.pending_tranche = {};
-  }
-
-  void HandleFeedbackTrancheTargetDevice(
-      zwp_linux_dmabuf_feedback_v1* dmabuf_feedback,
-      wl_array* dev) {
-    memcpy(&pending_feedback_.pending_tranche.target_device, dev->data,
-           sizeof(dev));
-  }
-
-  void HandleFeedbackTrancheFormats(
-      zwp_linux_dmabuf_feedback_v1* dmabuf_feedback,
-      wl_array* indices) {
-    std::vector<WaylandDmabufFeedbackFormat>* format_table =
-        &pending_feedback_.format_table;
-    if (format_table == nullptr)
-      format_table = &current_feedback_.format_table;
-    ASSERT_TRUE(format_table != nullptr);
-
-    uint16_t* index;
-    WL_ARRAY_FOR_EACH(index, indices, uint16_t*) {
-      uint32_t format = format_table->at(*index).format;
-      uint64_t modifier = format_table->at(*index).modifier;
-
-      if (!pending_feedback_.pending_tranche.format_modifier_map.contains(
-              format))
-        pending_feedback_.pending_tranche.format_modifier_map[format] =
-            std::vector<uint64_t>();
-
-      pending_feedback_.pending_tranche.format_modifier_map[format].push_back(
-          modifier);
-    }
-  }
-
-  void HandleFeedbackTrancheFlags(zwp_linux_dmabuf_feedback_v1* dmabuf_feedback,
-                                  uint32_t flags) {
-    pending_feedback_.pending_tranche.flags = flags;
-  }
-
-  void AddFeedbackListener(zwp_linux_dmabuf_feedback_v1* dmabuf_feedback_obj) {
-    static struct zwp_linux_dmabuf_feedback_v1_listener kLinuxFeedbackListener =
-        {
-            .done =
-                [](void* data,
-                   struct zwp_linux_dmabuf_feedback_v1* dmabuf_feedback) {
-                  static_cast<BufferCheckerTestClient*>(data)
-                      ->HandleFeedbackDone(dmabuf_feedback);
-                },
-            .format_table =
-                [](void* data, zwp_linux_dmabuf_feedback_v1* dmabuf_feedback,
-                   int32_t fd, uint32_t size) {
-                  static_cast<BufferCheckerTestClient*>(data)
-                      ->HandleFeedbackFormatTable(dmabuf_feedback, fd, size);
-                },
-            .main_device =
-                [](void* data,
-                   struct zwp_linux_dmabuf_feedback_v1* dmabuf_feedback,
-                   struct wl_array* dev) {
-                  static_cast<BufferCheckerTestClient*>(data)
-                      ->HandleFeedbackMainDevice(dmabuf_feedback, dev);
-                },
-            .tranche_done =
-                [](void* data,
-                   struct zwp_linux_dmabuf_feedback_v1* dmabuf_feedback) {
-                  static_cast<BufferCheckerTestClient*>(data)
-                      ->HandleFeedbackTrancheDone(dmabuf_feedback);
-                },
-            .tranche_target_device =
-                [](void* data,
-                   struct zwp_linux_dmabuf_feedback_v1* dmabuf_feedback,
-                   struct wl_array* dev) {
-                  static_cast<BufferCheckerTestClient*>(data)
-                      ->HandleFeedbackTrancheTargetDevice(dmabuf_feedback, dev);
-                },
-            .tranche_formats =
-                [](void* data,
-                   struct zwp_linux_dmabuf_feedback_v1* dmabuf_feedback,
-                   struct wl_array* indices) {
-                  static_cast<BufferCheckerTestClient*>(data)
-                      ->HandleFeedbackTrancheFormats(dmabuf_feedback, indices);
-                },
-            .tranche_flags =
-                [](void* data,
-                   struct zwp_linux_dmabuf_feedback_v1* dmabuf_feedback,
-                   uint32_t flags) {
-                  static_cast<BufferCheckerTestClient*>(data)
-                      ->HandleFeedbackTrancheFlags(dmabuf_feedback, flags);
-                },
-        };
-
-    zwp_linux_dmabuf_feedback_v1_add_listener(dmabuf_feedback_obj,
-                                              &kLinuxFeedbackListener, this);
-    wl_display_roundtrip(display_.get());
-  }
-
-  void GetDefaultFeedback() {
-    zwp_linux_dmabuf_feedback_v1* dmabuf_feedback_obj =
-        zwp_linux_dmabuf_v1_get_default_feedback(globals_.linux_dmabuf.get());
-
-    AddFeedbackListener(dmabuf_feedback_obj);
-  }
-
-  void GetSurfaceFeedback() {
-    zwp_linux_dmabuf_feedback_v1* dmabuf_feedback_obj =
-        zwp_linux_dmabuf_v1_get_surface_feedback(globals_.linux_dmabuf.get(),
-                                                 surface_.get());
-
-    AddFeedbackListener(dmabuf_feedback_obj);
-  }
+  base::flat_map<uint32_t, std::vector<uint64_t>> reported_format_modifer_map;
 
  protected:
   void HandleDmabufFormat(void* data,
@@ -418,12 +148,12 @@
                             uint32_t format,
                             uint32_t modifier_hi,
                             uint32_t modifier_lo) override {
-    if (!reported_format_modifier_map.contains(format)) {
-      reported_format_modifier_map[format] = std::vector<uint64_t>();
+    if (!reported_format_modifer_map.contains(format)) {
+      reported_format_modifer_map[format] = std::vector<uint64_t>();
     }
 
     uint64_t modifier = static_cast<uint64_t>(modifier_hi) << 32 | modifier_lo;
-    reported_format_modifier_map[format].push_back(modifier);
+    reported_format_modifer_map[format].push_back(modifier);
   }
 };
 
@@ -460,184 +190,13 @@
              << base::JoinString(buffer_names, ", ");
 }
 
-TEST_F(BufferCheckerClientTest, CanUseAllReportedBufferFormatsLegacy) {
+TEST_F(BufferCheckerClientTest, CanUseAllReportedBuffers) {
   exo::wayland::test::BufferCheckerTestClient client;
   auto params = base_params_;
   // Initialize no buffers when we start, wait until we've gotten the list
   params.num_buffers = 0;
-  params.linux_dmabuf_version =
-      ZWP_LINUX_BUFFER_PARAMS_V1_CREATE_IMMED_SINCE_VERSION;
   ASSERT_TRUE(client.Init(params));
-  EXPECT_TRUE(!client.reported_formats.empty());
-
   PrintReportedFormats(client.reported_formats);
   for (auto format : client.reported_formats)
     EXPECT_TRUE(client.HasAnySupportedUsages(format));
 }
-
-TEST_F(BufferCheckerClientTest, CanUseAnyReportedBufferModifiersLegacy) {
-  exo::wayland::test::BufferCheckerTestClient client;
-  auto params = base_params_;
-  // Initialize no buffers when we start, wait until we've gotten the list
-  params.num_buffers = 0;
-  params.linux_dmabuf_version = ZWP_LINUX_DMABUF_V1_MODIFIER_SINCE_VERSION;
-  ASSERT_TRUE(client.Init(params));
-  EXPECT_TRUE(!client.reported_format_modifier_map.empty());
-
-  for (const auto& [format, modifiers] : client.reported_format_modifier_map) {
-    std::vector<uint64_t> valid_modifiers;
-    for (uint64_t modifier : modifiers) {
-      if (modifier != DRM_FORMAT_MOD_INVALID)
-        valid_modifiers.push_back(modifier);
-    }
-    if (valid_modifiers.empty())
-      valid_modifiers.push_back(DRM_FORMAT_MOD_INVALID);
-    EXPECT_TRUE(client.FormatAndModifierSupported(format, valid_modifiers));
-  }
-}
-
-TEST_F(BufferCheckerClientTest, CanUseAllReportedBufferModifiersLegacy) {
-  exo::wayland::test::BufferCheckerTestClient client;
-  auto params = base_params_;
-  // Initialize no buffers when we start, wait until we've gotten the list
-  params.num_buffers = 0;
-  params.linux_dmabuf_version = ZWP_LINUX_DMABUF_V1_MODIFIER_SINCE_VERSION;
-  ASSERT_TRUE(client.Init(params));
-  EXPECT_TRUE(!client.reported_format_modifier_map.empty());
-
-  for (const auto& [format, modifiers] : client.reported_format_modifier_map) {
-    for (auto modifier : modifiers) {
-      EXPECT_TRUE(client.FormatAndModifierSupported(format, {modifier}));
-    }
-  }
-}
-
-TEST_F(BufferCheckerClientTest, CanUseAllReportedBufferFormatsDefaultFeedback) {
-  exo::wayland::test::BufferCheckerTestClient client;
-  auto params = base_params_;
-  // Initialize no buffers when we start, wait until we've gotten the list
-  params.num_buffers = 0;
-  params.linux_dmabuf_version =
-      ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION;
-  ASSERT_TRUE(client.Init(params));
-
-  EXPECT_TRUE(client.reported_format_modifier_map.empty());
-  client.GetDefaultFeedback();
-  EXPECT_TRUE(!client.reported_format_modifier_map.empty());
-
-  PrintReportedFormats(client.reported_formats);
-  for (auto format : client.reported_formats)
-    EXPECT_TRUE(client.HasAnySupportedUsages(format));
-}
-
-TEST_F(BufferCheckerClientTest,
-       CanUseAnyReportedBufferModifiersDefaultFeedback) {
-  exo::wayland::test::BufferCheckerTestClient client;
-  auto params = base_params_;
-  // Initialize no buffers when we start, wait until we've gotten the list
-  params.num_buffers = 0;
-  params.linux_dmabuf_version =
-      ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION;
-  ASSERT_TRUE(client.Init(params));
-
-  EXPECT_TRUE(client.reported_format_modifier_map.empty());
-  client.GetDefaultFeedback();
-  EXPECT_TRUE(!client.reported_format_modifier_map.empty());
-
-  for (const auto& [format, modifiers] : client.reported_format_modifier_map) {
-    std::vector<uint64_t> valid_modifiers;
-    for (uint64_t modifier : modifiers) {
-      if (modifier != DRM_FORMAT_MOD_INVALID)
-        valid_modifiers.push_back(modifier);
-    }
-    if (valid_modifiers.empty())
-      valid_modifiers.push_back(DRM_FORMAT_MOD_INVALID);
-    EXPECT_TRUE(client.FormatAndModifierSupported(format, valid_modifiers));
-  }
-}
-
-TEST_F(BufferCheckerClientTest,
-       CanUseAllReportedBufferModifiersDefaultFeedback) {
-  exo::wayland::test::BufferCheckerTestClient client;
-  auto params = base_params_;
-  // Initialize no buffers when we start, wait until we've gotten the list
-  params.num_buffers = 0;
-  params.linux_dmabuf_version =
-      ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION;
-  ASSERT_TRUE(client.Init(params));
-
-  EXPECT_TRUE(client.reported_format_modifier_map.empty());
-  client.GetDefaultFeedback();
-  EXPECT_TRUE(!client.reported_format_modifier_map.empty());
-
-  for (const auto& [format, modifiers] : client.reported_format_modifier_map) {
-    for (auto modifier : modifiers) {
-      EXPECT_TRUE(client.FormatAndModifierSupported(format, {modifier}));
-    }
-  }
-}
-
-TEST_F(BufferCheckerClientTest, CanUseAllReportedBufferFormatsSurfaceFeedback) {
-  exo::wayland::test::BufferCheckerTestClient client;
-  auto params = base_params_;
-  // Initialize no buffers when we start, wait until we've gotten the list
-  params.num_buffers = 0;
-  params.linux_dmabuf_version =
-      ZWP_LINUX_DMABUF_V1_GET_SURFACE_FEEDBACK_SINCE_VERSION;
-  ASSERT_TRUE(client.Init(params));
-
-  EXPECT_TRUE(client.reported_format_modifier_map.empty());
-  client.GetSurfaceFeedback();
-  EXPECT_TRUE(!client.reported_format_modifier_map.empty());
-
-  PrintReportedFormats(client.reported_formats);
-  for (auto format : client.reported_formats)
-    EXPECT_TRUE(client.HasAnySupportedUsages(format));
-}
-
-TEST_F(BufferCheckerClientTest,
-       CanUseAnyReportedBufferModifiersSurfaceFeedback) {
-  exo::wayland::test::BufferCheckerTestClient client;
-  auto params = base_params_;
-  // Initialize no buffers when we start, wait until we've gotten the list
-  params.num_buffers = 0;
-  params.linux_dmabuf_version =
-      ZWP_LINUX_DMABUF_V1_GET_SURFACE_FEEDBACK_SINCE_VERSION;
-  ASSERT_TRUE(client.Init(params));
-
-  EXPECT_TRUE(client.reported_format_modifier_map.empty());
-  client.GetSurfaceFeedback();
-  EXPECT_TRUE(!client.reported_format_modifier_map.empty());
-
-  for (const auto& [format, modifiers] : client.reported_format_modifier_map) {
-    std::vector<uint64_t> valid_modifiers;
-    for (uint64_t modifier : modifiers) {
-      if (modifier != DRM_FORMAT_MOD_INVALID)
-        valid_modifiers.push_back(modifier);
-    }
-    if (valid_modifiers.empty())
-      valid_modifiers.push_back(DRM_FORMAT_MOD_INVALID);
-    EXPECT_TRUE(client.FormatAndModifierSupported(format, valid_modifiers));
-  }
-}
-
-TEST_F(BufferCheckerClientTest,
-       CanUseAllReportedBufferModifiersSurfaceFeedback) {
-  exo::wayland::test::BufferCheckerTestClient client;
-  auto params = base_params_;
-  // Initialize no buffers when we start, wait until we've gotten the list
-  params.num_buffers = 0;
-  params.linux_dmabuf_version =
-      ZWP_LINUX_DMABUF_V1_GET_SURFACE_FEEDBACK_SINCE_VERSION;
-  ASSERT_TRUE(client.Init(params));
-
-  EXPECT_TRUE(client.reported_format_modifier_map.empty());
-  client.GetSurfaceFeedback();
-  EXPECT_TRUE(!client.reported_format_modifier_map.empty());
-
-  for (const auto& [format, modifiers] : client.reported_format_modifier_map) {
-    for (auto modifier : modifiers) {
-      EXPECT_TRUE(client.FormatAndModifierSupported(format, {modifier}));
-    }
-  }
-}
diff --git a/components/exo/wayland/wayland_dmabuf_feedback_manager.cc b/components/exo/wayland/wayland_dmabuf_feedback_manager.cc
deleted file mode 100644
index acf4f87..0000000
--- a/components/exo/wayland/wayland_dmabuf_feedback_manager.cc
+++ /dev/null
@@ -1,550 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/exo/wayland/wayland_dmabuf_feedback_manager.h"
-
-#include <bits/types.h>
-#include <drm_fourcc.h>
-#include <linux-dmabuf-unstable-v1-server-protocol.h>
-#include <sys/stat.h>
-
-#include "base/bind.h"
-#include "base/containers/contains.h"
-#include "components/exo/buffer.h"
-#include "components/exo/display.h"
-#include "components/exo/wayland/server_util.h"
-#include "components/viz/common/gpu/context_provider.h"
-#include "ui/aura/env.h"
-#include "ui/compositor/compositor.h"
-#include "ui/gfx/linux/drm_util_linux.h"
-
-namespace exo {
-namespace wayland {
-namespace {
-
-enum TrancheFlags : uint32_t { kNone = 0, kScanout = 1 };
-
-// Detecting optimal values for scanout tranches is not yet implemented and
-// quite complex. On certain hardware this can be problematic if drivers choose
-// scanout incompatible modifiers or memory regions if no scanout tranche is
-// supplied. For these cases we can make an educated guess and hardcode values
-// that are likely supported. They will only be advertised if they are also
-// supported by the compositor.
-#if 0  // AMD Radeon RX 6700 XT (usually uses 0x020000001896bb03 by default)
-const base::flat_map<uint32_t, std::vector<uint64_t>>
-    kWaylandDmabufKnownScanoutModifierMap = {
-        {DRM_FORMAT_RGB565, {0x0, 0x200000018801b03, 0x200000000000901}},
-        {DRM_FORMAT_XBGR8888,
-         {0x0, 0x200000018967b03, 0x200000018937b03, 0x200000018801b03,
-          0x200000000000901}},
-        {DRM_FORMAT_ABGR8888,
-         {0x0, 0x200000018967b03, 0x200000018937b03, 0x200000018801b03,
-          0x200000000000901}},
-        {DRM_FORMAT_XRGB8888,
-         {0x0, 0x200000018967b03, 0x200000018937b03, 0x200000018801b03,
-          0x200000000000901}},
-        {DRM_FORMAT_ARGB8888,
-         {0x0, 0x200000018967b03, 0x200000018937b03, 0x200000018801b03,
-          0x200000000000901}},
-        {DRM_FORMAT_XBGR2101010,
-         {0x0, 0x200000018967b03, 0x200000018937b03, 0x200000018801b03,
-          0x200000000000901}},
-        {DRM_FORMAT_ABGR2101010,
-         {0x0, 0x200000018967b03, 0x200000018937b03, 0x200000018801b03,
-          0x200000000000901}},
-        {DRM_FORMAT_XRGB2101010,
-         {0x0, 0x200000018967b03, 0x200000018937b03, 0x200000018801b03,
-          0x200000000000901}},
-        {DRM_FORMAT_ARGB2101010,
-         {0x0, 0x200000018967b03, 0x200000018937b03, 0x200000018801b03,
-          0x200000000000901}},
-        {DRM_FORMAT_XBGR16161616F,
-         {0x0, 0x200000018801b03, 0x200000000000a01, 0x200000000000901}},
-        {DRM_FORMAT_ABGR16161616F,
-         {0x0, 0x200000018801b03, 0x200000000000a01, 0x200000000000901}}};
-#else
-const base::flat_map<uint32_t, std::vector<uint64_t>>
-    kWaylandDmabufKnownScanoutModifierMap = {};
-#endif
-
-struct WaylandDmabufFeedbackFormat {
-  uint32_t format;
-  uint32_t padding;
-  uint64_t modifier;
-};
-
-void feedbackDestroy(wl_client* client, wl_resource* resource) {
-  wl_resource_destroy(resource);
-}
-
-const struct zwp_linux_dmabuf_feedback_v1_interface feedback_implementation = {
-    feedbackDestroy,
-};
-
-// A tranche links to a subset of formats and modifiers which are supported on a
-// specific device for a specific task. The most common use cases are the
-// "default" tranche (targeting the main device, advertising all formats and
-// modifiers supported by the compositor, for non-scanout cases) and "scanout"
-// tranches (advertising the formats and modifiers on a specific device that, if
-// used by the client, allows the compositor to offload some work to the
-// hardware). "scanout" tranches should usually only get advertised by the
-// compositor if there's a reasonable chance that composition can be skipped -
-// e.g. when a surface is in fullscreen mode.
-class WaylandDmabufFeedbackTranche {
- public:
-  explicit WaylandDmabufFeedbackTranche(
-      dev_t target_device_id,
-      TrancheFlags flags,
-      DrmFormatsAndModifiers drm_formats_and_modifiers)
-      : target_device_id_(target_device_id),
-        flags_(flags),
-        drm_formats_and_modifiers_(drm_formats_and_modifiers) {}
-  explicit WaylandDmabufFeedbackTranche(
-      const std::unique_ptr<WaylandDmabufFeedbackTranche>& other)
-      : target_device_id_(other->target_device_id_),
-        flags_(other->flags_),
-        drm_formats_and_modifiers_(other->drm_formats_and_modifiers_) {}
-
-  WaylandDmabufFeedbackTranche(const WaylandDmabufFeedbackTranche&) = delete;
-  WaylandDmabufFeedbackTranche& operator=(const WaylandDmabufFeedbackTranche&) =
-      delete;
-
-  ~WaylandDmabufFeedbackTranche() = default;
-
-  dev_t GetTargetDeviceId() const { return target_device_id_; }
-  TrancheFlags GetFlags() const { return flags_; }
-
-  const DrmFormatsAndModifiers GetFormatsAndModifiers() const {
-    return drm_formats_and_modifiers_;
-  }
-
- private:
-  const dev_t target_device_id_;
-  const TrancheFlags flags_;
-  const DrmFormatsAndModifiers drm_formats_and_modifiers_;
-};
-
-// A feedback is a set of information that is send to the client. It consists of
-// a main device (the device the compositor uses for rendering), a format table
-// (containing all formats and modifiers that may be advertised in one of the
-// tranches, including those not supported by the main device) and one or more
-// tranches (there must always be at least one for the main device). The
-// compositor may choose to update a feedback at any time if necessary. The
-// provided information should allow the client to pick the optimal combination
-// of device, format and modifier for any given situation.
-// A feedback object may be reused for several clients/requests in order to
-// minimize resource usage.
-// TODO: Updating a feedback is not yet implemented.
-class WaylandDmabufFeedback {
- public:
-  explicit WaylandDmabufFeedback(
-      dev_t device_id,
-      std::unique_ptr<WaylandDmabufFeedbackTranche> default_tranche)
-      : main_device_id_(device_id),
-        default_tranche_(std::move(default_tranche)) {}
-  explicit WaylandDmabufFeedback(
-      const std::unique_ptr<WaylandDmabufFeedback>& other)
-      : main_device_id_(other->main_device_id_),
-        default_tranche_(std::make_unique<WaylandDmabufFeedbackTranche>(
-            other->default_tranche_)) {
-    if (other->scanout_tranche_)
-      scanout_tranche_ = std::make_unique<WaylandDmabufFeedbackTranche>(
-          other->scanout_tranche_);
-  }
-
-  WaylandDmabufFeedback(const WaylandDmabufFeedback&) = delete;
-  WaylandDmabufFeedback& operator=(const WaylandDmabufFeedback&) = delete;
-
-  ~WaylandDmabufFeedback() = default;
-
-  dev_t GetMainDeviceId() const { return main_device_id_; }
-  const WaylandDmabufFeedbackTranche* GetDefaultTranche() const {
-    return default_tranche_.get();
-  }
-  const WaylandDmabufFeedbackTranche* GetScanoutTranche() const {
-    return scanout_tranche_.get();
-  }
-
-  void MaybeAddScanoutTranche() {
-    DCHECK(!scanout_tranche_);
-
-    DrmFormatsAndModifiers scanout_formats_and_modifiers;
-    for (const auto& [format, modifier_entries] :
-         default_tranche_->GetFormatsAndModifiers()) {
-      if (base::Contains(kWaylandDmabufKnownScanoutModifierMap, format)) {
-        base::flat_map<size_t, uint64_t> scanout_modifier_entries;
-
-        for (const auto& [table_index, modifier] : modifier_entries) {
-          if (base::Contains(kWaylandDmabufKnownScanoutModifierMap.at(format),
-                             modifier)) {
-            scanout_modifier_entries.emplace(table_index, modifier);
-          }
-        }
-
-        if (!scanout_modifier_entries.empty())
-          scanout_formats_and_modifiers.emplace(format,
-                                                scanout_modifier_entries);
-      }
-    }
-    if (scanout_formats_and_modifiers.empty())
-      return;
-
-    scanout_tranche_ = std::make_unique<WaylandDmabufFeedbackTranche>(
-        main_device_id_, TrancheFlags::kScanout, scanout_formats_and_modifiers);
-  }
-
-  void ClearScanoutTranche() {
-    DCHECK(scanout_tranche_);
-    scanout_tranche_ = nullptr;
-  }
-
- private:
-  const dev_t main_device_id_;
-  const std::unique_ptr<WaylandDmabufFeedbackTranche> default_tranche_;
-  std::unique_ptr<WaylandDmabufFeedbackTranche> scanout_tranche_;
-};
-
-class WaylandDmabufSurfaceFeedbackResourceWrapper;
-
-// A surface feedback can be requested by a client to get an optimized feedback
-// for a specific surface - most importantly if the client wants to receive
-// "scanout" tranches when possible. A client may request the surface feedback
-// multiple times for the same surface (e.g. implicitly via Mesa and explicitly
-// in the application). Thus a surface feedback can have multiple resource
-// objects.
-class WaylandDmabufSurfaceFeedback : public SurfaceObserver {
- public:
-  explicit WaylandDmabufSurfaceFeedback(
-      WaylandDmabufFeedbackManager* feedback_manager,
-      Surface* surface,
-      std::unique_ptr<WaylandDmabufFeedback> feedback)
-      : feedback_manager_(feedback_manager),
-        surface_(surface),
-        feedback_(std::move(feedback)) {
-    surface_->AddSurfaceObserver(this);
-  }
-
-  WaylandDmabufSurfaceFeedback(const WaylandDmabufSurfaceFeedback&) = delete;
-  WaylandDmabufSurfaceFeedback& operator=(const WaylandDmabufSurfaceFeedback&) =
-      delete;
-
-  ~WaylandDmabufSurfaceFeedback() override;
-
-  void OnSurfaceDestroying(Surface* surface) override {
-    feedback_manager_->RemoveSurfaceFeedback(surface_);
-  }
-
-  void OnFullscreenStateChanged(bool fullscreen) override {
-    if (fullscreen)
-      feedback_manager_->AddSurfaceToScanoutCandidates(surface_);
-    else
-      feedback_manager_->RemoveSurfaceFromScanoutCandidates(surface_);
-  }
-
-  void AddSurfaceFeedbackRef(
-      WaylandDmabufSurfaceFeedbackResourceWrapper* surface_feedback_ref) {
-    surface_feedback_refs_.insert(surface_feedback_ref);
-  }
-  void OnSurfaceFeedbackRefDestroyed(
-      WaylandDmabufSurfaceFeedbackResourceWrapper* surface_feedback_ref) {
-    DCHECK(base::Contains(surface_feedback_refs_, surface_feedback_ref));
-    surface_feedback_refs_.erase(surface_feedback_ref);
-    if (surface_feedback_refs_.empty())
-      feedback_manager_->RemoveSurfaceFeedback(surface_);
-  }
-
-  Surface* GetSurface() { return surface_; }
-  WaylandDmabufFeedback* GetFeedback() { return feedback_.get(); }
-  std::set<WaylandDmabufSurfaceFeedbackResourceWrapper*> GetFeedbackRefs() {
-    return surface_feedback_refs_;
-  }
-
- private:
-  WaylandDmabufFeedbackManager* const feedback_manager_;
-  Surface* const surface_;
-  std::unique_ptr<WaylandDmabufFeedback> const feedback_;
-  std::set<WaylandDmabufSurfaceFeedbackResourceWrapper*> surface_feedback_refs_;
-};
-
-// Simple helper class to use a surface feedback with multiple resource objects
-// when using SetImplementation()
-class WaylandDmabufSurfaceFeedbackResourceWrapper {
- public:
-  explicit WaylandDmabufSurfaceFeedbackResourceWrapper(
-      WaylandDmabufSurfaceFeedback* surface_feedback,
-      wl_resource* resource)
-      : surface_feedback_(surface_feedback), resource_(resource) {
-    surface_feedback->AddSurfaceFeedbackRef(this);
-  }
-
-  WaylandDmabufSurfaceFeedbackResourceWrapper(
-      const WaylandDmabufSurfaceFeedbackResourceWrapper&) = delete;
-  WaylandDmabufSurfaceFeedbackResourceWrapper& operator=(
-      const WaylandDmabufSurfaceFeedbackResourceWrapper&) = delete;
-
-  ~WaylandDmabufSurfaceFeedbackResourceWrapper() {
-    if (surface_feedback_)
-      surface_feedback_->OnSurfaceFeedbackRefDestroyed(this);
-  }
-
-  wl_resource* GetFeedbackResource() { return resource_; }
-  void SetInert() { surface_feedback_ = nullptr; }
-
- private:
-  WaylandDmabufSurfaceFeedback* surface_feedback_;
-  wl_resource* resource_;
-};
-
-WaylandDmabufSurfaceFeedback::~WaylandDmabufSurfaceFeedback() {
-  for (WaylandDmabufSurfaceFeedbackResourceWrapper* surface_feedback_ref :
-       surface_feedback_refs_) {
-    surface_feedback_ref->SetInert();
-  }
-  surface_->RemoveSurfaceObserver(this);
-}
-
-}  // namespace
-
-WaylandDmabufFeedbackManager::WaylandDmabufFeedbackManager(Display* display)
-    : display_(display) {
-  scoped_refptr<viz::ContextProvider> context_provider =
-      aura::Env::GetInstance()
-          ->context_factory()
-          ->SharedMainThreadContextProvider();
-  gpu::Capabilities caps = context_provider->ContextCapabilities();
-
-  size_t table_index = 0;
-  if (caps.drm_formats_and_modifiers.empty()) {
-    // Fallback path with implicit modifiers
-    gpu::GpuMemoryBufferFormatSet format_set = caps.gpu_memory_buffer_formats;
-
-    for (int i = 0; i <= static_cast<int>(gfx::BufferFormat::LAST); i++) {
-      gfx::BufferFormat buffer_format = static_cast<gfx::BufferFormat>(i);
-      if (format_set.Has(buffer_format)) {
-        int drm_format = ui::GetFourCCFormatFromBufferFormat(buffer_format);
-        if (ui::IsValidBufferFormat(drm_format)) {
-          base::flat_map<size_t, uint64_t> modifier_entries;
-          modifier_entries.emplace(table_index++, DRM_FORMAT_MOD_INVALID);
-          drm_formats_and_modifiers_.emplace(drm_format, modifier_entries);
-        }
-      }
-    }
-  } else {
-    for (const auto& [drm_format, modifiers] : caps.drm_formats_and_modifiers) {
-      base::flat_map<size_t, uint64_t> modifier_entries;
-      for (uint64_t modifier : modifiers) {
-        modifier_entries.emplace(table_index++, modifier);
-      }
-      drm_formats_and_modifiers_.emplace(drm_format, modifier_entries);
-    }
-  }
-  DCHECK(!drm_formats_and_modifiers_.empty() && table_index > 0);
-
-  struct stat device_stat;
-  if (caps.drm_render_node.empty() ||
-      stat(caps.drm_render_node.c_str(), &device_stat) != 0) {
-    version_ = ZWP_LINUX_DMABUF_V1_MODIFIER_SINCE_VERSION;
-    return;
-  }
-
-  auto tranche = std::make_unique<WaylandDmabufFeedbackTranche>(
-      device_stat.st_rdev, TrancheFlags::kNone, drm_formats_and_modifiers_);
-  default_feedback_ = std::make_unique<WaylandDmabufFeedback>(
-      device_stat.st_rdev, std::move(tranche));
-
-  size_t size = sizeof(WaylandDmabufFeedbackFormat) * table_index;
-  base::MappedReadOnlyRegion mapped_region =
-      base::ReadOnlySharedMemoryRegion::Create(size);
-  DCHECK(mapped_region.IsValid());
-
-  shared_memory_region_ = std::make_unique<base::ReadOnlySharedMemoryRegion>(
-      std::move(mapped_region.region));
-
-  WaylandDmabufFeedbackFormat* format_table =
-      static_cast<WaylandDmabufFeedbackFormat*>(mapped_region.mapping.memory());
-
-  for (const auto& [format, modifier_entries] : drm_formats_and_modifiers_) {
-    for (const auto& [table_index, modifier] : modifier_entries) {
-      format_table[table_index].format = format;
-      format_table[table_index].modifier = modifier;
-    }
-  }
-
-  version_ = ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION;
-}
-
-WaylandDmabufFeedbackManager::~WaylandDmabufFeedbackManager() = default;
-
-bool WaylandDmabufFeedbackManager::IsFormatSupported(uint32_t format) const {
-  return base::Contains(drm_formats_and_modifiers_, format);
-}
-
-void WaylandDmabufFeedbackManager::SendFormatsAndModifiers(
-    wl_resource* resource) const {
-  for (const auto& [format, modifier_entries] : drm_formats_and_modifiers_) {
-    zwp_linux_dmabuf_v1_send_format(resource, format);
-    if (wl_resource_get_version(resource) >=
-        ZWP_LINUX_DMABUF_V1_MODIFIER_SINCE_VERSION) {
-      for (const auto& [table_index, modifier] : modifier_entries) {
-        zwp_linux_dmabuf_v1_send_modifier(resource, format, modifier >> 32,
-                                          modifier & 0xffffffff);
-      }
-    }
-  }
-}
-
-void WaylandDmabufFeedbackManager::GetDefaultFeedback(
-    wl_client* client,
-    wl_resource* dma_buf_resource,
-    uint32_t feedback_id) {
-  wl_resource* feedback_resource = wl_resource_create(
-      client, &zwp_linux_dmabuf_feedback_v1_interface,
-      wl_resource_get_version(dma_buf_resource), feedback_id);
-
-  SetImplementation(feedback_resource, &feedback_implementation);
-
-  SendFeedback(default_feedback_.get(), feedback_resource);
-}
-
-void WaylandDmabufFeedbackManager::GetSurfaceFeedback(
-    wl_client* client,
-    wl_resource* dma_buf_resource,
-    uint32_t feedback_id,
-    wl_resource* surface_resource) {
-  Surface* surface = GetUserDataAs<Surface>(surface_resource);
-
-  auto it = surface_feedbacks_.find(surface);
-  if (it == surface_feedbacks_.end()) {
-    auto defaut_feedback_copy =
-        std::make_unique<WaylandDmabufFeedback>(default_feedback_);
-    auto new_surface_feedback = std::make_unique<WaylandDmabufSurfaceFeedback>(
-        this, surface, std::move(defaut_feedback_copy));
-    it = surface_feedbacks_.emplace_hint(it, surface,
-                                         std::move(new_surface_feedback));
-  }
-  WaylandDmabufSurfaceFeedback* surface_feedback = it->second.get();
-  DCHECK(surface_feedback);
-
-  wl_resource* feedback_resource = wl_resource_create(
-      client, &zwp_linux_dmabuf_feedback_v1_interface,
-      wl_resource_get_version(dma_buf_resource), feedback_id);
-
-  auto surface_feedback_ref =
-      std::make_unique<WaylandDmabufSurfaceFeedbackResourceWrapper>(
-          surface_feedback, feedback_resource);
-  SetImplementation(feedback_resource, &feedback_implementation,
-                    std::move(surface_feedback_ref));
-
-  auto* feedback = surface_feedback->GetFeedback();
-  if (base::Contains(scanout_candidates_, surface))
-    feedback->MaybeAddScanoutTranche();
-
-  SendFeedback(feedback, feedback_resource);
-}
-
-void WaylandDmabufFeedbackManager::RemoveSurfaceFeedback(Surface* surface) {
-  DCHECK(base::Contains(surface_feedbacks_, surface));
-  surface_feedbacks_.erase(surface);
-}
-
-void WaylandDmabufFeedbackManager::AddSurfaceToScanoutCandidates(
-    Surface* surface) {
-  if (base::Contains(scanout_candidates_, surface))
-    return;
-
-  scanout_candidates_.emplace(surface);
-
-  if (!base::Contains(surface_feedbacks_, surface))
-    return;
-
-  const auto& surface_feedback = surface_feedbacks_[surface];
-  auto* feedback = surface_feedback->GetFeedback();
-  if (feedback->GetScanoutTranche())
-    return;
-
-  feedback->MaybeAddScanoutTranche();
-  if (!feedback->GetScanoutTranche())
-    return;
-
-  for (auto* feedback_ref : surface_feedback->GetFeedbackRefs()) {
-    SendFeedback(feedback, feedback_ref->GetFeedbackResource());
-  }
-}
-
-void WaylandDmabufFeedbackManager::RemoveSurfaceFromScanoutCandidates(
-    Surface* surface) {
-  if (!base::Contains(scanout_candidates_, surface))
-    return;
-
-  scanout_candidates_.erase(surface);
-
-  if (!base::Contains(surface_feedbacks_, surface))
-    return;
-
-  const auto& surface_feedback = surface_feedbacks_[surface];
-  auto* feedback = surface_feedback->GetFeedback();
-  if (!feedback->GetScanoutTranche())
-    return;
-
-  feedback->ClearScanoutTranche();
-  for (auto* feedback_ref : surface_feedback->GetFeedbackRefs()) {
-    SendFeedback(feedback, feedback_ref->GetFeedbackResource());
-  }
-}
-
-void WaylandDmabufFeedbackManager::SendFeedback(WaylandDmabufFeedback* feedback,
-                                                wl_resource* resource) {
-  wl_array main_device_buf;
-  wl_array_init(&main_device_buf);
-  dev_t* device_id_ptr =
-      static_cast<dev_t*>(wl_array_add(&main_device_buf, sizeof(dev_t)));
-  *device_id_ptr = feedback->GetMainDeviceId();
-  zwp_linux_dmabuf_feedback_v1_send_main_device(resource, &main_device_buf);
-  wl_array_release(&main_device_buf);
-
-  base::subtle::FDPair fd_pair = shared_memory_region_->GetPlatformHandle();
-  zwp_linux_dmabuf_feedback_v1_send_format_table(
-      resource, fd_pair.fd, shared_memory_region_->GetSize());
-
-  if (feedback->GetScanoutTranche())
-    SendTranche(feedback->GetScanoutTranche(), resource);
-
-  SendTranche(feedback->GetDefaultTranche(), resource);
-
-  zwp_linux_dmabuf_feedback_v1_send_done(resource);
-}
-
-void WaylandDmabufFeedbackManager::SendTranche(
-    const WaylandDmabufFeedbackTranche* tranche,
-    wl_resource* resource) {
-  wl_array target_device_buf;
-  wl_array_init(&target_device_buf);
-  dev_t* device_id_ptr =
-      static_cast<dev_t*>(wl_array_add(&target_device_buf, sizeof(dev_t)));
-  *device_id_ptr = tranche->GetTargetDeviceId();
-  zwp_linux_dmabuf_feedback_v1_send_tranche_target_device(resource,
-                                                          &target_device_buf);
-  wl_array_release(&target_device_buf);
-
-  zwp_linux_dmabuf_feedback_v1_send_tranche_flags(resource,
-                                                  tranche->GetFlags());
-
-  wl_array formats_array;
-  wl_array_init(&formats_array);
-  for (const auto& [format, modifier_entries] :
-       tranche->GetFormatsAndModifiers()) {
-    for (const auto& [table_index, modifier] : modifier_entries) {
-      uint16_t* format_index_ptr = static_cast<uint16_t*>(
-          wl_array_add(&formats_array, sizeof(uint16_t)));
-      *format_index_ptr = table_index;
-    }
-  }
-  zwp_linux_dmabuf_feedback_v1_send_tranche_formats(resource, &formats_array);
-  wl_array_release(&formats_array);
-
-  zwp_linux_dmabuf_feedback_v1_send_tranche_done(resource);
-}
-
-}  // namespace wayland
-}  // namespace exo
diff --git a/components/exo/wayland/wayland_dmabuf_feedback_manager.h b/components/exo/wayland/wayland_dmabuf_feedback_manager.h
deleted file mode 100644
index 2f6ced26..0000000
--- a/components/exo/wayland/wayland_dmabuf_feedback_manager.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright 2022 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef COMPONENTS_EXO_WAYLAND_WAYLAND_DMABUF_FEEDBACK_MANAGER_H_
-#define COMPONENTS_EXO_WAYLAND_WAYLAND_DMABUF_FEEDBACK_MANAGER_H_
-
-#include <stdint.h>
-#include <sys/types.h>
-#include <memory>
-#include <set>
-
-#include "base/containers/flat_map.h"
-#include "base/memory/read_only_shared_memory_region.h"
-#include "components/exo/surface_observer.h"
-
-struct wl_client;
-struct wl_resource;
-
-namespace exo {
-
-class Display;
-
-namespace wayland {
-
-namespace {
-class WaylandDmabufFeedback;
-class WaylandDmabufFeedbackTranche;
-class WaylandDmabufSurfaceFeedback;
-}  // namespace
-
-using DrmFormatsAndModifiers =
-    base::flat_map<uint32_t, base::flat_map<size_t, uint64_t>>;
-
-class WaylandDmabufFeedbackManager {
- public:
-  explicit WaylandDmabufFeedbackManager(Display* display);
-
-  WaylandDmabufFeedbackManager(const WaylandDmabufFeedbackManager&) = delete;
-  WaylandDmabufFeedbackManager& operator=(const WaylandDmabufFeedbackManager&) =
-      delete;
-
-  ~WaylandDmabufFeedbackManager();
-
-  Display* GetDisplay() { return display_; }
-  uint32_t GetVersionSupportedByPlatform() const { return version_; }
-
-  bool IsFormatSupported(uint32_t format) const;
-  void SendFormatsAndModifiers(wl_resource* resource) const;
-  void GetDefaultFeedback(wl_client* client,
-                          wl_resource* dma_buf_resource,
-                          uint32_t feedback_id);
-  void GetSurfaceFeedback(wl_client* client,
-                          wl_resource* dma_buf_resource,
-                          uint32_t feedback_id,
-                          wl_resource* surface_resource);
-  void RemoveSurfaceFeedback(Surface* surface);
-
-  void AddSurfaceToScanoutCandidates(Surface* surface);
-  void RemoveSurfaceFromScanoutCandidates(Surface* surface);
-
- private:
-  void SendFeedback(WaylandDmabufFeedback* feedback, wl_resource* resource);
-  void SendTranche(const WaylandDmabufFeedbackTranche* tranche,
-                   wl_resource* resource);
-
-  Display* const display_;
-  uint32_t version_;
-  DrmFormatsAndModifiers drm_formats_and_modifiers_;
-  std::unique_ptr<base::ReadOnlySharedMemoryRegion> shared_memory_region_;
-  std::unique_ptr<WaylandDmabufFeedback> default_feedback_;
-  base::flat_map<Surface*, std::unique_ptr<WaylandDmabufSurfaceFeedback>>
-      surface_feedbacks_;
-  std::set<Surface*> scanout_candidates_;
-};
-
-}  // namespace wayland
-}  // namespace exo
-
-#endif  // COMPONENTS_EXO_WAYLAND_WAYLAND_DMABUF_FEEDBACK_MANAGER_H_
diff --git a/components/exo/wayland/zwp_linux_dmabuf.cc b/components/exo/wayland/zwp_linux_dmabuf.cc
index 49f48da..aa3973fe 100644
--- a/components/exo/wayland/zwp_linux_dmabuf.cc
+++ b/components/exo/wayland/zwp_linux_dmabuf.cc
@@ -12,9 +12,7 @@
 #include "components/exo/buffer.h"
 #include "components/exo/display.h"
 #include "components/exo/wayland/server_util.h"
-#include "components/exo/wayland/wayland_dmabuf_feedback_manager.h"
 #include "ui/gfx/buffer_format_util.h"
-#include "ui/gfx/linux/drm_util_linux.h"
 
 namespace exo {
 namespace wayland {
@@ -37,6 +35,20 @@
 ////////////////////////////////////////////////////////////////////////////////
 // linux_buffer_params_interface:
 
+const struct dmabuf_supported_format {
+  uint32_t dmabuf_format;
+  gfx::BufferFormat buffer_format;
+} kSupportedDmaBufFormats[] = {
+    {DRM_FORMAT_RGB565, gfx::BufferFormat::BGR_565},
+    {DRM_FORMAT_XBGR8888, gfx::BufferFormat::RGBX_8888},
+    {DRM_FORMAT_ABGR8888, gfx::BufferFormat::RGBA_8888},
+    {DRM_FORMAT_XRGB8888, gfx::BufferFormat::BGRX_8888},
+    {DRM_FORMAT_ARGB8888, gfx::BufferFormat::BGRA_8888},
+    {DRM_FORMAT_NV12, gfx::BufferFormat::YUV_420_BIPLANAR},
+    {DRM_FORMAT_YVU420, gfx::BufferFormat::YVU_420},
+    {DRM_FORMAT_ABGR2101010, gfx::BufferFormat::RGBA_1010102},
+    {DRM_FORMAT_ARGB2101010, gfx::BufferFormat::BGRA_1010102}};
+
 struct LinuxBufferParams {
   struct Plane {
     base::ScopedFD fd;
@@ -45,10 +57,9 @@
     uint64_t modifier;
   };
 
-  explicit LinuxBufferParams(WaylandDmabufFeedbackManager* feedback_manager)
-      : feedback_manager(feedback_manager) {}
+  explicit LinuxBufferParams(Display* display) : display(display) {}
 
-  WaylandDmabufFeedbackManager* const feedback_manager;
+  Display* const display;
   std::map<uint32_t, Plane> planes;
 };
 
@@ -140,22 +151,26 @@
                            int32_t height,
                            uint32_t format,
                            uint32_t flags) {
-  LinuxBufferParams* linux_buffer_params =
-      GetUserDataAs<LinuxBufferParams>(resource);
-
-  if (!linux_buffer_params->feedback_manager->IsFormatSupported(format)) {
+  const auto* supported_format = std::find_if(
+      std::begin(kSupportedDmaBufFormats), std::end(kSupportedDmaBufFormats),
+      [format](const dmabuf_supported_format& supported_format) {
+        return supported_format.dmabuf_format == format;
+      });
+  if (supported_format == std::end(kSupportedDmaBufFormats)) {
     wl_resource_post_error(resource,
                            ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_FORMAT,
                            "format not supported");
     return nullptr;
   }
 
-  gfx::BufferFormat buffer_format = ui::GetBufferFormatFromFourCCFormat(format);
-  if (!ValidateLinuxBufferParams(resource, width, height, buffer_format,
-                                 flags)) {
+  if (!ValidateLinuxBufferParams(resource, width, height,
+                                 supported_format->buffer_format, flags)) {
     return nullptr;
   }
 
+  LinuxBufferParams* linux_buffer_params =
+      GetUserDataAs<LinuxBufferParams>(resource);
+
   gfx::NativePixmapHandle handle;
 
   // A lot of clients (arc++, arcvm, sommelier etc) pass 0
@@ -182,9 +197,9 @@
   bool y_invert = (flags & ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT) != 0;
 
   std::unique_ptr<Buffer> buffer =
-      linux_buffer_params->feedback_manager->GetDisplay()
-          ->CreateLinuxDMABufBuffer(gfx::Size(width, height), buffer_format,
-                                    std::move(handle), y_invert);
+      linux_buffer_params->display->CreateLinuxDMABufBuffer(
+          gfx::Size(width, height), supported_format->buffer_format,
+          std::move(handle), y_invert);
   if (!buffer) {
     zwp_linux_buffer_params_v1_send_failed(resource);
     return nullptr;
@@ -239,11 +254,8 @@
 void linux_dmabuf_create_params(wl_client* client,
                                 wl_resource* resource,
                                 uint32_t id) {
-  WaylandDmabufFeedbackManager* feedback_manager =
-      GetUserDataAs<WaylandDmabufFeedbackManager>(resource);
-
   std::unique_ptr<LinuxBufferParams> linux_buffer_params =
-      std::make_unique<LinuxBufferParams>(feedback_manager);
+      std::make_unique<LinuxBufferParams>(GetUserDataAs<Display>(resource));
 
   wl_resource* linux_buffer_params_resource =
       wl_resource_create(client, &zwp_linux_buffer_params_v1_interface,
@@ -254,34 +266,8 @@
                     std::move(linux_buffer_params));
 }
 
-void linux_dmabuf_get_default_feedback(wl_client* client,
-                                       wl_resource* dma_buf_resource,
-                                       uint32_t feedback_id) {
-  WaylandDmabufFeedbackManager* feedback_manager =
-      static_cast<WaylandDmabufFeedbackManager*>(
-          wl_resource_get_user_data(dma_buf_resource));
-
-  feedback_manager->GetDefaultFeedback(client, dma_buf_resource, feedback_id);
-}
-
-void linux_dmabuf_get_surface_feedback(wl_client* client,
-                                       wl_resource* dma_buf_resource,
-                                       uint32_t feedback_id,
-                                       wl_resource* surface_resource) {
-  WaylandDmabufFeedbackManager* feedback_manager =
-      static_cast<WaylandDmabufFeedbackManager*>(
-          wl_resource_get_user_data(dma_buf_resource));
-
-  feedback_manager->GetSurfaceFeedback(client, dma_buf_resource, feedback_id,
-                                       surface_resource);
-}
-
 const struct zwp_linux_dmabuf_v1_interface linux_dmabuf_implementation = {
-    linux_dmabuf_destroy,
-    linux_dmabuf_create_params,
-    linux_dmabuf_get_default_feedback,
-    linux_dmabuf_get_surface_feedback,
-};
+    linux_dmabuf_destroy, linux_dmabuf_create_params};
 
 }  // namespace
 
@@ -289,20 +275,15 @@
                        void* data,
                        uint32_t version,
                        uint32_t id) {
-  WaylandDmabufFeedbackManager* feedback_manager =
-      static_cast<WaylandDmabufFeedbackManager*>(data);
+  wl_resource* resource =
+      wl_resource_create(client, &zwp_linux_dmabuf_v1_interface,
+                         std::min(version, kZwpLinuxDmabufVersion), id);
 
-  wl_resource* resource = wl_resource_create(
-      client, &zwp_linux_dmabuf_v1_interface,
-      std::min(version, feedback_manager->GetVersionSupportedByPlatform()), id);
+  wl_resource_set_implementation(resource, &linux_dmabuf_implementation, data,
+                                 nullptr);
 
-  wl_resource_set_implementation(resource, &linux_dmabuf_implementation,
-                                 feedback_manager, nullptr);
-
-  if (wl_resource_get_version(resource) <
-      ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION) {
-    feedback_manager->SendFormatsAndModifiers(resource);
-  }
+  for (const auto& supported_format : kSupportedDmaBufFormats)
+    zwp_linux_dmabuf_v1_send_format(resource, supported_format.dmabuf_format);
 }
 
 }  // namespace wayland
diff --git a/components/exo/wayland/zwp_linux_dmabuf.h b/components/exo/wayland/zwp_linux_dmabuf.h
index cd8d3b14..ab1160f 100644
--- a/components/exo/wayland/zwp_linux_dmabuf.h
+++ b/components/exo/wayland/zwp_linux_dmabuf.h
@@ -12,6 +12,8 @@
 namespace exo {
 namespace wayland {
 
+constexpr uint32_t kZwpLinuxDmabufVersion = 2;
+
 void bind_linux_dmabuf(wl_client* client,
                        void* data,
                        uint32_t version,
diff --git a/components/favicon/core/favicon_backend.cc b/components/favicon/core/favicon_backend.cc
index 5e8dec2..5177fad5 100644
--- a/components/favicon/core/favicon_backend.cc
+++ b/components/favicon/core/favicon_backend.cc
@@ -444,6 +444,16 @@
   return changed_page_urls;
 }
 
+std::vector<GURL> FaviconBackend::GetFaviconUrlsForUrl(const GURL& page_url) {
+  std::vector<IconMapping> icon_mappings;
+  db_->GetIconMappingsForPageURL(page_url, &icon_mappings);
+  std::vector<GURL> urls;
+  for (const IconMapping& icon_mapping : icon_mappings) {
+    urls.push_back(icon_mapping.icon_url);
+  }
+  return urls;
+}
+
 bool FaviconBackend::CanSetOnDemandFavicons(const GURL& page_url,
                                             favicon_base::IconType icon_type) {
   // We allow writing an on demand favicon of type |icon_type| only if there is
diff --git a/components/favicon/core/favicon_backend.h b/components/favicon/core/favicon_backend.h
index 0d81120..18b18df7 100644
--- a/components/favicon/core/favicon_backend.h
+++ b/components/favicon/core/favicon_backend.h
@@ -116,6 +116,10 @@
       const favicon_base::IconTypeSet& icon_types,
       const base::flat_set<GURL>& page_urls_to_write);
 
+  // Returns all icon URLs associated with the given `page_url`. In case there
+  // are multiple, they're ordered in descending order of IconType.
+  std::vector<GURL> GetFaviconUrlsForUrl(const GURL& page_url);
+
   // See function of same name in HistoryService for details.
   SetFaviconsResult SetOnDemandFavicons(const GURL& page_url,
                                         favicon_base::IconType icon_type,
diff --git a/components/file_access/BUILD.gn b/components/file_access/BUILD.gn
index 0bc60bb..07b83b6 100644
--- a/components/file_access/BUILD.gn
+++ b/components/file_access/BUILD.gn
@@ -8,9 +8,25 @@
   sources = [
     "scoped_file_access.cc",
     "scoped_file_access.h",
+    "scoped_file_access_delegate.cc",
+    "scoped_file_access_delegate.h",
   ]
 
   defines = [ "IS_FILE_ACCESS_IMPL" ]
 
-  deps = [ "//base" ]
+  deps = [
+    "//base",
+    "//url:url",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [ "scoped_file_access_delegate_unittest.cc" ]
+
+  deps = [
+    ":file_access",
+    "//base",
+    "//testing/gtest",
+  ]
 }
diff --git a/components/file_access/scoped_file_access_delegate.cc b/components/file_access/scoped_file_access_delegate.cc
new file mode 100644
index 0000000..3e12c6d3
--- /dev/null
+++ b/components/file_access/scoped_file_access_delegate.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/file_access/scoped_file_access_delegate.h"
+
+namespace file_access {
+// static
+ScopedFileAccessDelegate* ScopedFileAccessDelegate::Get() {
+  return scoped_file_access_delegate_;
+}
+
+// static
+bool ScopedFileAccessDelegate::HasInstance() {
+  return scoped_file_access_delegate_;
+}
+
+// static
+void ScopedFileAccessDelegate::DeleteInstance() {
+  if (scoped_file_access_delegate_) {
+    delete scoped_file_access_delegate_;
+    scoped_file_access_delegate_ = nullptr;
+  }
+}
+
+ScopedFileAccessDelegate::ScopedFileAccessDelegate() {
+  if (scoped_file_access_delegate_) {
+    delete scoped_file_access_delegate_;
+  }
+  scoped_file_access_delegate_ = this;
+}
+
+ScopedFileAccessDelegate::~ScopedFileAccessDelegate() {
+  if (scoped_file_access_delegate_ == this) {
+    scoped_file_access_delegate_ = nullptr;
+  }
+}
+
+// static
+ScopedFileAccessDelegate*
+    ScopedFileAccessDelegate::scoped_file_access_delegate_ = nullptr;
+
+}  // namespace file_access
\ No newline at end of file
diff --git a/components/file_access/scoped_file_access_delegate.h b/components/file_access/scoped_file_access_delegate.h
new file mode 100644
index 0000000..622d3fd
--- /dev/null
+++ b/components/file_access/scoped_file_access_delegate.h
@@ -0,0 +1,59 @@
+// 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_FILE_ACCESS_SCOPED_FILE_ACCESS_DELEGATE_H_
+#define COMPONENTS_FILE_ACCESS_SCOPED_FILE_ACCESS_DELEGATE_H_
+
+#include <vector>
+
+#include "base/callback.h"
+#include "base/component_export.h"
+#include "base/files/file_path.h"
+#include "components/file_access/scoped_file_access.h"
+#include "url/gurl.h"
+
+class ScopedFileAccessDelegateTest;
+
+namespace file_access {
+
+// This class is mainly a interface and used to delegate DLP checks to
+// appropriate proxy. It is used for managed ChromeOs only in the implementation
+// DlpScopedfileAccessDelegate. Only one instance of a class which extends
+// this class can exist at a time. The class itself also manages this one
+// instance. When it is replaced the old instance is destructed.
+class COMPONENT_EXPORT(FILE_ACCESS) ScopedFileAccessDelegate {
+ public:
+  ScopedFileAccessDelegate(const ScopedFileAccessDelegate&) = delete;
+  ScopedFileAccessDelegate& operator=(const ScopedFileAccessDelegate&) = delete;
+
+  // Returns a pointer to the existing instance of the class.
+  static ScopedFileAccessDelegate* Get();
+
+  // Returns true if an instance exists, without forcing an initialization.
+  static bool HasInstance();
+
+  // Deletes the existing instance of the class if it's already created.
+  // Indicates that restricting data transfer is no longer required.
+  // The instance will be deconstructed
+  static void DeleteInstance();
+
+  virtual void RequestFilesAccess(
+      const std::vector<base::FilePath>& files,
+      const GURL& destination_url,
+      base::OnceCallback<void(file_access::ScopedFileAccess)> callback) = 0;
+
+ protected:
+  ScopedFileAccessDelegate();
+
+  virtual ~ScopedFileAccessDelegate();
+
+  // A single instance of ScopedFileAccessDelegate. Equals nullptr when there's
+  // not any data transfer restrictions required.
+  static ScopedFileAccessDelegate* scoped_file_access_delegate_;
+
+  friend class ::ScopedFileAccessDelegateTest;
+};
+}  // namespace file_access
+
+#endif  // COMPONENTS_FILE_ACCESS_SCOPED_FILE_ACCESS_DELEGATE_H_
diff --git a/components/file_access/scoped_file_access_delegate_unittest.cc b/components/file_access/scoped_file_access_delegate_unittest.cc
new file mode 100644
index 0000000..65bbdfe
--- /dev/null
+++ b/components/file_access/scoped_file_access_delegate_unittest.cc
@@ -0,0 +1,81 @@
+// 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/file_access/scoped_file_access_delegate.h"
+#include <memory>
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace file_access {
+class ScopedFileAccessDelegateTestInstance : public ScopedFileAccessDelegate {
+ public:
+  static int instance_counter;
+  ScopedFileAccessDelegateTestInstance() { ++instance_counter; }
+  ~ScopedFileAccessDelegateTestInstance() override { --instance_counter; }
+  void RequestFilesAccess(
+      const std::vector<base::FilePath>& files,
+      const GURL& destination_url,
+      base::OnceCallback<void(file_access::ScopedFileAccess)> callback)
+      override{};
+};
+int ScopedFileAccessDelegateTestInstance::instance_counter = 0;
+}  // namespace file_access
+
+class ScopedFileAccessDelegateTest : public ::testing::Test {
+ protected:
+  void SetUp() override {
+    // reset static variables
+    file_access::ScopedFileAccessDelegate::scoped_file_access_delegate_ =
+        nullptr;
+    file_access::ScopedFileAccessDelegateTestInstance::instance_counter = 0;
+  }
+};
+
+TEST_F(ScopedFileAccessDelegateTest, GetEmptySingleton) {
+  EXPECT_EQ(file_access::ScopedFileAccessDelegate::Get(), nullptr);
+}
+
+TEST_F(ScopedFileAccessDelegateTest, HasEmptySingleton) {
+  EXPECT_EQ(file_access::ScopedFileAccessDelegate::HasInstance(), false);
+}
+
+TEST_F(ScopedFileAccessDelegateTest, InstanceGetInstance) {
+  new file_access::ScopedFileAccessDelegateTestInstance();
+  EXPECT_NE(file_access::ScopedFileAccessDelegate::Get(), nullptr);
+}
+
+TEST_F(ScopedFileAccessDelegateTest, InstanceHasInstance) {
+  new file_access::ScopedFileAccessDelegateTestInstance();
+  EXPECT_EQ(file_access::ScopedFileAccessDelegate::HasInstance(), true);
+}
+
+TEST_F(ScopedFileAccessDelegateTest, DeleteInstanceGetInstance) {
+  new file_access::ScopedFileAccessDelegateTestInstance();
+  file_access::ScopedFileAccessDelegate::DeleteInstance();
+  EXPECT_EQ(file_access::ScopedFileAccessDelegate::Get(), nullptr);
+}
+
+TEST_F(ScopedFileAccessDelegateTest, DeleteInstanceHasInstance) {
+  new file_access::ScopedFileAccessDelegateTestInstance();
+  file_access::ScopedFileAccessDelegate::DeleteInstance();
+  EXPECT_EQ(file_access::ScopedFileAccessDelegate::HasInstance(), false);
+}
+
+TEST_F(ScopedFileAccessDelegateTest, DeleteEmptyInstance) {
+  EXPECT_NO_FATAL_FAILURE(
+      file_access::ScopedFileAccessDelegate::DeleteInstance());
+}
+
+TEST_F(ScopedFileAccessDelegateTest, DeleteInstanceDestruct) {
+  new file_access::ScopedFileAccessDelegateTestInstance();
+  file_access::ScopedFileAccessDelegate::DeleteInstance();
+  EXPECT_EQ(file_access::ScopedFileAccessDelegateTestInstance::instance_counter,
+            0);
+}
+
+TEST_F(ScopedFileAccessDelegateTest, MultiSetInstance) {
+  new file_access::ScopedFileAccessDelegateTestInstance();
+  new file_access::ScopedFileAccessDelegateTestInstance();
+  EXPECT_EQ(file_access::ScopedFileAccessDelegateTestInstance::instance_counter,
+            1);
+}
diff --git a/components/history/core/browser/history_backend.cc b/components/history/core/browser/history_backend.cc
index a2a295b..148e649 100644
--- a/components/history/core/browser/history_backend.cc
+++ b/components/history/core/browser/history_backend.cc
@@ -2381,6 +2381,12 @@
   return favicon_backend_->GetFaviconForId(favicon_id, desired_size);
 }
 
+std::vector<GURL> HistoryBackend::GetFaviconURLsForURL(const GURL& page_url) {
+  if (!favicon_backend_)
+    return {};
+  return favicon_backend_->GetFaviconUrlsForUrl(page_url);
+}
+
 std::vector<favicon_base::FaviconRawBitmapResult>
 HistoryBackend::UpdateFaviconMappingsAndFetch(
     const base::flat_set<GURL>& page_urls,
diff --git a/components/history/core/browser/history_backend.h b/components/history/core/browser/history_backend.h
index e8139e7..e7838f2 100644
--- a/components/history/core/browser/history_backend.h
+++ b/components/history/core/browser/history_backend.h
@@ -399,6 +399,8 @@
       favicon_base::FaviconID favicon_id,
       int desired_size);
 
+  std::vector<GURL> GetFaviconURLsForURL(const GURL& page_url) override;
+
   std::vector<favicon_base::FaviconRawBitmapResult>
   UpdateFaviconMappingsAndFetch(const base::flat_set<GURL>& page_urls,
                                 const GURL& icon_url,
diff --git a/components/history/core/browser/sync/history_backend_for_sync.h b/components/history/core/browser/sync/history_backend_for_sync.h
index 423dfc1a..6186d80 100644
--- a/components/history/core/browser/sync/history_backend_for_sync.h
+++ b/components/history/core/browser/sync/history_backend_for_sync.h
@@ -50,6 +50,8 @@
                                             VisitID referrer_id,
                                             VisitID opener_id) = 0;
 
+  virtual std::vector<GURL> GetFaviconURLsForURL(const GURL& page_url) = 0;
+
   virtual void AddObserver(HistoryBackendObserver* observer) = 0;
   virtual void RemoveObserver(HistoryBackendObserver* observer) = 0;
 };
diff --git a/components/history/core/browser/sync/history_sync_bridge.cc b/components/history/core/browser/sync/history_sync_bridge.cc
index 02657a12..cd61d3fa 100644
--- a/components/history/core/browser/sync/history_sync_bridge.cc
+++ b/components/history/core/browser/sync/history_sync_bridge.cc
@@ -29,6 +29,13 @@
 
 constexpr base::TimeDelta kMaxWriteToTheFuture = base::Days(2);
 
+// Some pages embed the favicon image itself in the URL, using the data: scheme.
+// These cases, or more generally any favicon URL that is unreasonably large,
+// should simply be ignored, because it otherwise runs into the risk that the
+// whole entity may fail to sync due to max size limits imposed by the sync
+// server. And after all, the favicon is somewhat optional.
+constexpr int kMaxFaviconUrlSizeToSync = 2048;
+
 std::string GetStorageKeyFromVisitRow(const VisitRow& row) {
   DCHECK(!row.visit_time.is_null());
   return HistorySyncMetadataDatabase::StorageKeyFromVisitTime(row.visit_time);
@@ -235,7 +242,8 @@
 
 std::unique_ptr<syncer::EntityData> MakeEntityData(
     const std::string& local_cache_guid,
-    const std::vector<AnnotatedVisit>& redirect_visits) {
+    const std::vector<AnnotatedVisit>& redirect_visits,
+    const std::vector<GURL>& favicon_urls) {
   DCHECK(!local_cache_guid.empty());
   DCHECK(!redirect_visits.empty());
 
@@ -326,6 +334,16 @@
   history->set_password_state(
       PasswordStateToProto(content_annotations.password_state));
 
+  if (!favicon_urls.empty()) {
+    // If there are multiple favicon URLs (which should be rare), they're
+    // returned in roughly best-to-worst order (see
+    // FaviconDatabase::GetIconMappingsForPageURL), so just take the first.
+    const GURL& url = favicon_urls.front();
+    if (url.is_valid() && url.spec().size() <= kMaxFaviconUrlSizeToSync) {
+      history->set_favicon_url(url.spec());
+    }
+  }
+
   // The entity name is used for debugging purposes; choose something that's a
   // decent tradeoff between "unique" and "readable".
   entity_data->name =
@@ -533,9 +551,14 @@
     }
     DCHECK_EQ(redirect_visits.back().visit_id, final_visit.visit_id);
 
+    std::vector<AnnotatedVisit> annotated_visits =
+        history_backend_->ToAnnotatedVisits(redirect_visits);
+
+    std::vector<GURL> favicon_urls = history_backend_->GetFaviconURLsForURL(
+        annotated_visits.back().url_row.url());
+
     std::unique_ptr<syncer::EntityData> entity_data =
-        MakeEntityData(GetLocalCacheGuid(),
-                       history_backend_->ToAnnotatedVisits(redirect_visits));
+        MakeEntityData(GetLocalCacheGuid(), annotated_visits, favicon_urls);
 
     batch->Put(key, std::move(entity_data));
   }
@@ -608,9 +631,14 @@
   }
   DCHECK_EQ(redirect_visits.back().visit_id, visit_row.visit_id);
 
+  std::vector<AnnotatedVisit> annotated_visits =
+      history_backend_->ToAnnotatedVisits(redirect_visits);
+
+  std::vector<GURL> favicon_urls = history_backend_->GetFaviconURLsForURL(
+      annotated_visits.back().url_row.url());
+
   std::unique_ptr<syncer::EntityData> entity_data =
-      MakeEntityData(GetLocalCacheGuid(),
-                     history_backend_->ToAnnotatedVisits(redirect_visits));
+      MakeEntityData(GetLocalCacheGuid(), annotated_visits, favicon_urls);
 
   std::unique_ptr<syncer::MetadataChangeList> metadata_change_list =
       CreateMetadataChangeList();
@@ -702,9 +730,14 @@
   }
   DCHECK_EQ(redirect_visits.back().visit_id, visit_row.visit_id);
 
+  std::vector<AnnotatedVisit> annotated_visits =
+      history_backend_->ToAnnotatedVisits(redirect_visits);
+
+  std::vector<GURL> favicon_urls = history_backend_->GetFaviconURLsForURL(
+      annotated_visits.back().url_row.url());
+
   std::unique_ptr<syncer::EntityData> entity_data =
-      MakeEntityData(GetLocalCacheGuid(),
-                     history_backend_->ToAnnotatedVisits(redirect_visits));
+      MakeEntityData(GetLocalCacheGuid(), annotated_visits, favicon_urls);
 
   std::unique_ptr<syncer::MetadataChangeList> metadata_change_list =
       CreateMetadataChangeList();
diff --git a/components/history/core/browser/sync/test_history_backend_for_sync.cc b/components/history/core/browser/sync/test_history_backend_for_sync.cc
index f204015..743bfba6 100644
--- a/components/history/core/browser/sync/test_history_backend_for_sync.cc
+++ b/components/history/core/browser/sync/test_history_backend_for_sync.cc
@@ -233,6 +233,12 @@
   return false;
 }
 
+std::vector<GURL> TestHistoryBackendForSync::GetFaviconURLsForURL(
+    const GURL& page_url) {
+  // For the unit tests based on this class, favicon URLs aren't required.
+  return {};
+}
+
 void TestHistoryBackendForSync::AddObserver(HistoryBackendObserver* observer) {
   observers_.AddObserver(observer);
 }
diff --git a/components/history/core/browser/sync/test_history_backend_for_sync.h b/components/history/core/browser/sync/test_history_backend_for_sync.h
index 70139ee5..143219b 100644
--- a/components/history/core/browser/sync/test_history_backend_for_sync.h
+++ b/components/history/core/browser/sync/test_history_backend_for_sync.h
@@ -62,6 +62,7 @@
   bool UpdateVisitReferrerOpenerIDs(VisitID visit_id,
                                     VisitID referrer_id,
                                     VisitID opener_id) override;
+  std::vector<GURL> GetFaviconURLsForURL(const GURL& page_url) override;
   void AddObserver(HistoryBackendObserver* observer) override;
   void RemoveObserver(HistoryBackendObserver* observer) override;
 
diff --git a/components/omnibox/browser/scored_history_match.cc b/components/omnibox/browser/scored_history_match.cc
index bfc1f06..18e226e 100644
--- a/components/omnibox/browser/scored_history_match.cc
+++ b/components/omnibox/browser/scored_history_match.cc
@@ -673,7 +673,7 @@
 float ScoredHistoryMatch::GetFinalRelevancyScore(float topicality_score,
                                                  float frequency_score,
                                                  float specificity_score) {
-  // |relevance_buckets| gives a mapping from intemerdiate score to the final
+  // |relevance_buckets| gives a mapping from intermediate score to the final
   // relevance score.
   static base::NoDestructor<ScoreMaxRelevances> default_relevance_buckets(
       GetHQPBuckets());
diff --git a/components/omnibox/browser/url_index_private_data.cc b/components/omnibox/browser/url_index_private_data.cc
index 74c8b2a0..4452f67 100644
--- a/components/omnibox/browser/url_index_private_data.cc
+++ b/components/omnibox/browser/url_index_private_data.cc
@@ -15,7 +15,9 @@
 #include <utility>
 
 #include "base/containers/cxx20_erase.h"
+#include "base/containers/flat_set.h"
 #include "base/containers/stack.h"
+#include "base/feature_list.h"
 #include "base/files/file_util.h"
 #include "base/i18n/break_iterator.h"
 #include "base/i18n/case_conversion.h"
@@ -36,6 +38,7 @@
 #include "components/omnibox/browser/in_memory_url_index.h"
 #include "components/omnibox/browser/omnibox_field_trial.h"
 #include "components/omnibox/browser/tailored_word_break_iterator.h"
+#include "components/omnibox/common/omnibox_features.h"
 #include "components/search_engines/template_url_service.h"
 #include "components/url_formatter/url_formatter.h"
 #include "third_party/protobuf/src/google/protobuf/repeated_field.h"
@@ -580,8 +583,8 @@
     return HistoryIDSet();
 
   // TODO(mrossetti): Consider optimizing for very common terms such as
-  // 'http[s]', 'www', 'com', etc. Or collect the top 100 more frequently
-  // occuring words in the user's searches.
+  //  'http[s]', 'www', 'com', etc. Or collect the top 100 more frequently
+  //  occurring words in the user's searches.
 
   size_t term_length = term.length();
   WordIDSet word_id_set;
@@ -744,9 +747,25 @@
   });
 
   // Score the matches.
-  const size_t num_matches = history_ids.size();
   const base::Time now = base::Time::Now();
 
+  // `ScoredHistoryMatch` will score suggestions higher when there are fewer
+  // matches. However, since HQP doesn't dedupe suggestions, this can be
+  // problematic when there are multiple duplicate matches. Try counting the
+  // unique hosts in the matches instead.
+  static bool count_unique_hosts = base::FeatureList::IsEnabled(
+      omnibox::kHistoryQuickProviderSpecificityScoreCountUniqueHosts);
+  const size_t num_unique_hosts =
+      count_unique_hosts ? base::MakeFlatSet<std::string>(
+                               history_ids, {},
+                               [&](const auto history_id) {
+                                 return history_info_map_.find(history_id)
+                                     ->second.url_row.url()
+                                     .host();
+                               })
+                               .size()
+                         : history_ids.size();
+
   for (HistoryID history_id : history_ids) {
     auto hist_pos = history_info_map_.find(history_id);
     const history::URLRow& hist_item = hist_pos->second.url_row;
@@ -756,7 +775,7 @@
         hist_item, hist_pos->second.visits, lower_raw_string, lower_raw_terms,
         lower_terms_to_word_starts_offsets, starts_pos->second,
         bookmark_model && bookmark_model->IsBookmarked(hist_item.url()),
-        num_matches, now);
+        num_unique_hosts, now);
     // Filter new matches that ended up scoring 0. (These are usually matches
     // which didn't match the user's raw terms.)
     if (new_scored_match.raw_score > 0)
diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc
index 989b8779..83dad2e7 100644
--- a/components/omnibox/common/omnibox_features.cc
+++ b/components/omnibox/common/omnibox_features.cc
@@ -254,6 +254,13 @@
     "OmniboxStoreTitleInContentsAndUrlInDescription",
     base::FEATURE_DISABLED_BY_DEFAULT};
 
+// HQP scores suggestions higher when it finds fewer matches. When enabled,
+// HQP will consider the count of unique hosts, rather than the total count of
+// matches.
+const base::Feature kHistoryQuickProviderSpecificityScoreCountUniqueHosts{
+    "OmniboxHistoryQuickProviderSpecificityScoreCountUniqueHosts",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Feature used to fetch document suggestions.
 const base::Feature kDocumentProvider{"OmniboxDocumentProvider",
                                       enabled_by_default_desktop_only};
diff --git a/components/omnibox/common/omnibox_features.h b/components/omnibox/common/omnibox_features.h
index 44eba095..c62f258 100644
--- a/components/omnibox/common/omnibox_features.h
+++ b/components/omnibox/common/omnibox_features.h
@@ -71,6 +71,8 @@
 // TODO(crbug.com/1202964): Clean up feature flag used in staged roll-out of
 // various CLs related to the contents/description clean-up work.
 extern const base::Feature kStoreTitleInContentsAndUrlInDescription;
+extern const base::Feature
+    kHistoryQuickProviderSpecificityScoreCountUniqueHosts;
 
 // Document provider
 extern const base::Feature kDocumentProvider;
diff --git a/components/optimization_guide/content/browser/page_content_annotations_web_contents_observer_unittest.cc b/components/optimization_guide/content/browser/page_content_annotations_web_contents_observer_unittest.cc
index 6fbc111..642f0c4 100644
--- a/components/optimization_guide/content/browser/page_content_annotations_web_contents_observer_unittest.cc
+++ b/components/optimization_guide/content/browser/page_content_annotations_web_contents_observer_unittest.cc
@@ -228,7 +228,7 @@
 
     // Overwrite Google base URL.
     base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-        switches::kGoogleBaseURL, "http://default-engine.com/");
+        ::switches::kGoogleBaseURL, "http://default-engine.com/");
   }
 
   void TearDown() override {
diff --git a/components/optimization_guide/core/optimization_guide_util.cc b/components/optimization_guide/core/optimization_guide_util.cc
index 2423a82..6ce1afb 100644
--- a/components/optimization_guide/core/optimization_guide_util.cc
+++ b/components/optimization_guide/core/optimization_guide_util.cc
@@ -10,6 +10,8 @@
 #include "components/optimization_guide/core/optimization_guide_decision.h"
 #include "components/optimization_guide/core/optimization_guide_enums.h"
 #include "components/optimization_guide/core/optimization_guide_features.h"
+#include "components/optimization_guide/core/optimization_guide_logger.h"
+#include "components/prefs/pref_service.h"
 #include "net/base/url_util.h"
 #include "url/url_canon.h"
 
@@ -67,4 +69,41 @@
   return origin_info;
 }
 
+void LogFeatureFlagsInfo(OptimizationGuideLogger* optimization_guide_logger,
+                         bool is_off_the_record,
+                         PrefService* pref_service) {
+  if (!optimization_guide::switches::IsDebugLogsEnabled())
+    return;
+  if (!optimization_guide::features::IsOptimizationHintsEnabled()) {
+    OPTIMIZATION_GUIDE_LOG(
+        optimization_guide_common::mojom::LogSource::SERVICE_AND_SETTINGS,
+        optimization_guide_logger, "FEATURE_FLAG Hints component disabled");
+  }
+  if (!optimization_guide::features::IsRemoteFetchingEnabled()) {
+    OPTIMIZATION_GUIDE_LOG(
+        optimization_guide_common::mojom::LogSource::SERVICE_AND_SETTINGS,
+        optimization_guide_logger,
+        "FEATURE_FLAG remote fetching feature disabled");
+  }
+  if (!optimization_guide::IsUserPermittedToFetchFromRemoteOptimizationGuide(
+          is_off_the_record, pref_service)) {
+    OPTIMIZATION_GUIDE_LOG(
+        optimization_guide_common::mojom::LogSource::SERVICE_AND_SETTINGS,
+        optimization_guide_logger,
+        "FEATURE_FLAG remote fetching user permission disabled");
+  }
+  if (!optimization_guide::features::IsPushNotificationsEnabled()) {
+    OPTIMIZATION_GUIDE_LOG(
+        optimization_guide_common::mojom::LogSource::SERVICE_AND_SETTINGS,
+        optimization_guide_logger,
+        "FEATURE_FLAG remote push notification feature disabled");
+  }
+  if (!optimization_guide::features::IsModelDownloadingEnabled()) {
+    OPTIMIZATION_GUIDE_LOG(
+        optimization_guide_common::mojom::LogSource::SERVICE_AND_SETTINGS,
+        optimization_guide_logger,
+        "FEATURE_FLAG model downloading feature disabled");
+  }
+}
+
 }  // namespace optimization_guide
diff --git a/components/optimization_guide/core/optimization_guide_util.h b/components/optimization_guide/core/optimization_guide_util.h
index b9946bbf..5eeb8266 100644
--- a/components/optimization_guide/core/optimization_guide_util.h
+++ b/components/optimization_guide/core/optimization_guide_util.h
@@ -10,6 +10,8 @@
 #include "base/strings/string_split.h"
 #include "base/time/time.h"
 #include "components/optimization_guide/core/optimization_guide_enums.h"
+#include "components/optimization_guide/core/optimization_guide_permissions_util.h"
+#include "components/optimization_guide/core/optimization_guide_switches.h"
 #include "components/optimization_guide/proto/common_types.pb.h"
 #include "components/optimization_guide/proto/models.pb.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -25,6 +27,9 @@
       DVLOG(0) << message;                                                     \
   } while (0)
 
+class OptimizationGuideLogger;
+class PrefService;
+
 namespace optimization_guide {
 
 enum class OptimizationGuideDecision;
@@ -70,6 +75,10 @@
 // Returns client's origin info, including platform and milestone.
 proto::OriginInfo GetClientOriginInfo();
 
+// Logs info about the common optimization guide feature flags.
+void LogFeatureFlagsInfo(OptimizationGuideLogger* optimization_guide_logger,
+                         bool is_off_the_record,
+                         PrefService* pref_service);
 }  // namespace optimization_guide
 
 #endif  // COMPONENTS_OPTIMIZATION_GUIDE_CORE_OPTIMIZATION_GUIDE_UTIL_H_
diff --git a/components/optimization_guide/optimization_guide_internals/resources/optimization_guide_internals.html b/components/optimization_guide/optimization_guide_internals/resources/optimization_guide_internals.html
index d6c70859..ce776da3 100644
--- a/components/optimization_guide/optimization_guide_internals/resources/optimization_guide_internals.html
+++ b/components/optimization_guide/optimization_guide_internals/resources/optimization_guide_internals.html
@@ -12,6 +12,11 @@
     <meta name="viewport" content="width=device-width">
     <link rel="stylesheet" href="optimization_guide_internals.css">
     <link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
+<if expr="is_ios">
+    <!-- TODO(crbug.com/487000): Remove this once injected by web. -->
+    <script src="chrome://resources/js/ios/web_ui.js"></script>
+    <script src="chrome://resources/js/ios/mojo_api.js"></script>
+</if>
   </head>
 
   <body>
diff --git a/components/optimization_guide/optimization_guide_internals/webui/BUILD.gn b/components/optimization_guide/optimization_guide_internals/webui/BUILD.gn
index ff64752..2c4fc6bb 100644
--- a/components/optimization_guide/optimization_guide_internals/webui/BUILD.gn
+++ b/components/optimization_guide/optimization_guide_internals/webui/BUILD.gn
@@ -9,8 +9,6 @@
   sources = [
     "optimization_guide_internals_page_handler_impl.cc",
     "optimization_guide_internals_page_handler_impl.h",
-    "url_constants.cc",
-    "url_constants.h",
   ]
   deps = [
     "//base",
@@ -24,10 +22,18 @@
   }
   public_deps = [
     ":mojo_bindings",
+    ":url_constants",
     "//components/optimization_guide/optimization_guide_internals/resources:resources",
   ]
 }
 
+static_library("url_constants") {
+  sources = [
+    "url_constants.cc",
+    "url_constants.h",
+  ]
+}
+
 mojom("mojo_bindings") {
   sources = [ "optimization_guide_internals.mojom" ]
   webui_module_path = "/"
diff --git a/components/password_manager/content/browser/content_password_manager_driver.cc b/components/password_manager/content/browser/content_password_manager_driver.cc
index 9ae986c2..64000ca9 100644
--- a/components/password_manager/content/browser/content_password_manager_driver.cc
+++ b/components/password_manager/content/browser/content_password_manager_driver.cc
@@ -124,11 +124,19 @@
   return id_;
 }
 
-void ContentPasswordManagerDriver::FillPasswordForm(
+void ContentPasswordManagerDriver::SetPasswordFillData(
     const autofill::PasswordFormFillData& form_data) {
-  password_autofill_manager_.OnAddPasswordFillData(form_data);
+  // If there are no username or password suggestions, WebAuthn credentials
+  // can still cause a SetPasswordFillData. The PasswordFormFillData is only
+  // relevant to the PasswordAutofillManager if there are saved passwords,
+  // so we don't propagate an empty one in order to make it explicit that none
+  // exist.
+  if (!form_data.username_field.value.empty() &&
+      !form_data.password_field.value.empty()) {
+    password_autofill_manager_.OnAddPasswordFillData(form_data);
+  }
   if (const auto& agent = GetPasswordAutofillAgent()) {
-    agent->FillPasswordForm(autofill::MaybeClearPasswordValues(form_data));
+    agent->SetPasswordFillData(autofill::MaybeClearPasswordValues(form_data));
   }
 }
 
diff --git a/components/password_manager/content/browser/content_password_manager_driver.h b/components/password_manager/content/browser/content_password_manager_driver.h
index 5d36e5c..b0789a44 100644
--- a/components/password_manager/content/browser/content_password_manager_driver.h
+++ b/components/password_manager/content/browser/content_password_manager_driver.h
@@ -58,7 +58,7 @@
 
   // PasswordManagerDriver implementation.
   int GetId() const override;
-  void FillPasswordForm(
+  void SetPasswordFillData(
       const autofill::PasswordFormFillData& form_data) override;
   void InformNoSavedCredentials(
       bool should_show_popup_without_passwords) override;
diff --git a/components/password_manager/content/browser/content_password_manager_driver_unittest.cc b/components/password_manager/content/browser/content_password_manager_driver_unittest.cc
index ab7519a..e536bbd 100644
--- a/components/password_manager/content/browser/content_password_manager_driver_unittest.cc
+++ b/components/password_manager/content/browser/content_password_manager_driver_unittest.cc
@@ -87,7 +87,7 @@
 
   // autofill::mojom::PasswordAutofillAgent:
   MOCK_METHOD(void,
-              FillPasswordForm,
+              SetPasswordFillData,
               (const PasswordFormFillData&),
               (override));
   MOCK_METHOD(void, InformNoSavedCredentials, (bool), (override));
@@ -272,8 +272,8 @@
 
   PasswordFormFillData fill_data = GetTestPasswordFormFillData();
   fill_data.wait_for_username = true;
-  EXPECT_CALL(fake_agent_, FillPasswordForm(WerePasswordsCleared()));
-  driver->FillPasswordForm(fill_data);
+  EXPECT_CALL(fake_agent_, SetPasswordFillData(WerePasswordsCleared()));
+  driver->SetPasswordFillData(fill_data);
   base::RunLoop().RunUntilIdle();
 }
 
@@ -454,7 +454,7 @@
   // Install a the PasswordAutofillAgent mock. Verify it do not receive commands
   // from the browser side.
   FakePasswordAutofillAgent anonymous_fake_agent_;
-  EXPECT_CALL(anonymous_fake_agent_, FillPasswordForm(_)).Times(0);
+  EXPECT_CALL(anonymous_fake_agent_, SetPasswordFillData(_)).Times(0);
   anonymous_iframe_1->GetRemoteAssociatedInterfaces()->OverrideBinderForTesting(
       autofill::mojom::PasswordAutofillAgent::Name_,
       base::BindRepeating(&FakePasswordAutofillAgent::BindPendingReceiver,
@@ -468,7 +468,7 @@
   std::unique_ptr<ContentPasswordManagerDriver> driver(
       std::make_unique<ContentPasswordManagerDriver>(
           anonymous_iframe_1, &password_manager_client_, &autofill_client_));
-  driver->FillPasswordForm(GetTestPasswordFormFillData());
+  driver->SetPasswordFillData(GetTestPasswordFormFillData());
   base::RunLoop().RunUntilIdle();
 }
 
diff --git a/components/password_manager/core/browser/password_autofill_manager.cc b/components/password_manager/core/browser/password_autofill_manager.cc
index 954fa7a6..4eb44a0 100644
--- a/components/password_manager/core/browser/password_autofill_manager.cc
+++ b/components/password_manager/core/browser/password_autofill_manager.cc
@@ -684,12 +684,6 @@
                               ->ShouldShowAccountStorageReSignin(
                                   password_client_->GetLastCommittedURL());
 
-  if (!fill_data_ && !show_account_storage_optin &&
-      !show_account_storage_resignin) {
-    // Probably the credential was deleted in the mean time.
-    return suggestions;
-  }
-
   // Add WebAuthn credentials suitable for an ongoing request if available.
   WebAuthnCredentialsDelegate* delegate =
       password_client_->GetWebAuthnCredentialsDelegate();
@@ -703,6 +697,12 @@
                        webauthn_suggestions.end());
   }
 
+  if (!fill_data_ && !show_account_storage_optin &&
+      !show_account_storage_resignin && suggestions.empty()) {
+    // Probably the credential was deleted in the mean time.
+    return suggestions;
+  }
+
   // Add password suggestions if they exist and were requested.
   if (show_password_suggestions && fill_data_) {
     GetSuggestions(*fill_data_, username_filter, page_favicon_,
diff --git a/components/password_manager/core/browser/password_form_filling.cc b/components/password_manager/core/browser/password_form_filling.cc
index 573f931..118a570 100644
--- a/components/password_manager/core/browser/password_form_filling.cc
+++ b/components/password_manager/core/browser/password_form_filling.cc
@@ -94,7 +94,7 @@
       ContainsAndroidCredentials(fill_data));
   metrics_util::LogFilledCredentialIsFromAndroidApp(
       PreferredRealmIsFromAndroid(fill_data));
-  driver->FillPasswordForm(fill_data);
+  driver->SetPasswordFillData(fill_data);
 
   client->PasswordWasAutofilled(best_matches,
                                 url::Origin::Create(form_for_autofill.url),
diff --git a/components/password_manager/core/browser/password_form_filling_unittest.cc b/components/password_manager/core/browser/password_form_filling_unittest.cc
index 1abc2f2..2c3be53 100644
--- a/components/password_manager/core/browser/password_form_filling_unittest.cc
+++ b/components/password_manager/core/browser/password_form_filling_unittest.cc
@@ -46,7 +46,7 @@
  public:
   MOCK_METHOD(int, GetId, (), (const, override));
   MOCK_METHOD(void,
-              FillPasswordForm,
+              SetPasswordFillData,
               (const PasswordFormFillData&),
               (override));
   MOCK_METHOD(void, InformNoSavedCredentials, (bool), (override));
@@ -142,7 +142,7 @@
   std::vector<const PasswordForm*> best_matches;
 
   EXPECT_CALL(driver_, InformNoSavedCredentials(_));
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
 
   LikelyFormFilling likely_form_filling = SendFillInformationToRenderer(
       &client_, &driver_, observed_form_, best_matches, federated_matches_,
@@ -161,7 +161,7 @@
 
   EXPECT_CALL(driver_, InformNoSavedCredentials(_)).Times(0);
   PasswordFormFillData fill_data;
-  EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&fill_data));
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&fill_data));
   EXPECT_CALL(client_, PasswordWasAutofilled);
 
   LikelyFormFilling likely_form_filling = SendFillInformationToRenderer(
@@ -235,7 +235,8 @@
     }
 
     PasswordFormFillData fill_data;
-    EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&fill_data));
+    EXPECT_CALL(driver_, SetPasswordFillData(_))
+        .WillOnce(SaveArg<0>(&fill_data));
     EXPECT_CALL(client_, PasswordWasAutofilled);
 
     LikelyFormFilling likely_form_filling = SendFillInformationToRenderer(
@@ -270,7 +271,8 @@
         .WillOnce(Return(&webauthn_credentials_delegate));
     EXPECT_CALL(webauthn_credentials_delegate, IsWebAuthnAutofillEnabled())
         .WillOnce(Return(webauthn_autofill_enabled));
-    EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&fill_data));
+    EXPECT_CALL(driver_, SetPasswordFillData(_))
+        .WillOnce(SaveArg<0>(&fill_data));
     EXPECT_CALL(client_, PasswordWasAutofilled);
     LikelyFormFilling likely_form_filling = SendFillInformationToRenderer(
         &client_, &driver_, observed_form_, {&saved_match_}, federated_matches_,
@@ -350,7 +352,7 @@
     observed_form.username_may_use_prefilled_placeholder =
         test_case.username_may_use_prefilled_placeholder;
 
-    EXPECT_CALL(driver_, FillPasswordForm);
+    EXPECT_CALL(driver_, SetPasswordFillData);
     EXPECT_CALL(client_, PasswordWasAutofilled);
 
     LikelyFormFilling likely_form_filling = SendFillInformationToRenderer(
@@ -368,7 +370,7 @@
 
   EXPECT_CALL(driver_, InformNoSavedCredentials(_)).Times(0);
   PasswordFormFillData fill_data;
-  EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&fill_data));
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&fill_data));
   EXPECT_CALL(client_, PasswordWasAutofilled);
 
   LikelyFormFilling likely_form_filling = SendFillInformationToRenderer(
@@ -438,7 +440,7 @@
 
   EXPECT_CALL(driver_, InformNoSavedCredentials).Times(0);
   PasswordFormFillData fill_data;
-  EXPECT_CALL(driver_, FillPasswordForm).WillOnce(SaveArg<0>(&fill_data));
+  EXPECT_CALL(driver_, SetPasswordFillData).WillOnce(SaveArg<0>(&fill_data));
   EXPECT_CALL(client_, PasswordWasAutofilled);
 
   LikelyFormFilling likely_form_filling = SendFillInformationToRenderer(
diff --git a/components/password_manager/core/browser/password_form_manager_unittest.cc b/components/password_manager/core/browser/password_form_manager_unittest.cc
index 79d7c1e..17ebf500 100644
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -125,7 +125,7 @@
 class MockPasswordManagerDriver : public StubPasswordManagerDriver {
  public:
   MOCK_METHOD(void,
-              FillPasswordForm,
+              SetPasswordFillData,
               (const PasswordFormFillData&),
               (override));
   MOCK_METHOD(void,
@@ -547,7 +547,7 @@
   CreateFormManager(observed_form_);
   EXPECT_CALL(driver_, FormEligibleForGenerationFound(_)).Times(0);
   PasswordFormFillData fill_data;
-  EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&fill_data));
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&fill_data));
   CreateFormManager(observed_form_);
   SetNonFederatedAndNotifyFetchCompleted({&saved_match_});
 
@@ -570,19 +570,19 @@
 }
 
 TEST_P(PasswordFormManagerTest, AutofillNotMoreThan5Times) {
-  EXPECT_CALL(driver_, FillPasswordForm(_));
+  EXPECT_CALL(driver_, SetPasswordFillData(_));
   SetNonFederatedAndNotifyFetchCompleted({&saved_match_});
 
   task_environment_.FastForwardUntilNoTasksRemain();
   Mock::VerifyAndClearExpectations(&driver_);
 
   for (size_t i = 0; i < PasswordFormManager::kMaxTimesAutofill - 1; ++i) {
-    EXPECT_CALL(driver_, FillPasswordForm(_));
+    EXPECT_CALL(driver_, SetPasswordFillData(_));
     form_manager_->Fill();
     Mock::VerifyAndClearExpectations(&driver_);
   }
 
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
   form_manager_->Fill();
 }
 
@@ -597,7 +597,7 @@
   observed_form_.fields.back().autocomplete_attribute = "new-password";
 
   PasswordFormFillData fill_data;
-  EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&fill_data));
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&fill_data));
 
   PasswordFormGenerationData generation_data;
   EXPECT_CALL(driver_, FormEligibleForGenerationFound(_))
@@ -655,7 +655,7 @@
 
 TEST_P(PasswordFormManagerTest, AutofillWithBlocklistedMatch) {
   PasswordFormFillData fill_data;
-  EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&fill_data));
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&fill_data));
   fetcher_->SetNonFederated({&saved_match_});
   fetcher_->SetBlocklisted(true);
   fetcher_->NotifyFetchCompleted();
@@ -717,7 +717,7 @@
 // server predictions and fills on receiving them.
 TEST_P(PasswordFormManagerTest, ServerPredictionsWithinDelay) {
   // Expects no filling on save matches receiving.
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
   SetNonFederatedAndNotifyFetchCompleted({&saved_match_});
   Mock::VerifyAndClearExpectations(&driver_);
 
@@ -725,19 +725,19 @@
       observed_form_, {std::make_pair(2, autofill::PASSWORD)});
 
   // Expect filling without delay on receiving server predictions.
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(1);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(1);
   form_manager_->ProcessServerPredictions(predictions);
   Mock::VerifyAndClearExpectations(&driver_);
 
   // Expect no filling on receiving predictions again.
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
   form_manager_->ProcessServerPredictions(predictions);
 }
 
 // Tests that PasswordFormManager fills after some delay even without
 // server predictions.
 TEST_P(PasswordFormManagerTest, ServerPredictionsAfterDelay) {
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(1);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(1);
   SetNonFederatedAndNotifyFetchCompleted({&saved_match_});
   // Expect filling after passing filling delay.
 
@@ -750,7 +750,7 @@
 
   // Expect filling on receiving server predictions because it was less than
   // kMaxTimesAutofill attempts to fill.
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(1);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(1);
   form_manager_->ProcessServerPredictions(predictions);
   task_environment_.FastForwardUntilNoTasksRemain();
 }
@@ -760,7 +760,7 @@
 TEST_P(PasswordFormManagerTest, ServerPredictionsBeforeFetcher) {
   // Expect no filling after receiving saved matches from |fetcher_|, since
   // |form_manager| is waiting for server-side predictions.
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
   CreateFormManager(observed_form_);
 
   std::map<FormSignature, FormPredictions> predictions = CreatePredictions(
@@ -769,7 +769,7 @@
   Mock::VerifyAndClearExpectations(&driver_);
 
   // Expect filling without delay on receiving server predictions.
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(1);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(1);
   SetNonFederatedAndNotifyFetchCompleted({&saved_match_});
 }
 
@@ -1372,7 +1372,7 @@
 // Test that an attempt to log to ReadonlyWhenFilling UKM is made when filling.
 TEST_P(PasswordFormManagerTest, RecordReadonlyWhenFilling) {
   ukm::TestAutoSetUkmRecorder test_ukm_recorder;
-  EXPECT_CALL(driver_, FillPasswordForm(_));
+  EXPECT_CALL(driver_, SetPasswordFillData(_));
   SetNonFederatedAndNotifyFetchCompleted({&saved_match_});
 
   task_environment_.FastForwardUntilNoTasksRemain();
@@ -1739,7 +1739,7 @@
     SCOPED_TRACE(testing::Message("observed_form_changed=")
                  << observed_form_changed);
     CreateFormManager(observed_form_);
-    EXPECT_CALL(driver_, FillPasswordForm(_));
+    EXPECT_CALL(driver_, SetPasswordFillData(_));
     SetNonFederatedAndNotifyFetchCompleted({&saved_match_});
     task_environment_.FastForwardUntilNoTasksRemain();
     Mock::VerifyAndClearExpectations(&driver_);
@@ -1754,7 +1754,8 @@
     }
 
     PasswordFormFillData fill_data;
-    EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&fill_data));
+    EXPECT_CALL(driver_, SetPasswordFillData(_))
+        .WillOnce(SaveArg<0>(&fill_data));
     form_manager_->FillForm(form, {});
     task_environment_.FastForwardUntilNoTasksRemain();
 
@@ -1792,13 +1793,13 @@
 
   // Check that no filling until server predicions or filling timeout
   // expiration.
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
   form_manager_->FillForm(changed_form, {});
 
   // Check that the changed form is filled after the filling timeout expires.
 
   PasswordFormFillData fill_data;
-  EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&fill_data));
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&fill_data));
 
   task_environment_.FastForwardUntilNoTasksRemain();
   EXPECT_EQ(changed_form.fields[kUsernameFieldIndex].unique_renderer_id,
@@ -1823,7 +1824,7 @@
 
   // Check that no filling until server predicions or filling timeout
   // expiration.
-  EXPECT_CALL(driver_, FillPasswordForm).Times(0);
+  EXPECT_CALL(driver_, SetPasswordFillData).Times(0);
 
   // Wait half-delay time before updating form
   task_environment_.FastForwardBy(kMaxFillingDelayForAsyncPredictions / 2);
@@ -1836,7 +1837,7 @@
   task_environment_.FastForwardBy(kMaxFillingDelayForAsyncPredictions / 2);
 
   PasswordFormFillData fill_data;
-  EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&fill_data));
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&fill_data));
 
   // Check new fill task trigger form filling
   task_environment_.FastForwardUntilNoTasksRemain();
@@ -1985,7 +1986,7 @@
     http_auth_form.scheme = PasswordForm::Scheme::kBasic;
 
     // Check that no filling because no http auth credentials are stored.
-    EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+    EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
     EXPECT_CALL(client_, AutofillHttpAuth(_, _)).Times(0);
 
     CreateFormManagerForNonWebForm(http_auth_form);
@@ -3181,7 +3182,7 @@
     PasswordForm http_auth_form = parsed_observed_form_;
     http_auth_form.scheme = PasswordForm::Scheme::kBasic;
     // Check that no filling because no http auth credentials are stored.
-    EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+    EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
     EXPECT_CALL(client_, AutofillHttpAuth(_, _)).Times(0);
     CreateFormManagerForNonWebForm(http_auth_form);
     std::vector<const PasswordForm*> saved_matches;
diff --git a/components/password_manager/core/browser/password_manager_driver.h b/components/password_manager/core/browser/password_manager_driver.h
index 11e242ad..c1e547d 100644
--- a/components/password_manager/core/browser/password_manager_driver.h
+++ b/components/password_manager/core/browser/password_manager_driver.h
@@ -50,7 +50,7 @@
   virtual int GetId() const = 0;
 
   // Fills forms matching |form_data|.
-  virtual void FillPasswordForm(
+  virtual void SetPasswordFillData(
       const autofill::PasswordFormFillData& form_data) = 0;
 
   // Informs the driver that there are no saved credentials in the password
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index 30ffd8e7..18e4511c 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -275,7 +275,7 @@
               (const autofill::PasswordFormGenerationData&),
               (override));
   MOCK_METHOD(void,
-              FillPasswordForm,
+              SetPasswordFillData,
               (const autofill::PasswordFormFillData&),
               (override));
   MOCK_METHOD(PasswordManager*, GetPasswordManager, (), (override));
@@ -891,7 +891,7 @@
 
   PasswordForm form(MakeSimpleForm());
   std::vector<FormData> observed = {form.form_data};
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(2);
   // TODO(https://crbug.com/949519): replace WillRepeatedly with WillOnce when
   // the old parser is gone.
   EXPECT_CALL(*store_, GetLogins(PasswordFormDigest(form), _))
@@ -936,7 +936,7 @@
   // the old parser is gone.
   EXPECT_CALL(*store_, GetLogins(_, _))
       .WillRepeatedly(WithArg<1>(InvokeConsumer(store_.get(), form)));
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(2);
   manager()->OnPasswordFormsParsed(&driver_, observed);
   manager()->OnPasswordFormsRendered(&driver_, observed);
 
@@ -1050,7 +1050,7 @@
       .WillRepeatedly(Return(true));
   EXPECT_CALL(*store_, GetLogins(_, _))
       .WillRepeatedly(WithArg<1>(InvokeConsumer(store_.get(), form)));
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(AnyNumber());
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(AnyNumber());
   manager()->OnPasswordFormsParsed(&driver_, observed);
   manager()->OnPasswordFormsRendered(&driver_, observed);
 
@@ -1255,7 +1255,7 @@
   PasswordForm form(MakeSimpleForm());
   std::vector<FormData> observed;
   observed.push_back(form.form_data);
-  EXPECT_CALL(driver_, FillPasswordForm(_));
+  EXPECT_CALL(driver_, SetPasswordFillData(_));
   // TODO(https://crbug.com/949519): replace WillRepeatedly with WillOnce when
   // the
   // old parser is gone.
@@ -1274,7 +1274,7 @@
       .WillRepeatedly(Return(false));
   std::vector<FormData> observed;
   observed.push_back(form.form_data);
-  EXPECT_CALL(driver_, FillPasswordForm(_));
+  EXPECT_CALL(driver_, SetPasswordFillData(_));
   // TODO(https://crbug.com/949519): replace WillRepeatedly with WillOnce when
   // the old parser is gone.
   EXPECT_CALL(*store_, GetLogins(_, _))
@@ -1394,7 +1394,7 @@
 TEST_P(PasswordManagerTest, HashSavedOnGaiaFormWithSkipSavePassword) {
   EXPECT_CALL(*store_, GetLogins(_, _))
       .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms(store_.get())));
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
   std::vector<FormData> observed;
   FormData form_data(MakeSimpleGAIAFormData());
   // Simulate that this is Gaia form that should be ignored for
@@ -1434,7 +1434,7 @@
        HashSavedOnGaiaFormWithSkipSavePasswordAndToNTPNavigation) {
   EXPECT_CALL(*store_, GetLogins(_, _))
       .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms(store_.get())));
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
   FormData form_data(MakeSimpleGAIAFormData());
   // Simulate that this is Gaia form that should be ignored for
   // saving/filling.
@@ -1477,9 +1477,9 @@
   // Simulate that |form| is already in the store, making this an update.
   EXPECT_CALL(*store_, GetLogins(_, _))
       .WillRepeatedly(WithArg<1>(InvokeConsumer(store_.get(), stored_form)));
-  EXPECT_CALL(driver_, FillPasswordForm(_));
+  EXPECT_CALL(driver_, SetPasswordFillData(_));
   manager()->OnPasswordFormsParsed(&driver_, observed);
-  EXPECT_CALL(driver_, FillPasswordForm(_));
+  EXPECT_CALL(driver_, SetPasswordFillData(_));
   manager()->OnPasswordFormsRendered(&driver_, observed);
 
   // Submit form and finish navigation.
@@ -1513,7 +1513,7 @@
 
   std::vector<FormData> observed;
   observed.push_back(form.form_data);
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(2);
   manager()->OnPasswordFormsParsed(&driver_, observed);
   manager()->OnPasswordFormsRendered(&driver_, observed);
 
@@ -1553,7 +1553,7 @@
 
   // Load the page.
   autofill::PasswordFormFillData form_data;
-  EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&form_data));
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&form_data));
   std::vector<FormData> observed;
   observed.push_back(form.form_data);
   manager()->OnPasswordFormsParsed(&driver_, observed);
@@ -1709,7 +1709,7 @@
   // Test to verify that on submitting the HTML password form without having
   // username input filed shows password save promt and saves the password to
   // store.
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
   std::vector<FormData> observed;
 
   // Loads passsword form without username input field.
@@ -1794,14 +1794,14 @@
   // Observe the form in the first frame.
   EXPECT_CALL(*store_, GetLogins(PasswordFormDigest(first_form.form_data), _))
       .WillOnce(WithArg<1>(InvokeConsumer(store_.get(), first_form)));
-  EXPECT_CALL(driver_, FillPasswordForm(_));
+  EXPECT_CALL(driver_, SetPasswordFillData(_));
   manager()->OnPasswordFormsParsed(&driver_, {first_form.form_data});
 
   // Observe the form in the second frame.
   MockPasswordManagerDriver driver_b;
   EXPECT_CALL(*store_, GetLogins(PasswordFormDigest(second_form.form_data), _))
       .WillOnce(WithArg<1>(InvokeConsumer(store_.get(), second_form)));
-  EXPECT_CALL(driver_b, FillPasswordForm(_));
+  EXPECT_CALL(driver_b, SetPasswordFillData(_));
   manager()->OnPasswordFormsParsed(&driver_b, {second_form.form_data});
   task_runner_->FastForwardUntilNoTasksRemain();
 }
@@ -1887,7 +1887,7 @@
   std::vector<FormData> observed;
   PasswordForm form(MakeSimpleForm());
   observed.push_back(form.form_data);
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(2);
   // TODO(https://crbug.com/949519): replace WillRepeatedly with WillOnce when
   // the old parser is gone.
   EXPECT_CALL(*store_, GetLogins(_, _))
@@ -2199,7 +2199,7 @@
     if (found_matched_logins_in_store) {
       EXPECT_CALL(*store_, GetLogins(_, _))
           .WillRepeatedly(WithArg<1>(InvokeConsumer(store_.get(), form)));
-      EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
+      EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(2);
     } else {
       EXPECT_CALL(*store_, GetLogins(_, _))
           .WillRepeatedly(
@@ -2292,7 +2292,7 @@
   observed_forms.push_back(observed_form.form_data);
 
   autofill::PasswordFormFillData form_data;
-  EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&form_data));
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&form_data));
   // TODO(https://crbug.com/949519): replace WillRepeatedly with WillOnce when
   // the old parser is gone.
   EXPECT_CALL(*store_, GetLogins(_, _))
@@ -2348,7 +2348,7 @@
   PasswordForm observed_form(MakeSimpleForm());
   std::vector<FormData> observed_forms = {observed_form.form_data};
 
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(2);
   // TODO(https://crbug.com/949519): replace WillRepeatedly with WillOnce when
   // the old parser is gone.
   EXPECT_CALL(*store_, GetLogins(_, _))
@@ -2485,7 +2485,7 @@
   // the old parser is gone.
   EXPECT_CALL(*store_, GetLogins(_, _))
       .WillRepeatedly(WithArg<1>(InvokeConsumer(store_.get(), stored_form)));
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(2);
   manager()->OnPasswordFormsParsed(&driver_, observed);
   manager()->OnPasswordFormsRendered(&driver_, observed);
 
@@ -2932,7 +2932,7 @@
       .WillRepeatedly(Return(true));
   EXPECT_CALL(*store_, GetLogins(_, _))
       .WillRepeatedly(WithArg<1>(InvokeConsumer(store_.get(), stored_form)));
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(2);
   manager()->OnPasswordFormsParsed(&driver_, observed);
   manager()->OnPasswordFormsRendered(&driver_, observed);
 
@@ -3021,7 +3021,7 @@
 
   EXPECT_CALL(*store_, GetLogins(_, _))
       .WillRepeatedly(WithArg<1>(InvokeConsumer(store_.get(), form)));
-  EXPECT_CALL(driver_, FillPasswordForm(_));
+  EXPECT_CALL(driver_, SetPasswordFillData(_));
 
   // Simulate that the form is incorrectly marked as sign-up, which means it can
   // not be filled without server predictions.
@@ -3058,13 +3058,13 @@
   manager()->ProcessAutofillPredictions(&driver_,
                                         {&form_structure1, &form_structure2});
   // Both forms should be filled.
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(2);
 #else  // On iOS predictions are propagated with nullptr driver.
   manager()->ProcessAutofillPredictions(nullptr,
                                         {&form_structure1, &form_structure2});
   // Only one form should be filled, as username first flow is not supported
   // yet on iOS.
-  EXPECT_CALL(driver_, FillPasswordForm(_));
+  EXPECT_CALL(driver_, SetPasswordFillData(_));
 #endif
 
   // Simulate that the form is incorrectly marked as sign-up, which means it can
@@ -3369,7 +3369,7 @@
       .WillRepeatedly(WithArg<1>(InvokeConsumer(store_.get(), saved_match)));
 
   PasswordFormFillData form_data;
-  EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&form_data));
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&form_data));
 
   manager()->OnPasswordFormsParsed(&driver_, {credit_card_form.form_data});
   // Check that manual filling fallback available.
@@ -3457,7 +3457,7 @@
 
 #if !BUILDFLAG(IS_IOS)
   PasswordFormFillData fill_data;
-  EXPECT_CALL(driver_, FillPasswordForm(_)).WillOnce(SaveArg<0>(&fill_data));
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).WillOnce(SaveArg<0>(&fill_data));
   manager()->ProcessAutofillPredictions(&driver_, {&form_structure});
   EXPECT_EQ(form_id, fill_data.form_renderer_id);
   EXPECT_EQ(saved_match.username_value, fill_data.username_field.value);
@@ -3465,7 +3465,7 @@
   EXPECT_EQ(saved_match.password_value, fill_data.password_field.value);
   EXPECT_TRUE(fill_data.password_field.unique_renderer_id.is_null());
 #else   // BUILDFLAG(IS_IOS)
-  EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
+  EXPECT_CALL(driver_, SetPasswordFillData(_)).Times(0);
 #endif  // !BUILDFLAG(IS_IOS)
 }
 
@@ -3704,7 +3704,8 @@
 
       bool should_be_filled =
           server_type == SINGLE_USERNAME || local_type == SINGLE_USERNAME;
-      EXPECT_CALL(driver_, FillPasswordForm(_)).Times(should_be_filled ? 1 : 0);
+      EXPECT_CALL(driver_, SetPasswordFillData(_))
+          .Times(should_be_filled ? 1 : 0);
       manager()->ProcessAutofillPredictions(&driver_, {&form_structure});
 
       Mock::VerifyAndClearExpectations(&client_);
diff --git a/components/password_manager/core/browser/stub_password_manager_driver.cc b/components/password_manager/core/browser/stub_password_manager_driver.cc
index f91c367..dfcce3d 100644
--- a/components/password_manager/core/browser/stub_password_manager_driver.cc
+++ b/components/password_manager/core/browser/stub_password_manager_driver.cc
@@ -15,9 +15,8 @@
   return 0;
 }
 
-void StubPasswordManagerDriver::FillPasswordForm(
-    const autofill::PasswordFormFillData& form_data) {
-}
+void StubPasswordManagerDriver::SetPasswordFillData(
+    const autofill::PasswordFormFillData& form_data) {}
 
 void StubPasswordManagerDriver::GeneratedPasswordAccepted(
     const std::u16string& password) {}
diff --git a/components/password_manager/core/browser/stub_password_manager_driver.h b/components/password_manager/core/browser/stub_password_manager_driver.h
index 802661f..4394bf26 100644
--- a/components/password_manager/core/browser/stub_password_manager_driver.h
+++ b/components/password_manager/core/browser/stub_password_manager_driver.h
@@ -24,7 +24,7 @@
 
   // PasswordManagerDriver:
   int GetId() const override;
-  void FillPasswordForm(
+  void SetPasswordFillData(
       const autofill::PasswordFormFillData& form_data) override;
   void GeneratedPasswordAccepted(const std::u16string& password) override;
   void FillSuggestion(const std::u16string& username,
diff --git a/components/password_manager/ios/ios_password_manager_driver.h b/components/password_manager/ios/ios_password_manager_driver.h
index b449549..e7c6b0a 100644
--- a/components/password_manager/ios/ios_password_manager_driver.h
+++ b/components/password_manager/ios/ios_password_manager_driver.h
@@ -35,7 +35,7 @@
 
   // password_manager::PasswordManagerDriver implementation.
   int GetId() const override;
-  void FillPasswordForm(
+  void SetPasswordFillData(
       const autofill::PasswordFormFillData& form_data) override;
   void InformNoSavedCredentials(
       bool should_show_popup_without_passwords) override;
diff --git a/components/password_manager/ios/ios_password_manager_driver.mm b/components/password_manager/ios/ios_password_manager_driver.mm
index 4022be3..52c767e 100644
--- a/components/password_manager/ios/ios_password_manager_driver.mm
+++ b/components/password_manager/ios/ios_password_manager_driver.mm
@@ -33,7 +33,7 @@
   return 0;
 }
 
-void IOSPasswordManagerDriver::FillPasswordForm(
+void IOSPasswordManagerDriver::SetPasswordFillData(
     const autofill::PasswordFormFillData& form_data) {
   [bridge_ fillPasswordForm:form_data completionHandler:nil];
 }
diff --git a/components/permissions/contexts/geolocation_permission_context_unittest.cc b/components/permissions/contexts/geolocation_permission_context_unittest.cc
index 8f3c281e..3c1796e0 100644
--- a/components/permissions/contexts/geolocation_permission_context_unittest.cc
+++ b/components/permissions/contexts/geolocation_permission_context_unittest.cc
@@ -37,6 +37,7 @@
 #include "components/permissions/permission_request.h"
 #include "components/permissions/permission_request_id.h"
 #include "components/permissions/permission_request_manager.h"
+#include "components/permissions/permission_util.h"
 #include "components/permissions/test/mock_permission_prompt_factory.h"
 #include "components/permissions/test/permission_test_util.h"
 #include "components/permissions/test/test_permissions_client.h"
diff --git a/components/permissions/permission_actions_history_unittest.cc b/components/permissions/permission_actions_history_unittest.cc
index fe40cc49..d7b144a 100644
--- a/components/permissions/permission_actions_history_unittest.cc
+++ b/components/permissions/permission_actions_history_unittest.cc
@@ -13,6 +13,7 @@
 #include "components/content_settings/core/common/pref_names.h"
 #include "components/permissions/permission_request_enums.h"
 #include "components/permissions/permission_uma_util.h"
+#include "components/permissions/permission_util.h"
 #include "components/permissions/permissions_client.h"
 #include "components/permissions/pref_names.h"
 #include "components/permissions/request_type.h"
diff --git a/components/permissions/permission_request_manager.cc b/components/permissions/permission_request_manager.cc
index 74bc276..47839343e 100644
--- a/components/permissions/permission_request_manager.cc
+++ b/components/permissions/permission_request_manager.cc
@@ -22,6 +22,7 @@
 #include "components/permissions/permission_decision_auto_blocker.h"
 #include "components/permissions/permission_prompt.h"
 #include "components/permissions/permission_request.h"
+#include "components/permissions/permission_util.h"
 #include "components/permissions/permissions_client.h"
 #include "components/permissions/request_type.h"
 #include "components/permissions/switches.h"
diff --git a/components/permissions/permission_uma_util.h b/components/permissions/permission_uma_util.h
index de200b8..7c9e7059 100644
--- a/components/permissions/permission_uma_util.h
+++ b/components/permissions/permission_uma_util.h
@@ -13,7 +13,6 @@
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "components/permissions/permission_request.h"
 #include "components/permissions/permission_result.h"
-#include "components/permissions/permission_util.h"
 #include "components/permissions/prediction_service/prediction_service_messages.pb.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
 
@@ -26,6 +25,7 @@
 
 namespace permissions {
 enum class PermissionRequestGestureType;
+enum class PermissionAction;
 class PermissionRequest;
 
 // Used for UMA to record the types of permission prompts shown.
diff --git a/components/permissions/permission_uma_util_unittest.cc b/components/permissions/permission_uma_util_unittest.cc
index 9668843..12e1cce 100644
--- a/components/permissions/permission_uma_util_unittest.cc
+++ b/components/permissions/permission_uma_util_unittest.cc
@@ -9,6 +9,7 @@
 #include "components/content_settings/core/browser/host_content_settings_map.h"
 #include "components/content_settings/core/common/content_settings_pattern.h"
 #include "components/content_settings/core/common/content_settings_types.h"
+#include "components/permissions/permission_util.h"
 #include "components/permissions/test/test_permissions_client.h"
 #include "content/public/test/browser_task_environment.h"
 #include "content/public/test/test_browser_context.h"
diff --git a/components/permissions/permission_util.cc b/components/permissions/permission_util.cc
index 65de1e6..90d6b9d 100644
--- a/components/permissions/permission_util.cc
+++ b/components/permissions/permission_util.cc
@@ -540,5 +540,38 @@
       return requesting_origin;
   }
 }
-
+bool PermissionUtil::ShouldPermissionBubbleStartOpen(
+    PermissionPrompt::Delegate* prompt_delegate) {
+  if (base::FeatureList::IsEnabled(
+          permissions::features::kPermissionChipGestureSensitive)) {
+    std::vector<permissions::PermissionRequest*> requests =
+        prompt_delegate->Requests();
+    const bool has_gesture =
+        std::any_of(requests.begin(), requests.end(),
+                    [](permissions::PermissionRequest* request) {
+                      return request->GetGestureType() ==
+                             permissions::PermissionRequestGestureType::GESTURE;
+                    });
+    if (has_gesture)
+      return true;
+  }
+  if (base::FeatureList::IsEnabled(
+          permissions::features::kPermissionChipRequestTypeSensitive)) {
+    // Notifications and geolocation are targeted here because they are usually
+    // not necessary for the website to function correctly, so they can safely
+    // be given less prominence.
+    std::vector<permissions::PermissionRequest*> requests =
+        prompt_delegate->Requests();
+    const bool is_geolocation_or_notifications = std::any_of(
+        requests.begin(), requests.end(),
+        [](permissions::PermissionRequest* request) {
+          permissions::RequestType request_type = request->request_type();
+          return request_type == permissions::RequestType::kNotifications ||
+                 request_type == permissions::RequestType::kGeolocation;
+        });
+    if (!is_geolocation_or_notifications)
+      return true;
+  }
+  return false;
+}
 }  // namespace permissions
diff --git a/components/permissions/permission_util.h b/components/permissions/permission_util.h
index c4f73498..b6c4cc9e8 100644
--- a/components/permissions/permission_util.h
+++ b/components/permissions/permission_util.h
@@ -10,6 +10,7 @@
 #include "build/build_config.h"
 #include "components/content_settings/core/common/content_settings.h"
 #include "components/content_settings/core/common/content_settings_types.h"
+#include "components/permissions/permission_prompt.h"
 #include "components/permissions/permission_request.h"
 #include "third_party/blink/public/mojom/permissions/permission_status.mojom.h"
 
@@ -135,6 +136,8 @@
   static GURL GetCanonicalOrigin(ContentSettingsType permission,
                                  const GURL& requesting_origin,
                                  const GURL& embedding_origin);
+  static bool ShouldPermissionBubbleStartOpen(
+      PermissionPrompt::Delegate* prompt_delegate);
 };
 
 }  // namespace permissions
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index de3a221..e3523b0 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -9345,7 +9345,7 @@
     },
     {
       'name': 'ChromeOsLockOnIdleSuspend',
-      'owners': ['xiyuan@chromium.org', 'ultrotter@chromium.org'],
+      'owners': ['xiyuan@chromium.org', 'ultrotter@chromium.org', 'chromeos-power@google.com'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome_os:9-'],
@@ -9357,27 +9357,31 @@
       'items': [
         {
           'value': True,
-          'caption': 'Lock the device when it becomes idle or suspended',
+          'caption': 'Lock the device when it suspends or the lid is closed',
         },
         {
           'value': False,
-          'caption': 'Prevent the device from locking when it becomes idle or suspended',
+          'caption': 'Do not lock the device when it suspends or the lid is closed',
         },
         {
           'value': None,
-          'caption': 'Allow users to decide whether the device should lock when it becomes idle or suspended',
+          'caption': 'Allow users to decide whether the device should lock when it suspends or the lid is closed',
         },
       ],
       'example_value': True,
       'default': None,
       'id': 61,
-      'caption': '''Enable lock when the device become idle or suspended''',
+      'caption': '''Enable lock when the device suspends or the lid is closed''',
       'tags': [],
-      'desc': '''Setting the policy to Enabled means <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph> asks users for a password to unlock the device when it becomes idle.
+      'desc': '''Setting the policy to Enabled means <ph name="PRODUCT_OS_NAME">$2<ex>Google ChromeOS</ex></ph> asks users for a password to unlock the device when it suspends or the lid is closed.
 
-      Setting the policy to Disabled means users are not asked for a password to unlock the device from sleep.
+      Devices will lock when the lid is closed except if they are docked (using an external monitor).  In such a case, the device will not lock when the lid closes, but will lock if the external monitor is removed and the lid is still closed.
 
-      Leaving the policy unset lets the user choose whether to be prompted for a password to unlock the device from sleep.''',
+      By setting this policy to true, and <ph name="LID_CLOSE_ACTION_POLICY_NAME">LidCloseAction</ph> to <ph name="LID_CLOSE_ACTION_ENUM_DO_NOTHING">LidCloseActionDoNothing</ph>, a device will lock when the lid is closed, but will only suspend if and when configured to do so in <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME">PowerManagementIdleSettings</ph>.
+
+      Setting the policy to Disabled means users are not asked for a password to unlock the device.
+
+      Leaving the policy unset lets the user choose whether to be prompted for a password to unlock the device.''',
     },
     {
       'name': 'ChromeOsMultiProfileUserBehavior',
@@ -17298,7 +17302,7 @@
       'owners': ['andreydav@google.com', 'chromeos-commercial-identity@google.com'],
       'type': 'string',
       'schema': { 'type': 'string' },
-      'supported_on': ['chrome_os:106-'],
+      'supported_on': ['chrome_os:107-'],
       'supported_chrome_os_management': ['google_cloud' ],
       'device_only': True,
       'features': {
@@ -33046,7 +33050,7 @@
       'caption': 'Enable High Efficiency Mode',
       'type': 'main',
       'schema': { 'type': 'boolean' },
-      'future_on': ['chrome.win', 'chrome.mac', 'chrome.linux' ],
+      'future_on': ['chrome.*' ],
       'features': {
         'dynamic_refresh': True,
         'per_profile': False,
@@ -33072,6 +33076,50 @@
       'desc': '''This policy enables or disables the High Efficiency Mode setting. This setting makes it so that tabs are discarded after some period of time in the background to reclaim memory.
       If this policy is unset, the end user can control this setting in chrome://settings/performance.
       ''',
+    },
+    {
+      'name': 'BatterySaverModeAvailability',
+      'owners': ['anthonyvd@chromium.org', 'file://components/performance_manager/OWNERS'],
+      'caption': 'Enable Battery Saver Mode',
+      'type': 'int-enum',
+      'schema': {
+        'type': 'integer',
+        'enum': [ 0, 1, 2 ],
+      },
+      'future_on': ['chrome.*' ],
+      'features': {
+        'can_be_recommended': True,
+        'dynamic_refresh': True,
+        'per_profile': False,
+      },
+      'items': [
+        {
+          'name': 'Disabled',
+          'value': 0,
+          'caption': 'Battery Saver Mode will be disabled.',
+        },
+        {
+          'name': 'EnabledBelowThreshold',
+          'value': 1,
+          'caption': 'Battery Saver Mode will be enabled when the device is on battery power and battery level is low.',
+        },
+        {
+          'name': 'EnabledOnBattery',
+          'value': 2,
+          'caption': 'Battery Saver Mode will be enabled when the device is on battery power.',
+        }
+      ],
+      'default': None,
+      'example_value': 1,
+      'id': 1009,
+      'tags': [],
+      'desc': '''This policy enables or disables the Battery Saver Mode setting. This setting makes it so that frame rate is throttled to lower power consumption.
+      If this policy is unset, the end user can control this setting in chrome://settings/performance.
+      The different levels are:
+      <ph name="BATTERY_SAVER_MODE_DISABLED">Disabled</ph> (0): Battery Saver Mode will be disabled.
+      <ph name="BATTERY_SAVER_MODE_ENABLED_BELOW_THRESHOLD">EnabledBelowThreshold</ph> (1): Battery Saver Mode will be enabled when the device is on battery power and battery level is low.
+      <ph name="BATTERY_SAVER_MODE_ENABLED_ON_BATTERY">EnabledOnBattery</ph> (2): Battery Saver Mode will be enabled when the device is on battery power.
+      ''',
     }
   ],
   'messages': {
@@ -34081,6 +34129,6 @@
   'placeholders': [],
   'deleted_policy_ids': [114, 115, 204, 205, 206, 341, 412, 438, 476, 544, 546, 562, 569, 578, 583, 585, 586, 587, 588, 589, 590, 591, 600, 668, 669, 872],
   'deleted_atomic_policy_group_ids': [19],
-  'highest_id_currently_used': 1008,
+  'highest_id_currently_used': 1009,
   'highest_atomic_group_id_currently_used': 43
 }
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index 7ff40eb..4be0cd2 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -51,6 +51,13 @@
 
       Ist sie nicht konfiguriert, gilt die Standardeinstellung, in der diese Funktion zwar für verwaltete Nutzer nicht zulässig ist, für andere Nutzer jedoch schon.</translation>
 <translation id="1035860095382451169">Schloss-Symbol in der Omnibox für sichere Verbindungen aktivieren</translation>
+<translation id="1040125341954178855">Diese Funktion wurde in Chrome 100 entfernt.
+
+      Wenn diese Richtlinie aktiviert ist, erhält der Nutzer Empfehlungen für Apps, die er schon auf anderen Geräten installiert hat. Sie werden im Launcher nach den lokalen App-Empfehlungen angezeigt, wenn kein Suchtext eingegeben wurde.
+
+      Wenn die Richtlinie deaktiviert oder nicht konfiguriert ist, werden diese Empfehlungen nicht angezeigt.
+
+      Wenn diese Richtlinie konfiguriert ist, kann sie von Nutzern nicht geändert werden.</translation>
 <translation id="1040446814317236570">Stripping von PAC-URLs für https:// aktivieren</translation>
 <translation id="1041719059374171202">Wenn diese Richtlinie konfiguriert ist, kannst du eine Liste mit URL-Mustern erstellen, die angeben, welche Websites kein JavaScript ausführen dürfen.
 
@@ -715,6 +722,7 @@
       Wird diese Richtlinie nicht festgelegt, hat dies keine Auswirkungen auf die Steuerung des Bildschirms durch den Nutzer und auf die Funktionen zur automatischen Anpassung der Bildschirmhelligkeit.
 
       Hinweis: Die Richtlinienwerte sollten in % angegeben werden und zwischen 0 und 100 liegen.</translation>
+<translation id="1733768596873041559">Standardmäßig zum SAML-Identitätsanbieter weiterleiten (vor <ph name="PRODUCT_NAME" />-Version 99 ist eine Bestätigung durch den Nutzer erforderlich)</translation>
 <translation id="1733939382419067578">Wenn diese Richtlinie konfiguriert ist, kannst du eine Liste mit URL-Mustern erstellen, die angeben, welche Websites Benachrichtigungen anzeigen dürfen.
 
       Wenn die Richtlinie nicht konfiguriert ist, gilt „<ph name="DEFAULT_NOTIFICATIONS_SETTING_POLICY_NAME" />“ für alle Websites, sofern konfiguriert. Falls nicht, wird die persönliche Einstellung des Nutzers verwendet.
@@ -2485,6 +2493,13 @@
       den Quirks-Server zu kontaktieren, um Konfigurationsdateien herunterzuladen.
 
       Wenn diese Richtlinie auf "true" gesetzt oder nicht konfiguriert ist, kontaktiert <ph name="PRODUCT_OS_NAME" /> automatisch den Quirks-Server und lädt Konfigurationsdateien herunter, sofern welche vorhanden sind. Diese werden dann auf dem Gerät gespeichert.  Solche Dateien können beispielsweise verwendet werden, um die Anzeigequalität angeschlossener Monitore zu verbessern.</translation>
+<translation id="3522257170445891912">Wenn diese Richtlinie konfiguriert ist, verläuft der Authentifizierungsvorgang bei der Anmeldung auf eine der folgenden Arten, abhängig von der festgelegten Einstellung:
+
+      Wenn die Richtlinie auf GAIA festgelegt ist, erfolgt die Anmeldung über den normalen GAIA-Authentifizierungsvorgang.
+
+      Wenn sie auf SAML_INTERSTITIAL festgelegt ist, wird die Anmeldung automatisch zum SAML-Identitätsanbieter weitergeleitet. Der Nutzer kann weiterhin zum normalen GAIA-Anmeldevorgang zurückkehren.
+
+      Hinweis: Der zusätzliche Bestätigungsbildschirm, der Nutzern bis zur Version 99 in <ph name="PRODUCT_NAME" /> angezeigt wurde, wird nicht mehr eingeblendet. Wenn der SAML-Identitätsanbieter nicht konfiguriert und diese Richtlinie auf SAML_INTERSTITIAL gesetzt ist, schlägt die Weiterleitung mit der Fehlermeldung „400“ fehl.</translation>
 <translation id="3524204464536655762">Websites dürfen nie Zugriff auf USB-Geräte über die WebUSB API anfordern</translation>
 <translation id="3526752951628474302">Nur Schwarz-Weiß-Druck</translation>
 <translation id="3528000905991875314">Alternative Fehlerseiten aktivieren</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index 2251567..9712386 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -766,6 +766,12 @@
 
 Kebijakan ini tidak akan berpengaruh jika opsi untuk menyimpan data penjelajahan yang ada tidak tersedia; hal ini terjadi jika pemisahan profil perusahaan diterapkan secara ketat, atau jika data berasal dari profil yang sudah dikelola.
 </translation>
+<translation id="1795105105645381965">
+      Jika kebijakan disetel ke Aktif (True/Benar), <ph name="PRODUCT_NAME" /> akan diizinkan meminta izin pengguna terkelola sebelum membagikan sinyal perangkat di perangkat yang tidak dikelola guna mendapatkan akses.
+
+      Jika kebijakan disetel ke Nonaktif (False/Salah) atau tidak disetel, <ph name="PRODUCT_NAME" /> tidak akan dapat mengumpulkan sinyal perangkat.
+
+      Contoh sinyal perangkat mencakup (tetapi tidak terbatas pada) adanya informasi OS, registry, file.</translation>
 <translation id="179694024208061102">Jika kebijakan disetel ke Aktif, <ph name="PRODUCT_NAME" /> akan mencoba membuka beberapa URL dalam browser alternatif, seperti <ph name="IE_PRODUCT_NAME" />. Fitur ini disetel menggunakan kebijakan dalam grup <ph name="LEGACY_BROWSER_SUPPORT_POLICY_GROUP" />.
 
       Jika kebijakan disetel ke Nonaktif atau tidak disetel, <ph name="PRODUCT_NAME" /> tidak akan mencoba membuka URL yang ditetapkan dalam browser alternatif.</translation>
@@ -1401,6 +1407,19 @@
 <translation id="2384233438419344179">Jika kebijakan disetel ke Aktif, elemen halaman web yang tidak berasal dari domain di kolom URL browser tidak dapat menyetel cookie. Jika kebijakan disetel ke Nonaktif, elemen tersebut akan dapat menyetel cookie dan pengguna tidak dapat mengubah setelan ini.
 
       Jika tidak disetel, cookie pihak ketiga akan aktif, tetapi pengguna dapat mengubah setelan ini.</translation>
+<translation id="2384553027681594203">Mengaktifkan <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" /> untuk daftar URL di layar login dan layar kunci.
+
+      Menyetel kebijakan ini akan menentukan URL mana yang akan diizinkan menjadi bagian dari alur pengesahan untuk mendapatkan serangkaian sinyal dari perangkat.
+
+      Jika kebijakan ini disetel ke kosong atau tidak disetel, tidak ada endpoint yang akan dapat memulai alur pengesahan atau memperoleh sinyal dari perangkat.
+
+      URL harus berisi skema HTTPS, misalnya "https://example.com".
+
+      Catatan: Karakter pengganti, <ph name="WILDCARD_VALUE" />, diizinkan.
+
+      Kebijakan ini hanya akan memengaruhi alur pengesahan di layar login dan layar kunci. Untuk mengubah alur pengesahan dalam sesi, gunakan kebijakan <ph name="CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME" />.
+
+      Untuk informasi selengkapnya tentang pola <ph name="URL_LABEL" /> yang valid, lihat https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
 <translation id="2386362615870139244">Izinkan penguncian layar saat bangun</translation>
 <translation id="2387469539700985783">Kebijakan ini tidak memengaruhi pelaporan yang dilakukan oleh Android.</translation>
 <translation id="238885588439957890">Waktu saat perangkat akan menggunakan arus listrik AC untuk mengisi daya baterai, disesuaikan dengan zona waktu lokal perangkat.</translation>
@@ -2094,6 +2113,26 @@
 
       Jika kebijakan disetel ke Nonaktif, kontrol media di layar kunci akan dinonaktifkan.</translation>
 <translation id="3072847235228302527">Menyetel Persyaratan Layanan untuk akun lokal perangkat</translation>
+<translation id="3077650998740742747">
+Perilaku default (Kebijakan tidak disetel) saat akun ditambahkan di area konten, dialog kecil mungkin akan muncul yang meminta pengguna membuat profil baru. Dialog ini dapat ditutup.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />
+Jika pengguna login ke layanan Google untuk pertama kalinya di browser <ph name="PRODUCT_NAME" />, dialog akan muncul yang meminta pengguna membuat profil baru untuk akun perusahaannya. Pengguna dapat mengklik Batal dan logout, atau Lanjutkan untuk membuat profil baru. Data penjelajahan yang ada tidak akan ditambahkan ke profil baru. Profil yang baru dibuat diizinkan memiliki akun sekunder, misalnya pengguna dapat login ke akun lain dalam area konten.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT" />
+Perilaku ini sama dengan <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> kecuali profil yang baru dibuat tidak diizinkan memiliki akun sekunder.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" />
+Perilaku ini sama dengan <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> kecuali kotak centang akan ditambahkan ke dialog untuk memungkinkan pengguna menyimpan data penjelajahan lokal.
+Jika pengguna mencentang kotak tersebut, data profil yang ada akan dikaitkan dengan Akun terkelola.
+- Semua data penjelajahan yang ada akan ada di profil baru.
+- Data ini mencakup bookmark, histori, sandi, data isi otomatis, tab terbuka, cookie, cache, penyimpanan web, ekstensi, dll.
+Jika pengguna tidak mencentang kotak:
+- Profil lama akan tetap ada, tidak akan ada data yang hilang.
+- Profil baru akan dibuat.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT_KEEP_EXISTING_DATA" />
+Perilaku ini sama dengan <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" /> kecuali profil yang baru dibuat tidak diizinkan memiliki akun sekunder.</translation>
 <translation id="3083259245974004342">Perlindungan sandi</translation>
 <translation id="3086995894968271156">Mengonfigurasi Penerima Cast di <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3087346703976541109">Menentukan apakah SharedArrayBuffer dapat digunakan dalam konteks yang tidak diisolasi lintas asal</translation>
@@ -3857,6 +3896,12 @@
 <translation id="5085647276663819155">Nonaktifkan Pratinjau Cetak</translation>
 <translation id="5090791951240382356">Mengizinkan penggabungan kebijakan kamus dari sumber berbeda</translation>
 <translation id="5091315650312105069">Mengizinkan autentikasi <ph name="BASIC_AUTH" /> untuk HTTP</translation>
+<translation id="5099239365323299669">Mulai M106, kuota persisten tidak akan didukung lagi. Kebijakan ini akan mengaktifkan kembali fungsi kuota persisten hingga M107.
+
+      Jika kebijakan ini disetel ke aktif, webkitRequestFileSystem dengan jenis persisten akan beroperasi dengan kuota persisten.
+
+      Jika kebijakan ini disetel ke nonaktif atau tidak disetel, webkitRequestFileSystem dengan jenis persisten akan beroperasi dengan kuota sementara.
+      </translation>
 <translation id="5103112931744164177">Kebijakan ini mengontrol stack software yang digunakan untuk berkomunikasi dengan server DNS: klien DNS Sistem Operasi, atau klien DNS bawaan dari <ph name="PRODUCT_NAME" />. Kebijakan ini tidak memengaruhi server DNS mana yang digunakan: misalnya, jika sistem operasi dikonfigurasi untuk menggunakan server DNS perusahaan, server yang sama tersebut akan digunakan oleh klien DNS bawaan. Kebijakan ini juga tidak akan mengontrol jika DNS-over-HTTPS digunakan; <ph name="PRODUCT_NAME" /> akan selalu menggunakan resolver bawaan untuk permintaan DNS-over-HTTPS. Silakan lihat kebijakan <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" /> untuk mengetahui informasi mengenai pengontrolan DNS-over-HTTPS.
 
       Jika kebijakan ini disetel ke Aktif, klien DNS bawaan akan digunakan, jika tersedia.
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index ea5c927..1e926d3 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -767,6 +767,12 @@
 
 기존 인터넷 사용 기록을 유지하는 옵션을 사용할 수 없는 경우 이 정책은 적용되지 않습니다. 이는 기업 프로필 분리가 엄격하게 적용되거나 데이터가 이미 관리된 프로필의 데이터인 경우에 발생합니다.
 </translation>
+<translation id="1795105105645381965">
+      정책을 사용(True)으로 설정하면 액세스 권한을 얻기 위해 관리되지 않는 기기에서 기기 신호를 공유하기 전에 <ph name="PRODUCT_NAME" />에서 관리 사용자의 동의를 요청하게 됩니다.
+
+      정책을 사용 중지(False)로 설정하거나 설정하지 않으면 <ph name="PRODUCT_NAME" />에서 기기 신호를 수집할 수 없습니다.
+
+      기기 신호의 예로는 OS 정보, 레지스트리, 파일 상태 등이 있습니다.</translation>
 <translation id="179694024208061102">이 정책을 사용으로 설정하면 <ph name="PRODUCT_NAME" />에서 일부 URL을 대체 브라우저(예: <ph name="IE_PRODUCT_NAME" />)에서 열려고 시도합니다. 이 기능은 <ph name="LEGACY_BROWSER_SUPPORT_POLICY_GROUP" /> 그룹의 정책을 사용해 설정됩니다.
 
       정책을 사용 안함으로 설정하거나 설정하지 않으면 <ph name="PRODUCT_NAME" />에서 지정된 URL을 대체 브라우저에서 열려고 시도하지 않습니다.</translation>
@@ -1399,6 +1405,19 @@
 <translation id="2384233438419344179">정책을 사용으로 설정하면 브라우저의 주소 표시줄에 있는 도메인이 출처가 아닌 웹페이지 요소가 쿠키를 설정할 수 없습니다. 사용 안함으로 설정하면 이러한 요소가 쿠키를 설정하도록 허용하고 사용자가 설정을 변경할 수 없습니다.
 
       설정하지 않으면 타사 쿠키가 사용 설정되지만 사용자가 이 설정을 변경할 수 있습니다.</translation>
+<translation id="2384553027681594203">로그인 화면 및 잠금 화면의 URL 목록에 <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" />을(를) 사용 설정합니다.
+
+      정책을 설정하면 시스템에서 여러 신호를 가져오기 위한 증명 흐름의 일부로서 어떤 URL을 허용할지 지정할 수 있습니다.
+
+      정책을 설정하지 않거나 비워두면 어떤 엔드포인트도 증명 흐름을 시작할 수 없고 시스템에서 신호를 수신할 수 없게 됩니다.
+
+      URL에는 HTTPS 스킴(예: 'https://example.com')이 있어야 합니다.
+
+      참고: <ph name="WILDCARD_VALUE" /> 와일드 카드가 허용됩니다.
+
+      이 정책은 로그인 화면 및 잠금 화면의 증명 흐름에만 영향을 미칩니다. 세션 내 증명 흐름을 변경하려면 <ph name="CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME" /> 정책을 사용하세요.
+
+      유효한 <ph name="URL_LABEL" /> 패턴에 관해 자세히 알아보려면 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns를 참고하세요.</translation>
 <translation id="2386362615870139244">화면 잠금 허용</translation>
 <translation id="2387469539700985783">이 정책은 Android에서 시행하는 보고에 아무런 영향을 미치지 않습니다.</translation>
 <translation id="238885588439957890">기기에서 배터리 충전을 위해 교류 전원을 사용할 시간으로, 기기의 현지 시간대로 변환됩니다.</translation>
@@ -2092,6 +2111,27 @@
 
       사용 중지하면 잠금 화면의 미디어 컨트롤도 사용 중지됩니다.</translation>
 <translation id="3072847235228302527">기기 로컬 계정에 대한 서비스 약관 설정</translation>
+<translation id="3077650998740742747">
+기본 동작(정책 미설정)
+콘텐츠 영역에 계정이 추가되면 사용자에게 새 프로필을 생성하라는 작은 대화상자가 표시될 수 있습니다. 이 대화상자는 닫을 수 있습니다.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />
+사용자가 <ph name="PRODUCT_NAME" /> 브라우저에서 처음으로 Google 서비스에 로그인하면 사용자에게 회사 계정에 대한 새 프로필을 만들라는 대화상자가 표시됩니다. 사용자는 '취소'를 클릭하여 로그아웃하거나 '계속'을 클릭하여 새 프로필을 만들 수 있습니다. 기존 인터넷 사용 기록은 새 프로필에 추가되지 않습니다. 새로 만든 프로필에는 보조 계정이 허용됩니다. 예를 들어 사용자는 콘텐츠 영역에서 다른 계정에 로그인할 수 있습니다.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT" />
+이는 새로 만든 프로필에 보조 계정이 허용되지 않는다는 점을 제외하면 <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> 설정과 동일하게 작동합니다.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" />
+이는 로컬 인터넷 사용 기록을 유지할 수 있도록 체크박스가 대화상자에 추가되는 것을 제외하면 <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> 설정과 동일합니다.
+사용자가 체크박스를 선택하면 기존 프로필 데이터가 관리 계정과 연결됩니다.
+-  모든 기존 인터넷 사용 기록이 새 프로필에 표시됩니다.
+-  이 데이터에는 북마크, 방문 기록, 비밀번호, 자동 완성 데이터, 열린 탭, 쿠키, 캐시, 웹 저장소, 확장 프로그램 등이 포함됩니다.
+사용자가 체크박스를 선택하지 않는 경우:
+-  이전 프로필은 계속 유지되며 데이터가 손실되지 않습니다.
+-  새 프로필이 생성됩니다.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT_KEEP_EXISTING_DATA" />
+이는 새로 만든 프로필에 보조 계정이 허용되지 않는다는 점을 제외하면 <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" /> 설정과 동일하게 작동합니다.</translation>
 <translation id="3083259245974004342">비밀번호 보호</translation>
 <translation id="3086995894968271156"><ph name="PRODUCT_NAME" />의 Cast 수신기를 설정합니다.</translation>
 <translation id="3087346703976541109">SharedArrayBuffers가 교차 출처 분리되지 않은 컨텍스트에서 사용될 수 있는지 지정</translation>
@@ -3849,6 +3889,12 @@
 <translation id="5085647276663819155">인쇄 미리보기 사용 안함</translation>
 <translation id="5090791951240382356">출처가 서로 다른 사전 정책의 병합 허용</translation>
 <translation id="5091315650312105069">HTTP 연결에 <ph name="BASIC_AUTH" /> 인증 허용</translation>
+<translation id="5099239365323299669">M106 영구 할당량은 더 이상 지원되지 않습니다. 이 정책은 M107까지 영구 할당량 기능을 다시 사용 설정합니다.
+
+      정책을 사용으로 설정하면 영구 유형이 있는 webkitRequestFileSystem은 영구 할당량으로 작동합니다.
+
+      정책을 설정하지 않거나 사용 중지하면 영구 유형이 있는 webkitRequestFileSystem은 임시 할당량으로 작동합니다.
+      </translation>
 <translation id="5103112931744164177">이 정책은 운영 체제 DNS 서버나 <ph name="PRODUCT_NAME" />의 내장 DNS 클라이언트와 같이 DNS 서버와의 통신에 사용되는 소프트웨어 스택을 제어합니다. 이 정책은 사용되는 DNS 서버에 영향을 미치지 않습니다. 예를 들어 엔터프라이즈 DNS 서버를 사용하도록 운영 체제가 구성된 경우 내장 DNS 클라이언트에도 동일한 서버가 사용됩니다. DNS-over-HTTPS가 사용되는 경우에도 영향을 미치지 않습니다. <ph name="PRODUCT_NAME" />에서는 항상 DNS-over-HTTPS 요청에 관한 내장 리졸버를 사용합니다. DNS-over-HTTPS 제어에 관한 자세한 내용은 <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" /> 정책을 참고하세요.
 
       정책을 사용 설정하면 가능한 경우 내장 DNS 클라이언트를 사용합니다.
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index c7ba6c88..6869618 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -759,6 +759,12 @@
 
 Esta política não vai ter efeito se a opção de manter os dados de navegação existentes não estiver disponível. Isso acontece quando a separação de perfil corporativo é aplicada de forma rigorosa ou quando os dados são de um perfil já gerenciado.
 </translation>
+<translation id="1795105105645381965">
+      Se a política for ativada (verdadeira), o <ph name="PRODUCT_NAME" /> vai pedir o consentimento de acesso aos usuários gerenciados antes de compartilhar indicadores em dispositivos não gerenciados.
+
+      Se a política for desativada (falsa) ou deixada sem definição, o <ph name="PRODUCT_NAME" /> não vai coletar indicadores do dispositivo.
+
+      Exemplos de indicadores incluem, entre outros, informações do SO, registro e presença de arquivos.</translation>
 <translation id="179694024208061102">Se a política for definida como ativada, o <ph name="PRODUCT_NAME" /> tentará abrir alguns URLs em um navegador alternativo, como o <ph name="IE_PRODUCT_NAME" />. Esse recurso é configurado por meio das políticas no grupo do <ph name="LEGACY_BROWSER_SUPPORT_POLICY_GROUP" />.
 
       Se a política for definida como desativada ou não for definida, o <ph name="PRODUCT_NAME" /> não tentará abrir URLs designados em um navegador alternativo.</translation>
@@ -1394,6 +1400,19 @@
 <translation id="2384233438419344179">Se a política for definida como "Ativada", os cookies não poderão ser definidos por elementos de página da Web que não sejam do domínio que está na barra de endereço do navegador. Se a política for definida como "Desativada", os cookies poderão ser definidos por esses elementos e os usuários serão impedidos de mudar essa configuração.
 
       Se ela não for definida, os cookies de terceiros serão ativados, mas os usuários poderão mudar essa configuração.</translation>
+<translation id="2384553027681594203">Ative o <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" /> para ver uma lista de URLs nas telas de login e bloqueio.
+
+      Se esta política for definida, ela vai especificar quais URLs têm permissão para fazer parte do fluxo de atestado e receber o conjunto de indicadores da máquina.
+
+      Se ela não for definida ou se for deixada em branco, nenhum endpoint poderá iniciar o fluxo de atestado ou receber sinais da máquina.
+
+      Os URLs precisam ter um esquema HTTPS, como "https://example.com".
+
+      Observação: caracteres curinga (<ph name="WILDCARD_VALUE" />) são permitidos.
+
+      Esta política vai afetar apenas o fluxo de atestado nas telas de login e bloqueio. Para mudar o fluxo de atestado na sessão, use a política <ph name="CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME" />.
+
+      Para informações detalhadas sobre padrões de <ph name="URL_LABEL" /> válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
 <translation id="2386362615870139244">Permitir bloqueios de ativação da tela</translation>
 <translation id="2387469539700985783">Esta política não tem nenhum efeito sobre o relatório feito pelo Android.</translation>
 <translation id="238885588439957890">Horário em que o dispositivo usará corrente alternada para carregar a bateria, interpretado no fuso horário local do dispositivo.</translation>
@@ -2087,6 +2106,27 @@
 
       Se a política for definida como "Desativada", os controles de mídia não serão exibidos na tela de bloqueio.</translation>
 <translation id="3072847235228302527">Definir os Termos de Serviço para uma conta local do dispositivo</translation>
+<translation id="3077650998740742747">
+Comportamento padrão (política não definida)
+Quando uma conta é adicionada à área de conteúdo, uma pequena caixa de diálogo pode aparecer pedindo para o usuário criar um novo perfil. Essa caixa de diálogo pode ser dispensada.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />
+Se um usuário fizer login em um serviço do Google pela primeira vez no navegador <ph name="PRODUCT_NAME" />, uma caixa de diálogo vai aparecer pedindo que ele crie um perfil para a conta corporativa. O usuário pode clicar em "Cancelar" e sair da conta ou em "Continuar" para criar um perfil. Os dados de navegação atuais não vão ser adicionados ao novo perfil. O perfil recém-criado pode ter contas secundárias. Por exemplo, o usuário pode fazer login em outra conta na área de conteúdo.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT" />
+Esse comportamento é igual ao da <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />, mas o perfil recém-criado não pode ter contas secundárias.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" />
+Esse comportamento é igual ao da <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />, mas uma caixa de seleção é adicionada para que o usuário possa manter os dados de navegação locais.
+Se o usuário marcar essa caixa, os dados de perfil atuais vão ser associados à conta gerenciada.
+- Todos os dados de navegação atuais vão estar no novo perfil.
+- Esses dados incluem favoritos, histórico, senha, dados de preenchimento automático, guias abertas, cookies, cache, armazenamento na Web, extensões etc.
+Se o usuário não marcar a caixa:
+- O perfil antigo vai continuar existindo e nenhum dado será perdido.
+- Um novo perfil vai ser criado.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT_KEEP_EXISTING_DATA" />
+Esse comportamento é igual ao da <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" />, mas o perfil recém-criado não pode ter contas secundárias.</translation>
 <translation id="3083259245974004342">Proteção por senha</translation>
 <translation id="3086995894968271156">Configura a política Cast Receiver no <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3087346703976541109">Especifica se o SharedArrayBuffers pode ser usado em um contexto não isolado de origem cruzada</translation>
@@ -3840,6 +3880,12 @@
 <translation id="5085647276663819155">Desativar visualização da impressão</translation>
 <translation id="5090791951240382356">Permitir a mescla de políticas de dicionário de diferentes fontes</translation>
 <translation id="5091315650312105069">Permitir autenticação <ph name="BASIC_AUTH" /> para conexões HTTP</translation>
+<translation id="5099239365323299669">Da versão M106 em diante, não vai mais haver suporte para a cota persistente. Esta política vai reativar a funcionalidade de cota persistente até a versão M107.
+
+      Se a política for ativada, o webkitRequestFileSystem com tipo persistente vai funcionar com essa cota.
+
+      Se ela for desativada ou deixada sem definição, o webkitRequestFileSystem com tipo persistente vai operar com uma cota temporária.
+      </translation>
 <translation id="5103112931744164177">Esta política controla qual pilha de software é usada para se comunicar com o servidor DNS: o cliente DNS do sistema operacional ou o cliente DNS integrado do <ph name="PRODUCT_NAME" />. Esta política não afeta qual servidor DNS será usado. Se, por exemplo, o sistema operacional estiver configurado para usar um servidor DNS empresarial, o mesmo servidor será usado pelo cliente DNS integrado. Ela também não controla como o DNS sobre HTTPS é usado. O <ph name="PRODUCT_NAME" /> sempre usará o resolvedor integrado para solicitações DNS sobre HTTPS. Consulte a política <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" /> para ver informações sobre como controlar o DNS sobre HTTPS.
 
       Se a política for definida como "Ativada", o cliente DNS integrado será usado, se disponível.
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index dd63c53..139ae9e 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -764,6 +764,12 @@
 
 Правило не применяется, если возможность сохранения существующих данных о работе в браузере отсутствует. Это происходит, когда строго необходим отдельный корпоративный профиль или будут использоваться данные из управляемого профиля.
 </translation>
+<translation id="1795105105645381965">
+      Если правило включено (установлено значение True), <ph name="PRODUCT_NAME" /> запрашивает у пользователей управляемых профилей согласие на передачу сигналов с устройств без административного контроля для получения доступа.
+
+      Если правило отключено (установлено значение False) или не настроено, <ph name="PRODUCT_NAME" /> не будет получать сигналы с устройства.
+
+      Примеры таких сигналов: информация об операционной системе, реестре, наличии файлов и т. д.</translation>
 <translation id="179694024208061102">Если это правило включено, <ph name="PRODUCT_NAME" /> по возможности будет открывать некоторые страницы в альтернативном браузере, например в <ph name="IE_PRODUCT_NAME" />. Для настройки этой функции используются правила из группы "<ph name="LEGACY_BROWSER_SUPPORT_POLICY_GROUP" />".
 
       Если правило отключено или не задано, <ph name="PRODUCT_NAME" /> не будет открывать обозначенные вами страницы в альтернативном браузере.</translation>
@@ -1388,6 +1394,19 @@
 <translation id="2384233438419344179">Если правило включено, элементам веб-страниц из других доменов (то есть любых доменов, кроме указанного в адресной строке) запрещается сохранять файлы cookie. Если правило отключено, таким элементам разрешено сохранять файлы cookie, а пользователи не могут менять эту настройку.
 
       Если правило не настроено, добавлять файлы cookie разрешено, но пользователи могут менять этот параметр.</translation>
+<translation id="2384553027681594203">Включение <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" /> для списка URL на экране входа и заблокированном экране.
+
+      Правило позволяет указать, какие URL могут проходить проверку и получать набор сигналов от машины.
+
+      Если правило не настроено или в качестве значения указана пустая строка, конечная точка не сможет начать проверку и не получит сигналы от машины.
+
+      В URL должен использоваться протокол HTTPS. Пример: https://example.com.
+
+      Примечание. Разрешены подстановочные знаки (<ph name="WILDCARD_VALUE" />).
+
+      Правило влияет только на проверку на экране входа и заблокированном экране. Чтобы изменить проверку, выполняемую во время сеанса, используйте правило <ph name="CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME" />.
+
+      Подробнее о допустимых шаблонах <ph name="URL_LABEL" />: https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation>
 <translation id="2386362615870139244">Использование блокировки сна</translation>
 <translation id="2387469539700985783">Это правило не влияет на отчеты, отправляемые приложениями Android.</translation>
 <translation id="238885588439957890">Время, когда устройство начнет использовать переменный ток для заряда батареи, в соответствии с часовым поясом, заданным на устройстве.</translation>
@@ -2081,6 +2100,27 @@
 
       Если правило отключено, элементы управления на заблокированном экране недоступны.</translation>
 <translation id="3072847235228302527">Установить Условия использования локального аккаунта</translation>
+<translation id="3077650998740742747">
+Поведение по умолчанию (правило не настроено)
+После добавления аккаунта в браузере может появиться диалоговое окно с предложением создать новый профиль. Окно можно закрыть.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />
+Если пользователь впервые заходит в сервис Google в браузере <ph name="PRODUCT_NAME" />, то появляется диалоговое окно с предложением создать новый профиль для корпоративного аккаунта. Можно отказаться от этого, нажав кнопку "Отмена" (произойдет выход из аккаунта), или перейти к созданию, выбрав "Далее". Уже имеющиеся данные о работе в браузере не будут добавлены в новый профиль. В новом профиле разрешено пользоваться дополнительными аккаунтами. Например, можно войти в другой аккаунт в окне браузера.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT" />
+Правило действует так же, как и при значении <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />, однако в новом профиле нельзя пользоваться дополнительными аккаунтами.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" />
+Правило действует так же, как и при значении <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />, однако в диалоговом окне теперь появляется флажок, позволяющий перенести локальные данные о работе в браузере в новый профиль.
+Если пользователь установит флажок, имеющиеся данные профиля будут связаны с управляемым аккаунтом.
+–  Все имеющиеся данные о работе в браузере появятся в новом профиле.
+–  Они включают в себя закладки, историю, пароли, данные автозаполнения, открытые вкладки, файлы cookie, кеш, информацию из веб-хранилища, расширения и т. д.
+Если пользователь не установит флажок:
+–  Старый профиль продолжит работать как обычно, его данные не удалятся.
+–  Будет создан новый профиль.
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT_KEEP_EXISTING_DATA" />
+Правило действует так же, как и при значении <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" />, однако в новом профиле нельзя пользоваться дополнительными аккаунтами.</translation>
 <translation id="3083259245974004342">Защита паролем</translation>
 <translation id="3086995894968271156">Настройка ресивера Cast в <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3087346703976541109">Определяет, можно ли использовать SharedArrayBuffers в контексте, не изолированном от междоменных источников</translation>
@@ -3834,6 +3874,12 @@
 <translation id="5085647276663819155">Отключить предварительный просмотр</translation>
 <translation id="5090791951240382356">Разрешить объединять правила со словарями из разных источников</translation>
 <translation id="5091315650312105069">Разрешить аутентификацию типа "<ph name="BASIC_AUTH" />" при подключении по HTTP</translation>
+<translation id="5099239365323299669">Начиная с версии M106 прекращается поддержка постоянной квоты. Это правило позволяет использовать постоянную квоту до версии M107.
+
+      Если правило включено, функция webkitRequestFileSystem с типом Persistent будет использовать постоянную квоту.
+
+      Если правило не настроено или отключено, функция webkitRequestFileSystem с типом Persistent будет использовать временную квоту.
+      </translation>
 <translation id="5103112931744164177">Правило позволяет выбрать, какой программный стек использовать для взаимодействия с DNS-сервером: клиент DNS операционной системы или встроенный в <ph name="PRODUCT_NAME" /> клиент DNS. Это не влияет на выбор DNS-серверов. Например, если операционная система использует корпоративный DNS-сервер, то встроенный клиент DNS будет использовать этот же сервер. Это правило также не влияет на выбор протокола "DNS поверх HTTPS". <ph name="PRODUCT_NAME" /> всегда отправляет запросы по этому протоколу через встроенный преобразователь. Подробные сведения об управлении "DNS поверх HTTPS" можно найти в правиле <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" />.
 
       Если правило включено, используется встроенный клиент DNS (если есть).
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 5f360d9..09f811f 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -756,6 +756,12 @@
 
 如果用于保留现有浏览数据的选项不可用,此政策不会产生任何影响,这种情况会发生于系统严格执行企业资料分隔或者数据来自一份已受管理的资料时。
 </translation>
+<translation id="1795105105645381965">
+      如果此政策已启用 (True),<ph name="PRODUCT_NAME" /> 会先征得受管用户的同意以获得使用权限,然后才在非受管设备上共享设备信号。
+
+      如果此政策已停用 (False) 或未设置,<ph name="PRODUCT_NAME" /> 将无法收集设备信号。
+
+      设备信号的示例包括(但不限于)OS 信息、注册数据库和文件存在状态。</translation>
 <translation id="179694024208061102">如果此政策已启用,<ph name="PRODUCT_NAME" /> 将会尝试在备用浏览器(例如 <ph name="IE_PRODUCT_NAME" />)中打开某些网址。此功能是使用<ph name="LEGACY_BROWSER_SUPPORT_POLICY_GROUP" />组中的政策设置的。
 
       如果此政策已停用或未设置,<ph name="PRODUCT_NAME" /> 将不会尝试在备用浏览器中打开指定的网址。</translation>
@@ -1357,6 +1363,19 @@
 <translation id="2384233438419344179">如果此政策已启用,系统会阻止来自浏览器地址栏所含网域之外的网页元素设置 Cookie。如果此政策已停用,系统会允许这些元素设置 Cookie,并会阻止用户更改此设置。
 
       如果此政策未设置,系统会开启第三方 Cookie,但用户可以更改此设置。</translation>
+<translation id="2384553027681594203">旨在为登录屏幕和锁定的屏幕上的网址列表启用 <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" />。
+
+      通过设置此政策,您可以指定应允许哪些网址参与认证流程,以便接收来自计算机的一系列信号。
+
+      如果您未设置此政策或将其留空,任何端点都将无法启动认证流程,也无法接收来自计算机的信号。
+
+      网址必须采用 HTTPS 架构,例如:“https://example.com”。
+
+      注意:允许使用通配符 <ph name="WILDCARD_VALUE" />。
+
+      此政策只会影响登录屏幕和锁定的屏幕上的认证流程。如需更改会话期间认证流程,请使用 <ph name="CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME" /> 政策。
+
+      如需详细了解有效的<ph name="URL_LABEL" />格式,请访问 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。</translation>
 <translation id="2386362615870139244">允许使用屏幕唤醒锁定</translation>
 <translation id="2387469539700985783">此政策对 Android 完成的报告没有任何影响。</translation>
 <translation id="238885588439957890">设备将于何时(以设备的本地时区表示)使用交流电为电池充电。</translation>
@@ -2049,6 +2068,27 @@
 
       如果此政策已停用,系统会关闭锁定屏幕上的媒体控件。</translation>
 <translation id="3072847235228302527">为设备本地帐号设置服务条款</translation>
+<translation id="3077650998740742747">
+默认行为(未设置政策)
+在内容区域中添加帐号后,系统可能会显示一个小对话框,从中要求用户创建一份新的个人资料。此对话框是可关闭的。
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />
+如果用户在 <ph name="PRODUCT_NAME" /> 浏览器中首次登录 Google 服务,系统会显示一个对话框,从中要求用户为其企业帐号创建一份新的个人资料。用户可点击“取消”并退出登录,或点击“继续”以创建一份新的个人资料。所有现有浏览数据都不会添加到这份新的个人资料中。新创建的个人资料可以设有辅助帐号,例如用户可以登录内容区域中的另一个帐号。
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT" />
+这与 <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> 的行为相同,但新创建的个人资料不得设有辅助帐号。
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" />
+这与 <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> 的行为相同,但系统会在对话框中添加一个复选框以允许用户保留本地浏览数据。
+如果用户勾选该复选框,现有个人资料数据会与受管理的帐号关联。
+-  所有现有浏览数据都会显示在新创建的个人资料中。
+-  这些数据包括书签、历史记录、密码、自动填充数据、打开的标签页、Cookie、缓存的数据、网络存储空间中的数据、扩展程序等等。
+如果用户未勾选该复选框:
+-  旧个人资料将继续存在,而且不会丢失任何数据。
+-  系统将会创建一份新的个人资料。
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT_KEEP_EXISTING_DATA" />
+这与 <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" /> 的行为相同,但新创建的个人资料不得设有辅助帐号。</translation>
 <translation id="3083259245974004342">密码保护</translation>
 <translation id="3086995894968271156">在 <ph name="PRODUCT_NAME" />中配置 Cast 接收器。</translation>
 <translation id="3087346703976541109">指定 SharedArrayBuffers 可否用在未进行跨域隔离的情境中</translation>
@@ -3781,6 +3821,12 @@
 <translation id="5085647276663819155">停用打印预览</translation>
 <translation id="5090791951240382356">允许合并来自多个不同来源的字典政策</translation>
 <translation id="5091315650312105069">允许通过 HTTP 进行<ph name="BASIC_AUTH" />身份验证</translation>
+<translation id="5099239365323299669">从 M106 开始,永久配额将不再受支持。此政策用于重新启用永久配额功能,直至 M107。
+
+      如果此政策已启用,设有“永久”类型的 webkitRequestFileSystem 将使用永久配额运行。
+
+      如果此政策未设置或已停用,设有“永久”类型的 webkitRequestFileSystem 将使用临时配额运行。
+      </translation>
 <translation id="5103112931744164177">此政策用于控制使用哪个软件堆栈与 DNS 服务器通信:操作系统 DNS 客户端或 <ph name="PRODUCT_NAME" /> 的内置 DNS 客户端。此政策不会影响使用哪些 DNS 服务器:例如,如果操作系统已配置为使用一台企业 DNS 服务器,内置 DNS 客户端也会使用这台服务器。此政策也不会控制是否使用 DNS-over-HTTPS;<ph name="PRODUCT_NAME" /> 将始终使用内置的解析器发送 DNS-over-HTTPS 请求。如需了解如何控制 DNS-over-HTTPS,请参阅 <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" /> 政策。
 
       如果此政策已启用,系统将会使用内置 DNS 客户端(如果可用)。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index 9efb05b..c76ee59 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -758,6 +758,12 @@
 
 如果系統沒有提供保留現有瀏覽資料的選項,這項政策就不會產生任何作用;要是強制執行企業設定檔區隔功能,或是資料來自受管理的設定檔,就會發生這種情況。
 </translation>
+<translation id="1795105105645381965">
+      如果將這項政策設為啟用 (True),非受管裝置上的 <ph name="PRODUCT_NAME" /> 就會先徵求受管理使用者的同意,才分享裝置信號,以取得存取權。
+
+      如果將這項政策設為停用 (False) 或不設定,<ph name="PRODUCT_NAME" /> 就無法收集裝置信號。
+
+      裝置信號的範例包括但不限於 OS 資訊、註冊資料庫、以及檔案是否存在。</translation>
 <translation id="179694024208061102">如果將這項政策設為啟用,<ph name="PRODUCT_NAME" /> 會嘗試在替代瀏覽器中 (例如 <ph name="IE_PRODUCT_NAME" />) 開啟部分網址。系統會使用「<ph name="LEGACY_BROWSER_SUPPORT_POLICY_GROUP" />」群組中的政策設定這項功能。
 
 
@@ -1362,6 +1368,19 @@
 <translation id="2384233438419344179">如果將這項政策設為啟用,網頁元素只要不屬於瀏覽器網址列中的網域,就無法設定 Cookie。如果將這項政策設為停用,這類元素將可設定 Cookie,且使用者無法變更這項設定。
 
       如果不設定,系統會啟用第三方 Cookie,但使用者可以變更這項設定。</translation>
+<translation id="2384553027681594203">在登入畫面和螢幕鎖定畫面上針對清單中的網址啟用 <ph name="CHROME_ENTERPRISE_PLATFORM_IDENTITY_CONNECTOR" />。
+
+      你可以透過這項政策指定要讓哪些網址加入認證流程,接收裝置傳送的信號。
+
+      如果不設定這項政策或留空,就表示沒有端點能啟動認證流程,以及接收裝置傳送的信號。
+
+      網址必須採用 HTTPS 架構,例如「https://example.com」。
+
+      附註:可以使用萬用字元 <ph name="WILDCARD_VALUE" />。
+
+      這項政策只會影響登入畫面和螢幕鎖定畫面上的認證流程。如要變更工作階段中認證流程,請使用 <ph name="CONTEXT_AWARE_ACCESS_SIGNALS_ALLOWLIST_POLICY_NAME" /> 政策。
+
+      如果想進一步瞭解有效的<ph name="URL_LABEL" />模式,請參閱 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。</translation>
 <translation id="2386362615870139244">允許使用螢幕喚醒鎖</translation>
 <translation id="2387469539700985783">這項政策對 Android 應用程式製作的報表沒有影響。</translation>
 <translation id="238885588439957890">裝置使用交流電源為電池充電的時間 (根據裝置當地時區)。</translation>
@@ -2054,6 +2073,27 @@
 
       如果將這項政策設為停用,系統會關閉螢幕鎖定畫面上的媒體控制項。</translation>
 <translation id="3072847235228302527">為裝置本機帳戶設定《服務條款》</translation>
+<translation id="3077650998740742747">
+預設行為 (未設定政策)
+在內容區域中新增帳戶時,系統可能會顯示一個小型對話方塊,要求使用者建立新的設定檔。你可以關閉這個對話方塊。
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" />
+當使用者第一次在 <ph name="PRODUCT_NAME" /> 瀏覽器中登入 Google 服務,系統會顯示對話方塊,要求使用者為公司帳戶建立新的設定檔。使用者可以按一下「取消」並登出,或按一下「繼續」建立新的設定檔。現有的瀏覽資料不會加進新的設定檔中。新建立的設定檔可以有次要帳戶,舉例來說,使用者可以在內容區域登入其他帳戶。
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT" />
+這個行為與 <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> 相同,差別只在於新建立的設定檔不允許有次要帳戶。
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" />
+這個行為與 <ph name="POLICY_VALUE_PRIMARY_ACCOUNT" /> 相同,差別只在於系統會在對話方塊中加入核取方塊,讓使用者可以保留本機瀏覽資料。
+如果使用者勾選方塊,現有的設定檔資料就會與受管理帳戶建立關聯。
+- 現有瀏覽資料全都會出現在新設定檔中。
+- 瀏覽資料包括書籤、歷史記錄、密碼、自動填入資料、開啟的分頁、Cookie、快取、網路儲存空間、擴充功能等。
+如果使用者未勾選方塊:
+- 舊設定檔仍會留存,資料不會遺失。
+-  系統會建立新的設定檔。
+
+<ph name="MANAGED_ACCOUNTS_SIGNIN_RESTRICTION_POLICY_NAME" /> = <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_STRICT_KEEP_EXISTING_DATA" />
+這個行為與 <ph name="POLICY_VALUE_PRIMARY_ACCOUNT_KEEP_EXISTING_DATA" /> 相同,差別只在於新建立的設定檔不允許有次要帳戶。</translation>
 <translation id="3083259245974004342">密碼保護功能</translation>
 <translation id="3086995894968271156">設定「<ph name="PRODUCT_NAME" />」的 Cast 接收器</translation>
 <translation id="3087346703976541109">指定 SharedArrayBuffers 是否可用於非跨來源隔離內容</translation>
@@ -3777,6 +3817,12 @@
 <translation id="5085647276663819155">停用列印預覽</translation>
 <translation id="5090791951240382356">允許合併不同來源的字典政策</translation>
 <translation id="5091315650312105069">允許透過 HTTP 使用<ph name="BASIC_AUTH" />驗證</translation>
+<translation id="5099239365323299669">自版本 M106 起,系統不再支援永久配額功能。這項政策會重新啟用永久配額功能,直到 M107 推出為止。
+
+      如果將這項政策設為啟用,永久類型的 webkitRequestFileSystem 將採用永久配額運作。
+
+      如果不設定或停用這項政策,永久類型的 webkitRequestFileSystem 將採用暫時配額運作。
+      </translation>
 <translation id="5103112931744164177">你可以透過這項政策指定要使用哪一個軟體堆疊與 DNS 伺服器進行通訊,選項包括作業系統 DNS 用戶端,以及 <ph name="PRODUCT_NAME" /> 的內建 DNS 用戶端。這項政策不會影響所用的 DNS 伺服器;比方說,如果作業系統設定使用企業的 DNS 伺服器,內建 DNS 用戶端同樣會使用該伺服器。這項政策也不會限制是否使用 DNS-over-HTTPS;<ph name="PRODUCT_NAME" /> 一律會使用內建的解析器來處理 DNS-over-HTTPS 要求。想瞭解如何控管 DNS-over-HTTPS,請參閱 <ph name="DNS_OVER_HTTPS_MODE_POLICY_NAME" /> 政策。
 
       如果將這項政策設為啟用,系統將使用內建的 DNS 用戶端 (如果有的話)。
diff --git a/components/reporting/proto/synced/metric_data.proto b/components/reporting/proto/synced/metric_data.proto
index 9f18d06..f04201e 100644
--- a/components/reporting/proto/synced/metric_data.proto
+++ b/components/reporting/proto/synced/metric_data.proto
@@ -257,6 +257,36 @@
   optional bool has_stylus = 3;
 }
 
+// Information about ePrivacy Screens
+message PrivacyScreenInfo {
+  // If ePrivacy Screen is supported on the device.
+  optional bool supported = 1;
+}
+
+// Information about the displays.
+message DisplayInfo {
+  // Info on all the screens the device has.
+  repeated DisplayDevice display_device = 1;
+}
+
+// Information on one display.
+message DisplayDevice {
+  // Name of display product.
+  optional string display_name = 1;
+  // Display width in millimeters.
+  optional int32 display_width = 2;
+  // Display height in millimeters.
+  optional int32 display_height = 3;
+  // Internal or external display.
+  optional bool is_internal = 4;
+  // Three letter manufacturer ID.
+  optional string manufacturer = 5;
+  // Manufacturer product code.
+  optional int32 model_id = 6;
+  // Year of manufacture.
+  optional int32 manufacture_year = 7;
+}
+
 // Information about keylocker. This is supported on Intel CPUs.
 message KeylockerInfo {
   // If keylocker is supported on the devices CPUs.
@@ -283,6 +313,10 @@
   optional NetworksInfo networks_info = 4;
   // Touch screen info.
   optional TouchScreenInfo touch_screen_info = 5;
+  // Information about the ePrivacy Screen.
+  optional PrivacyScreenInfo privacy_screen_info = 6;
+  // Information about the displays.
+  optional DisplayInfo display_info = 7;
 }
 
 // Audio telemetry data recorded intermittently
@@ -328,6 +362,22 @@
   optional DeviceActivityState device_activity_state = 1;
 }
 
+message DisplaysTelemetry {
+  // Status of all the displays.
+  repeated DisplayStatus display_status = 1;
+}
+
+message DisplayStatus {
+  // Name of display product.
+  optional string display_name = 1;
+  // Horizontal resolution.
+  optional int32 resolution_horizontal = 2;
+  // Vertical resolution.
+  optional int32 resolution_vertical = 3;
+  // Refresh rate.
+  optional int64 refresh_rate = 4;
+}
+
 // Data that can change over time, collected and reported every specific period
 // of time or when an event occur.
 message TelemetryData {
@@ -343,6 +393,8 @@
   optional BootPerformanceTelemetry boot_performance_telemetry = 4;
   // User status telemetry data.
   optional UserStatusTelemetry user_status_telemetry = 5;
+  // Displays telemetry data.
+  optional DisplaysTelemetry displays_telemetry = 6;
 }
 
 enum MetricEventType {
diff --git a/components/safe_browsing/core/browser/tailored_security_service/BUILD.gn b/components/safe_browsing/core/browser/tailored_security_service/BUILD.gn
index 5ab210f..0a20cad6 100644
--- a/components/safe_browsing/core/browser/tailored_security_service/BUILD.gn
+++ b/components/safe_browsing/core/browser/tailored_security_service/BUILD.gn
@@ -9,6 +9,8 @@
     "tailored_security_service.cc",
     "tailored_security_service.h",
     "tailored_security_service_observer.h",
+    "tailored_security_service_observer_util.cc",
+    "tailored_security_service_observer_util.h",
     "tailored_security_service_util.cc",
     "tailored_security_service_util.h",
   ]
diff --git a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.cc b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.cc
new file mode 100644
index 0000000..7224e8e
--- /dev/null
+++ b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.cc
@@ -0,0 +1,45 @@
+// Copyright 2022 The Chromium Authors.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.h"
+
+#include "components/prefs/pref_service.h"
+#include "components/safe_browsing/core/browser/tailored_security_service/tailored_security_service.h"
+#include "components/safe_browsing/core/common/safe_browsing_policy_handler.h"
+#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
+#include "components/signin/public/identity_manager/identity_manager.h"
+#include "url/gurl.h"
+
+namespace safe_browsing {
+
+const int kThresholdForInFlowNotificationMinutes = 5;
+
+bool CanQueryTailoredSecurityForUrl(GURL url) {
+  return url.DomainIs("google.com") || url.DomainIs("youtube.com");
+}
+
+bool CanShowUnconsentedTailoredSecurityDialog(
+    signin::IdentityManager* identity_manager,
+    PrefService* prefs) {
+  if (IsEnhancedProtectionEnabled(*prefs))
+    return false;
+
+  if (!identity_manager ||
+      identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) {
+    return false;
+  }
+
+  if (prefs->GetBoolean(prefs::kAccountTailoredSecurityShownNotification)) {
+    return false;
+  }
+
+  if (SafeBrowsingPolicyHandler::IsSafeBrowsingProtectionLevelSetByPolicy(
+          prefs)) {
+    return false;
+  }
+
+  return true;
+}
+
+}  // namespace safe_browsing
\ No newline at end of file
diff --git a/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.h b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.h
new file mode 100644
index 0000000..84dd7d1
--- /dev/null
+++ b/components/safe_browsing/core/browser/tailored_security_service/tailored_security_service_observer_util.h
@@ -0,0 +1,30 @@
+// Copyright 2022 The Chromium Authors.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_SAFE_BROWSING_CORE_BROWSER_TAILORED_SECURITY_SERVICE_TAILORED_SECURITY_SERVICE_OBSERVER_UTIL_H_
+#define COMPONENTS_SAFE_BROWSING_CORE_BROWSER_TAILORED_SECURITY_SERVICE_TAILORED_SECURITY_SERVICE_OBSERVER_UTIL_H_
+
+class GURL;
+class PrefService;
+
+namespace signin {
+class IdentityManager;
+}  // namespace signin
+
+namespace safe_browsing {
+
+extern const int kThresholdForInFlowNotificationMinutes;
+
+// Checks if we can query TailoredSecurity for a url.
+bool CanQueryTailoredSecurityForUrl(GURL url);
+
+// Checks if we can show the unconsented tailored security dialog depending on
+// the user's identity and preferences.
+bool CanShowUnconsentedTailoredSecurityDialog(
+    signin::IdentityManager* identity_manager,
+    PrefService* prefs);
+
+}  // namespace safe_browsing
+
+#endif  // COMPONENTS_SAFE_BROWSING_CORE_BROWSER_TAILORED_SECURITY_SERVICE_TAILORED_SECURITY_SERVICE_OBSERVER_UTIL_H_
diff --git a/components/services/screen_ai/BUILD.gn b/components/services/screen_ai/BUILD.gn
index d4292825..0744be7 100644
--- a/components/services/screen_ai/BUILD.gn
+++ b/components/services/screen_ai/BUILD.gn
@@ -81,6 +81,7 @@
   deps = [
     ":screen_ai",
     ":test_support",
+    "//base/test:test_support",
     "//components/services/screen_ai/proto",
     "//testing/gtest",
     "//ui/accessibility:test_support",
diff --git a/components/services/screen_ai/proto/proto_convertor.cc b/components/services/screen_ai/proto/proto_convertor.cc
index e6a0807..edee9ad 100644
--- a/components/services/screen_ai/proto/proto_convertor.cc
+++ b/components/services/screen_ai/proto/proto_convertor.cc
@@ -27,6 +27,7 @@
 #include "components/services/screen_ai/proto/view_hierarchy.pb.h"
 #include "components/services/screen_ai/public/mojom/screen_ai_service.mojom.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "ui/accessibility/accessibility_features.h"
 #include "ui/accessibility/ax_enum_util.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_node_data.h"
@@ -39,10 +40,11 @@
 
 namespace {
 
+ui::AXNodeID next_node_id{1};
+
 // Returns the next valid ID that can be used for identifying `AXNode`s in the
 // accessibility tree.
 ui::AXNodeID GetNextNodeID() {
-  static ui::AXNodeID next_node_id{1};
   return next_node_id++;
 }
 
@@ -564,6 +566,10 @@
 
 namespace screen_ai {
 
+void ResetNodeIDForTesting() {
+  next_node_id = 1;
+}
+
 // TODO(nektar): Change return value to `std::vector<ui::AXNodeData>` as other
 // fields in `AXTreeUpdate` are unused.
 ui::AXTreeUpdate ScreenAIVisualAnnotationToAXTreeUpdate(
@@ -577,6 +583,12 @@
     return update;
   }
 
+  if (features::IsScreenAIUseLayoutExtractionEnabled()) {
+    visual_annotation.clear_lines();
+  } else {
+    visual_annotation.clear_ui_component();
+  }
+
   // TODO(https://crbug.com/1278249): Create an AXTreeSource and create the
   // update using AXTreeSerializer.
 
diff --git a/components/services/screen_ai/proto/proto_convertor.h b/components/services/screen_ai/proto/proto_convertor.h
index f188bc25..5be5697 100644
--- a/components/services/screen_ai/proto/proto_convertor.h
+++ b/components/services/screen_ai/proto/proto_convertor.h
@@ -31,6 +31,9 @@
 const std::map<std::string, ax::mojom::Role>&
 GetScreen2xToChromeRoleConversionMapForTesting();
 
+// Resets the node id generator to start from 1 again.
+void ResetNodeIDForTesting();
+
 }  // namespace screen_ai
 
 #endif  // COMPONENTS_SERVICES_SCREEN_AI_PROTO_PROTO_CONVERTOR_H_
diff --git a/components/services/screen_ai/proto/proto_convertor_unittest.cc b/components/services/screen_ai/proto/proto_convertor_unittest.cc
index 48045dcd..6839977b 100644
--- a/components/services/screen_ai/proto/proto_convertor_unittest.cc
+++ b/components/services/screen_ai/proto/proto_convertor_unittest.cc
@@ -14,12 +14,14 @@
 #include "base/path_service.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/stringprintf.h"
+#include "base/test/scoped_feature_list.h"
 #include "base/values.h"
 #include "components/services/screen_ai/proto/chrome_screen_ai.pb.h"
 #include "components/services/screen_ai/proto/test_proto_loader.h"
 #include "components/services/screen_ai/proto/view_hierarchy.pb.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "ui/accessibility/accessibility_features.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/accessibility/ax_tree_update.h"
 #include "ui/accessibility/test_ax_tree_update_json_reader.h"
@@ -235,10 +237,17 @@
 
 using ProtoConvertorTest = testing::Test;
 
-TEST_F(ProtoConvertorTest, ScreenAIVisualAnnotationToAXTreeUpdate) {
+TEST_F(ProtoConvertorTest,
+       ScreenAIVisualAnnotationToAXTreeUpdate_LayoutExtractionResults) {
   chrome_screen_ai::VisualAnnotation annotation;
   gfx::Rect snapshot_bounds(800, 900);
 
+  screen_ai::ResetNodeIDForTesting();
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitWithFeatures(
+      /*enabled_features=*/{features::kScreenAIUseLayoutExtraction},
+      /*disabled_features=*/{});
+
   {
     chrome_screen_ai::UIComponent* component_0 = annotation.add_ui_component();
     chrome_screen_ai::UIComponent::PredictedType* type_0 =
@@ -280,6 +289,16 @@
         "role_description=Signature\n");
     EXPECT_EQ(expected_update, update.ToString());
   }
+}
+
+TEST_F(ProtoConvertorTest, ScreenAIVisualAnnotationToAXTreeUpdate_OcrResults) {
+  chrome_screen_ai::VisualAnnotation annotation;
+  gfx::Rect snapshot_bounds(800, 900);
+
+  screen_ai::ResetNodeIDForTesting();
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitWithFeatures(/*enabled_features=*/{}, /*disabled_features=*/{
+                                    features::kScreenAIUseLayoutExtraction});
 
   {
     chrome_screen_ai::LineBox* line_0 = annotation.add_lines();
@@ -331,22 +350,12 @@
         serialized_annotation, snapshot_bounds);
 
     const std::string expected_update(
-        "id=4 dialog (0, 0)-(800, 900) child_ids=5,6\n"
-        "  id=5 button offset_container_id=4 (0, 1)-(2, 3) transform=[ "
-        "+0.0000 "
-        "-1.0000 +0.0000 +0.0000  \n"
-        "  +1.0000 +0.0000 +0.0000 +0.0000  \n"
-        "  +0.0000 +0.0000 +1.0000 +0.0000  \n"
-        "  +0.0000 +0.0000 +0.0000 +1.0000 ]\n"
-        "\n"
-        "  id=6 genericContainer offset_container_id=4 (0, 0)-(5, 5) "
-        "role_description=Signature\n"
-        "id=7 region (0, 0)-(800, 900) is_page_breaking_object=true "
-        "child_ids=8\n"
-        "  id=8 staticText offset_container_id=7 (100, 100)-(500, 20) "
+        "id=1 region (0, 0)-(800, 900) is_page_breaking_object=true "
+        "child_ids=2\n"
+        "  id=2 staticText offset_container_id=1 (100, 100)-(500, 20) "
         "name_from=contents text_direction=rtl name=Hello world language=en "
-        "child_ids=9\n"
-        "    id=9 inlineTextBox (100, 100)-(500, 20) name_from=contents "
+        "child_ids=3\n"
+        "    id=3 inlineTextBox (100, 100)-(500, 20) name_from=contents "
         "background_color=&C350 color=&61A8 text_direction=rtl language=en "
         "name=Hello world word_starts=0,6 word_ends=6,11\n");
     EXPECT_EQ(expected_update, update.ToString());
diff --git a/components/signin/internal/identity_manager/fake_profile_oauth2_token_service_delegate.cc b/components/signin/internal/identity_manager/fake_profile_oauth2_token_service_delegate.cc
index 54756a6..def88b2 100644
--- a/components/signin/internal/identity_manager/fake_profile_oauth2_token_service_delegate.cc
+++ b/components/signin/internal/identity_manager/fake_profile_oauth2_token_service_delegate.cc
@@ -84,7 +84,6 @@
 void FakeProfileOAuth2TokenServiceDelegate::IssueRefreshTokenForUser(
     const CoreAccountId& account_id,
     const std::string& token) {
-  ScopedBatchChange batch(this);
   if (token.empty()) {
     base::Erase(account_ids_, account_id);
     refresh_tokens_.erase(account_id);
diff --git a/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate.cc b/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate.cc
index 60d7e01..53ac381 100644
--- a/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate.cc
+++ b/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate.cc
@@ -346,6 +346,7 @@
 
   DCHECK_EQ(web_data_service_request_, handle);
   web_data_service_request_ = 0;
+  ScopedBatchChange batch(this);
 
   if (result) {
     DCHECK(result->GetType() == TOKEN_RESULT);
@@ -458,7 +459,6 @@
   ValidateAccountId(account_id);
   const std::string& existing_token = GetRefreshToken(account_id);
   if (existing_token != refresh_token) {
-    ScopedBatchChange batch(this);
     UpdateCredentialsInMemory(account_id, refresh_token);
     PersistCredentials(account_id, refresh_token);
     FireRefreshTokenAvailable(account_id);
@@ -643,7 +643,6 @@
 
   if (refresh_tokens_.count(account_id) > 0) {
     VLOG(1) << "MutablePO2TS::RevokeCredentials for account_id=" << account_id;
-    ScopedBatchChange batch(this);
     if (revoke_on_server)
       RevokeCredentialsOnServer(refresh_tokens_[account_id]);
     refresh_tokens_.erase(account_id);
diff --git a/components/signin/internal/identity_manager/profile_oauth2_token_service.cc b/components/signin/internal/identity_manager/profile_oauth2_token_service.cc
index 44dea91..276e76e 100644
--- a/components/signin/internal/identity_manager/profile_oauth2_token_service.cc
+++ b/components/signin/internal/identity_manager/profile_oauth2_token_service.cc
@@ -78,9 +78,12 @@
       all_credentials_loaded_(false) {
   DCHECK(user_prefs_);
   DCHECK(delegate_);
-  token_manager_ = std::make_unique<OAuth2AccessTokenManager>(
-      this /* OAuth2AccessTokenManager::Delegate* */);
+  token_manager_ =
+      std::make_unique<OAuth2AccessTokenManager>(/*delegate=*/this);
+  // The `ProfileOAuth2TokenService` must be the first observer of `delegate_`.
+  DCHECK(!delegate_->HasObserver());
   AddObserver(this);
+  DCHECK(delegate_->HasObserver());
 }
 
 ProfileOAuth2TokenService::~ProfileOAuth2TokenService() {
diff --git a/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate.cc b/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate.cc
index be42bdf8..80fbdbdb 100644
--- a/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate.cc
+++ b/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate.cc
@@ -77,6 +77,10 @@
   observer_list_.RemoveObserver(observer);
 }
 
+bool ProfileOAuth2TokenServiceDelegate::HasObserver() const {
+  return !observer_list_.empty();
+}
+
 void ProfileOAuth2TokenServiceDelegate::StartBatchChanges() {
   ++batch_change_depth_;
 }
@@ -97,6 +101,7 @@
 void ProfileOAuth2TokenServiceDelegate::FireRefreshTokenAvailable(
     const CoreAccountId& account_id) {
   DCHECK(!account_id.empty());
+  ScopedBatchChange batch(this);
   for (auto& observer : observer_list_)
     observer.OnRefreshTokenAvailable(account_id);
 }
@@ -104,6 +109,7 @@
 void ProfileOAuth2TokenServiceDelegate::FireRefreshTokenRevoked(
     const CoreAccountId& account_id) {
   DCHECK(!account_id.empty());
+  ScopedBatchChange batch(this);
   for (auto& observer : observer_list_)
     observer.OnRefreshTokenRevoked(account_id);
 }
diff --git a/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate.h b/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate.h
index 216d89c..0726555 100644
--- a/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate.h
+++ b/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate.h
@@ -106,6 +106,9 @@
   void AddObserver(ProfileOAuth2TokenServiceObserver* observer);
   void RemoveObserver(ProfileOAuth2TokenServiceObserver* observer);
 
+  // Returns true if there is at least one observer.
+  bool HasObserver() const;
+
   // Returns a pointer to its instance of net::BackoffEntry if it has one
   // (`use_backoff` was true in the constructor), or a nullptr otherwise.
   virtual const net::BackoffEntry* BackoffEntry() const;
diff --git a/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate_chromeos.cc b/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate_chromeos.cc
index 5da84a4d..df6616d 100644
--- a/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate_chromeos.cc
+++ b/components/signin/internal/identity_manager/profile_oauth2_token_service_delegate_chromeos.cc
@@ -393,7 +393,6 @@
   UpdateAuthError(account_id, error,
                   /*fire_auth_error_changed=*/false);
 
-  ScopedBatchChange batch(this);
   FireRefreshTokenAvailable(account_id);
   // See |ProfileOAuth2TokenServiceObserver::OnAuthErrorChanged|.
   // |OnAuthErrorChanged| must be always called after
@@ -458,8 +457,6 @@
   DCHECK(!account_id.empty());
   ClearAuthError(account_id);
 
-  ScopedBatchChange batch(this);
-
   // ProfileOAuth2TokenService will clear its cache for |account_id| when this
   // is called. See |ProfileOAuth2TokenService::OnRefreshTokenRevoked|.
   FireRefreshTokenRevoked(account_id);
diff --git a/components/signin/internal/identity_manager/profile_oauth2_token_service_observer.h b/components/signin/internal/identity_manager/profile_oauth2_token_service_observer.h
index b9cc2ce..27f9450 100644
--- a/components/signin/internal/identity_manager/profile_oauth2_token_service_observer.h
+++ b/components/signin/internal/identity_manager/profile_oauth2_token_service_observer.h
@@ -28,7 +28,10 @@
   // Called after all refresh tokens are loaded during ProfileOAuth2TokenService
   // startup.
   virtual void OnRefreshTokensLoaded() {}
-  // Sent after a batch of refresh token changes is done.
+  // Sent after a batch of refresh token changes. This only includes events
+  // about tokens available or revoked. It's guaranteed that every call to
+  // `OnRefreshTokenAvailable()` and `OnRefreshTokenRevoked()` is part of a
+  // batch, but there is no guarantee for other calls.
   virtual void OnEndBatchChanges() {}
   // Called when the authentication error state for |account_id| has changed.
   // Note: It is always called after |OnRefreshTokenAvailable| when refresh
diff --git a/components/strings/components_strings_af.xtb b/components/strings/components_strings_af.xtb
index 94a1f00..203523d 100644
--- a/components/strings/components_strings_af.xtb
+++ b/components/strings/components_strings_af.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Toegang tot plaaslike data</translation>
 <translation id="1594030484168838125">Kies</translation>
 <translation id="1596296697375291157">Rillers, misdaad- en misterieflieks</translation>
+<translation id="1599199147673445968">Nuwe kaart? <ph name="BEGIN_LINK" />Voer kaartbesonderhede in<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Speel die Dino Run-speletjie in Chrome</translation>
 <translation id="161042844686301425">Siaanblou</translation>
 <translation id="1611101756749861742">Tweede rol</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Sleutelwoorde:</translation>
 <translation id="3667704023705708645">Ondernemingkapitaal</translation>
 <translation id="3671540257457995106">Laat grootteverandering toe?</translation>
+<translation id="3672568546897166916">Fout by <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Derde rol</translation>
 <translation id="3676592649209844519">Toestel-ID:</translation>
 <translation id="3677008721441257057">Het jy bedoel &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index 5c0b6971..2461dc9 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -648,6 +648,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />፣ የእርስዎን የአሰሳ ታሪክ፣ ኩኪዎች፣ መሸጎጫ እና ተጨማሪ ነገሮች ለማጽዳት ትርን ይጫኑ፣ ከዚያ በChrome ቅንብሮች ውስጥ አስገባን ይጫኑ</translation>
 <translation id="2650446666397867134">የፋይሉ መዳረሻ ተከልክሏል</translation>
 <translation id="2653659639078652383">አስገባ</translation>
+<translation id="2657637947725373811">{0,plural, =1{ምስጢራዊ ፋይል ይተላለፍ?}one{ምስጢራዊ ፋይል ይተላለፍ?}other{ምስጢራዊ ፋይሎች ይተላለፉ?}}</translation>
 <translation id="2660779039299703961">ክስተት</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{ምንም}=1{1 የይለፍ ቃል (ለ<ph name="DOMAIN_LIST" />)}=2{2 የይለፍ ቃላት (ለ<ph name="DOMAIN_LIST" />)}one{# የይለፍ ቃላት (ለ<ph name="DOMAIN_LIST" />)}other{# የይለፍ ቃላት (ለ<ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">ላይ</translation>
@@ -794,6 +795,7 @@
 <translation id="3108943290502734357">መሃከለኛ መሳቢያ</translation>
 <translation id="3109728660330352905">ይህን ገጽ ለማየት ፍቃድ የለዎትም።</translation>
 <translation id="3113284927548439113">ሶስተኛ ፈረቃ</translation>
+<translation id="3115363211799416195">{0,plural, =1{ምስጢራዊ ፋይል ይውረድ?}one{ምስጢራዊ ፋይል ይውረድ?}other{ምስጢራዊ ፋይሎች ይውረዱ?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> የውሂብዎን ምትኬ እንዲያስቀምጡና እና ይህን <ph name="DEVICE_TYPE" /> እንዲመልሱ ይፈልግብዎታል።</translation>
 <translation id="3116158981186517402">አሽግ</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -982,6 +984,7 @@
 <translation id="3615877443314183785">ትክክለኛ የአገልግሎት ማብቂያ ቀን ያስገቡ</translation>
 <translation id="36224234498066874">የአሰሳ ውሂብ አስወግድ…</translation>
 <translation id="362276910939193118">ሙሉ ታሪክ አሳይ</translation>
+<translation id="3628905806504633297">{0,plural, =1{የአስተዳዳሪ መመሪያ ይህን ፋይል ወደ <ph name="DESTINATION_NAME" /> ማስተላለፍን አይመክርም}one{የአስተዳዳሪ መመሪያ ይህን ፋይል ወደ <ph name="DESTINATION_NAME" /> ማስተላለፍን አይመክርም}other{የአስተዳዳሪ መመሪያ እነዚህን ፋይሎች ወደ <ph name="DESTINATION_NAME" /> ማስተላለፍን አይመክርም}}</translation>
 <translation id="3630155396527302611">አውታረ መረቡ እንዲደርስ የተፈቀደለት መሣሪያ ነው ተብሎ አስቀድሞ ከተዘረዘረ ከዝርዝሩ
         አስወግደው እንደገና ለማከል ይሞክሩ።</translation>
 <translation id="3630699740441428070">የዚህ መሣሪያ አስተዳዳሪዎች የአውታረ መረብዎን ግንኙነት አዋቅረውታል፣ ይህም የትኛዎቹን ድር ጣቢያዎች እንደጎበኙ ጨምሮ የአውታረ መረብዎን ትራፊክ እንዲመለከቱ ያስችላቸዋል።</translation>
@@ -1340,6 +1343,7 @@
 <translation id="4607603470419975064">የChrome ጠቃሚ ምክሮች አዝራር የልከቱ፣ ስለChrome ባህሪዎች ለማወቅ አስገባን ይጫኑ</translation>
 <translation id="4607608436550361748">የChrome ጠቃሚ ምክሮችን ይመልከቱ</translation>
 <translation id="4617273035598175554">የግራፊክስ እና የእነማ ሶፍትዌር</translation>
+<translation id="4622292761762557753">ቢሆንም አስተላልፍ</translation>
 <translation id="4627675673814409125">ይህ መመሪያ በChrome መገለጫ ደረጃ ላይ ሊዋቀር አይችልም፣ እንዲሁም ችላ ይባላል።</translation>
 <translation id="4628948037717959914">ፎቶ</translation>
 <translation id="4631649115723685955">ከተመላሽ ገንዘብ ጋር ተገናኝቷል</translation>
@@ -1655,6 +1659,7 @@
 <translation id="540969355065856584">ይህ አገልጋይ <ph name="DOMAIN" /> መሆኑን ሊያረጋግጥ አልቻለም፤ የደህንነት እውቅና ማረጋገጫው በዚህ ጊዜ ላይ የሚሰራ አይደለም። ይሄ በተሳሳተ አወቃቀር ወይም አንድ አጥቂ ግንኙነትዎን በመጥለፉ የተከሰተ ሊሆን ይችላል።</translation>
 <translation id="5412040515238827314">ልክ ያልኾነ ቅርጸት፦ የስርዓተ ጥለቶች ዝርዝር ተጠብቆ ነበር።</translation>
 <translation id="5412236728747081950">ይህ ጣቢያ ይበልጥ አግባብነት ያላቸውን ማስታወቂያዎች ለእርስዎ ለማሳየት የእርስዎን ዝንባሌዎች ከChrome ያገኛል</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">ቁልል 4</translation>
 <translation id="5421136146218899937">የአሰሳ ውሂብ አጽዳ…</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> ማሳወቂያዎችን ለእርስዎ መላክ ይፈልጋል</translation>
@@ -2587,6 +2592,7 @@
 <translation id="8004582292198964060">አሳሽ</translation>
 <translation id="8009225694047762179">የይለፍ ቃላትን ያቀናብሩ</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{ይህ ካርድ እና የክፍያ መጠየቂያ አድራሻው ይቀመጣሉ። በመለያ ወደ <ph name="USER_EMAIL" /> ሲገቡ ሊጠቀሙበት ይችላሉ።}one{እነዚህ ካርዶች እና የክፍያ መጠየቂያ አድራሻዎቻቸው ይቀመጣሉ። በመለያ ወደ <ph name="USER_EMAIL" /> ሲገቡ ሊጠቀሙባቸው ይችላሉ።}other{እነዚህ ካርዶች እና የክፍያ መጠየቂያ አድራሻዎቻቸው ይቀመጣሉ። በመለያ ወደ <ph name="USER_EMAIL" /> ሲገቡ ሊጠቀሙባቸው ይችላሉ።}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">በዚህ ጣቢያ ላይ ያሉ አጥቂዎች እርስዎ እንደ ሶፍትዌር መጫን ወይም የግል መረጃዎን (ለምሳሌ፦ የይለፍ ቃላት፣ ስልክ ቁጥሮች ወይም ክሬዲት ካርዶች) አሳልፈው እንዲሰጡ ያሉ አደገኛ ነገር እንዲያደርጉ ሊያታልሉዎት ይችላሉ።</translation>
 <translation id="8026334261755873520">የአሰሳ ውሂብ አጽዳ</translation>
 <translation id="8027077570865220386">መሳቢያ 15</translation>
@@ -2638,6 +2644,7 @@
 <translation id="8148608574971654810">የPDF ስሪት፦</translation>
 <translation id="8149426793427495338">የእርስዎ ኮምፒውተ ተኝቷል።</translation>
 <translation id="8150722005171944719"><ph name="URL" /> ላይ ያለው ፋይል የሚነበብ አይደለም።  ተወግዶ፣ ተወስዶ ወይም የፋይል ፍቃዶቹ መዳረሻ እየከለከሉ ሊሆኑ ይችላሉ።</translation>
+<translation id="8153865548451212769">{0,plural, =1{የአስተዳዳሪ መመሪያ ይህን ፋይል ወደ <ph name="DESTINATION_NAME" /> ማውረድ አይመክርም}one{የአስተዳዳሪ መመሪያ ይህን ፋይል ወደ <ph name="DESTINATION_NAME" /> ማውረድ አይመክርም}other{የአስተዳዳሪ መመሪያ እነዚህን ፋይሎች ወደ <ph name="DESTINATION_NAME" /> ማውረድ አይመክርም}}</translation>
 <translation id="8157295877370077682">ከጣቢያ ውጣ</translation>
 <translation id="8163866351304776260">በግራ በኩል አራቴ ብሳ</translation>
 <translation id="8175796834047840627">እርስዎ በመለያ ስለገቡ Chrome ወደ የእርስዎ የGoogle መለያ ለማስቀመጥ አማራጭ እያቀረበ ነው። ይህን ባህሪ በቅንብሮች ውስጥ መለወጥ ይችላሉ።</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 75dd0032..20327d05 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">الوصول إلى البيانات المحلية</translation>
 <translation id="1594030484168838125">اختيار</translation>
 <translation id="1596296697375291157">أفلام تشويق وغموض وجرائم</translation>
+<translation id="1599199147673445968">هل تريد تعديل معلومات بطاقة الائتمان الجديدة؟ <ph name="BEGIN_LINK" />إدخال تفاصيل البطاقة<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">‏تشغيل لعبة الديناصور في Chrome</translation>
 <translation id="161042844686301425">سماوي</translation>
 <translation id="1611101756749861742">اللفافة الثانية</translation>
@@ -1007,6 +1008,7 @@
 <translation id="3664782872746246217">الكلمات الرئيسية:</translation>
 <translation id="3667704023705708645">رأس مال مُخاطر</translation>
 <translation id="3671540257457995106">هل تريد السماح بتغيير الحجم؟</translation>
+<translation id="3672568546897166916">حدث خطأ في <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">اللفافة الثالثة</translation>
 <translation id="3676592649209844519">معرِّف الجهاز:</translation>
 <translation id="3677008721441257057">‏هل كنت تقصد &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;؟</translation>
@@ -2068,6 +2070,7 @@
 <translation id="6591833882275308647">لا تتم إدارة <ph name="DEVICE_TYPE" /></translation>
 <translation id="6592952801936330159">‏زر "إدارة إعدادات المواقع الإلكترونية"، اضغط على مفتاح Enter لإدارة الأذونات والبيانات المُخزّنة في المواقع الإلكترونية من خلال إعدادات متصفّح Chrome.</translation>
 <translation id="6596325263575161958">خيارات التشفير</translation>
+<translation id="6599642189720630047">المنتجات التي يتمّ تتبّع سعرها</translation>
 <translation id="6609880536175561541">‏Prc7 (مغلف)</translation>
 <translation id="6611723696964473273">أخبار الاقتصاد</translation>
 <translation id="6612010098632894193">فيديو على الإنترنت</translation>
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb
index e792411..b21dd9f 100644
--- a/components/strings/components_strings_as.xtb
+++ b/components/strings/components_strings_as.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">স্থানীয় ডেটাৰ এক্সেছ</translation>
 <translation id="1594030484168838125">বাছনি কৰক</translation>
 <translation id="1596296697375291157">থ্ৰিলাৰ, অপৰাধ আৰু ৰহস্যময় কাহিনীৰ চলচ্চিত্ৰ</translation>
+<translation id="1599199147673445968">নতুন কাৰ্ড? <ph name="BEGIN_LINK" />কাৰ্ডৰ সবিশেষ দিয়ক<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Chromeত Dino Run গে’মটো খেলক</translation>
 <translation id="161042844686301425">চাইয়ান</translation>
 <translation id="1611101756749861742">দ্বিতীয় ৰোল</translation>
@@ -648,6 +649,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chromeৰ ছেটিংসমূহত আপোনাৰ ব্ৰাউজিঙৰ ইতিহাস, কুকিসমূহ, কেশ্ব আৰু বহুতো মচিবলৈ প্ৰথমে টেব আৰু তাৰ পাছত এণ্টাৰ টিপক</translation>
 <translation id="2650446666397867134">ফাইলটোৰ এক্সেছ অস্বীকাৰ কৰা হ’ল</translation>
 <translation id="2653659639078652383">দাখিল কৰক</translation>
+<translation id="2657637947725373811">{0,plural, =1{গোপনীয় ফাইল স্থানান্তৰ কৰিবনে?}one{গোপনীয় ফাইল স্থানান্তৰ কৰিবনে?}other{গোপনীয় ফাইল স্থানান্তৰ কৰিবনে?}}</translation>
 <translation id="2660779039299703961">অনুষ্ঠান</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{এটাও নাই}=1{১টা পাছৱৰ্ড (<ph name="DOMAIN_LIST" />ৰ বাবে)}=2{২টা পাছৱৰ্ড (<ph name="DOMAIN_LIST" />ৰ বাবে)}one{#টা পাছৱৰ্ড (<ph name="DOMAIN_LIST" />ৰ বাবে)}other{#টা পাছৱৰ্ড (<ph name="DOMAIN_LIST" />ৰ বাবে)}}</translation>
 <translation id="2666092431469916601">শীর্ষ</translation>
@@ -794,6 +796,7 @@
 <translation id="3108943290502734357">মাজৰ ট্ৰে’</translation>
 <translation id="3109728660330352905">আপোনাৰ এই পৃষ্ঠাটো চাবলৈ কর্তৃত্ব নাই।</translation>
 <translation id="3113284927548439113">তৃতীয় শ্বিফ্ট</translation>
+<translation id="3115363211799416195">{0,plural, =1{গোপনীয় ফাইল ডাউনল’ড কৰিবনে?}one{গোপনীয় ফাইল ডাউনল’ড কৰিবনে?}other{গোপনীয় ফাইল ডাউনল’ড কৰিবনে?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" />ৰ বাবে আপুনি আপোনাৰ ডেটাৰ বেক আপ লোৱা আৰু এই <ph name="DEVICE_TYPE" />টো উভতাই দিয়াটো আৱশ্যক।</translation>
 <translation id="3116158981186517402">লেমিনেট</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -980,6 +983,7 @@
 <translation id="3615877443314183785">কোনো মান্য ম্যাদ উকলাৰ তাৰিখ দিয়ক</translation>
 <translation id="36224234498066874">ব্ৰাউজিং ডেটা মচক...</translation>
 <translation id="362276910939193118">সম্পূৰ্ণ ইতিহাস দেখুৱাওক</translation>
+<translation id="3628905806504633297">{0,plural, =1{প্ৰশাসকৰ নীতিয়ে এই ফাইলটো <ph name="DESTINATION_NAME" />লৈ স্থানান্তৰ কৰাটো চুপাৰিছ নকৰে}one{প্ৰশাসকৰ নীতিয়ে এই ফাইলসমূহ <ph name="DESTINATION_NAME" />লৈ স্থানান্তৰ কৰাটো চুপাৰিছ নকৰে}other{প্ৰশাসকৰ নীতিয়ে এই ফাইলসমূহ <ph name="DESTINATION_NAME" />লৈ স্থানান্তৰ কৰাটো চুপাৰিছ নকৰে}}</translation>
 <translation id="3630155396527302611">যদি ইয়াক ইতিমধ্যে এটা নেটৱৰ্কটো এক্সেছ কৰিব পৰা প্ৰ‘গ্ৰেম হিচাপে তালিকাভুক্ত কৰি থোৱা থাকে, তেন্তে
       সেই তালিকাখনৰ পৰা ইয়াক আঁতৰাই পুনৰ যোগ কৰি চাওক</translation>
 <translation id="3630699740441428070">এই ডিভাইচটোৰ প্ৰশাসকসকলে আপোনাৰ নেটৱৰ্কৰ সংযোগটো কনফিগাৰ কৰিছে, যিটোৱে তেওঁলোকক আপুনি চোৱা ৱেৱছাইটসমূহকে ধৰি আপোনাৰ নেটৱৰ্কৰ ট্ৰেফিক চাবলৈ দিব পাৰে।</translation>
@@ -1000,6 +1004,7 @@
 <translation id="3664782872746246217">মূল শব্দ:</translation>
 <translation id="3667704023705708645">ভেনচাৰ কেপিটেল</translation>
 <translation id="3671540257457995106">আকাৰ সলনি কৰাৰ অনুমতি দিবনে?</translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" />ত আসোঁৱাহ হৈছে: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">তৃতীয় ৰোল</translation>
 <translation id="3676592649209844519">ডিভাইচ আইডি:</translation>
 <translation id="3677008721441257057">আপুনি &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;ৰ কথা কৈছে নেকি?</translation>
@@ -1337,6 +1342,7 @@
 <translation id="4607603470419975064">Chromeৰ পৰামৰ্শ চোৱাৰ বুটাম, Chromeৰ সুবিধাসমূহৰ বিষয়ে জানিবলৈ প্ৰথমে টেব তাৰ পাছত এণ্টাৰ টিপক</translation>
 <translation id="4607608436550361748">Chromeৰ পৰামৰ্শ চাওক</translation>
 <translation id="4617273035598175554">গ্ৰাফিক্স আৰু এনিমেশ্বনৰ ছফ্টৱেৰ</translation>
+<translation id="4622292761762557753">যি হ’লেও স্থানান্তৰ কৰক</translation>
 <translation id="4627675673814409125">এই নীতিটো Chromeৰ প্ৰ’ফাইল স্তৰত ছেট কৰিব নোৱাৰি আৰু ইয়াক উপেক্ষা কৰা হ’ব।</translation>
 <translation id="4628948037717959914">Photo</translation>
 <translation id="4631649115723685955">কেশ্ববেক লিংক কৰা হ'ল</translation>
@@ -1652,6 +1658,7 @@
 <translation id="540969355065856584">এই ছার্ভাৰটোৱে নিজকে <ph name="DOMAIN" />; বুলি প্ৰমাণ কৰিব নোৱাৰিলে; বৰ্তমান ইয়াৰ সুৰক্ষা প্ৰমাণপত্ৰ মান্য নহয়৷ এয়া কোনো ভুল কনফিগাৰেশ্বনৰ বাবে বা কোনো আক্ৰমণকাৰীয়ে আপোনাৰ সংযোগ অৱৰোধ কৰাৰ বাবে হ’ব পাৰে।</translation>
 <translation id="5412040515238827314">অমান্য ফৰ্মেট: আৰ্হিসমূহৰ এখন সূচী আশা কৰা হৈছে।</translation>
 <translation id="5412236728747081950">আপোনাক অধিক প্ৰাসংগিক বিজ্ঞাপন দেখুৱাবলৈ এই ছাইটটোৱে Chromeৰ পৰা আপোনাৰ আগ্ৰহসমূহ পায়</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">ষ্টেকাৰ ৪</translation>
 <translation id="5421136146218899937">ব্ৰাউজিং ডেটা মচক...</translation>
 <translation id="5426179911063097041"><ph name="SITE" />এ আপোনালৈ জাননী পঠিয়াব বিচাৰে</translation>
@@ -2055,6 +2062,7 @@
 <translation id="6591833882275308647">আপোনাৰ <ph name="DEVICE_TYPE" /> পৰিচালিত নহয়</translation>
 <translation id="6592952801936330159">ছাইটৰ ছেটিঙৰ বুটাম পৰিচালনা কৰক, Chromeৰ ছেটিঙত সমগ্ৰ ছাইটত ষ্ট’ৰ কৰি ৰখা ডেটা আৰু অনুমতি পৰিচালনা কৰিবলৈ এণ্টাৰ টিপক</translation>
 <translation id="6596325263575161958">এনক্ৰিপশ্বনৰ বিকল্প</translation>
+<translation id="6599642189720630047">ট্ৰেক কৰা প্ৰ’ডাক্ট</translation>
 <translation id="6609880536175561541">Prc7 (লেফাফা)</translation>
 <translation id="6611723696964473273">অৰ্থনীতি সম্পৰ্কীয় বাতৰি</translation>
 <translation id="6612010098632894193">অনলাইন ভিডিঅ’</translation>
@@ -2582,6 +2590,7 @@
 <translation id="8004582292198964060">ব্ৰাউজাৰ</translation>
 <translation id="8009225694047762179">পাছৱৰ্ড পৰিচালনা কৰক</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{এই কাৰ্ডখন আৰু ইয়াৰ বিলিঙৰ ঠিকনা ছেভ কৰা হ’ব। আপুনি <ph name="USER_EMAIL" />ত ছাইন ইন কৰিলে এয়া ব্যৱহাৰ কৰিব পাৰিব।}one{এই কাৰ্ডবোৰ আৰু ইয়াৰ বিলিঙৰ ঠিকনা ছেভ কৰা হ’ব। আপুনি <ph name="USER_EMAIL" />ত ছাইন ইন কৰিলে এইবোৰ ব্যৱহাৰ কৰিব পাৰিব।}other{এই কাৰ্ডবোৰ আৰু ইয়াৰ বিলিঙৰ ঠিকনা ছেভ কৰা হ’ব। আপুনি <ph name="USER_EMAIL" />ত ছাইন ইন কৰিলে এইবোৰ ব্যৱহাৰ কৰিব পাৰিব।}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">এই ছাইটৰ আক্ৰমণকাৰীয়ে আপোনাৰ দ্বাৰা কিছুমান বিপজ্জনক কাম কৰাবলৈ চেষ্টা কৰিব পাৰে, যেনে কোনো ছফ্টৱেৰ ইনষ্টল কৰোৱা বা আপোনাৰ ব্যক্তিগত তথ্য (উদাহৰণস্বৰূপে, পাছৱর্ড, ফ’ন নম্বৰ বা ক্ৰেডিট কার্ড) ফাদিল কৰা।</translation>
 <translation id="8026334261755873520">ব্ৰাউজিং ডেটা মচক</translation>
 <translation id="8027077570865220386">ট্ৰে’ ১৫</translation>
@@ -2633,6 +2642,7 @@
 <translation id="8148608574971654810">PDFৰ সংস্কৰণ:</translation>
 <translation id="8149426793427495338">আপোনাৰ কম্পিউটাৰটো সুপ্ত অৱস্থালৈ গৈছিল।</translation>
 <translation id="8150722005171944719"><ph name="URL" />ৰ ফাইলটো পঢ়িব পৰা অৱস্থাত নাই।  এই ফাইলটো হয়তো আঁতৰোৱা হৈছে, ইয়াৰ পৰা লৈ যোৱা হৈছে বা ফাইলৰ অনুমতিয়ে এক্সেছ প্ৰদান কৰা নাই।</translation>
+<translation id="8153865548451212769">{0,plural, =1{প্ৰশাসকৰ নীতিয়ে এই ফাইলটো <ph name="DESTINATION_NAME" />ত ডাউনল’ড কৰাটো চুপাৰিছ নকৰে}one{প্ৰশাসকৰ নীতিয়ে এই ফাইলসমূহ <ph name="DESTINATION_NAME" />ত ডাউনল’ড কৰাটো চুপাৰিছ নকৰে}other{প্ৰশাসকৰ নীতিয়ে এই ফাইলসমূহ <ph name="DESTINATION_NAME" />ত ডাউনল’ড কৰাটো চুপাৰিছ নকৰে}}</translation>
 <translation id="8157295877370077682">ছাইটটোৰ পৰা বাহিৰ হওক</translation>
 <translation id="8163866351304776260">বাওঁফালে চতুর্ভূজ আকাৰত পাঞ্চ কৰক</translation>
 <translation id="8175796834047840627">আপুনি ছাইন ইন কৰি থোৱাৰ বাবে Chromeএ আপোনাৰ Google একাউণ্টত আপোনাৰ কার্ডসমূহ ছেভ কৰাৰ সুবিধা দিছে। আপুনি ছেটিংসমূহ-ত এয়া সলনি কৰিব পাৰে।</translation>
diff --git a/components/strings/components_strings_be.xtb b/components/strings/components_strings_be.xtb
index f27571e..541668e 100644
--- a/components/strings/components_strings_be.xtb
+++ b/components/strings/components_strings_be.xtb
@@ -649,6 +649,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />. Каб выдаліць даныя гісторыі праглядаў сайтаў, файлы cookie, кэшаванае змесціва і іншае праз налады Chrome, націсніце Tab, затым Enter</translation>
 <translation id="2650446666397867134">У доступе да файла адмоўлена</translation>
 <translation id="2653659639078652383">Адправіць</translation>
+<translation id="2657637947725373811">{0,plural, =1{Перанесці канфідэнцыяльны файл?}one{Перанесці канфідэнцыяльныя файлы?}few{Перанесці канфідэнцыяльныя файлы?}many{Перанесці канфідэнцыяльныя файлы?}other{Перанесці канфідэнцыяльныя файлы?}}</translation>
 <translation id="2660779039299703961">Падзея</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Няма}=1{1 пароль (для даменаў <ph name="DOMAIN_LIST" />)}=2{2 паролі (для даменаў <ph name="DOMAIN_LIST" />)}one{# пароль (для даменаў <ph name="DOMAIN_LIST" />)}few{# паролі (для даменаў <ph name="DOMAIN_LIST" />)}many{# пароляў (для даменаў <ph name="DOMAIN_LIST" />)}other{# пароля (для даменаў <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Зверху</translation>
@@ -795,6 +796,7 @@
 <translation id="3108943290502734357">Сярэдні латок</translation>
 <translation id="3109728660330352905">Вы не аўтарызаваны для прагляду гэтай старонкі.</translation>
 <translation id="3113284927548439113">Трэцяя змена</translation>
+<translation id="3115363211799416195">{0,plural, =1{Спампаваць канфідэнцыяльны файл?}one{Спампаваць канфідэнцыяльныя файлы?}few{Спампаваць канфідэнцыяльныя файлы?}many{Спампаваць канфідэнцыяльныя файлы?}other{Спампаваць канфідэнцыяльныя файлы?}}</translation>
 <translation id="3115874930288085374">Вы выкарыстоўваеце дамен "<ph name="ENROLLMENT_DOMAIN" />", які патрабуе ад вас стварыць рэзервовую копію сваіх даных і вярнуць прыладу <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">Ламінацыя</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -983,6 +985,7 @@
 <translation id="3615877443314183785">Увядзіце сапраўдную дату заканчэння тэрміну дзеяння</translation>
 <translation id="36224234498066874">Выдаліць гісторыю праглядаў...</translation>
 <translation id="362276910939193118">Паказаць усю гісторыю</translation>
+<translation id="3628905806504633297">{0,plural, =1{Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца пераносіць гэты файл сюды: <ph name="DESTINATION_NAME" />}one{Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца пераносіць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}few{Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца пераносіць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}many{Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца пераносіць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}other{Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца пераносіць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">Калі браўзер ужо ўказаны як праграма, якой дазволены доступ да сеткі, паспрабуйце
       выдаліць яго са спіса і дадаць зноў.</translation>
 <translation id="3630699740441428070">Адміністратары прылады наладзілі падключэнне да сеткі і цяпер могуць бачыць інфармацыю пра ваш сеткавы трафік, у тым ліку якія вэб-сайты вы наведваеце.</translation>
@@ -1342,6 +1345,7 @@
 <translation id="4607603470419975064">Кнопка "Паказаць парады адносна Chrome". Каб азнаёміцца з функцыямі браўзера Chrome, націсніце Enter</translation>
 <translation id="4607608436550361748">Паказаць парады адносна Chrome</translation>
 <translation id="4617273035598175554">Праграмнае забеспячэнне для графікі і анімацыі</translation>
+<translation id="4622292761762557753">Усё роўна перанесці</translation>
 <translation id="4627675673814409125">Гэту палітыку нельга задаць на ўзроўні профілю Chrome, таму яна будзе ігнаравацца.</translation>
 <translation id="4628948037717959914">Фота</translation>
 <translation id="4631649115723685955">З вяртаннем грошай</translation>
@@ -1657,6 +1661,7 @@
 <translation id="540969355065856584">Серверу не ўдалося даказаць, што гэта <ph name="DOMAIN" />; сертыфікат бяспекі гэтага сайта не распазнаецца як сапраўдны. Прычынай могуць быць няправільныя налады або зламыснік, які спрабуе перахапіць падключэнне.</translation>
 <translation id="5412040515238827314">Няправільны фармат: неабходна ўказаць спіс шаблонаў.</translation>
 <translation id="5412236728747081950">Гэты сайт выкарыстоўвае інфармацыю пра вашы дзеянні ў Chrome, каб паказваць вам больш адпаведную вашым інтарэсам рэкламу</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> – <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Укладчык 4</translation>
 <translation id="5421136146218899937">Выдаліць гісторыю праглядаў...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> запытвае дазвол адпраўляць вам апавяшчэнні</translation>
@@ -2590,6 +2595,7 @@
 <translation id="8004582292198964060">Браўзер</translation>
 <translation id="8009225694047762179">Кіраваць паролямі</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Гэта картка і яе адрас для выстаўлення рахункаў будуць захаваны. Вы зможаце карыстацца ёю, калі ўвойдзеце ва ўліковы запіс <ph name="USER_EMAIL" />.}one{Гэтыя карткі і іх адрасы для выстаўлення рахункаў будуць захаваны. Вы зможаце карыстацца імі, калі ўвойдзеце ва ўліковы запіс <ph name="USER_EMAIL" />.}few{Гэтыя карткі і іх адрасы для выстаўлення рахункаў будуць захаваны. Вы зможаце карыстацца імі, калі ўвойдзеце ва ўліковы запіс <ph name="USER_EMAIL" />.}many{Гэтыя карткі і іх адрасы для выстаўлення рахункаў будуць захаваны. Вы зможаце карыстацца імі, калі ўвойдзеце ва ўліковы запіс <ph name="USER_EMAIL" />.}other{Гэтыя карткі і іх адрасы для выстаўлення рахункаў будуць захаваны. Вы зможаце карыстацца імі, калі ўвойдзеце ва ўліковы запіс <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Зламыснікі на гэтым сайце могуць падмануць вас і прымусіць зрабіць што-небудзь небяспечнае – напрыклад, усталяваць ПЗ або выдаць асабістую інфармацыю (паролі, нумары тэлефонаў або даныя крэдытных картак і падобнае).</translation>
 <translation id="8026334261755873520">Выдаленне гісторыі праглядаў</translation>
 <translation id="8027077570865220386">Латок 15</translation>
@@ -2641,6 +2647,7 @@
 <translation id="8148608574971654810">Версія PDF:</translation>
 <translation id="8149426793427495338">Камп'ютар перайшоў у рэжым сну.</translation>
 <translation id="8150722005171944719">Файл па адрасе "<ph name="URL" />" не чытаецца.  Магчыма, ён быў выдалены, перамешчаны або не хапае дазволаў на доступ да яго.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца спампоўваць гэты файл сюды: <ph name="DESTINATION_NAME" />}one{Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца спампоўваць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}few{Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца спампоўваць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}many{Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца спампоўваць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}other{Згодна з зададзенай адміністратарам палітыкай, не рэкамендуецца спампоўваць гэтыя файлы сюды: <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Закрыць сайт</translation>
 <translation id="8163866351304776260">Чатыры дзіркі злева</translation>
 <translation id="8175796834047840627">Chrome прапаноўвае захоўваць карткі ва Уліковым запісе Google, бо вы ўвайшлі ў сістэму. Гэту функцыю можна выключыць у наладах.</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index fc9e1360..817fa5f6 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Достъп до локални данни</translation>
 <translation id="1594030484168838125">Избор</translation>
 <translation id="1596296697375291157">Трилъри, криминални и детективски филми</translation>
+<translation id="1599199147673445968">Нова карта? <ph name="BEGIN_LINK" />Въведете данните ѝ<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Играене на играта с динозавъра в Chrome</translation>
 <translation id="161042844686301425">синьозелено</translation>
 <translation id="1611101756749861742">Втора ролка</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Ключови думи:</translation>
 <translation id="3667704023705708645">Рисков капитал</translation>
 <translation id="3671540257457995106">Да се разреши ли преоразмеряване?</translation>
+<translation id="3672568546897166916">Грешка в(ъв) <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Трета ролка</translation>
 <translation id="3676592649209844519">Идент. № на устройството:</translation>
 <translation id="3677008721441257057">&lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; ли искате да отворите?</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index 397c8d50..60cb2091 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -120,6 +120,7 @@
 <translation id="1266469291454105242">ডিভাইস আনলক</translation>
 <translation id="1269516672602708785">Google Sites-এ চটপট নতুন সাইট তৈরি করুন</translation>
 <translation id="1270502636509132238">পিক-আপের পদ্ধতি</translation>
+<translation id="1273592791152866347">দাম ট্র্যাক করার ফিচার বন্ধ করা আছে</translation>
 <translation id="1281476433249504884">স্ট্যাকার ১</translation>
 <translation id="1285320974508926690">কখনই এই সাইটটিকে অনুবাদ করবেন না</translation>
 <translation id="1288548991597756084">নিরাপদে কার্ড সেভ করুন</translation>
@@ -248,6 +249,7 @@
 <translation id="155039086686388498">Engineering-D</translation>
 <translation id="1551884710160394169">ফ্রিওয়্যার ও শেয়ারওয়্যার</translation>
 <translation id="1553358976309200471">Chrome আপডেট করুন</translation>
+<translation id="1554003749331233619">আপনি এখন এই প্রোডাক্টটি ট্র্যাক করছেন। এই পৃষ্ঠাটি <ph name="LAST_BOOKMARKS_FOLDER" />-এ সেভ করা আছে</translation>
 <translation id="1555130319947370107">নীল</translation>
 <translation id="1559447966090556585">বিজ্ঞপ্তি পেতে চান?</translation>
 <translation id="1559528461873125649">এমন কোন ফাইল বা ডিরেক্টরি নেই</translation>
@@ -562,6 +564,7 @@
 <translation id="2430968933669123598">Google অ্যাকাউন্ট ম্যানেজ করুন, আপনার Google অ্যাকাউন্টে নিজের সম্পর্কে তথ্য, গোপনীয়তা এবং সুরক্ষা ম্যানেজ করতে Enter প্রেস করুন</translation>
 <translation id="2436186046335138073">সমস্ত <ph name="PROTOCOL" /> লিঙ্কগুলিকে খুলতে <ph name="HANDLER_HOSTNAME" />কে সক্ষম করবেন?</translation>
 <translation id="2438874542388153331">ডানদিকে কোয়াড পাঞ্চ</translation>
+<translation id="2443309680964448806">কোনও সমস্যা হয়েছে। আপনার করা পরিবর্তন সেভ হয়নি।</translation>
 <translation id="2448295565072560657">আপনি লগ-ইন করে থাকার সময় এই ডিভাইসের সাথে অ্যাাটাচ করা ডিভাইস</translation>
 <translation id="2450021089947420533">অ্যাক্টিভিটির সিরিজ</translation>
 <translation id="2463739503403862330">পূরণ করুন</translation>
@@ -820,6 +823,7 @@
 <translation id="317878711435188021">জানতে চায় আপনি সক্রিয়ভাবে কখন এই ডিভাইস ব্যবহার করেন</translation>
 <translation id="3180358318770512945">বাচ্চার লালনপালন করা</translation>
 <translation id="3187306450550410410">কাজের ফ্লেক্সিবল ব্যবস্থা</translation>
+<translation id="3190736958609431397">ট্র্যাক করার বিকল্প বন্ধ করুন</translation>
 <translation id="319282854780294203">সোশ্যাল নেটওয়ার্ক</translation>
 <translation id="3194737229810486521"><ph name="URL" /> স্থায়ীভাবে আপনার ডিভাইসে ডেটা স্টোর করতে চায়</translation>
 <translation id="3195213714973468956"><ph name="SERVER_NAME" /> এ <ph name="PRINTER_NAME" /></translation>
@@ -905,6 +909,7 @@
 <translation id="3387261909427947069">পেমেন্ট পদ্ধতি</translation>
 <translation id="3391030046425686457">পৌঁছে দেওয়ার ঠিকানা</translation>
 <translation id="3391482648489541560">ফাইল এডিটিং</translation>
+<translation id="3392028486601120379">URL প্যাটার্নে একটি "<ph name="URL_PATTERN" />" পাথ নির্দিষ্ট করা আছে। এই কীয়ের জন্য পাথটি কাজ করে না, পাথটি সরিয়ে দিয়ে আবার চেষ্টা করুন। যেমন- *://example.com/ =&gt; *://example.com",</translation>
 <translation id="3395827396354264108">পিকআপের পদ্ধতি</translation>
 <translation id="3399952811970034796">ডেলিভারির ঠিকানা</translation>
 <translation id="3402261774528610252">এই সাইট লোড করার জন্য যে কানেকশন ব্যবহার করা হয়েছে সেটি TLS 1.0 বা TLS 1.1 ব্যবহার করেছে যা শীঘ্রই বন্ধ করা হবে এবং ভবিষ্যতে আর পাওয়া যাবে না। একবার বন্ধ হয়ে যাওয়ার পরে, ব্যবহারকারীরা আর এই সাইটটি লোড করতে পারবেন না। সার্ভারটিতে TLS 1.2 বা এর পরবর্তী যেকোনও ভার্সন চালু করতে হবে।</translation>
@@ -1000,6 +1005,7 @@
 <translation id="3637662659967048211">Google অ্যাকাউন্টে সেভ করুন</translation>
 <translation id="3640766068866876100">Index-4x6-Ext</translation>
 <translation id="3642638418806704195">অ্যাপ্লিকেশন:</translation>
+<translation id="3647286794400715637">প্রতিটি URL স্ট্রিং এন্ট্রিতে ১ থেকে ২টি URL থাকতে হবে।</translation>
 <translation id="3650584904733503804">বৈধতা যাচাইকরণ সফল হয়েছে</translation>
 <translation id="3653033846669030038">থিম পার্ক</translation>
 <translation id="3655241534245626312">অনুমতি সম্পর্কিত সেটিংসে যান</translation>
@@ -1038,6 +1044,7 @@
 <translation id="3738166223076830879">আপনার অ্যাডমিনিস্ট্রেটর ব্রাউজারটি ম্যানেজ করেন।</translation>
 <translation id="3740319564441798148">দূরপাল্লার বাস ও রেল</translation>
 <translation id="3744111561329211289">পটভূমি সিঙ্ক</translation>
+<translation id="3744286742364977428">আপনার ডাউনলোড করা ফাইল Google Cloud-এ বা থার্ড-পার্টির কাছে বিশ্লেষণ করার জন্য পাঠানো হয়েছে। যেমন, কোনও সংবেদনশীল ডেটা বা ম্যালওয়্যার আছে কিনা জানার জন্য ফাইলগুলি হয়ত স্ক্যান করা এবং কোম্পানি নীতি অনুযায়ী স্টোর করা হতে পারে।</translation>
 <translation id="3744899669254331632">এই মূহুর্তে আপনি <ph name="SITE" />-এ যেতে পারবেন না কারণ ওয়েবসাইটি অসংলগ্ন ক্রেডেনশিয়াল পাঠিয়েছে যা Chromium প্রসেস করতে পারেনা৷ নেটওয়ার্ক সমস্যা এবং আক্রমণ সাধারণত অস্থায়ী, তাই এই পৃষ্ঠাটি সম্ভবত পরে কাজ করবে৷</translation>
 <translation id="3745099705178523657">আপনি কনফার্ম করার পর আপনার Google অ্যাকাউন্ট থেকে কার্ডের বিবরণ এই সাইটে শেয়ার করা হবে।</translation>
 <translation id="3748148204939282805"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />-এর আক্রমণকারীরা আপনাকে সফ্টওয়্যার ইনস্টলেশন বা আপনার ব্যক্তিগত তথ্য (যেমন পাসওয়ার্ড, ফোন নম্বর বা ক্রেডিট কার্ড) প্রকাশ করার মত বিপজ্জনক কাজ করার জন্য আপনাকে প্রতারিত করতে পারে। <ph name="BEGIN_LEARN_MORE_LINK" />আরও জানুন<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -1145,6 +1152,7 @@
 <translation id="4087296516249690906">'ইভেন্ট তৈরি করুন' বোতাম, Google Calendar-এ চটপট নতুন ইভেন্ট তৈরি করতে Enter প্রেস করুন</translation>
 <translation id="4088981014127559358">সাইড 1 ছবি Y শিফ্ট</translation>
 <translation id="4089152113577680600">ট্রে ১৪</translation>
+<translation id="4097288585054919042">সতর্কতা বন্ধ করুন</translation>
 <translation id="4098354747657067197">সামনে ধোঁকাবাজ সাইট</translation>
 <translation id="4099048595830172239">গোপনীয় কন্টেন্ট দেখা গেলে, অ্যাডমিনিস্ট্রেটরের নীতি <ph name="APPLICATION_TITLE" />-এর সাথে আপনার স্ক্রিন শেয়ার করার জন্য সাজেস্ট করবে না:</translation>
 <translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome-এ ফন্ট সাইজ এবং টাইপফেস কাস্টমাইজ করতে Tab প্রেস করার পর Enter প্রেস করুন</translation>
@@ -1181,6 +1189,7 @@
 <translation id="4176463684765177261">অক্ষম হয়েছে</translation>
 <translation id="4176535426287761656">টাইমশেয়ার এবং ছুটি কাটানোর জন্য প্রপার্টি</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
+<translation id="4186035307311647330">দাম ট্র্যাক করার বিকল্প বন্ধ করুন</translation>
 <translation id="4194250254487269611">এই মুহূর্তে আপনার কার্ডটি সেভ করা যাবে না</translation>
 <translation id="4196861286325780578">&amp;সরানোর কাজটি আবার করুন</translation>
 <translation id="4202554117186904723">Fifth Roll</translation>
@@ -1227,6 +1236,7 @@
 <translation id="4275830172053184480">আপনার ডিভাইস বন্ধ করে চালু করুন</translation>
 <translation id="4277028893293644418">পাসওয়ার্ড রিসেট করুন</translation>
 <translation id="4278390842282768270">মঞ্জুরিপ্রাপ্ত</translation>
+<translation id="4282346679996504092">এই প্রোডাক্টের জন্য বিজ্ঞপ্তি বন্ধ করে বুকমার্ক সরানো হয়েছে</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{এই কার্ডটি আপনার Google অ্যাকাউন্টে সেভ করা হয়েছে}one{এই কার্ডগুলি আপনার Google অ্যাকাউন্টে সেভ করা হয়েছে}other{এই কার্ডগুলি আপনার Google অ্যাকাউন্টে সেভ করা হয়েছে}}</translation>
 <translation id="4287885627794386150">ট্রায়াল করা যেতে পারে কিন্তু অ্যাক্টিভ নেই</translation>
 <translation id="4297502707443874121"><ph name="THUMBNAIL_PAGE" /> পৃষ্ঠার থাম্বনেল</translation>
@@ -1265,6 +1275,7 @@
 <translation id="4358059973562876591">DnsOverHttpsMode নীতিতে সমস্যা থাকার কারণে আপনার নির্দিষ্ট করা টেমপ্লেট হয়তো ব্যবহার করা যাবে না।</translation>
 <translation id="4358461427845829800">পেমেন্ট পদ্ধতিগুলি পরিচালনা করুন...</translation>
 <translation id="4359160567981085931">আপনি এখনই প্রতারণামূলক একটি সাইটে আপনার পাসওয়ার্ড লিখেছেন। Chrome সাহায্য করবে। আপনার অ্যাকাউন্টের নিরাপত্তা লঙ্ঘনের সম্ভাবনা এড়ানোর জন্য পাসওয়ার্ড পরিবর্তন করতে এবং Google-কে বিজ্ঞপ্তি দিয়ে জানাতে 'অ্যাকাউন্ট সুরক্ষিত রাখুন' বিকল্পে ক্লিক করুন।</translation>
+<translation id="4363222835916186793">এই প্রোডাক্টের জন্য বিজ্ঞপ্তি বন্ধ করা হয়েছে</translation>
 <translation id="4367563149485757821">Number-12 (Envelope)</translation>
 <translation id="437040971055499437">নিরাপত্তা সংক্রান্ত ঘটনা ঘটেছে</translation>
 <translation id="4372516964750095882">Fanfold-Us</translation>
@@ -1417,6 +1428,7 @@
 <translation id="4792686369684665359">আপনি নিরাপদ নয় এমন ফর্মের মাধ্যমে তথ্য জমা দিচ্ছেন</translation>
 <translation id="4796594887379589189">জব অ্যাকাউন্টের আইডি</translation>
 <translation id="4798078619018708837">আপনার কার্ডের বিবরণ আপডেট করতে <ph name="CREDIT_CARD" />-এর মেয়াদ শেষের তারিখ এবং সিভিসি লিখুন। আপনি কনফার্ম করার পর আপনার Google অ্যাকাউন্ট থেকে কার্ডের বিবরণ এই সাইটে শেয়ার করা হবে।</translation>
+<translation id="4798269756263412078">কোনও সাইটে দাম কমলে সেই বিষয়ে বিজ্ঞপ্তি পান। আপনার ইমেলে বিজ্ঞপ্তি পান।</translation>
 <translation id="4800132727771399293">Check your expiration date and CVC and try again</translation>
 <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation>
 <translation id="4806051791961048632">টাচ আইডি ব্যবহার করুন</translation>
@@ -1660,6 +1672,7 @@
 <translation id="5396631636586785122">ডানদিকে ধারের দিকে সেলাই</translation>
 <translation id="5398772614898833570">বিজ্ঞাপন ব্লক করা হয়েছে</translation>
 <translation id="5400836586163650660">ধূসর</translation>
+<translation id="540630185148148480">সতর্কতা চালু করুন</translation>
 <translation id="540969355065856584">এই সার্ভার প্রমাণ করতে পারেনি যে এটি <ph name="DOMAIN" />; এর নিরাপত্তা সার্টিফিকেট এই সময়ে বৈধ নয়। কোনো ভুল কনফিগারেশনের কারণে অথবা কোনো আক্রমণকারী আপনার সংযোগ মাঝপথে আটকে দিচ্ছে বলে এমনটা হতে পারে।</translation>
 <translation id="5412040515238827314">ভুল ফর্ম্যাট: প্রত্যাশিত প্যাটার্নের তালিকা।</translation>
 <translation id="5412236728747081950">এই সাইটটি আপনাকে আরও প্রাসঙ্গিক বিজ্ঞাপন দেখানোর জন্য Chrome থেকে আপনার আগ্রহগুলি নেয়।</translation>
@@ -1724,6 +1737,7 @@
 <translation id="5580958916614886209">আপনার মেয়াদ শেষের মাস পরীক্ষা করে আবার চেষ্টা করুন</translation>
 <translation id="558420943003240152">পাসওয়ার্ড ও পাসকী ম্যানেজ করুন…</translation>
 <translation id="5586446728396275693">কোনও ঠিকানা সংরক্ষণ করা নেই</translation>
+<translation id="5586831831248371458"><ph name="KEYWORD_SUFFIX" /> সার্চ করুন</translation>
 <translation id="5587987780934666589">প্ল্যাটফর্ম ব্যবহারকারী</translation>
 <translation id="5593349413089863479">কানেকশন সম্পূর্ণ সুরক্ষিত নয়</translation>
 <translation id="5595485650161345191">ঠিকানা সম্পাদনা করুন</translation>
@@ -1843,6 +1857,7 @@
 <translation id="5938153366081463283">ভার্চুয়াল কার্ড যোগ করুন</translation>
 <translation id="5938793338444039872">Troy</translation>
 <translation id="5946937721014915347"><ph name="SITE_NAME" /> খুলছে…</translation>
+<translation id="5947508410139465809">আপনার আপলোড বা অ্যাটাচ করা ফাইল Google Cloud-এ বা থার্ড-পার্টির কাছে বিশ্লেষণ করার জন্য পাঠানো হয়েছে। যেমন, কোনও সংবেদনশীল ডেটা বা ম্যালওয়্যার আছে কিনা জানার জন্য ফাইলগুলি হয়ত স্ক্যান করা এবং কোম্পানি নীতি অনুযায়ী স্টোর করা হতে পারে।</translation>
 <translation id="5951495562196540101">ক্রেতার অ্যাকাউন্টের মাধ্যমে এনরোল করা যাচ্ছে না (প্যাকেজ লাইসেন্স পাওয়া যাবে)৷</translation>
 <translation id="5953516610448771166">এই মিডিয়ার জন্য লাইভ ক্যাপশন উপলভ্য নেই। ক্যাপশন পাওয়ার জন্য, এই সাইটের জন্য <ph name="CONTENT_SETTINGS" /> ব্লক করুন।</translation>
 <translation id="5955063559762970069">হোটেল ও থাকার ব্যবস্থা</translation>
@@ -1930,6 +1945,7 @@
 <translation id="6177128806592000436">এই সাইটে আপনার সংযোগ নিরাপদ নয়</translation>
 <translation id="6180316780098470077">কতক্ষণ পর আবার চেষ্টা করা যাবে</translation>
 <translation id="61877208875190028">মহিলাদের পোশাক</translation>
+<translation id="6194209731893739467">এখানে আপনার সবকটি ট্র্যাক করা প্রোডাক্ট দেখুন</translation>
 <translation id="6195371403461054755">জিওলজি</translation>
 <translation id="6196640612572343990">তৃতীয় পক্ষের কুকিজ অবরুদ্ধ করুন</translation>
 <translation id="6203231073485539293">আপনার ইন্টারনেট সংযোগ পরীক্ষা করুন</translation>
@@ -1965,6 +1981,7 @@
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6295618774959045776">CVC:</translation>
 <translation id="6300452962057769623">{0,plural, =0{আপনার ডিভাইস এখনই রিস্টার্ট হবে}=1{১ সেকেন্ড পরেই আপনার ডিভাইস রিস্টার্ট হবে}one{# সেকেন্ড পরেই আপনার ডিভাইস রিস্টার্ট হবে}other{# সেকেন্ড পরেই আপনার ডিভাইস রিস্টার্ট হবে}}</translation>
+<translation id="6301104306974789820">দাম ট্র্যাক করা সংক্রান্ত বিজ্ঞপ্তি পান</translation>
 <translation id="6302269476990306341">Chrome-এ Google অ্যাসিস্ট্যান্ট এতক্ষণ পরে বন্ধ হয়ে যাবে:</translation>
 <translation id="6305205051461490394"><ph name="URL" /> এ পৌঁছানো যাচ্ছে না</translation>
 <translation id="6311165245110979290">ভার্চুয়াল কার্ড উপলভ্য আছে</translation>
@@ -2024,6 +2041,7 @@
 <translation id="6451458296329894277">ফর্ম পুনঃজমা নিশ্চিত করুন</translation>
 <translation id="6456955391422100996">বিজ্ঞাপন সরানো হয়েছে।</translation>
 <translation id="6457206614190510200">স্যাডল স্টিচ</translation>
+<translation id="6457455098507772300">দাম কমে যাওয়া সংক্রান্ত বিজ্ঞপ্তি আপনার ডেস্কটপে পপ-আপ বিজ্ঞপ্তি হিসেবে দেখানো হয়</translation>
 <translation id="6458606150257356946">যেভাবেই হোক এটি পেস্ট করুন</translation>
 <translation id="6464094930452079790">ছবি</translation>
 <translation id="6465306955648956876">পাসওয়ার্ড পরিচালনা করুন...</translation>
@@ -2081,6 +2099,7 @@
 <translation id="663260587451432563">JIS B4</translation>
 <translation id="6643016212128521049">সাফ করুন</translation>
 <translation id="6645291930348198241">কুকি ও সাইট ডেটা অ্যাক্সেস করার অনুমতি দিন।</translation>
+<translation id="6645478838938543427">দাম কমে যাওয়া সংক্রান্ত বিজ্ঞপ্তি <ph name="EMAIL_ADDRESS" />-এ পাঠানো হবে</translation>
 <translation id="6646269444027925224">{COUNT,plural, =0{কিছুই নয়}=1{১টি সাইট থেকে (আপনাকে আপনার Google অ্যাকাউন্ট থেকে সাইন-আউট করা হবে না)}one{#টি সাইট থেকে (আপনাকে আপনার Google অ্যাকাউন্ট থেকে সাইন-আউট করা হবে না)}other{#টি সাইট থেকে (আপনাকে আপনার Google অ্যাকাউন্ট থেকে সাইন-আউট করা হবে না)}}</translation>
 <translation id="6648459603387803038">আপনার অ্যাডমিনিস্ট্রেটর রিমোট লোকেশন থেকে আপনার ব্রাউজারের সেটআপ পরিবর্তন করতে পারেন। এই ডিভাইসের অ্যাক্টিভিটি Chrome-এর বাইরে থেকেও ম্যানেজ করা যেতে পারে।</translation>
 <translation id="6648524591329069940">Serif হরফ</translation>
@@ -2274,6 +2293,7 @@
 <translation id="7182878459783632708">কোন নীতি সেট করা নেই</translation>
 <translation id="7186367841673660872">এই পৃষ্ঠাটি<ph name="ORIGINAL_LANGUAGE" />থেকে<ph name="LANGUAGE_LANGUAGE" />তে অনুবাদ করা হয়েছে</translation>
 <translation id="718872491229180389">চিয়ারলিডিং</translation>
+<translation id="7192188280913829296">"vendor_id" অ্যাট্রিবিউটও নির্দিষ্ট করতে হবে।</translation>
 <translation id="7192203810768312527"><ph name="SIZE" /> জায়গা খালি করে। পরের বার যখন দেখবেন তখন কিছু সাইট লোড হতে দেরি হতে পারে।</translation>
 <translation id="7193661028827781021">রেফারেন্স</translation>
 <translation id="719464814642662924">Visa</translation>
diff --git a/components/strings/components_strings_bs.xtb b/components/strings/components_strings_bs.xtb
index 9055321..4eaa3f2 100644
--- a/components/strings/components_strings_bs.xtb
+++ b/components/strings/components_strings_bs.xtb
@@ -265,7 +265,7 @@
 <translation id="1592005682883173041">Pristup lokalnim podacima</translation>
 <translation id="1594030484168838125">Odaberi</translation>
 <translation id="1596296697375291157">Trileri, kriminalistički filmovi i misterije</translation>
-<translation id="1599199147673445968">Nova kartica? <ph name="BEGIN_LINK" />Unesite podatke o kartici<ph name="END_LINK" /></translation>
+<translation id="1599199147673445968">Nova kartica? <ph name="BEGIN_LINK" />Unesite detalje o kartici<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Igrajte igru Dino Run u Chromeu</translation>
 <translation id="161042844686301425">Cijan</translation>
 <translation id="1611101756749861742">Druga rolna</translation>
@@ -649,7 +649,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pritisnite Tab, a zatim Enter da obrišete historiju pregledanja, kolačiće, keš memoriju i drugi sadržaj u postavkama Chromea</translation>
 <translation id="2650446666397867134">Pristup fajlu je odbijen</translation>
 <translation id="2653659639078652383">Pošalji</translation>
-<translation id="2657637947725373811">{0,plural, =1{Želite li prenijeti povjerljivu datoteku?}one{Želite li prenijeti povjerljive datoteke?}few{Želite li prenijeti povjerljive datoteke?}other{Želite li prenijeti povjerljive datoteke?}}</translation>
+<translation id="2657637947725373811">{0,plural, =1{Prenijeti povjerljiv fajl?}one{Prenijeti povjerljive fajlove?}few{Prenijeti povjerljive fajlove?}other{Prenijeti povjerljive fajlove?}}</translation>
 <translation id="2660779039299703961">Događaj</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Ništa}=1{1 lozinka (za <ph name="DOMAIN_LIST" />)}=2{2 lozinke (za <ph name="DOMAIN_LIST" />)}one{# lozinka (za <ph name="DOMAIN_LIST" />)}few{# lozinke (za <ph name="DOMAIN_LIST" />)}other{# lozinki (za <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Gornji</translation>
@@ -796,7 +796,7 @@
 <translation id="3108943290502734357">Srednja ladica</translation>
 <translation id="3109728660330352905">Nemate ovlaštenje za prikaz ove stranice.</translation>
 <translation id="3113284927548439113">Treća smjena</translation>
-<translation id="3115363211799416195">{0,plural, =1{Želite li preuzeti povjerljivu datoteku?}one{Želite li preuzeti povjerljive datoteke?}few{Želite li preuzeti povjerljive datoteke?}other{Želite li preuzeti povjerljive datoteke?}}</translation>
+<translation id="3115363211799416195">{0,plural, =1{Preuzeti povjerljiv fajl?}one{Preuzeti povjerljive fajlove?}few{Preuzeti povjerljive fajlove?}other{Preuzeti povjerljive fajlove?}}</translation>
 <translation id="3115874930288085374">Domena <ph name="ENROLLMENT_DOMAIN" /> zahtijeva da napravite sigurnosnu kopiju podataka i vratite ovaj uređaj <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">Laminiranje</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -986,7 +986,7 @@
 <translation id="3615877443314183785">Unesite važeći datum isteka</translation>
 <translation id="36224234498066874">Obriši podatke pregledanja...</translation>
 <translation id="362276910939193118">Prikaži cijelu historiju</translation>
-<translation id="3628905806504633297">{0,plural, =1{Prema pravilima administratora ne preporučuje se prijenos te datoteke na: <ph name="DESTINATION_NAME" />}one{Prema pravilima administratora ne preporučuje se prijenos datoteka na: <ph name="DESTINATION_NAME" />}few{Prema pravilima administratora ne preporučuje se prijenos datoteka na: <ph name="DESTINATION_NAME" />}other{Prema pravilima administratora ne preporučuje se prijenos datoteka na: <ph name="DESTINATION_NAME" />}}</translation>
+<translation id="3628905806504633297">{0,plural, =1{Pravila administratora ne preporučuju prijenos ovog fajla na uređaj <ph name="DESTINATION_NAME" />}one{Pravila administratora ne preporučuju prijenos ovih fajlova na uređaj <ph name="DESTINATION_NAME" />}few{Pravila administratora ne preporučuju prijenos ovih fajlova na uređaj <ph name="DESTINATION_NAME" />}other{Pravila administratora ne preporučuju prijenos ovih fajlova na uređaj <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">Ako je već naveden kao program kome je dozvoljen pristup mreži, pokušajte
       ga ukloniti s liste pa ponovo dodati.</translation>
 <translation id="3630699740441428070">Administratori ovog uređaja su konfigurirali vašu mrežnu vezu, što im može dozvoliti pregled vašeg mrežnog saobraćaja, uključujući web lokacije koje posjećujete.</translation>
@@ -1007,7 +1007,7 @@
 <translation id="3664782872746246217">Ključne riječi:</translation>
 <translation id="3667704023705708645">Poduzetnički kapital</translation>
 <translation id="3671540257457995106">Dozvoliti promjenu veličine?</translation>
-<translation id="3672568546897166916">Pogreška na <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" /> ima grešku: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Treća rolna</translation>
 <translation id="3676592649209844519">ID uređaja:</translation>
 <translation id="3677008721441257057">Jeste li mislili &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
@@ -1346,7 +1346,7 @@
 <translation id="4607603470419975064">Dugme Prikaži savjete za Chrome, pritisnite Enter da saznate više o funkcijama Chromea</translation>
 <translation id="4607608436550361748">Prikaži savjete za Chrome</translation>
 <translation id="4617273035598175554">Softver za grafiku i animaciju</translation>
-<translation id="4622292761762557753">Svejedno prenesi</translation>
+<translation id="4622292761762557753">Ipak prenesi</translation>
 <translation id="4627675673814409125">Nije moguće postaviti ovo pravilo na nivou Chrome profila i bit će zanemareno.</translation>
 <translation id="4628948037717959914">Fotografija</translation>
 <translation id="4631649115723685955">Usluga povrata novca je povezana</translation>
@@ -2647,7 +2647,7 @@
 <translation id="8148608574971654810">PDF verzija:</translation>
 <translation id="8149426793427495338">Računar je u stanju mirovanja.</translation>
 <translation id="8150722005171944719">Fajl na URL-u <ph name="URL" /> nije čitljiv.  Možda je uklonjen, premješten ili odobrenja fajla sprečavaju pristup.</translation>
-<translation id="8153865548451212769">{0,plural, =1{Prema pravilima administratora ne preporučuje se preuzimanje te datoteke na: <ph name="DESTINATION_NAME" />}one{Prema pravilima administratora ne preporučuje se preuzimanje tih datoteka na: <ph name="DESTINATION_NAME" />}few{Prema pravilima administratora ne preporučuje se preuzimanje tih datoteka na: <ph name="DESTINATION_NAME" />}other{Prema pravilima administratora ne preporučuje se preuzimanje tih datoteka na: <ph name="DESTINATION_NAME" />}}</translation>
+<translation id="8153865548451212769">{0,plural, =1{Pravila administratora ne preporučuju preuzimanje ovog fajla na uređaj <ph name="DESTINATION_NAME" />}one{Pravila administratora ne preporučuju preuzimanje ovih fajlova na uređaj <ph name="DESTINATION_NAME" />}few{Pravila administratora ne preporučuju preuzimanje ovih fajlova na uređaj <ph name="DESTINATION_NAME" />}other{Pravila administratora ne preporučuju preuzimanje ovih fajlova na uređaj <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Napusti web lokaciju</translation>
 <translation id="8163866351304776260">Četverostruko bušenje na lijevoj strani</translation>
 <translation id="8175796834047840627">Chrome vam nudi pohranjivanje vaših kartica na Google računu zato što ste prijavljeni. Ovo ponašanje možete promjeniti u postavkama</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index f2587d50..1786062 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Accés a les dades locals</translation>
 <translation id="1594030484168838125">Tria</translation>
 <translation id="1596296697375291157">Pel·lícules de crims, de misteri i thrillers</translation>
+<translation id="1599199147673445968">És una targeta nova? <ph name="BEGIN_LINK" />Introdueix els detalls de la targeta<ph name="END_LINK" />.</translation>
 <translation id="160851722280695521">Juga al joc del dinosaure de Chrome</translation>
 <translation id="161042844686301425">Cian</translation>
 <translation id="1611101756749861742">Segon corró</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Paraules clau:</translation>
 <translation id="3667704023705708645">Capital de risc</translation>
 <translation id="3671540257457995106">Vols permetre que canviï de mida?</translation>
+<translation id="3672568546897166916">Error a <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Tercer corró</translation>
 <translation id="3676592649209844519">Identificador del dispositiu:</translation>
 <translation id="3677008721441257057">Volies dir &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index 2cd42774..631f0bdc6 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -2062,6 +2062,7 @@
 <translation id="6591833882275308647">Vaše zařízení <ph name="DEVICE_TYPE" /> není spravováno</translation>
 <translation id="6592952801936330159">Tlačítko správy nastavení webů, stisknutím klávesy Enter můžete spravovat oprávnění a uložená data webů v nastavení Chromu</translation>
 <translation id="6596325263575161958">Možnosti šifrování</translation>
+<translation id="6599642189720630047">Sledované produkty</translation>
 <translation id="6609880536175561541">Prc7 (obálka)</translation>
 <translation id="6611723696964473273">Ekonomické zprávy</translation>
 <translation id="6612010098632894193">Online video</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb
index 290487c8..5b8df998 100644
--- a/components/strings/components_strings_cy.xtb
+++ b/components/strings/components_strings_cy.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Mynediad Data Lleol</translation>
 <translation id="1594030484168838125">Dewis</translation>
 <translation id="1596296697375291157">Ffilmiau cyffro, trosedd a dirgelwch</translation>
+<translation id="1599199147673445968">Cerdyn newydd? <ph name="BEGIN_LINK" />Rhowch Fanylion y Cerdyn<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Chwarae'r gêm Dino Run yn Chrome</translation>
 <translation id="161042844686301425">Gwyrddlas</translation>
 <translation id="1611101756749861742">Ail Rôl</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Allweddeiriau:</translation>
 <translation id="3667704023705708645">Cyfalaf menter</translation>
 <translation id="3671540257457995106">Caniatáu newid maint?</translation>
+<translation id="3672568546897166916">Gwall yn <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Trydedd Rôl</translation>
 <translation id="3676592649209844519">Dull Adnabod Dyfais:</translation>
 <translation id="3677008721441257057">Oeddech chi'n meddwl &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index 37b4d7e..f04bfc3 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Lokal dataadgang</translation>
 <translation id="1594030484168838125">Vælg</translation>
 <translation id="1596296697375291157">Thrillere, kriminal- og mysteriefilm</translation>
+<translation id="1599199147673445968">Har du fået nyt kort? <ph name="BEGIN_LINK" />Angiv kortoplysningerne<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Spil Dino Run-spillet i Chrome</translation>
 <translation id="161042844686301425">Cyan</translation>
 <translation id="1611101756749861742">Anden papirrulle</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Søgeord:</translation>
 <translation id="3667704023705708645">Risikovillig kapital</translation>
 <translation id="3671540257457995106">Vil du tillade valg af andre størrelser?</translation>
+<translation id="3672568546897166916">Fejl: <ph name="ERROR_PATH" /> – <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Tredje papirrulle</translation>
 <translation id="3676592649209844519">Enheds-id:</translation>
 <translation id="3677008721441257057">Mente du &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index c644553..c281a12 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -648,6 +648,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" /> – drücke die Tabulatortaste und dann die Eingabetaste, um in den Chrome-Einstellungen deinen Browserverlauf, deine Cookies und andere Daten zu löschen sowie den Cache zu leeren</translation>
 <translation id="2650446666397867134">Der Zugriff auf die Datei wurde verweigert.</translation>
 <translation id="2653659639078652383">Senden</translation>
+<translation id="2657637947725373811">{0,plural, =1{Vertrauliche Datei übertragen?}other{Vertrauliche Dateien übertragen?}}</translation>
 <translation id="2660779039299703961">Ereignis</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Keins}=1{1 Passwort (für <ph name="DOMAIN_LIST" />)}=2{2 Passwörter (für <ph name="DOMAIN_LIST" />)}other{# Passwörter (für <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Oben</translation>
@@ -794,6 +795,7 @@
 <translation id="3108943290502734357">Mittleres Fach</translation>
 <translation id="3109728660330352905">Du bist nicht zum Aufrufen dieser Seite autorisiert.</translation>
 <translation id="3113284927548439113">Dritte Schicht</translation>
+<translation id="3115363211799416195">{0,plural, =1{Vertrauliche Datei herunterladen?}other{Vertrauliche Dateien herunterladen?}}</translation>
 <translation id="3115874930288085374">Gemäß <ph name="ENROLLMENT_DOMAIN" /> ist es notwendig, ein Daten-Backup zu erstellen und dieses <ph name="DEVICE_TYPE" /> zurückzugeben.</translation>
 <translation id="3116158981186517402">Laminieren</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -982,6 +984,7 @@
 <translation id="3615877443314183785">Gib ein gültiges Ablaufdatum ein</translation>
 <translation id="36224234498066874">Browserdaten löschen...</translation>
 <translation id="362276910939193118">Gesamtverlauf anzeigen</translation>
+<translation id="3628905806504633297">{0,plural, =1{Gemäß der Administratorrichtlinie wird nicht empfohlen, diese Datei auf „<ph name="DESTINATION_NAME" />“ zu übertragen}other{Gemäß der Administratorrichtlinie wird nicht empfohlen, diese Dateien auf „<ph name="DESTINATION_NAME" />“ zu übertragen}}</translation>
 <translation id="3630155396527302611">Falls das Programm schon in der Liste mit erlaubtem Netzwerkzugriff eingetragen ist, entferne es aus der Liste und füge es noch einmal hinzu.</translation>
 <translation id="3630699740441428070">Administratoren dieses Geräts haben deine Netzwerkverbindung konfiguriert. Dadurch erhalten sie möglicherweise Einblick in deinen Netzwerkverkehr und können sehen, welche Websites du besuchst.</translation>
 <translation id="3631244953324577188">Biometrisches Verfahren</translation>
@@ -1339,6 +1342,7 @@
 <translation id="4607603470419975064">Schaltfläche „Chrome-Tipps aufrufen“ – drücke die Eingabetaste, um mehr über die Funktionen von Chrome zu erfahren</translation>
 <translation id="4607608436550361748">Chrome-Tipps aufrufen</translation>
 <translation id="4617273035598175554">Grafik- und Animationssoftware</translation>
+<translation id="4622292761762557753">Trotzdem übertragen</translation>
 <translation id="4627675673814409125">Diese Richtlinie kann nicht auf der Chrome-Profilebene festgelegt werden und wird ignoriert.</translation>
 <translation id="4628948037717959914">Foto</translation>
 <translation id="4631649115723685955">Cashback zugeordnet</translation>
@@ -1654,6 +1658,7 @@
 <translation id="540969355065856584">Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat ist zurzeit ungültig. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der deine Verbindung abfängt.</translation>
 <translation id="5412040515238827314">Ungültiges Format: Es wurde eine Liste mit Mustern erwartet.</translation>
 <translation id="5412236728747081950">Diese Website ruft deine Interessen von Chrome ab, damit sie dir relevantere Werbung anzeigen kann</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> – <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Stapelfach 4</translation>
 <translation id="5421136146218899937">Browserdaten löschen...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> möchte dir Benachrichtigungen senden</translation>
@@ -2058,6 +2063,7 @@
 <translation id="6591833882275308647">Dein <ph name="DEVICE_TYPE" /> wird nicht verwaltet</translation>
 <translation id="6592952801936330159">Schaltfläche zum Verwalten der Website-Einstellungen – drücke die Eingabetaste, um Berechtigungen und gespeicherte Daten von Websites in den Chrome-Einstellungen zu verwalten</translation>
 <translation id="6596325263575161958">Verschlüsselungsoptionen</translation>
+<translation id="6599642189720630047">Beobachtete Produkte</translation>
 <translation id="6609880536175561541">Prc7 (Umschlag)</translation>
 <translation id="6611723696964473273">Wirtschaftsnachrichten</translation>
 <translation id="6612010098632894193">Onlinevideos</translation>
@@ -2585,6 +2591,7 @@
 <translation id="8004582292198964060">Browser</translation>
 <translation id="8009225694047762179">Passwort verwalten</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Diese Karte und die entsprechende Rechnungsadresse werden gespeichert. Du kannst sie nutzen, wenn du in <ph name="USER_EMAIL" /> angemeldet bist.}other{Diese Karten und die entsprechenden Rechnungsadressen werden gespeichert. Du kannst sie nutzen, wenn du in <ph name="USER_EMAIL" /> angemeldet bist.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Unbefugte Dritte auf dieser Website versuchen unter Umständen auf betrügerische Weise, dich zur Installation von Software zu bewegen oder dir personenbezogene Daten zu entlocken, zum Beispiel Passwörter, Telefonnummern oder Kreditkartendaten.</translation>
 <translation id="8026334261755873520">Browserdaten löschen</translation>
 <translation id="8027077570865220386">Fach 15</translation>
@@ -2636,6 +2643,7 @@
 <translation id="8148608574971654810">PDF-Version:</translation>
 <translation id="8149426793427495338">Dein Computer ist im Ruhemodus.</translation>
 <translation id="8150722005171944719">Die Datei unter <ph name="URL" /> kann nicht gelesen werden. Sie wurde möglicherweise entfernt oder verschoben oder die Dateiberechtigungen verhindern den Zugriff.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Gemäß der Administratorrichtlinie wird nicht empfohlen, diese Datei auf „<ph name="DESTINATION_NAME" />“ herunterzuladen}other{Gemäß der Administratorrichtlinie wird nicht empfohlen, diese Dateien auf „<ph name="DESTINATION_NAME" />“ herunterzuladen}}</translation>
 <translation id="8157295877370077682">Website verlassen</translation>
 <translation id="8163866351304776260">Vierfache Lochung links</translation>
 <translation id="8175796834047840627">Chrome bietet dir die Möglichkeit, die Karten in deinem Google-Konto zu speichern, weil du angemeldet bist. Du kannst dies in den Einstellungen ändern.</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index 6361cfb1..93dde65 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -120,6 +120,7 @@
 <translation id="1266469291454105242">Device unlock</translation>
 <translation id="1269516672602708785">Create a new site in Google Sites quickly</translation>
 <translation id="1270502636509132238">Pickup Method</translation>
+<translation id="1273592791152866347">Price tracking off</translation>
 <translation id="1281476433249504884">Stacker 1</translation>
 <translation id="1285320974508926690">Never translate this site</translation>
 <translation id="1288548991597756084">Save card securely</translation>
@@ -248,6 +249,7 @@
 <translation id="155039086686388498">Engineering-D</translation>
 <translation id="1551884710160394169">Freeware and shareware</translation>
 <translation id="1553358976309200471">Update Chrome</translation>
+<translation id="1554003749331233619">You’re now tracking this product. This page is saved in <ph name="LAST_BOOKMARKS_FOLDER" /></translation>
 <translation id="1555130319947370107">Blue</translation>
 <translation id="1559447966090556585">Get notifications?</translation>
 <translation id="1559528461873125649">No such file or directory</translation>
@@ -561,6 +563,7 @@
 <translation id="2430968933669123598">Manage Google Account: press Enter to manage your info, privacy and security in your Google Account</translation>
 <translation id="2436186046335138073">Allow <ph name="HANDLER_HOSTNAME" /> to open all <ph name="PROTOCOL" /> links?</translation>
 <translation id="2438874542388153331">Quad punch right</translation>
+<translation id="2443309680964448806">Something went wrong. Your change wasn’t saved.</translation>
 <translation id="2448295565072560657">Peripherals attached to this device while you are logged in</translation>
 <translation id="2450021089947420533">Journeys</translation>
 <translation id="2463739503403862330">Fill in</translation>
@@ -819,6 +822,7 @@
 <translation id="317878711435188021">Know when you're actively using this device</translation>
 <translation id="3180358318770512945">Parenting</translation>
 <translation id="3187306450550410410">Flexible work arrangements</translation>
+<translation id="3190736958609431397">Untrack</translation>
 <translation id="319282854780294203">Social networks</translation>
 <translation id="3194737229810486521"><ph name="URL" /> wants to permanently store data on your device</translation>
 <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> on <ph name="SERVER_NAME" /></translation>
@@ -904,6 +908,7 @@
 <translation id="3387261909427947069">Payment Methods</translation>
 <translation id="3391030046425686457">Delivery address</translation>
 <translation id="3391482648489541560">file editing</translation>
+<translation id="3392028486601120379">The URL pattern '<ph name="URL_PATTERN" />' has a path specified. Paths are not supported for this key; please remove the path and try again, e.g. *://example.com/ =&gt; *://example.com".</translation>
 <translation id="3395827396354264108">Pickup method</translation>
 <translation id="3399952811970034796">Delivery address</translation>
 <translation id="3402261774528610252">The connection used to load this site used TLS 1.0 or TLS 1.1, which are deprecated and will be disabled in the future. Once disabled, users will be prevented from loading this site. The server should enable TLS 1.2 or later.</translation>
@@ -999,6 +1004,7 @@
 <translation id="3637662659967048211">Save to Google Account</translation>
 <translation id="3640766068866876100">Index-4x6-Ext</translation>
 <translation id="3642638418806704195">Application:</translation>
+<translation id="3647286794400715637">Each URL string entry must contain between 1 and 2 URLs.</translation>
 <translation id="3650584904733503804">Validation successful</translation>
 <translation id="3653033846669030038">Theme parks</translation>
 <translation id="3655241534245626312">Go to permission settings</translation>
@@ -1037,6 +1043,7 @@
 <translation id="3738166223076830879">Your browser is managed by your administrator.</translation>
 <translation id="3740319564441798148">Long distance bus and rail</translation>
 <translation id="3744111561329211289">Background sync</translation>
+<translation id="3744286742364977428">Files that you download are sent to Google Cloud or third parties for analysis. For example, they might be scanned for sensitive data or malware and might be stored based on company policies.</translation>
 <translation id="3744899669254331632">You cannot visit <ph name="SITE" /> right now because the website sent scrambled credentials that Chromium cannot process. Network errors and attacks are usually temporary, so this page will probably work later.</translation>
 <translation id="3745099705178523657">Once you confirm, card details from your Google Account will be shared with this site.</translation>
 <translation id="3748148204939282805">Attackers on <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> may trick you into doing something dangerous like installing software or revealing your personal information (for example, passwords, phone numbers or credit cards). <ph name="BEGIN_LEARN_MORE_LINK" />Learn more<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -1144,6 +1151,7 @@
 <translation id="4087296516249690906">Create event button: press Enter to create a new event in Google Calendar quickly</translation>
 <translation id="4088981014127559358">Side 1 image Y shift</translation>
 <translation id="4089152113577680600">Tray 14</translation>
+<translation id="4097288585054919042">Turn off alerts</translation>
 <translation id="4098354747657067197">Deceptive site ahead</translation>
 <translation id="4099048595830172239">Administrator policy doesn’t recommend sharing your screen with <ph name="APPLICATION_TITLE" /> when confidential content is visible:</translation>
 <translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />: press Tab then Enter to customise font sizes and typefaces in Chrome</translation>
@@ -1180,6 +1188,7 @@
 <translation id="4176463684765177261">Disabled</translation>
 <translation id="4176535426287761656">Timeshares and holiday properties</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
+<translation id="4186035307311647330">Untrack price</translation>
 <translation id="4194250254487269611">Your card can't be saved at the moment</translation>
 <translation id="4196861286325780578">&amp;Redo move</translation>
 <translation id="4202554117186904723">Fifth roll</translation>
@@ -1226,6 +1235,7 @@
 <translation id="4275830172053184480">Restart your device</translation>
 <translation id="4277028893293644418">Reset password</translation>
 <translation id="4278390842282768270">Allowed</translation>
+<translation id="4282346679996504092">Alerts for this product have been turned off and the bookmark removed</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{This card has been saved in your Google Account}other{These cards have been saved in your Google Account}}</translation>
 <translation id="4287885627794386150">Eligible for trial but not active</translation>
 <translation id="4297502707443874121">Thumbnail for page <ph name="THUMBNAIL_PAGE" /></translation>
@@ -1264,6 +1274,7 @@
 <translation id="4358059973562876591">The templates that you've specified may not be applied due to an error with the DnsOverHttpsMode policy.</translation>
 <translation id="4358461427845829800">Manage payment methods...</translation>
 <translation id="4359160567981085931">You just entered your password on a deceptive site. Chrome can help. To change your password and notify Google that your account may be at risk, click 'Protect account'.</translation>
+<translation id="4363222835916186793">Alerts for this product have been turned off</translation>
 <translation id="4367563149485757821">Number-12 (Envelope)</translation>
 <translation id="437040971055499437">Security event occurs</translation>
 <translation id="4372516964750095882">Fanfold-Us</translation>
@@ -1416,6 +1427,7 @@
 <translation id="4792686369684665359">The information that you’re about to submit is not secure</translation>
 <translation id="4796594887379589189">Job account ID</translation>
 <translation id="4798078619018708837">Enter the expiry date and CVC for <ph name="CREDIT_CARD" /> to update your card details. Once you confirm, card details from your Google Account will be shared with this site.</translation>
+<translation id="4798269756263412078">Get alerts if the price drops on any site. Alerts will be sent to your email.</translation>
 <translation id="4800132727771399293">Check your expiration date and CVC and try again</translation>
 <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation>
 <translation id="4806051791961048632">Use Touch ID</translation>
@@ -1659,6 +1671,7 @@
 <translation id="5396631636586785122">Edge stitch right</translation>
 <translation id="5398772614898833570">Ads blocked</translation>
 <translation id="5400836586163650660">Grey</translation>
+<translation id="540630185148148480">Turn on alerts</translation>
 <translation id="540969355065856584">This server could not prove that it is <ph name="DOMAIN" />; its security certificate is not valid at this time. This may be caused by a misconfiguration or an attacker intercepting your connection.</translation>
 <translation id="5412040515238827314">Invalid format: Expected a list of patterns.</translation>
 <translation id="5412236728747081950">This site gets your interests from Chrome to show you more relevant ads</translation>
@@ -1723,6 +1736,7 @@
 <translation id="5580958916614886209">Check your expiry month and try again</translation>
 <translation id="558420943003240152">Manage passwords and passkeys…</translation>
 <translation id="5586446728396275693">No saved addresses</translation>
+<translation id="5586831831248371458">Search <ph name="KEYWORD_SUFFIX" /></translation>
 <translation id="5587987780934666589">Platform user</translation>
 <translation id="5593349413089863479">Connection is not fully secure</translation>
 <translation id="5595485650161345191">Edit address</translation>
@@ -1842,6 +1856,7 @@
 <translation id="5938153366081463283">Add virtual card</translation>
 <translation id="5938793338444039872">Troy</translation>
 <translation id="5946937721014915347">Opening <ph name="SITE_NAME" />…</translation>
+<translation id="5947508410139465809">Files that you upload or attach are sent to Google Cloud or third parties for analysis. For example, they might be scanned for sensitive data or malware and might be stored based on company policies.</translation>
 <translation id="5951495562196540101">Can't enrol with consumer account (packaged licence available).</translation>
 <translation id="5953516610448771166">Live Caption is not available for this media. To get captions, block <ph name="CONTENT_SETTINGS" /> for this site.</translation>
 <translation id="5955063559762970069">Hotels and accommodations</translation>
@@ -1930,6 +1945,7 @@
 <translation id="6177128806592000436">Your connection to this site is not secure</translation>
 <translation id="6180316780098470077">Retry interval</translation>
 <translation id="61877208875190028">Women's clothing</translation>
+<translation id="6194209731893739467">See all your tracked products here</translation>
 <translation id="6195371403461054755">Geology</translation>
 <translation id="6196640612572343990">Block third-party cookies</translation>
 <translation id="6203231073485539293">Check your Internet connection</translation>
@@ -1965,6 +1981,7 @@
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6295618774959045776">CVC:</translation>
 <translation id="6300452962057769623">{0,plural, =0{Your device will restart now}=1{Your device will restart in 1 second}other{Your device will restart in # seconds}}</translation>
+<translation id="6301104306974789820">Get price tracking notifications</translation>
 <translation id="6302269476990306341">Google Assistant in Chrome stopping</translation>
 <translation id="6305205051461490394"><ph name="URL" /> is unreachable.</translation>
 <translation id="6311165245110979290">Virtual card available</translation>
@@ -2024,6 +2041,7 @@
 <translation id="6451458296329894277">Confirm Form Resubmission</translation>
 <translation id="6456955391422100996">Ad removed.</translation>
 <translation id="6457206614190510200">Saddle stitch</translation>
+<translation id="6457455098507772300">Price drop alerts appear as pop-up notifications on your desktop</translation>
 <translation id="6458606150257356946">Paste anyway</translation>
 <translation id="6464094930452079790">images</translation>
 <translation id="6465306955648956876">Manage passwords...</translation>
@@ -2081,6 +2099,7 @@
 <translation id="663260587451432563">JIS B4</translation>
 <translation id="6643016212128521049">Clear</translation>
 <translation id="6645291930348198241">Access cookies and site data.</translation>
+<translation id="6645478838938543427">Price drop alerts will be sent to <ph name="EMAIL_ADDRESS" /></translation>
 <translation id="6646269444027925224">{COUNT,plural, =0{None}=1{From 1 site (you won't be signed out of your Google Account)}other{From # sites (you won't be signed out of your Google Account)}}</translation>
 <translation id="6648459603387803038">Your administrator can change your browser setup remotely. Activity on this device may also be managed outside of Chrome.</translation>
 <translation id="6648524591329069940">Serif Font</translation>
@@ -2274,6 +2293,7 @@
 <translation id="7182878459783632708">No policies set</translation>
 <translation id="7186367841673660872">This page has been translated from<ph name="ORIGINAL_LANGUAGE" />to<ph name="LANGUAGE_LANGUAGE" /></translation>
 <translation id="718872491229180389">Cheerleading</translation>
+<translation id="7192188280913829296">The attribute 'vendor_id' must also be specified.</translation>
 <translation id="7192203810768312527">Frees up <ph name="SIZE" />. Some sites may load more slowly on your next visit.</translation>
 <translation id="7193661028827781021">Reference</translation>
 <translation id="719464814642662924">Visa</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 0cb92187..aecdeb1 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -648,6 +648,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />: presiona Tab y, luego, Intro para borrar tu historial de navegación, cookies, memoria caché y más en la configuración de Chrome</translation>
 <translation id="2650446666397867134">Se denegó el acceso al archivo.</translation>
 <translation id="2653659639078652383">Enviar</translation>
+<translation id="2657637947725373811">{0,plural, =1{¿Quieres transferir el archivo confidencial?}other{¿Quieres transferir los archivos confidenciales?}}</translation>
 <translation id="2660779039299703961">Evento</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Ninguna}=1{1 contraseña (para <ph name="DOMAIN_LIST" />)}=2{2 contraseñas (para <ph name="DOMAIN_LIST" />)}other{# contraseñas (para <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Superior</translation>
@@ -794,6 +795,7 @@
 <translation id="3108943290502734357">Bandeja del medio</translation>
 <translation id="3109728660330352905">No tienes autorización para ver esta página.</translation>
 <translation id="3113284927548439113">Tercer turno</translation>
+<translation id="3115363211799416195">{0,plural, =1{¿Quieres descargar el archivo confidencial?}other{¿Quieres descargar los archivos confidenciales?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> requiere que hagas una copia de seguridad de tus datos y devuelvas este dispositivo <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">Laminado</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -984,6 +986,7 @@
 <translation id="3615877443314183785">Ingresa una fecha de vencimiento válida</translation>
 <translation id="36224234498066874">Borrar datos de navegación...</translation>
 <translation id="362276910939193118">Mostrar historial completo</translation>
+<translation id="3628905806504633297">{0,plural, =1{La política del administrador no recomienda transferir este archivo a <ph name="DESTINATION_NAME" />}other{La política del administrador no recomienda transferir estos archivos a <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">Si ya está incluido como un programa con permiso para acceder a la red, intenta
       quitarlo de la lista y agregarlo de nuevo.</translation>
 <translation id="3630699740441428070">Los administradores de este dispositivo configuraron tu conexión de red, lo cual puede permitirles ver tu tráfico de red, incluido los sitios web que visitas.</translation>
@@ -1342,6 +1345,7 @@
 <translation id="4607603470419975064">Botón para ver sugerencias de Chrome, presiona Intro para conocer las funciones de Chrome</translation>
 <translation id="4607608436550361748">Ver sugerencias para Chrome</translation>
 <translation id="4617273035598175554">Software de gráficos y animación</translation>
+<translation id="4622292761762557753">Transferir de todos modos</translation>
 <translation id="4627675673814409125">Se ignorará esta política porque no se puede establecer en el perfil de Chrome.</translation>
 <translation id="4628948037717959914">Foto</translation>
 <translation id="4631649115723685955">Devolución de dinero vinculada</translation>
@@ -1657,6 +1661,7 @@
 <translation id="540969355065856584">Este servidor no pudo demostrar que se trata de <ph name="DOMAIN" />; el certificado de seguridad no es válido en este momento. Esto puede deberse a una configuración incorrecta o a un ataque que intercepta tu conexión.</translation>
 <translation id="5412040515238827314">El formato no es válido: se esperaba una lista de patrones.</translation>
 <translation id="5412236728747081950">Este sitio obtiene tus intereses de Chrome para mostrarte anuncios más relevantes</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Apilador 4</translation>
 <translation id="5421136146218899937">Borrar datos de navegación...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> quiere enviarte notificaciones</translation>
@@ -2061,6 +2066,7 @@
 <translation id="6591833882275308647">Tu <ph name="DEVICE_TYPE" /> no está administrado.</translation>
 <translation id="6592952801936330159">Botón Administrar la configuración de sitios: presiona Intro para administrar en la configuración de Chrome los permisos y datos almacenados en los sitios</translation>
 <translation id="6596325263575161958">Opciones de encriptación</translation>
+<translation id="6599642189720630047">Productos con seguimiento</translation>
 <translation id="6609880536175561541">Prc7 (Envelope)</translation>
 <translation id="6611723696964473273">Noticias sobre economía</translation>
 <translation id="6612010098632894193">Video en línea</translation>
@@ -2588,6 +2594,7 @@
 <translation id="8004582292198964060">Navegador</translation>
 <translation id="8009225694047762179">Administrar contraseñas</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Se guardará esta tarjeta y su dirección de facturación. Podrás usarla cuando accedas a <ph name="USER_EMAIL" />.}other{Se guardarán estas tarjetas y sus direcciones de facturación. Podrás usarlas cuando accedas a <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Es posible que los atacantes de este sitio te engañen para que hagas algo peligroso, como instalar software o divulgar información personal (p. ej., contraseñas, números de teléfono o tarjetas de crédito).</translation>
 <translation id="8026334261755873520">Borrar datos de navegación</translation>
 <translation id="8027077570865220386">Bandeja 15</translation>
@@ -2639,6 +2646,7 @@
 <translation id="8148608574971654810">Versión de PDF:</translation>
 <translation id="8149426793427495338">La computadora se suspendió.</translation>
 <translation id="8150722005171944719">El archivo de <ph name="URL" /> no se puede leer. Es posible que se haya eliminado o movido o que se impida el acceso a los permisos del archivo.</translation>
+<translation id="8153865548451212769">{0,plural, =1{La política del administrador no recomienda descargar este archivo en <ph name="DESTINATION_NAME" />}other{La política del administrador no recomienda descargar estos archivos en <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Salir del sitio</translation>
 <translation id="8163866351304776260">Perforación cuádruple a la izquierda</translation>
 <translation id="8175796834047840627">Como accediste a tu cuenta, Chrome te ofrece guardar tus tarjetas en tu Cuenta de Google. Puedes modificar este comportamiento en la configuración.</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index 456d9b0..27fab02 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -2065,6 +2065,7 @@
 <translation id="6591833882275308647">Tu <ph name="DEVICE_TYPE" /> no está administrado</translation>
 <translation id="6592952801936330159">Botón Gestionar la configuración del sitio, pulsa Intro para gestionar permisos y datos almacenados en sitios en la configuración de Chrome</translation>
 <translation id="6596325263575161958">Opciones de cifrado</translation>
+<translation id="6599642189720630047">Productos que sigues</translation>
 <translation id="6609880536175561541">Prc7 (sobre)</translation>
 <translation id="6611723696964473273">Noticias de economía</translation>
 <translation id="6612010098632894193">Vídeos online</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index f1cbf68d..95356965 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Juurdepääs kohalikele andmetele</translation>
 <translation id="1594030484168838125">Vali</translation>
 <translation id="1596296697375291157">Põnevus-, krimi- ja müsteeriumfilmid</translation>
+<translation id="1599199147673445968">Kas see on uus kaart? <ph name="BEGIN_LINK" />Sisestage kaardi üksikasjad.<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Chrome'is mängu Dino Run mängimine</translation>
 <translation id="161042844686301425">Tsüaan</translation>
 <translation id="1611101756749861742">Teine rull</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Märksõnad:</translation>
 <translation id="3667704023705708645">Riskikapital</translation>
 <translation id="3671540257457995106">Kas lubada suuruse muutmine?</translation>
+<translation id="3672568546897166916">Viga asukohas <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Kolmas rull</translation>
 <translation id="3676592649209844519">Seadme ID:</translation>
 <translation id="3677008721441257057">Kas mõtlesite domeeni &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb
index 460c07a..a996c44 100644
--- a/components/strings/components_strings_eu.xtb
+++ b/components/strings/components_strings_eu.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Datu lokaletarako sarbidea</translation>
 <translation id="1594030484168838125">Aukeratu</translation>
 <translation id="1596296697375291157">Thrillerrak, krimen-filmak eta misteriozko filmak</translation>
+<translation id="1599199147673445968">Txartel berria? <ph name="BEGIN_LINK" />Idatzi txartelaren xehetasunak<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Aritu Chrome-ko Dino jokoan</translation>
 <translation id="161042844686301425">Ziana</translation>
 <translation id="1611101756749861742">Bigarren arrabola</translation>
@@ -1002,6 +1003,7 @@
 <translation id="3664782872746246217">Gako-hitzak:</translation>
 <translation id="3667704023705708645">Arrisku-kapitala</translation>
 <translation id="3671540257457995106">Tamaina aldatzeko baimena ematen duzu?</translation>
+<translation id="3672568546897166916">Errorea (<ph name="ERROR_PATH" />): <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Hirugarren arrabola</translation>
 <translation id="3676592649209844519">Gailuaren IDa:</translation>
 <translation id="3677008721441257057">&lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; esan nahi al zenuen?</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index a501c46..8c3411d 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">دسترسی داده محلی</translation>
 <translation id="1594030484168838125">انتخاب</translation>
 <translation id="1596296697375291157">فیلم‌های هیجان‌انگیز، جنایی، و رازآلود</translation>
+<translation id="1599199147673445968">کارت جدیدی دارید؟ <ph name="BEGIN_LINK" />جزئیات کارت را وارد کنید<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">‏بازی کردن بازی دویدن دایناسور در Chrome</translation>
 <translation id="161042844686301425">فیروزه‌ای</translation>
 <translation id="1611101756749861742">رول دوم</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">کلیدواژه‌ها:</translation>
 <translation id="3667704023705708645">سرمایه‌گذاری خطرپذیر</translation>
 <translation id="3671540257457995106">تغییر اندازه مجاز باشد؟</translation>
+<translation id="3672568546897166916">خطا در <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">رول سوم</translation>
 <translation id="3676592649209844519">شناسه دستگاه:</translation>
 <translation id="3677008721441257057">‏منظورتان &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; است؟</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index 3a34bd6..e6e1ef5 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -649,6 +649,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, tyhjennä selaushistoria, evästeet, välimuisti ja muita tietoja Chromen asetuksista painamalla sarkainta ja sitten Enter</translation>
 <translation id="2650446666397867134">Tiedoston käyttöoikeus evättiin</translation>
 <translation id="2653659639078652383">Lähetä</translation>
+<translation id="2657637947725373811">{0,plural, =1{Siirretäänkö luottamuksellinen tiedosto?}other{Siirretäänkö luottamuksellisia tiedostoja?}}</translation>
 <translation id="2660779039299703961">Tapahtuma</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Ei mitään}=1{1 salasana (<ph name="DOMAIN_LIST" />)}=2{2 salasanaa (<ph name="DOMAIN_LIST" />)}other{# salasanaa (<ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Yleisin</translation>
@@ -795,6 +796,7 @@
 <translation id="3108943290502734357">Keskilokero</translation>
 <translation id="3109728660330352905">Sinulla ei ole oikeutta tarkastella tätä sivua.</translation>
 <translation id="3113284927548439113">Kolmas työvuoro</translation>
+<translation id="3115363211799416195">{0,plural, =1{Ladataanko luottamuksellinen tiedosto?}other{Ladataanko luottamuksellisia tiedostoja?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> edellyttää, että varmuuskopioit datasi ja palautat laitteen (<ph name="DEVICE_TYPE" />).</translation>
 <translation id="3116158981186517402">Laminointi</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -985,6 +987,7 @@
 <translation id="3615877443314183785">Anna kelvollinen viimeinen voimassaolopäivä.</translation>
 <translation id="36224234498066874">Poista selaustiedot...</translation>
 <translation id="362276910939193118">Näytä koko selaushistoria</translation>
+<translation id="3628905806504633297">{0,plural, =1{Järjestelmänvalvojakäytännössä ei suositella tiedoston siirtämistä tänne: <ph name="DESTINATION_NAME" />.}other{Järjestelmänvalvojakäytännössä ei suositella tiedostojen siirtämistä tänne: <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">Jos sillä on jo verkon käyttöoikeus, kokeile sen poistamista
       sallittujen ohjelmien luettelosta ja lisäämistä sitten uudelleen.</translation>
 <translation id="3630699740441428070">Laitteen järjestelmänvalvojat ovat valinneet yhteysasetuksesi, joten he saattavat nähdä verkkoliikenteen, myös avaamasi sivustot.</translation>
@@ -1344,6 +1347,7 @@
 <translation id="4607603470419975064">Katso Chromen vinkkejä ‑painike, katso lisätietoja Chromen ominaisuuksista painamalla Enter</translation>
 <translation id="4607608436550361748">Katso Chromen vinkkejä</translation>
 <translation id="4617273035598175554">Grafiikka- ja animaatio-ohjelmistot</translation>
+<translation id="4622292761762557753">Siirrä silti</translation>
 <translation id="4627675673814409125">Käytäntöä ei voi määrittää Chrome-profiilin tasolta, ja määritys ohitetaan.</translation>
 <translation id="4628948037717959914">Kuva</translation>
 <translation id="4631649115723685955">Hyvitystarjous linkitetty</translation>
@@ -1659,6 +1663,7 @@
 <translation id="540969355065856584">Palvelin ei voinut todistaa olevansa <ph name="DOMAIN" />, sillä sen suojausvarmenne ei tällä hetkellä ole kelvollinen. Tämä voi johtua määritysvirheestä tai verkkoyhteytesi siepanneesta hyökkääjästä.</translation>
 <translation id="5412040515238827314">Virheellinen muoto: odotettu malliluettelo.</translation>
 <translation id="5412236728747081950">Tämä sivusto saa kiinnostuksen kohteesi Chromesta, jotta voit nähdä osuvampia mainoksia</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> – <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Pinoaja 4</translation>
 <translation id="5421136146218899937">Poista selaustiedot...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> haluaa lähettää sinulle ilmoituksia</translation>
@@ -2591,6 +2596,7 @@
 <translation id="8004582292198964060">Selain</translation>
 <translation id="8009225694047762179">Salasanojen hallinta</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Tämä kortti ja sen laskutusosoite tallennetaan. Voit käyttää sitä sisäänkirjautuneena (<ph name="USER_EMAIL" />).}other{Nämä kortit ja niiden laskutusosoitteet tallennetaan. Voit käyttää niitä sisäänkirjautuneena (<ph name="USER_EMAIL" />).}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Tälle sivustolle hyökännyt taho voi yrittää huijata sinua tekemään jotain vaarallista, kuten asentamaan ohjelmistoja tai paljastamaan henkilötietojasi (esimerkiksi salasanoja, puhelinnumeroita tai luottokorttitietoja).</translation>
 <translation id="8026334261755873520">Poista selaustiedot</translation>
 <translation id="8027077570865220386">Lokero 15</translation>
@@ -2642,6 +2648,7 @@
 <translation id="8148608574971654810">PDF-versio:</translation>
 <translation id="8149426793427495338">Tietokoneesi siirtyi virransäästötilaan.</translation>
 <translation id="8150722005171944719">Tiedosto osoitteessa <ph name="URL" /> ei ole luettavissa. Se on voitu poistaa tai siirtää, tai tiedoston käyttöluvat voivat estää sen käytön.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Järjestelmänvalvojakäytännössä ei suositella tämän tiedoston lataamista tänne: <ph name="DESTINATION_NAME" />}other{Järjestelmänvalvojakäytännössä ei suositella näiden tiedostojen lataamista tänne: <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Poistu sivustolta</translation>
 <translation id="8163866351304776260">Neljä reikää vasemmalla</translation>
 <translation id="8175796834047840627">Chrome tarjoaa korttien tallentamista Google-tilillesi, koska olet kirjautuneena sisään. Voit muuttaa tätä koska tahansa asetuksista.</translation>
diff --git a/components/strings/components_strings_fr-CA.xtb b/components/strings/components_strings_fr-CA.xtb
index 48c32a6..c68fab1a 100644
--- a/components/strings/components_strings_fr-CA.xtb
+++ b/components/strings/components_strings_fr-CA.xtb
@@ -648,6 +648,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, appuyez sur la touche Tabulation, puis sur la touche Entrée pour effacer votre historique de navigation, vos témoins, votre cache et plus encore dans les paramètres de Chrome</translation>
 <translation id="2650446666397867134">Accès au fichier refusé</translation>
 <translation id="2653659639078652383">Envoyer</translation>
+<translation id="2657637947725373811">{0,plural, =1{Transférer un fichier confidentiel?}one{Transférer un fichier confidentiel?}other{Transférer des fichiers confidentiels?}}</translation>
 <translation id="2660779039299703961">Événement</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Aucun}=1{1 mot de passe (pour <ph name="DOMAIN_LIST" />)}=2{2 mots de passe (pour <ph name="DOMAIN_LIST" />)}one{# mot de passe (pour <ph name="DOMAIN_LIST" />)}other{# mots de passe (pour <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Haut</translation>
@@ -794,6 +795,7 @@
 <translation id="3108943290502734357">Plateau du milieu</translation>
 <translation id="3109728660330352905">Vous ne disposez pas de l'autorisation nécessaire pour afficher cette page.</translation>
 <translation id="3113284927548439113">Troisième quart</translation>
+<translation id="3115363211799416195">{0,plural, =1{Télécharger un fichier confidentiel?}one{Télécharger un fichier confidentiel?}other{Télécharger des fichiers confidentiels?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> exige que vous sauvegardiez vos données et que vous retourniez cet appareil <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">Plastifier</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -983,6 +985,7 @@
 <translation id="3615877443314183785">Entrez une date d'expiration valide</translation>
 <translation id="36224234498066874">Effacer données navigation…</translation>
 <translation id="362276910939193118">Afficher l'historique complet</translation>
+<translation id="3628905806504633297">{0,plural, =1{La politique de l'administrateur ne recommande pas de transférer ce fichier vers <ph name="DESTINATION_NAME" />}one{La politique de l'administrateur ne recommande pas de transférer ce fichier vers <ph name="DESTINATION_NAME" />}other{La politique de l'administrateur ne recommande pas de transférer ces fichiers vers <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">Si la page est déjà répertoriée comme étant un programme autorisé à accéder
     au réseau, essayez de la supprimer de la liste, puis de la rajouter.</translation>
 <translation id="3630699740441428070">Les administrateurs de cet appareil ont configuré votre connexion au réseau, ce qui peut leur permettre de voir votre trafic réseau, y compris les sites Web que vous consultez.</translation>
@@ -1341,6 +1344,7 @@
 <translation id="4607603470419975064">Bouton Afficher les astuces de Chrome, appuyez sur Entrée pour en savoir plus sur les fonctionnalités de Chrome</translation>
 <translation id="4607608436550361748">Afficher les astuces de Chrome</translation>
 <translation id="4617273035598175554">Logiciels de graphisme et d'animation</translation>
+<translation id="4622292761762557753">Transférer quand même</translation>
 <translation id="4627675673814409125">Cette politique ne peut pas être réglée au niveau du profil Chrome et elle sera ignorée.</translation>
 <translation id="4628948037717959914">Photo</translation>
 <translation id="4631649115723685955">Avec remise en argent</translation>
@@ -1656,6 +1660,7 @@
 <translation id="540969355065856584">Impossible de vérifier sur le serveur qu'il s'agit bien du domaine <ph name="DOMAIN" />, car son certificat de sécurité n'est pas valide présentement. Cela peut être dû à une mauvaise configuration ou à l'interception de votre connexion par une personne malveillante.</translation>
 <translation id="5412040515238827314">Format incorrect : une liste de schémas était attendue.</translation>
 <translation id="5412236728747081950">Ce site récupère vos centres d'intérêt de Chrome pour vous montrer des annonces plus pertinentes</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> : <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Empileur 4</translation>
 <translation id="5421136146218899937">Effacer les données de navigation...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> veut vous envoyer des notifications.</translation>
@@ -2588,6 +2593,7 @@
 <translation id="8004582292198964060">Navigateur</translation>
 <translation id="8009225694047762179">Gérer les mots de passe</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Cette carte et l'adresse de facturation associée seront enregistrées. Vous serez en mesure de l'utiliser lorsque vous serez connecté en tant que <ph name="USER_EMAIL" />.}one{Cette carte et l'adresse de facturation associée seront enregistrées. Vous serez en mesure de l'utiliser lorsque vous serez connecté en tant que <ph name="USER_EMAIL" />.}other{Ces cartes et les adresses de facturation associées seront enregistrées. Vous serez en mesure de les utiliser lorsque vous serez connecté en tant que <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Les cyberpirates sur ce site peuvent vous inciter à faire quelque chose de dangereux comme installer un logiciel ou révéler vos renseignements personnels (par exemple vos mots de passe, votre numéro de téléphone ou les données de votre carte de crédit).</translation>
 <translation id="8026334261755873520">Effacer les données de navigation</translation>
 <translation id="8027077570865220386">Bac 15</translation>
@@ -2639,6 +2645,7 @@
 <translation id="8148608574971654810">Version PDF :</translation>
 <translation id="8149426793427495338">Votre ordinateur s'est mis en veille.</translation>
 <translation id="8150722005171944719">Le fichier à l'adresse <ph name="URL" /> n'est pas lisible. Il est possible qu'il ait été supprimé ou déplacé, ou que les autorisations associées à ce fichier empêchent d'y accéder.</translation>
+<translation id="8153865548451212769">{0,plural, =1{La politique de l'administrateur ne recommande pas de télécharger ce fichier sur <ph name="DESTINATION_NAME" />}one{La politique de l'administrateur ne recommande pas de télécharger ce fichier sur <ph name="DESTINATION_NAME" />}other{La politique de l'administrateur ne recommande pas de télécharger ces fichiers sur <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Quitter ce site</translation>
 <translation id="8163866351304776260">Quadruple perforation à gauche</translation>
 <translation id="8175796834047840627">Chrome vous propose d'enregistrer vos cartes dans votre compte Google parce que vous y êtes connecté. Vous pouvez modifier ce comportement dans les paramètres.</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index e8feafe..99bf3dc 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -2065,6 +2065,7 @@
 <translation id="6591833882275308647">Votre <ph name="DEVICE_TYPE" /> n'est pas géré</translation>
 <translation id="6592952801936330159">Bouton "Gérer les paramètres du site" : appuyez sur Entrée pour gérer les autorisations et les données stockées sur les sites dans les paramètres Chrome</translation>
 <translation id="6596325263575161958">Options de chiffrement</translation>
+<translation id="6599642189720630047">Produits suivis</translation>
 <translation id="6609880536175561541">Prc7 (enveloppe)</translation>
 <translation id="6611723696964473273">Actualités économiques</translation>
 <translation id="6612010098632894193">Vidéo en ligne</translation>
diff --git a/components/strings/components_strings_gl.xtb b/components/strings/components_strings_gl.xtb
index f85e8e55..c2383101 100644
--- a/components/strings/components_strings_gl.xtb
+++ b/components/strings/components_strings_gl.xtb
@@ -648,6 +648,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />. Preme Tab e, a continuación, Intro para borrar o historial de navegación, as cookies, a memoria caché e outros datos desde a configuración de Chrome</translation>
 <translation id="2650446666397867134">Denegouse o acceso ao ficheiro</translation>
 <translation id="2653659639078652383">Enviar</translation>
+<translation id="2657637947725373811">{0,plural, =1{Queres transferir o ficheiro confidencial?}other{Queres transferir os ficheiros confidenciais?}}</translation>
 <translation id="2660779039299703961">Evento</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Ningún}=1{1 contrasinal (para <ph name="DOMAIN_LIST" />)}=2{2 contrasinais (para <ph name="DOMAIN_LIST" />)}other{# contrasinais (para <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Parte superior</translation>
@@ -794,6 +795,7 @@
 <translation id="3108943290502734357">Bandexa central</translation>
 <translation id="3109728660330352905">Non tes autorización para ver esta páxina.</translation>
 <translation id="3113284927548439113">Terceira quenda</translation>
+<translation id="3115363211799416195">{0,plural, =1{Queres descargar o ficheiro confidencial?}other{Queres descargar os ficheiros confidenciais?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> require que fagas unha copia de seguranza dos teus datos e que devolvas este <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">Laminación</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -983,6 +985,7 @@
 <translation id="3615877443314183785">Introduce unha data de caducidade válida</translation>
 <translation id="36224234498066874">Borrar datos de navegación...</translation>
 <translation id="362276910939193118">Mostrar historial completo</translation>
+<translation id="3628905806504633297">{0,plural, =1{A política do administrador non recomenda transferir este ficheiro ao destino: <ph name="DESTINATION_NAME" />}other{A política do administrador non recomenda transferir estes ficheiros ao destino: <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">Se xa está incluído como programa autorizado para acceder á rede, proba
        a eliminalo da lista e volver engadilo.</translation>
 <translation id="3630699740441428070">Os administradores deste dispositivo configuraron a túa conexión de rede, o cal pode permitirlles ver o tráfico de rede, así como os sitios web que visitas.</translation>
@@ -1341,6 +1344,7 @@
 <translation id="4607603470419975064">Botón Ver consellos de Chrome. Preme Introducir para obter máis información sobre as funcións de Chrome</translation>
 <translation id="4607608436550361748">Ver consellos de Chrome</translation>
 <translation id="4617273035598175554">Software de animación e gráficos</translation>
+<translation id="4622292761762557753">Transferir de todos os xeitos</translation>
 <translation id="4627675673814409125">Esta política non se pode configurar no perfil de Chrome e, polo tanto, ignorarase.</translation>
 <translation id="4628948037717959914">Foto</translation>
 <translation id="4631649115723685955">Devolución de cartos vinculada</translation>
@@ -1656,6 +1660,7 @@
 <translation id="540969355065856584">Este servidor non puido demostrar que é <ph name="DOMAIN" /> porque o seu certificado de seguranza non é válido neste momento. É posible que isto se deba a un erro de configuración ou a que un atacante interceptase a túa conexión.</translation>
 <translation id="5412040515238827314">O formato non é válido: debe ser unha lista de padróns.</translation>
 <translation id="5412236728747081950">Este sitio obtén os teus intereses de Chrome para mostrarche anuncios máis relevantes</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" />: <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Amontoador 4</translation>
 <translation id="5421136146218899937">Borrar datos de navegación...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> quere enviarche notificacións</translation>
@@ -2060,6 +2065,7 @@
 <translation id="6591833882275308647">O teu <ph name="DEVICE_TYPE" /> non está xestionado</translation>
 <translation id="6592952801936330159">Botón Xestionar configuración dos sitios. Para xestionar na configuración de Chrome os permisos e os datos almacenados dos sitios, preme Introducir</translation>
 <translation id="6596325263575161958">Opcións de cifrado</translation>
+<translation id="6599642189720630047">Produtos dos que se fai un seguimento</translation>
 <translation id="6609880536175561541">Prc7 (sobre)</translation>
 <translation id="6611723696964473273">Noticias sobre economía</translation>
 <translation id="6612010098632894193">Vídeo en liña</translation>
@@ -2587,6 +2593,7 @@
 <translation id="8004582292198964060">Navegador</translation>
 <translation id="8009225694047762179">Xestionar contrasinais</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Gardarase esta tarxeta e o seu enderezo de facturación. Poderás utilizala ao iniciar sesión en <ph name="USER_EMAIL" />.}other{Gardaranse estas tarxetas e os seus enderezos de facturación. Poderás utilizalas ao iniciar sesión en <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Os atacantes deste sitio poden enganarte para que fagas algo perigoso como instalar software ou revelar a túa información persoal (por exemplo, contrasinais, números de teléfono ou datos das túas tarxetas de crédito).</translation>
 <translation id="8026334261755873520">Borrar datos de navegación</translation>
 <translation id="8027077570865220386">Bandexa 15</translation>
@@ -2638,6 +2645,7 @@
 <translation id="8148608574971654810">Versión do PDF:</translation>
 <translation id="8149426793427495338">O teu ordenador entrou no modo de suspensión.</translation>
 <translation id="8150722005171944719">Non se pode ler o ficheiro que se encontra en <ph name="URL" />. É posible que se eliminase, movese ou que os permisos do ficheiro estean impedindo o acceso.</translation>
+<translation id="8153865548451212769">{0,plural, =1{A política do administrador non recomenda descargar este ficheiro no destino: <ph name="DESTINATION_NAME" />}other{A política do administrador non recomenda descargar estes ficheiros no destino: <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Saír do sitio</translation>
 <translation id="8163866351304776260">Catro perforacións na parte esquerda</translation>
 <translation id="8175796834047840627">Chrome permíteche gardar as túas tarxetas na túa Conta de Google porque tes a sesión iniciada. Podes cambiar esta opción na configuración cando queiras.</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 3bdc95a..476a38e 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">સ્થાનિક ડેટા ઍક્સેસ</translation>
 <translation id="1594030484168838125">પસંદ કરો</translation>
 <translation id="1596296697375291157">થ્રિલર, ક્રાઇમ અને મિસ્ટ્રી મૂવી</translation>
+<translation id="1599199147673445968">નવું કાર્ડ? <ph name="BEGIN_LINK" />કાર્ડની વિગતો દાખલ કરો<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Chromeમાં Dino Run ગેમ રમો</translation>
 <translation id="161042844686301425">સ્યાન</translation>
 <translation id="1611101756749861742">બીજો રોલ</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">કીવર્ડ:</translation>
 <translation id="3667704023705708645">સાહસ મૂડી</translation>
 <translation id="3671540257457995106">કદ બદલવાની મંજૂરી આપીએ?</translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" />માં ભૂલ: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">ત્રીજો રોલ</translation>
 <translation id="3676592649209844519">ડિવાઇસ ID:</translation>
 <translation id="3677008721441257057">શું તમારો અર્થ &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; હતો?</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 57cda13c..c4cf5a2 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -649,6 +649,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome की सेटिंग में अपना ब्राउज़िंग इतिहास, कुकी, कैश मेमोरी वगैरह मिटाने के लिए, पहले Tab और फिर Enter दबाएं</translation>
 <translation id="2650446666397867134">फ़ाइल को एक्सेस नहीं दिया गया था</translation>
 <translation id="2653659639078652383">सबमिट करें</translation>
+<translation id="2657637947725373811">{0,plural, =1{क्या आपको गोपनीय फ़ाइल ट्रांसफ़र करनी है?}one{क्या आपको गोपनीय फ़ाइल ट्रांसफ़र करनी है?}other{क्या आपको गोपनीय फ़ाइलें ट्रांसफ़र करनी हैं?}}</translation>
 <translation id="2660779039299703961">इवेंट</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{कोई पासवर्ड नहीं है}=1{(<ph name="DOMAIN_LIST" /> के लिए) 1 पासवर्ड}=2{(<ph name="DOMAIN_LIST" /> के लिए) 2 पासवर्ड}one{(<ph name="DOMAIN_LIST" /> के लिए) # पासवर्ड}other{(<ph name="DOMAIN_LIST" /> के लिए) # पासवर्ड}}</translation>
 <translation id="2666092431469916601">शीर्ष</translation>
@@ -795,6 +796,7 @@
 <translation id="3108943290502734357">बीच की ट्रे</translation>
 <translation id="3109728660330352905">आपके पास इस पेज को देखने की अनुमति नहीं है.</translation>
 <translation id="3113284927548439113">तीसरी शिफ़्ट</translation>
+<translation id="3115363211799416195">{0,plural, =1{क्या आपको गोपनीय फ़ाइल डाउनलोड करनी है?}one{क्या आपको गोपनीय फ़ाइल डाउनलोड करनी है?}other{क्या आपको गोपनीय फ़ाइलें डाउनलोड करनी हैं?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> के लिए ज़रूरी है कि आप अपने डेटा का बैक अप लें और इस <ph name="DEVICE_TYPE" /> को लौटा दें.</translation>
 <translation id="3116158981186517402">लैमनेट</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -983,6 +985,7 @@
 <translation id="3615877443314183785">खत्म होने की मान्य तारीख डालें</translation>
 <translation id="36224234498066874">ब्राउज़िंग डेटा मिटाएं...</translation>
 <translation id="362276910939193118">पूरा इतिहास दिखाएं</translation>
+<translation id="3628905806504633297">{0,plural, =1{एडमिन नीति, इस फ़ाइल को <ph name="DESTINATION_NAME" /> पर ट्रांसफ़र करने का सुझाव नहीं देती है}one{एडमिन नीति, इस फ़ाइल को <ph name="DESTINATION_NAME" /> पर ट्रांसफ़र करने का सुझाव नहीं देती है}other{एडमिन नीति, इन फ़ाइलों को <ph name="DESTINATION_NAME" /> पर ट्रांसफ़र करने का सुझाव नहीं देती है}}</translation>
 <translation id="3630155396527302611">अगर वह नेटवर्क एक्सेस करने की अनुमति पाए हुए प्रोग्राम के रूप में पहले से ही सूची में शामिल है, तो
       उसे सूची से हटाने और फिर से जोड़ने की कोशिश करें.</translation>
 <translation id="3630699740441428070">इस डिवाइस के एडमिन ने आपके नेटवर्क कनेक्शन को कॉन्फ़िगर किया है. ऐसे में, उन्हें आपके नेटवर्क का ट्रैफ़िक दिख सकता है. इस ट्रैफ़िक में ऐसी वेबसाइटें शामिल हैं जिन पर आप जाते हैं.</translation>
@@ -1341,6 +1344,7 @@
 <translation id="4607603470419975064">Chrome की सलाह देखने के लिए बटन, Chrome की सुविधाओं के बारे में जानने के लिए Enter दबाएं</translation>
 <translation id="4607608436550361748">Chrome की सलाह देखें</translation>
 <translation id="4617273035598175554">ग्राफ़िक और ऐनिमेशन के लिए सॉफ़्टवेयर</translation>
+<translation id="4622292761762557753">फिर भी ट्रांसफ़र करें</translation>
 <translation id="4627675673814409125">इस नीति को Chrome के प्रोफ़ाइल लेवल पर सेट नहीं किया जा सकता और इसे नज़रअंदाज़ कर दिया जाएगा.</translation>
 <translation id="4628948037717959914">फ़ोटो</translation>
 <translation id="4631649115723685955">पैसे चुकाने पर कैशबैक मिलेगा</translation>
@@ -1656,6 +1660,7 @@
 <translation id="540969355065856584">यह सर्वर यह प्रमाणित नहीं कर सका कि यह <ph name="DOMAIN" /> है; इसका सुरक्षा प्रमाण पत्र इस समय मान्य नहीं है. ऐसा गलत कॉन्फ़िगरेशन या किसी आक्रमणकर्ता द्वारा आपके कनेक्शन में अवरोध डालने के कारण हो सकता है.</translation>
 <translation id="5412040515238827314">अमान्य फ़ॉर्मैट: पैटर्न की सूची होनी चाहिए.</translation>
 <translation id="5412236728747081950">यह साइट आपकी दिलचस्पी के बारे में Chrome से पता करती है, ताकि आपको ज़्यादा काम के विज्ञापन दिखा सके</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">स्टैकर 4</translation>
 <translation id="5421136146218899937">ब्राउज़िंग डेटा मिटाएं...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> वेबसाइट आपको सूचनाएं भेजना चाहती है</translation>
@@ -2060,6 +2065,7 @@
 <translation id="6591833882275308647">आपका <ph name="DEVICE_TYPE" /> प्रबंधित नहीं किया जाता</translation>
 <translation id="6592952801936330159">साइट की सेटिंग का बटन मैनेज करें, Chrome की सेटिंग में अलग-अलग साइटों पर सेव डेटा और अनुमतियां मैनेज करने के लिए, Enter दबाएं</translation>
 <translation id="6596325263575161958">सुरक्षित करने के तरीकों के विकल्प</translation>
+<translation id="6599642189720630047">ट्रैक किए गए प्रॉडक्ट</translation>
 <translation id="6609880536175561541">पीआरसी7 (एन्वेलप)</translation>
 <translation id="6611723696964473273">आर्थिक मामलों से जुड़ी खबरें</translation>
 <translation id="6612010098632894193">ऑनलाइन वीडियो</translation>
@@ -2587,6 +2593,7 @@
 <translation id="8004582292198964060">ब्राउज़र</translation>
 <translation id="8009225694047762179">पासवर्ड संभालें</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{इस कार्ड और इसके बिलिंग पते को सेव किया जाएगा. <ph name="USER_EMAIL" /> में साइन इन रहने पर आप इसका इस्तेमाल कर पाएंगे.}one{ये कार्ड और इनके बिलिंग पते सेव किए जाएंगे. <ph name="USER_EMAIL" /> में साइन इन रहने पर आप उनका इस्तेमाल कर पाएंगे.}other{ये कार्ड और इनके बिलिंग पते सेव किए जाएंगे. <ph name="USER_EMAIL" /> में साइन इन रहने पर आप उनका इस्तेमाल कर पाएंगे.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">इस साइट पर मौजूद हमलावर आपको धोखा देकर आपसे कुछ जोखिम वाला काम करा सकते हैं, जैसे सॉफ़्टवेयर इंस्टॉल करना या आपकी व्यक्तिगत जानकारी (उदाहरण के लिए, पासवर्ड, फ़ोन नंबर या क्रेडिट कार्ड) के बारे में बताना.</translation>
 <translation id="8026334261755873520">ब्राउज़िंग डेटा मिटाएं</translation>
 <translation id="8027077570865220386">ट्रे 15</translation>
@@ -2638,6 +2645,7 @@
 <translation id="8148608574971654810">पीडीएफ़ का वर्शन:</translation>
 <translation id="8149426793427495338">आपका कंप्यूटर निष्क्रिय हो गया है.</translation>
 <translation id="8150722005171944719"><ph name="URL" /> पर मौजूद फ़ाइल पढ़ने के लायक नहीं है.  हो सकता है कि इसे हटा दिया गया हो, कहीं ले जाया गया हो, या फ़ाइल की अनुमतियां एक्सेस को रोक रही हों.</translation>
+<translation id="8153865548451212769">{0,plural, =1{एडमिन नीति, इस फ़ाइल को <ph name="DESTINATION_NAME" /> पर डाउनलोड करने का सुझाव नहीं देती है}one{एडमिन नीति, इस फ़ाइल को <ph name="DESTINATION_NAME" /> पर डाउनलोड करने का सुझाव नहीं देती है}other{एडमिन नीति, इन फ़ाइलों को <ph name="DESTINATION_NAME" /> पर डाउनलोड करने का सुझाव नहीं देती है}}</translation>
 <translation id="8157295877370077682">साइट छोड़ें</translation>
 <translation id="8163866351304776260">बाईं ओर क्वाड पंच</translation>
 <translation id="8175796834047840627">आपके साइन इन किए होने की वजह से Chrome आपको Google खाते में कार्ड सेव करने की सुविधा देता है. आप सेटिंग में जाकर इसे बदल सकते हैं.</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index 8a76f5b..8df846fb 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Helyi adatok elérése</translation>
 <translation id="1594030484168838125">Kiválaszt</translation>
 <translation id="1596296697375291157">Thrillerek, bűnügyi és misztikus filmek</translation>
+<translation id="1599199147673445968">Új kártya? <ph name="BEGIN_LINK" />Adja meg a kártya adatait<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">A Dino Run játék elindítása a Chrome-ban</translation>
 <translation id="161042844686301425">Cián</translation>
 <translation id="1611101756749861742">2. tekercs</translation>
@@ -1004,6 +1005,7 @@
 <translation id="3664782872746246217">Kulcsszavak:</translation>
 <translation id="3667704023705708645">Kockázati tőke</translation>
 <translation id="3671540257457995106">Engedélyezi az újraméretezést?</translation>
+<translation id="3672568546897166916">Hiba: <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">3. tekercs</translation>
 <translation id="3676592649209844519">Eszközazonosító:</translation>
 <translation id="3677008721441257057">Erre gondolt: &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
@@ -2063,6 +2065,7 @@
 <translation id="6591833882275308647"><ph name="DEVICE_TYPE" /> eszköze nem áll felügyelet alatt</translation>
 <translation id="6592952801936330159">Webhelybeállítások kezelése gomb. Nyomja le az Enter billentyűt a webhelyek engedélyeinek és tárolt adatainak a Chrome-beállítások közötti kezeléséhez.</translation>
 <translation id="6596325263575161958">Titkosítási lehetőségek</translation>
+<translation id="6599642189720630047">Nyomon követett termékek</translation>
 <translation id="6609880536175561541">Prc7 (boríték)</translation>
 <translation id="6611723696964473273">Gazdasági hírek</translation>
 <translation id="6612010098632894193">Online videó</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb
index 6a73b14..26aef87 100644
--- a/components/strings/components_strings_hy.xtb
+++ b/components/strings/components_strings_hy.xtb
@@ -2066,6 +2066,7 @@
 <translation id="6591833882275308647">Ձեր <ph name="DEVICE_TYPE" /> սարքը չի կառավարվում</translation>
 <translation id="6592952801936330159">«Կառավարել կայքի կարգավորումները» կոճակ։ Թույլտվությունները և կայքերում պահված տվյալները Chrome-ի կարգավորումներում կառավարելու համար սեղմեք Enter։</translation>
 <translation id="6596325263575161958">Գաղտնագրման ընտրանքներ</translation>
+<translation id="6599642189720630047">Ապրանքներ, որոնց հետևում եք</translation>
 <translation id="6609880536175561541">Prc7 (ծրար)</translation>
 <translation id="6611723696964473273">Տնտեսական նորություններ</translation>
 <translation id="6612010098632894193">Առցանց տեսանյութեր</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index 649e029..bdcc204 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Akses Data Lokal</translation>
 <translation id="1594030484168838125">Pilih</translation>
 <translation id="1596296697375291157">Film thriller, kriminal &amp; misteri</translation>
+<translation id="1599199147673445968">Kartu baru? <ph name="BEGIN_LINK" />Masukkan Detail Kartu<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Mainkan game Dino Run di Chrome</translation>
 <translation id="161042844686301425">Sian</translation>
 <translation id="1611101756749861742">Rol Kedua</translation>
@@ -1005,6 +1006,7 @@
 <translation id="3664782872746246217">Kata kunci:</translation>
 <translation id="3667704023705708645">Modal ventura</translation>
 <translation id="3671540257457995106">Izinkan pengubahan ukuran?</translation>
+<translation id="3672568546897166916">Error pada <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Rol Ketiga</translation>
 <translation id="3676592649209844519">ID Perangkat:</translation>
 <translation id="3677008721441257057">Maksud Anda &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index 878a50f..fd086c48 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -648,6 +648,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, premi Tab poi Invio per cancellare la cronologia di navigazione, i cookie, la cache e altri dati nelle impostazioni di Chrome</translation>
 <translation id="2650446666397867134">L'accesso al file è stato negato</translation>
 <translation id="2653659639078652383">Invia</translation>
+<translation id="2657637947725373811">{0,plural, =1{Vuoi trasferire il file riservato?}other{Vuoi trasferire i file riservati?}}</translation>
 <translation id="2660779039299703961">Evento</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Nessuna}=1{1 password per <ph name="DOMAIN_LIST" />}=2{2 password per <ph name="DOMAIN_LIST" />}other{# password per <ph name="DOMAIN_LIST" />}}</translation>
 <translation id="2666092431469916601">In alto</translation>
@@ -794,6 +795,7 @@
 <translation id="3108943290502734357">Vassoio centrale</translation>
 <translation id="3109728660330352905">Non sei autorizzato a visualizzare questa pagina.</translation>
 <translation id="3113284927548439113">Terzo turno</translation>
+<translation id="3115363211799416195">{0,plural, =1{Vuoi scaricare il file riservato?}other{Vuoi scaricare i file riservati?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> richiede di effettuare il backup dei dati e di restituire questo <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">Plastificazione</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -980,6 +982,7 @@
 <translation id="3615877443314183785">Inserisci una data di scadenza valida</translation>
 <translation id="36224234498066874">Cancella dati di navigazione...</translation>
 <translation id="362276910939193118">Mostra cronologia completa</translation>
+<translation id="3628905806504633297">{0,plural, =1{Il criterio dell'amministratore sconsiglia di trasferire questo file su <ph name="DESTINATION_NAME" />}other{Il criterio dell'amministratore sconsiglia di trasferire questi file su <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">Se è già elencato come programma autorizzato ad accedere alla rete, prova a
       rimuoverlo dall'elenco e ad aggiungerlo di nuovo.</translation>
 <translation id="3630699740441428070">Gli amministratori di questo dispositivo hanno configurato la connessione di rete che potrebbe consentire loro di visualizzare il tuo traffico di rete, compresi i siti web che visiti.</translation>
@@ -1338,6 +1341,7 @@
 <translation id="4607603470419975064">Pulsante Leggi i suggerimenti di Chrome, premi Invio per scoprire di più sulle funzionalità di Chrome</translation>
 <translation id="4607608436550361748">Leggi i suggerimenti di Chrome</translation>
 <translation id="4617273035598175554">Software di grafica e animazione</translation>
+<translation id="4622292761762557753">Trasferisci comunque</translation>
 <translation id="4627675673814409125">Questo criterio non può essere impostato a livello di profilo Chrome e verrà ignorato.</translation>
 <translation id="4628948037717959914">Foto</translation>
 <translation id="4631649115723685955">Rimborso collegato</translation>
@@ -1653,6 +1657,7 @@
 <translation id="540969355065856584">Questo server non è riuscito a verificare che si tratta di <ph name="DOMAIN" />; il relativo certificato di sicurezza non è considerato valido in questa fase. Il problema potrebbe essere dovuto a un'errata configurazione o a un malintenzionato che ha intercettato la connessione.</translation>
 <translation id="5412040515238827314">Formato non valido: è previsto un elenco di pattern.</translation>
 <translation id="5412236728747081950">Questo sito acquisisce i tuoi interessi da Chrome per mostrarti annunci più pertinenti</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Fascicolatore 4</translation>
 <translation id="5421136146218899937">Cancella dati di navigazione...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> vuole inviarti notifiche</translation>
@@ -2583,6 +2588,7 @@
 <translation id="8004582292198964060">Browser</translation>
 <translation id="8009225694047762179">Gestisci password</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Questa carta e il relativo indirizzo di fatturazione verranno salvati. Potrai usarla dopo aver eseguito l'accesso all'account <ph name="USER_EMAIL" />.}other{Queste carte e i relativi indirizzi di fatturazione verranno salvati. Potrai usarle dopo aver eseguito l'accesso all'account <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">I malintenzionati su questo sito potrebbero indurti con l'inganno a effettuare operazioni pericolose, come installare software o fornire i tuoi dati personali (ad esempio password, numeri di telefono o carte di credito).</translation>
 <translation id="8026334261755873520">Cancella dati di navigazione</translation>
 <translation id="8027077570865220386">Vassoio 15</translation>
@@ -2634,6 +2640,7 @@
 <translation id="8148608574971654810">Versione PDF:</translation>
 <translation id="8149426793427495338">Il computer è entrato in modalità sospensione.</translation>
 <translation id="8150722005171944719">Il file all'indirizzo <ph name="URL" /> non è leggibile. Potrebbe essere stato rimosso, spostato oppure delle autorizzazioni del file potrebbero impedire l'accesso.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Il criterio dell'amministratore sconsiglia di scaricare questo file su <ph name="DESTINATION_NAME" />}other{Il criterio dell'amministratore sconsiglia di scaricare questi file su <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Esci dal sito</translation>
 <translation id="8163866351304776260">Perforatura quadrupla a sinistra</translation>
 <translation id="8175796834047840627">Chrome chiede se vuoi salvare le tue carte nel tuo Account Google perché hai eseguito l'accesso. Puoi modificare questo comportamento nelle impostazioni.</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 44fbdff..36b99ac 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -648,6 +648,7 @@
 <translation id="2649259151839507861">‏<ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, יש להקיש על Tab ואז על Enter כדי לנקות את נתוני היסטוריית הגלישה, קובצי ה-cookie, המטמון ועוד בהגדרות Chrome</translation>
 <translation id="2650446666397867134">לא ניתן לגשת לקובץ</translation>
 <translation id="2653659639078652383">שליחה</translation>
+<translation id="2657637947725373811">{0,plural, =1{להעביר את הקובץ הסודי?}two{להעביר את הקבצים הסודיים?}many{להעביר את הקבצים הסודיים?}other{להעביר את הקבצים הסודיים?}}</translation>
 <translation id="2660779039299703961">אירוע</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{אין}=1{סיסמה אחת (עבור <ph name="DOMAIN_LIST" />)}=2{שתי סיסמאות (עבור <ph name="DOMAIN_LIST" />)}many{# סיסמאות (עבור <ph name="DOMAIN_LIST" />)}other{# סיסמאות (עבור <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">למעלה</translation>
@@ -794,6 +795,7 @@
 <translation id="3108943290502734357">המגש האמצעי</translation>
 <translation id="3109728660330352905">אין לך הרשאה לצפות בדף הזה.</translation>
 <translation id="3113284927548439113">משמרת שלישית</translation>
+<translation id="3115363211799416195">{0,plural, =1{להוריד את הקובץ הסודי?}two{להוריד את הקבצים הסודיים?}many{להוריד את הקבצים הסודיים?}other{להוריד את הקבצים הסודיים?}}</translation>
 <translation id="3115874930288085374">לפי הדרישה של <ph name="ENROLLMENT_DOMAIN" />, עליך לגבות את הנתונים שלך ולהחזיר את מכשיר ה-<ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">למינציה</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -983,6 +985,7 @@
 <translation id="3615877443314183785">עליך להזין תאריך תפוגה חוקי</translation>
 <translation id="36224234498066874">ניקוי נתוני גלישה…</translation>
 <translation id="362276910939193118">כל ההיסטוריה</translation>
+<translation id="3628905806504633297">{0,plural, =1{בהתאם למדיניות האדמין, לא מומלץ להעביר את הקובץ הזה אל <ph name="DESTINATION_NAME" />}two{בהתאם למדיניות האדמין, לא מומלץ להעביר את הקבצים האלה אל <ph name="DESTINATION_NAME" />}many{בהתאם למדיניות האדמין, לא מומלץ להעביר את הקבצים האלה אל <ph name="DESTINATION_NAME" />}other{בהתאם למדיניות האדמין, לא מומלץ להעביר את הקבצים האלה אל <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">אם היא כבר רשומה כתוכנית המורשית לגשת לרשת, יש לנסות
       להסיר אותה מהרשימה ולהוסיף אותה שוב.</translation>
 <translation id="3630699740441428070">החיבור לרשת של המכשיר הזה הוגדר על ידי מנהלי המערכת, ועשויה להיות להם אפשרות לראות את התנועה שלך ברשת, כולל האתרים שבהם ביקרת.</translation>
@@ -1341,6 +1344,7 @@
 <translation id="4607603470419975064">‏לחצן להצגת טיפים של Chrome, מקישים על Enter כדי לקבל מידע על התכונות של Chrome</translation>
 <translation id="4607608436550361748">‏הצגת טיפים לשימוש ב-Chrome</translation>
 <translation id="4617273035598175554">תוכנות גרפיקה ואנימציה</translation>
+<translation id="4622292761762557753">אעביר בכל זאת</translation>
 <translation id="4627675673814409125">‏לא ניתן להגדיר את המדיניות הזאת ברמה של פרופיל Chrome. המערכת תתעלם מהמדיניות.</translation>
 <translation id="4628948037717959914">תמונה</translation>
 <translation id="4631649115723685955">הקאשבק מקושר</translation>
@@ -1660,6 +1664,7 @@
 <translation id="540969355065856584">שרת זה לא הצליח להוכיח שהוא <ph name="DOMAIN" />; אישור האבטחה שלו אינו תקף כעת. הסיבה לכך עשויה להיות תצורה שגויה או שתוקף מיירט את החיבור שלך.</translation>
 <translation id="5412040515238827314">פורמט לא תקין: אמורה להופיע רשימת תבניות.</translation>
 <translation id="5412236728747081950">‏יוצגו לך מודעות רלוונטיות יותר באתר על סמך תחומי העניין שלך מ-Chrome</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> – <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">מערים 4</translation>
 <translation id="5421136146218899937">ניקוי נתוני גלישה...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> רוצה לשלוח לך הודעות</translation>
@@ -2065,6 +2070,7 @@
 <translation id="6591833882275308647"><ph name="DEVICE_TYPE" /> זה אינו מנוהל</translation>
 <translation id="6592952801936330159">‏הלחצן 'ניהול ההגדרות לאתרים', יש להקיש על Enter כדי לנהל את ההרשאות והנתונים השמורים בכל האתרים בהגדרות Chrome</translation>
 <translation id="6596325263575161958">אפשרויות הצפנה</translation>
+<translation id="6599642189720630047">מוצרים במעקב</translation>
 <translation id="6609880536175561541">Prc7 (Envelope)‎</translation>
 <translation id="6611723696964473273">חדשות כלכלה</translation>
 <translation id="6612010098632894193">סרטונים אונליין</translation>
@@ -2592,6 +2598,7 @@
 <translation id="8004582292198964060">דפדפן</translation>
 <translation id="8009225694047762179">ניהול סיסמאות</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{הכרטיס הזה יישמר יחד עם הכתובת שלו לחיוב. יתאפשר לך להשתמש בו לאחר התחברות אל <ph name="USER_EMAIL" />.}two{הכרטיסים האלה יישמרו יחד עם הכתובות שלהם לחיוב. יתאפשר לך להשתמש בהם לאחר התחברות אל <ph name="USER_EMAIL" />.}many{הכרטיסים האלה יישמרו יחד עם הכתובות שלהם לחיוב. יתאפשר לך להשתמש בהם לאחר התחברות אל <ph name="USER_EMAIL" />.}other{הכרטיסים האלה יישמרו יחד עם הכתובות שלהם לחיוב. יתאפשר לך להשתמש בהם לאחר התחברות אל <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">תוקפים באתר הזה עשויים לגרום לך, בדרכי מרמה, לבצע פעולות מסוכנות כמו התקנת תוכנה או חשיפה של מידע אישי (לדוגמה: סיסמאות, מספרי טלפון או פרטי כרטיסי אשראי).</translation>
 <translation id="8026334261755873520">ניקוי נתוני גלישה</translation>
 <translation id="8027077570865220386">מגש 15</translation>
@@ -2643,6 +2650,7 @@
 <translation id="8148608574971654810">‏גרסת PDF:</translation>
 <translation id="8149426793427495338">המחשב עבר למצב שינה.</translation>
 <translation id="8150722005171944719">הקובץ הנמצא ב-<ph name="URL" /> לא ניתן לקריאה. ייתכן שהקובץ הוסר או הועבר, או שהרשאות הקובץ מונעות גישה אליו.</translation>
+<translation id="8153865548451212769">{0,plural, =1{בהתאם למדיניות האדמין, לא מומלץ להוריד את הקובץ הזה אל <ph name="DESTINATION_NAME" />}two{בהתאם למדיניות האדמין, לא מומלץ להוריד את הקבצים האלה אל <ph name="DESTINATION_NAME" />}many{בהתאם למדיניות האדמין, לא מומלץ להוריד את הקבצים האלה אל <ph name="DESTINATION_NAME" />}other{בהתאם למדיניות האדמין, לא מומלץ להוריד את הקבצים האלה אל <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">יציאה מהאתר</translation>
 <translation id="8163866351304776260">4 ניקובים בצד שמאל</translation>
 <translation id="8175796834047840627">‏Chrome מציע לשמור את הכרטיסים שלך בחשבון Google כי התחברת לחשבון. אפשר לשנות את ההתנהגות הזאת בהגדרות.</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb
index aa994deb..7e026e8 100644
--- a/components/strings/components_strings_kk.xtb
+++ b/components/strings/components_strings_kk.xtb
@@ -2064,6 +2064,7 @@
 <translation id="6591833882275308647"><ph name="DEVICE_TYPE" /> құрылғыңыз басқарылмайды.</translation>
 <translation id="6592952801936330159">"Сайт параметрлерін басқару" түймесі. Chrome параметрлеріне кіріп, сайттарға қатысты сақталған рұқсаттар мен деректерді басқару үшін Enter пернесін басыңыз.</translation>
 <translation id="6596325263575161958">Шифрлау опциялары</translation>
+<translation id="6599642189720630047">Қадағаланатын өнімдер</translation>
 <translation id="6609880536175561541">Prc7 (Envelope)</translation>
 <translation id="6611723696964473273">Экономика жаңалықтары</translation>
 <translation id="6612010098632894193">Онлайн бейне</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index b7d138c..9cd75e3 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -120,6 +120,7 @@
 <translation id="1266469291454105242">ಸಾಧನದ ಅನ್‌ಲಾಕ್</translation>
 <translation id="1269516672602708785">Google Sites ನಲ್ಲಿ ತ್ವರಿತವಾಗಿ ಹೊಸ ಸೈಟ್ ಅನ್ನು ರಚಿಸಿ</translation>
 <translation id="1270502636509132238">ಪಿಕಪ್ ವಿಧಾನ</translation>
+<translation id="1273592791152866347">ಬೆಲೆ ಟ್ರ್ಯಾಕ್ ಮಾಡುವುದನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="1281476433249504884">ಸ್ಟ್ಯಾಕರ್ 1</translation>
 <translation id="1285320974508926690">ಈ ಸೈಟ್ ಅನ್ನು ಎಂದಿಗೂ ಭಾಷಾಂತರಿಸದಿರಿ</translation>
 <translation id="1288548991597756084">ಕಾರ್ಡ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಉಳಿಸಿ</translation>
@@ -247,6 +248,7 @@
 <translation id="155039086686388498">Engineering-D</translation>
 <translation id="1551884710160394169">ಫ್ರೀವೇರ್ ಮತ್ತು ಶೇರ್‌ವೇರ್</translation>
 <translation id="1553358976309200471">Chrome ಅಪ್‌ಡೇಟ್‌ ಮಾಡಿ</translation>
+<translation id="1554003749331233619">ನೀವು ಈಗ ಈ ಉತ್ಪನ್ನವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುತ್ತಿದ್ದೀರಿ. ಈ ಪುಟವನ್ನು <ph name="LAST_BOOKMARKS_FOLDER" /> ನಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ</translation>
 <translation id="1555130319947370107">ನೀಲಿ</translation>
 <translation id="1559447966090556585">ಅಧಿಸೂಚನೆಗಳನ್ನು ಪಡೆಯುವುದೇ?</translation>
 <translation id="1559528461873125649">ಆ ರೀತಿಯ ಯಾವುದೇ ಫೈಲ್ ಅಥವಾ ಡೈರೆಕ್ಟರಿ ಇಲ್ಲ</translation>
@@ -559,6 +561,7 @@
 <translation id="2430968933669123598">Google ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸಿ, ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ನಿಮ್ಮ ಮಾಹಿತಿ, ಗೌಪ್ಯತೆ ಮತ್ತು ಸುರಕ್ಷತೆಯನ್ನು ನಿರ್ವಹಿಸಲು Enter ಒತ್ತಿ</translation>
 <translation id="2436186046335138073"><ph name="PROTOCOL" /> ಎಲ್ಲಾ ಲಿಂಕ್‌ಗಳನ್ನು ತೆರೆಯಲು <ph name="HANDLER_HOSTNAME" /> ಗೆ ಅನುಮತಿಸುವುದೇ?</translation>
 <translation id="2438874542388153331">ಬಲಭಾಗದಲ್ಲಿ ನಾಲ್ಕು ತೂತುಗಳನ್ನು ಮಾಡಿ</translation>
+<translation id="2443309680964448806">ಏನೋ ತಪ್ಪಾಗಿದೆ. ನಿಮ್ಮ ಬದಲಾವಣೆಯನ್ನು ಉಳಿಸಲಾಗಿಲ್ಲ.</translation>
 <translation id="2448295565072560657">ನೀವು ಲಾಗ್ ಇನ್ ಆಗಿರುವಾಗ ಈ ಸಾಧನಕ್ಕೆ ಬಾಹ್ಯೋಪಕರಣಗಳನ್ನು ಅಳವಡಿಸಲಾಗಿದೆ</translation>
 <translation id="2450021089947420533">ಪ್ರಯಾಣಗಳು</translation>
 <translation id="2463739503403862330">ಭರ್ತಿ ಮಾಡು</translation>
@@ -815,6 +818,7 @@
 <translation id="317878711435188021">ನೀವು ಈ ಸಾಧನವನ್ನು ಸಕ್ರಿಯವಾಗಿ ಬಳಸುತ್ತಿರುವಾಗ ಸೈಟ್‌ಗಳು ನಿಮ್ಮ ಉಪಸ್ಥಿತಿಯ ಕುರಿತು ತಿಳಿದುಕೊಳ್ಳಲು ಬಯಸುತ್ತದೆ</translation>
 <translation id="3180358318770512945">ಪಾಲನೆ ಪೋಷಣೆ</translation>
 <translation id="3187306450550410410">ಅನುಕೂಲಕರ ಕೆಲಸದ ವ್ಯವಸ್ಥೆಗಳು</translation>
+<translation id="3190736958609431397">ಟ್ರ್ಯಾಕ್ ಮಾಡುವುದನ್ನು ನಿಲ್ಲಿಸಿ</translation>
 <translation id="319282854780294203">ಸಾಮಾಜಿಕ ನೆಟ್‌ವರ್ಕ್‌ಗಳು</translation>
 <translation id="3194737229810486521">ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಸಂಗ್ರಹಣೆ ಮಾಡಲು <ph name="URL" /> ಬಯಸುತ್ತದೆ</translation>
 <translation id="3195213714973468956"><ph name="SERVER_NAME" /> ನಲ್ಲಿ <ph name="PRINTER_NAME" /></translation>
@@ -900,6 +904,7 @@
 <translation id="3387261909427947069">ಪಾವತಿ ವಿಧಾನಗಳು</translation>
 <translation id="3391030046425686457">ವಿತರಣೆಯ ವಿಳಾಸಗಳು</translation>
 <translation id="3391482648489541560">ಫೈಲ್ ಎಡಿಟ್ ಮಾಡುವಿಕೆ</translation>
+<translation id="3392028486601120379">URL ಪ್ಯಾಟರ್ನ್‌ನಲ್ಲಿ "<ph name="URL_PATTERN" />" ಪಾಥ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ. ಈ ಕೀಗಾಗಿ ಪಾಥ್‌ಗಳು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ, ಪಾಥ್ ಅನ್ನು ತೆಗೆದುಹಾಕಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ. ಉದಾಹರಣೆ. *://example.com/ =&gt; *://example.com",</translation>
 <translation id="3395827396354264108">ಪಿಕಪ್ ವಿಧಾನ</translation>
 <translation id="3399952811970034796">ವಿತರಣೆಯ ವಿಳಾಸಗಳು</translation>
 <translation id="3402261774528610252">ಈ ಸೈಟ್ ಅನ್ನು ಲೋಡ್ ಮಾಡಲು ಬಳಸುವ ಕನೆಕ್ಷನ್, TLS 1.0 ಅಥವಾ TLS 1.1 ಅನ್ನು ಬಳಸುತ್ತದೆ, ಆದರೆ ಈ ಎರಡೂ ಆವೃತ್ತಿಗಳಿಗೆ ಸಮ್ಮತಿಸಿಲ್ಲ ಹಾಗೂ ಮುಂದಿನ ದಿನಗಳಲ್ಲಿ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ. ಒಮ್ಮೆ ಅವುಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ನಂತರ, ಬಳಕೆದಾರರು ಇನ್ನು ಮುಂದೆ ಈ ಸೈಟ್‌ ಅನ್ನು ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. TLS 1.2 ಅಥವಾ ನಂತರದ ಆವೃತ್ತಿಯನ್ನು ಸರ್ವರ್ ಸಕ್ರಿಯಗೊಳಿಸಬೇಕು.</translation>
@@ -994,6 +999,7 @@
 <translation id="3637662659967048211">Google ಖಾತೆಗೆ ಉಳಿಸಿ</translation>
 <translation id="3640766068866876100">Index-4x6-Ext</translation>
 <translation id="3642638418806704195">ಅಪ್ಲಿಕೇಶನ್:</translation>
+<translation id="3647286794400715637">ಪ್ರತಿ URL ಗಳ ಸ್ಟ್ರಿಂಗ್ ನಮೂದು 1 ರಿಂದ 2 URL ಗಳ ನಡುವೆ ಇರಬೇಕು.</translation>
 <translation id="3650584904733503804">ಊರ್ಜಿತಗೊಳಿಸುವಿಕೆಯು ಯಶಸ್ವಿಯಾಗಿದೆ</translation>
 <translation id="3653033846669030038">ಥೀಮ್ ಪಾರ್ಕ್‌ಗಳು</translation>
 <translation id="3655241534245626312">ಅನುಮತಿಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಹೋಗಿ</translation>
@@ -1031,6 +1037,7 @@
 <translation id="3738166223076830879">ನಿಮ್ಮ ಬ್ರೌಸರ್ ಅನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ.</translation>
 <translation id="3740319564441798148">ದೀರ್ಘ ದೂರದ ಬಸ್ ಮತ್ತು ರೈಲು</translation>
 <translation id="3744111561329211289">ಹಿನ್ನೆಲೆ ಸಿಂಕ್</translation>
+<translation id="3744286742364977428">ನೀವು ಡೌನ್‌ಲೋಡ್ ಮಾಡುವ ಫೈಲ್‌ಗಳನ್ನು ವಿಶ್ಲೇಷಣೆಗಾಗಿ Google Cloud ಅಥವಾ ಥರ್ಡ್-ಪಾರ್ಟಿಗಳಿಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಅವುಗಳನ್ನು ಸೂಕ್ಷ್ಮವಾದ ವೈಯಕ್ತಿಕ ಡೇಟಾ ಅಥವಾ ಮಾಲ್‌ವೇರ್ ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಸ್ಕ್ಯಾನ್ ಮಾಡಬಹುದು ಹಾಗೂ ಕಂಪನಿಯ ನೀತಿಗಳ ಆಧಾರದ ಮೇಲೆ ಸಂಗ್ರಹಿಸಬಹುದು.</translation>
 <translation id="3744899669254331632">ನೀವು ಇದೀಗ <ph name="SITE" /> ಗೆ ಭೇಟಿ ನೀಡಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ವೆಬ್‌ಸೈಟ್ Chromium ಗೆ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗದ ಅವ್ಯವಸ್ಥಿತ ರುಜುವಾತುಗಳನ್ನು ಕಳುಹಿಸಿದೆ. ನೆಟ್‌ವರ್ಕ್ ದೋಷಗಳು ಮತ್ತು ಆಕ್ರಮಣಗಳು ಸಾಮಾನ್ಯವಾಗಿ ತಾತ್ಕಾಲಿಕವಾಗಿರುತ್ತವೆ, ಆದ್ದರಿಂದ ಈ ಪುಟವು ಬಹುಶಃ ನಂತರ ಕಾರ್ಯನಿರ್ವಹಿಸಬಹುದು.</translation>
 <translation id="3745099705178523657">ನೀವು ಖಚಿತಪಡಿಸಿದ ನಂತರ, ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿನ ಕಾರ್ಡ್ ವಿವರಗಳನ್ನು ಈ ಸೈಟ್ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.</translation>
 <translation id="3748148204939282805"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ನಲ್ಲಿನ ಆಕ್ರಮಣಕಾರರು ಸಾಫ್ಟ್‌ವೇರ್ ಸ್ಥಾಪಿಸುವಿಕೆ ಅಥವಾ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ಬಹಿರಂಗ ಪಡಿಸುವಂತಹ ಅಪಾಯಕಾರಿಯಾಗಿ ಏನಾದರೂ ಮಾಡುವಂತಹ ಮೋಸವನ್ನು ಮಾಡಬಹುದು (ಉದಾಹರಣೆಗೆ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು, ಫೋನ್‌ ಸಂಖ್ಯೆಗಳು ಅಥವಾ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್‌ಗಳು). <ph name="BEGIN_LEARN_MORE_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -1138,6 +1145,7 @@
 <translation id="4087296516249690906">ಈವೆಂಟ್ ಬಟನ್ ರಚಿಸಿ, Google Calendar ನಲ್ಲಿ ಹೊಸ ಈವೆಂಟ್ ಅನ್ನು ತ್ವರಿತವಾಗಿ ರಚಿಸಲು Enter ಒತ್ತಿ</translation>
 <translation id="4088981014127559358">ಅಂಚು 1 ಚಿತ್ರ Y ಶಿಫ್ಟ್</translation>
 <translation id="4089152113577680600">ಟ್ರೇ 14</translation>
+<translation id="4097288585054919042">ಅಲರ್ಟ್‌ಗಳನ್ನು ಆಫ್ ಮಾಡಿ</translation>
 <translation id="4098354747657067197">ವಂಚನೆಯ ಸೈಟ್ ಮುಂದಿದೆ</translation>
 <translation id="4099048595830172239">ಗೌಪ್ಯ ವಿಷಯ ಕಾಣಿಸಿಕೊಂಡಾಗ ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಅನ್ನು <ph name="APPLICATION_TITLE" /> ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲು ನಿರ್ವಾಹಕರ ನೀತಿಯು ಶಿಫಾರಸು ಮಾಡುವುದಿಲ್ಲ:</translation>
 <translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome ನಲ್ಲಿ ಫಾಂಟ್ ಗಾತ್ರಗಳು ಮತ್ತು ಟೈಪ್‌ಫೇಸ್‌ಗಳನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಲು Tab ಒತ್ತಿ, ನಂತರ Enter ಒತ್ತಿ</translation>
@@ -1174,6 +1182,7 @@
 <translation id="4176463684765177261">ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="4176535426287761656">ಸಮಯಹಂಚಿಕೆಗಳು ಮತ್ತು ರಜಾಕಾಲದ ಸ್ವತ್ತುಗಳು</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
+<translation id="4186035307311647330">ಬೆಲೆ ಟ್ರ್ಯಾಕ್ ಮಾಡುವುದನ್ನು ನಿಲ್ಲಿಸಿ</translation>
 <translation id="4194250254487269611">ಸದ್ಯಕ್ಕೆ ನಿಮ್ಮ ಕಾರ್ಡ್ ಅನ್ನು ಉಳಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation>
 <translation id="4196861286325780578">&amp;ಸರಿಸುವುದನ್ನು ಮತ್ತೆಮಾಡು</translation>
 <translation id="4202554117186904723">ಐದನೇ ರೋಲ್</translation>
@@ -1220,6 +1229,7 @@
 <translation id="4275830172053184480">ನಿಮ್ಮ ಸಾಧನವನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ</translation>
 <translation id="4277028893293644418">ಪಾಸ್‌ವರ್ಡ್ ಮರುಹೊಂದಿಸಿ</translation>
 <translation id="4278390842282768270">ಅನುಮತಿಸಲಾಗಿದೆ</translation>
+<translation id="4282346679996504092">ಈ ಉತ್ಪನ್ನದ ಕುರಿತ ಅಲರ್ಟ್‌ಗಳನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ ಹಾಗೂ ಬುಕ್‌ಮಾರ್ಕ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{ಈ ಕಾರ್ಡ್ ಅನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ}one{ಈ ಕಾರ್ಡ್‌ಗಳನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ}other{ಈ ಕಾರ್ಡ್‌ಗಳನ್ನು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ}}</translation>
 <translation id="4287885627794386150">ಪ್ರಯೋಗಕ್ಕೆ ಅರ್ಹವಾಗಿದೆ ಆದರೆ ಸಕ್ರಿಯವಾಗಿರುವುದಿಲ್ಲ</translation>
 <translation id="4297502707443874121">ಪುಟ <ph name="THUMBNAIL_PAGE" /> ರ ಥಂಬ್‌ನೇಲ್</translation>
@@ -1258,6 +1268,7 @@
 <translation id="4358059973562876591">DnsOverHttpsMode ನಲ್ಲಿನ ಕಾರ್ಯನೀತಿಯ ದೋಷದಿಂದಾಗಿ ನೀವು ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಟೆಂಪ್ಲೆಟ್‌ಗಳನ್ನು ಅನ್ವಯಿಸಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="4358461427845829800">ಪಾವತಿ ವಿಧಾನಗಳನ್ನು ನಿರ್ವಹಿಸಿ...</translation>
 <translation id="4359160567981085931">ನೀವು ಈಗಷ್ಟೇ ವಂಚನೆ ಮಾಡುವ ಸೈಟ್‌ನಲ್ಲಿ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನಮೂದಿಸಿದ್ದೀರಿ. Chrome, ಸಹಾಯ ಮಾಡಬಹುದು. ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಬದಲಿಸಲು ಮತ್ತು ನಿಮ್ಮ ಖಾತೆಗೆ ಅಪಾಯ ಉಂಟಾಗಿರಬಹುದು ಎಂದು Google ಗೆ ಸೂಚಿಸಲು, ಖಾತೆ ರಕ್ಷಿಸಿ ಕ್ಲಿಕ್ ಮಾಡಿ.</translation>
+<translation id="4363222835916186793">ಈ ಉತ್ಪನ್ನದ ಕುರಿತ ಅಲರ್ಟ್‌ಗಳನ್ನು ಆಫ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="4367563149485757821">Number-12 (Envelope)</translation>
 <translation id="437040971055499437">ಭದ್ರತಾ ಈವೆಂಟ್‌ ಸಂಭವಿಸುತ್ತದೆ</translation>
 <translation id="4372516964750095882">Fanfold-Us</translation>
@@ -1410,6 +1421,7 @@
 <translation id="4792686369684665359">ನೀವು ಸಲ್ಲಿಸಲು ಹೊರಟಿರುವ ಮಾಹಿತಿಯು ಸುರಕ್ಷಿತವಾಗಿಲ್ಲ</translation>
 <translation id="4796594887379589189">ಕೆಲಸದ ಖಾತೆ ಐಡಿ</translation>
 <translation id="4798078619018708837">ನಿಮ್ಮ ಕಾರ್ಡ್‌ ವಿವರಗಳನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲು <ph name="CREDIT_CARD" /> ಗೆ ಸಂಬಂಧಿಸಿದ ಅವಧಿ ಮುಕ್ತಾಯದ ದಿನಾಂಕ ಮತ್ತು CVC ಅನ್ನು ನಮೂದಿಸಿ. ನೀವು ಖಚಿತಪಡಿಸಿದ ನಂತರ, ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿನ ಕಾರ್ಡ್ ವಿವರಗಳನ್ನು ಈ ಸೈಟ್ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.</translation>
+<translation id="4798269756263412078">ಯಾವುದೇ ಸೈಟ್‌ನಲ್ಲಿ ಬೆಲೆ ಕುಸಿತ ಕಂಡುಬಂದರೆ ಅಲರ್ಟ್‌ಗಳನ್ನು ಪಡೆಯಿರಿ. ಅಲರ್ಟ್‌ಗಳನ್ನು ನಿಮ್ಮ ಇಮೇಲ್‌ಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="4800132727771399293">ನಿಮ್ಮ ಮುಕ್ತಾಯದ ದಿನಾಂಕ ಮತ್ತು CVC ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ</translation>
 <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation>
 <translation id="4806051791961048632">TouchID ಬಳಸಿ</translation>
@@ -1653,6 +1665,7 @@
 <translation id="5396631636586785122">ಬಲಭಾಗದ ಅಂಚನ್ನು ಹೊಲಿಯಿರಿ</translation>
 <translation id="5398772614898833570">ಜಾಹೀರಾತುಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="5400836586163650660">ಬೂದು</translation>
+<translation id="540630185148148480">ಅಲರ್ಟ್‌ಗಳನ್ನು ಆನ್ ಮಾಡಿ</translation>
 <translation id="540969355065856584">ಈ ಸರ್ವರ್ <ph name="DOMAIN" /> ಆಗಿದೆ ಎಂಬುದನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ; ಈ ಸಮಯದಲ್ಲಿ ಅದರ ಸುರಕ್ಷತಾ ಪ್ರಮಾಣಪತ್ರವು ಮಾನ್ಯವಾಗಿಲ್ಲ. ಇದು ತಪ್ಪು ಕಾನ್ಫಿಗರೇಶನ್‌ನಿಂದ ಅಥವಾ ಆಕ್ರಮಣಕಾರರು ನಿಮ್ಮ ಸಂಪರ್ಕದಲ್ಲಿ ಒಳನುಸುಳಿರುವುದರಿಂದ ಆಗಿರಬಹುದು.</translation>
 <translation id="5412040515238827314">ಅಮಾನ್ಯ ಫಾರ್ಮ್ಯಾಟ್: ಪ್ಯಾಟರ್ನ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ನಿರೀಕ್ಷಿಸಲಾಗಿದೆ.</translation>
 <translation id="5412236728747081950">ನಿಮಗೆ ಹೆಚ್ಚು ಸಂಬಂಧಿತ ಜಾಹೀರಾತುಗಳನ್ನು ತೋರಿಸಲು, ಈ ಸೈಟ್ ನಿಮ್ಮ ಆಸಕ್ತಿಗಳ ಕುರಿತ ಮಾಹಿತಿಯನ್ನು Chrome ನಿಂದ ಪಡೆಯುತ್ತದೆ</translation>
@@ -1717,6 +1730,7 @@
 <translation id="5580958916614886209">ನಿಮ್ಮ ಮುಕ್ತಾಯ ತಿಂಗಳನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ</translation>
 <translation id="558420943003240152">ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಪಾಸ್‌ಕೀಗಳನ್ನು ನಿರ್ವಹಿಸಿ…</translation>
 <translation id="5586446728396275693">ಯಾವುದೇ ಉಳಿಸಲಾದ ವಿಳಾಸಗಳಿಲ್ಲ</translation>
+<translation id="5586831831248371458"><ph name="KEYWORD_SUFFIX" /> ಅನ್ನು ಹುಡುಕಿ</translation>
 <translation id="5587987780934666589">ಪ್ಲ್ಯಾಟ್‌ಫಾರ್ಮ್ ಬಳಕೆದಾರರು</translation>
 <translation id="5593349413089863479">ಕನೆಕ್ಷನ್ ಸಂಪೂರ್ಣವಾಗಿ ಸುರಕ್ಷಿತವಾಗಿಲ್ಲ</translation>
 <translation id="5595485650161345191">ವಿಳಾಸ ಎಡಿಟ್ ಮಾಡಿ</translation>
@@ -1836,6 +1850,7 @@
 <translation id="5938153366081463283">ವರ್ಚುವಲ್ ಕಾರ್ಡ್ ಅನ್ನು ಸೇರಿಸಿ</translation>
 <translation id="5938793338444039872">Troy</translation>
 <translation id="5946937721014915347"><ph name="SITE_NAME" /> ತೆರೆಯಲಾಗುತ್ತಿದೆ…</translation>
+<translation id="5947508410139465809">ನೀವು ಅಪ್‌ಲೋಡ್ ಮಾಡುವ ಅಥವಾ ಲಗತ್ತಿಸುವ ಫೈಲ್‌ಗಳನ್ನು ವಿಶ್ಲೇಷಣೆಗಾಗಿ Google Cloud ಅಥವಾ ಥರ್ಡ್-ಪಾರ್ಟಿಗಳಿಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಅವುಗಳನ್ನು ಸೂಕ್ಷ್ಮವಾದ ವೈಯಕ್ತಿಕ ಡೇಟಾ ಅಥವಾ ಮಾಲ್‌ವೇರ್ ಅನ್ನು ಪತ್ತೆಹಚ್ಚಲು ಸ್ಕ್ಯಾನ್ ಮಾಡಬಹುದು ಹಾಗೂ ಕಂಪನಿಯ ನೀತಿಗಳ ಆಧಾರದ ಮೇಲೆ ಸಂಗ್ರಹಿಸಬಹುದು.</translation>
 <translation id="5951495562196540101">ಗ್ರಾಹಕರ ಖಾತೆಯ ಮೂಲಕ ನೋಂದಣಿ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ (ಪ್ಯಾಕೇಜ್ ಮಾಡಲಾದ ಪರವಾನಗಿ ಲಭ್ಯವಿದೆ).</translation>
 <translation id="5953516610448771166">ಈ ಮೀಡಿಯಾಗೆ ಲೈವ್ ಕ್ಯಾಪ್ಶನ್ ಲಭ್ಯವಿಲ್ಲ. ಕ್ಯಾಪ್ಶನ್‌ಗಳನ್ನು ಪಡೆಯಲು, ಈ ಸೈಟ್‌ಗಾಗಿ <ph name="CONTENT_SETTINGS" /> ಅನ್ನು ನಿರ್ಬಂಧಿಸಿ.</translation>
 <translation id="5955063559762970069">ಹೊಟೇಲ್‌ಗಳು ಮತ್ತು ವಸತಿಗಳು</translation>
@@ -1923,6 +1938,7 @@
 <translation id="6177128806592000436">ಈ ಸೈಟ್‌ಗೆ ನಿಮ್ಮ ಸಂಪರ್ಕವು ಸುರಕ್ಷಿತವಾಗಿಲ್ಲ</translation>
 <translation id="6180316780098470077">ಮರುಪ್ರಯತ್ನದ ಮಧ್ಯಂತರ</translation>
 <translation id="61877208875190028">ಮಹಿಳೆಯರ ಉಡುಪು</translation>
+<translation id="6194209731893739467">ನೀವು ಟ್ರ್ಯಾಕ್ ಮಾಡಿದ ಎಲ್ಲಾ ಉತ್ಪನ್ನಗಳನ್ನು ಇಲ್ಲಿ ನೋಡಿ</translation>
 <translation id="6195371403461054755">ಭೂವಿಜ್ಞಾನ</translation>
 <translation id="6196640612572343990">ಥರ್ಡ್ ಪಾರ್ಟಿ ಕುಕೀಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation>
 <translation id="6203231073485539293">ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
@@ -1958,6 +1974,7 @@
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6295618774959045776">CVC:</translation>
 <translation id="6300452962057769623">{0,plural, =0{ನಿಮ್ಮ ಸಾಧನವು ಈಗ ಮರುಪ್ರಾರಂಭವಾಗುತ್ತದೆ}=1{ನಿಮ್ಮ ಸಾಧನವು 1 ಸೆಕೆಂಡ್‌ನಲ್ಲಿ ಮರುಪ್ರಾರಂಭವಾಗುತ್ತದೆ}one{ನಿಮ್ಮ ಸಾಧನವು # ಸೆಕೆಂಡ್‌ಗಳಲ್ಲಿ ಮರುಪ್ರಾರಂಭವಾಗುತ್ತದೆ}other{ನಿಮ್ಮ ಸಾಧನವು # ಸೆಕೆಂಡ್‌ಗಳಲ್ಲಿ ಮರುಪ್ರಾರಂಭವಾಗುತ್ತದೆ}}</translation>
+<translation id="6301104306974789820">ಬೆಲೆಯನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುವ ಅಧಿಸೂಚನೆಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ</translation>
 <translation id="6302269476990306341">Chrome ನಲ್ಲಿನ Google Assistant ನಿಲ್ಲುತ್ತಿದೆ</translation>
 <translation id="6305205051461490394"><ph name="URL" /> ತಲುಪಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="6311165245110979290">ವರ್ಚುವಲ್ ಕಾರ್ಡ್ ಲಭ್ಯವಿದೆ</translation>
@@ -2017,6 +2034,7 @@
 <translation id="6451458296329894277">ಮರುಸಲ್ಲಿಕೆ ಫಾರ್ಮ್ ಅನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ</translation>
 <translation id="6456955391422100996">ಜಾಹೀರಾತನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ.</translation>
 <translation id="6457206614190510200">ಸ್ಯಾಡಲ್ ಮಾದರಿಯ ಹೊಲಿಗೆ ಹಾಕಿ</translation>
+<translation id="6457455098507772300">ಬೆಲೆ ಕುಸಿತದ ಅಲರ್ಟ್‌ಗಳು ನಿಮ್ಮ ಡೆಸ್ಕ್‌ಟಾಪ್‌ನಲ್ಲಿ ಪಾಪ್ಅಪ್ ಅಧಿಸೂಚನೆಗಳಂತೆ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ</translation>
 <translation id="6458606150257356946">ಪರವಾಗಿಲ್ಲ ಅಂಟಿಸಿ</translation>
 <translation id="6464094930452079790">ಚಿತ್ರಗಳು</translation>
 <translation id="6465306955648956876">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ನಿರ್ವಹಿಸಿ...</translation>
@@ -2074,6 +2092,7 @@
 <translation id="663260587451432563">JIS B4</translation>
 <translation id="6643016212128521049">ತೆರವುಗೊಳಿಸಿ</translation>
 <translation id="6645291930348198241">ಕುಕೀಗಳು ಮತ್ತು ಸೈಟ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ.</translation>
+<translation id="6645478838938543427">ಬೆಲೆ ಕುಸಿತದ ಅಲರ್ಟ್‌ಗಳನ್ನು <ph name="EMAIL_ADDRESS" /> ಗೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ</translation>
 <translation id="6646269444027925224">{COUNT,plural, =0{ಯಾವುದೂ ಇಲ್ಲ}=1{1 ಸೈಟ್‌‍ನಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡುವುದಿಲ್ಲ)}one{# ಸೈಟ್‌ಗಳಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡುವುದಿಲ್ಲ)}other{# ಸೈಟ್‌ಗಳಿಂದ (ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡುವುದಿಲ್ಲ)}}</translation>
 <translation id="6648459603387803038">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಮ್ಮ ಬ್ರೌಸರ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ದೂರದಿಂದಲೇ ಬದಲಾಯಿಸಬಹುದು. ಈ ಸಾಧನದಲ್ಲಿನ ಚಟುವಟಿಕೆಯನ್ನು Chrome ನ ಹೊರಗೆ ಸಹ ನಿರ್ವಹಿಸಬಹುದು.</translation>
 <translation id="6648524591329069940">Serif ಫಾಂಟ್</translation>
@@ -2267,6 +2286,7 @@
 <translation id="7182878459783632708">ಯಾವುದೇ ನೀತಿಗಳನ್ನು ಹೊಂದಿಸಿಲ್ಲ</translation>
 <translation id="7186367841673660872">ಈ ಪುಟವನ್ನು<ph name="ORIGINAL_LANGUAGE" />ನಿಂದ<ph name="LANGUAGE_LANGUAGE" />ಗೆ ಭಾಷಾಂತರಿಸಲಾಗಿದೆ</translation>
 <translation id="718872491229180389">ಚೀರ್‌ಲೀಡಿಂಗ್</translation>
+<translation id="7192188280913829296">"vendor_id" ಗುಣಲಕ್ಷಣವನ್ನು ಸಹ ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕು.</translation>
 <translation id="7192203810768312527"><ph name="SIZE" /> ತೆಗೆದುಹಾಕಿ. ನಿಮ್ಮ ನಂತರದ ಭೇಟಿಯ ಸಮಯದಲ್ಲಿ ಕೆಲವು ಸೈಟ್‌ಗಳು ನಿಧಾನವಾಗಿ ಲೋಡ್ ಆಗಬಹುದು.</translation>
 <translation id="7193661028827781021">ಉಲ್ಲೇಖ</translation>
 <translation id="719464814642662924">ವೀಸಾ</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 2521595..5429b1c 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">로컬 데이터 액세스</translation>
 <translation id="1594030484168838125">선택</translation>
 <translation id="1596296697375291157">스릴러, 범죄 및 미스터리 영화</translation>
+<translation id="1599199147673445968">새 카드인가요? <ph name="BEGIN_LINK" />카드 세부정보 입력<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Chrome 공룡 달리기 게임 플레이</translation>
 <translation id="161042844686301425">청록색</translation>
 <translation id="1611101756749861742">2번째 롤</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">키워드:</translation>
 <translation id="3667704023705708645">벤처 자본</translation>
 <translation id="3671540257457995106">크기 조절을 허용하시겠습니까?</translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" /> 오류: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">3번째 롤</translation>
 <translation id="3676592649209844519">기기 ID:</translation>
 <translation id="3677008721441257057">&lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;을(를) 찾으셨나요?</translation>
diff --git a/components/strings/components_strings_lo.xtb b/components/strings/components_strings_lo.xtb
index 555d6290..3af4268 100644
--- a/components/strings/components_strings_lo.xtb
+++ b/components/strings/components_strings_lo.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">ການເຂົ້າເຖິງຂໍ້ມູນພາຍໃນເຄື່ອງ</translation>
 <translation id="1594030484168838125">ເລືອກ</translation>
 <translation id="1596296697375291157">ໜັງເລິກລັບ, ສືບສວນ ແລະ ລະທຶກຂວັນ</translation>
+<translation id="1599199147673445968">ບັດໃໝ່ບໍ? <ph name="BEGIN_LINK" />ປ້ອນລາຍລະອຽດບັດ<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">ຫຼິ້ນເກມ Dino Run ໃນ Chrome</translation>
 <translation id="161042844686301425">ສີຟ້າຂຽວ</translation>
 <translation id="1611101756749861742">ມ້ວນທີສອງ</translation>
@@ -648,6 +649,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, ກົດແຖບ ຈາກນັ້ນກົດ Enter ເພື່ອລຶບປະຫວັດການທ່ອງເວັບຂອງທ່ານ, ຄຸກກີ້, ແຄສ ແລະ ອື່ນໆອີກໃນການຕັ້ງຄ່າ Chrome</translation>
 <translation id="2650446666397867134">ການ​ເຂົ້າ​ຫາໄຟລ​໌​ຖືກ​ປະ​ຕິ​ເສດ</translation>
 <translation id="2653659639078652383">ສົ່ງ</translation>
+<translation id="2657637947725373811">{0,plural, =1{ໂອນຍ້າຍໄຟລ໌ທີ່ເປັນຄວາມລັບບໍ?}other{ໂອນຍ້າຍໄຟລ໌ທີ່ເປັນຄວາມລັບບໍ?}}</translation>
 <translation id="2660779039299703961">ເຫດ​ການ</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{ບໍ່ມີ}=1{1 ລະຫັດຜ່ານ (ສຳລັບ <ph name="DOMAIN_LIST" />)}=2{2 ລະຫັດຜ່ານ (ສຳລັບ <ph name="DOMAIN_LIST" />)}other{# ລະຫັດຜ່ານ (ສຳລັບ <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">ດ້ານເທິງ</translation>
@@ -794,6 +796,7 @@
 <translation id="3108943290502734357">ຖາດກາງ</translation>
 <translation id="3109728660330352905">ທ່ານບໍ່ມີສິດອະນຸຍາດໃນການເບິ່ງໜ້ານີ້.</translation>
 <translation id="3113284927548439113">ຜຽນສາມ</translation>
+<translation id="3115363211799416195">{0,plural, =1{ດາວໂຫຼດໄຟລ໌ທີ່ເປັນຄວາມລັບບໍ?}other{ດາວໂຫຼດໄຟລ໌ທີ່ເປັນຄວາມລັບບໍ?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> ກຳນົດໃຫ້ທ່ານສຳຮອງຂໍ້ມູນຂອງທ່ານໄວ້ ແລະ ສົ່ງ <ph name="DEVICE_TYPE" /> ນີ້ຄືນ.</translation>
 <translation id="3116158981186517402">ແຍກອອກເປັນຊັ້ນໆ</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -983,6 +986,7 @@
 <translation id="3615877443314183785">ປ້ອນວັນທີໝົດອາຍຸທີ່ຖືກຕ້ອງ</translation>
 <translation id="36224234498066874">ລຶບລ້າງຂໍ້ມູນການທ່ອງເວັບ...</translation>
 <translation id="362276910939193118">ສະ​ແດງ​ປະຫວັດທັງໝົດ</translation>
+<translation id="3628905806504633297">{0,plural, =1{ນະໂຍບາຍຜູ້ເບິ່ງແຍງລະບົບບໍ່ແນະນຳໃຫ້ໂອນຍ້າຍໄຟລ໌ນີ້ໃສ່ໃນ <ph name="DESTINATION_NAME" />}other{ນະໂຍບາຍຜູ້ເບິ່ງແຍງລະບົບບໍ່ແນະນຳໃຫ້ໂອນຍ້າຍໄຟລ໌ເຫຼົ່ານີ້ໃສ່ໃນ <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">ຖ້າວ່າມັນຢູ່ໃນລາຍການເປັນໂປຣແກຣມທີ່ໄດ້ຮັບອະນຸຍາດໃຫ້ເຂົ້າຫາເຄືອຂ່າຍໄດ້, ໃຫ້ລອງ
       ລຶບມັນອອກໄປຈາກລາຍການ ແລ້ວເພີ່ມມັນໃສ່ຄືນໃໝ່.</translation>
 <translation id="3630699740441428070">ຜູ້ເບິ່ງແຍງລະບົບຂອງອຸປະກອນນີ້ໄດ້ຕັ້ງຄ່າການເຊື່ອມຕໍ່ເຄືອຂ່າຍຂອງທ່ານ, ເຊິ່ງອາດຈະອະນຸຍາດໃຫ້ພວກມັນເຫັນການຮັບສົ່ງຂໍ້ມູນໃນເຄືອຂ່າຍຂອງທ່ານ, ຮວມທັງເວັບໄຊທີ່ທ່ານເຂົ້າເບິ່ງ.</translation>
@@ -1003,6 +1007,7 @@
 <translation id="3664782872746246217">ຄີເວີດ:</translation>
 <translation id="3667704023705708645">ບໍລິສັດຮ່ວມທຶນ</translation>
 <translation id="3671540257457995106">ອະນຸຍາດໃຫ້ປັບຂະໜາດໄດ້ບໍ?</translation>
+<translation id="3672568546897166916">ເກີດຂໍ້ຜິດພາດຢູ່ <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">ມ້ວນທີສາມ</translation>
 <translation id="3676592649209844519">ID ອຸປະກອນ:</translation>
 <translation id="3677008721441257057">ທ່ານໝາຍເຖິງ &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; ບໍ?</translation>
@@ -1341,6 +1346,7 @@
 <translation id="4607603470419975064">ປຸ່ມເບິ່ງເຄັດລັບ Chrome, ກົດ Enter ເພື່ອສຶກສາເພີ່ມເຕີມກ່ຽວກັບຄຸນສົມບັດ Chrome</translation>
 <translation id="4607608436550361748">ເບິ່ງເຄັດລັບ Chrome</translation>
 <translation id="4617273035598175554">ຊອບແວກຣາບຟິກ ແລະ ອະນິເມຊັນ</translation>
+<translation id="4622292761762557753">ຢືນຢັນການໂອນຍ້າຍ</translation>
 <translation id="4627675673814409125">ບໍ່ສາມາດຕັ້ງນະໂຍບາຍນີ້ຢູ່ລະດັບໂປຣໄຟລ໌ Chrome ໄດ້ ແລະ ລະບົບຈະບໍ່ສົນໃຈ.</translation>
 <translation id="4628948037717959914">ຮູບຖ່າຍ</translation>
 <translation id="4631649115723685955">ເຊື່ອມໂຍງເງິນຄືນແລ້ວ</translation>
@@ -1656,6 +1662,7 @@
 <translation id="540969355065856584">ເຊີບເວີນີ້ບໍ່ສາມາດພິສູດໄດ້ວ່າ ມັນແມ່ນ <ph name="DOMAIN" />; ໃບຢັ້ງຢືນຄວາມປອດໄພຂອງມັນໃຊ້​ບໍ່​ໄດ້​ໃນ​ເວ​ລາ​ນີ້. ອັນນີ້ອາດຈະເຮັດໃຫ້ເກີດມີການປັບຕັ້ງຄ່າຜິດ ຫຼືຜູ້ໂຈມຕີອາດຈະດັກເອົາການເຊື່ອມຕໍ່ຂອງທ່ານ.</translation>
 <translation id="5412040515238827314">ຮູບແບບບໍ່ຖືກຕ້ອງ: ຕ້ອງການລາຍຊື່ຮູບແບບ.</translation>
 <translation id="5412236728747081950">ເວັບໄຊນີ້ໄດ້ຮັບຄວາມສົນໃຈຂອງທ່ານຈາກ Chrome ເພື່ອສະແດງໂຄສະນາທີ່ກ່ຽວຂ້ອງຫຼາຍຂຶ້ນໃຫ້ທ່ານເຫັນ</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">ສະແຕັກເກີ້ 4</translation>
 <translation id="5421136146218899937">ລຶບຂໍ້ມູນການທ່ອງເນັດ...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> ຕ້ອງການສົ່ງການແຈ້ງເຕືອນໃຫ້ທ່ານ</translation>
@@ -2060,6 +2067,7 @@
 <translation id="6591833882275308647">ບໍ່ມີການຈັດການ <ph name="DEVICE_TYPE" /> ຂອງທ່ານ</translation>
 <translation id="6592952801936330159">ຈັດການປຸ່ມການຕັ້ງຄ່າເວັບໄຊ, ກົດ Enter ເພື່ອຈັດການການອະນຸຍາດ ແລະ ຂໍ້ມູນທີ່ຈັດເກັບໄວ້ໃນເວັບໄຊຕ່າງໆໃນການຕັ້ງຄ່າ Chrome</translation>
 <translation id="6596325263575161958">ທາງເລືອກການໃສ່ລະຫັດ</translation>
+<translation id="6599642189720630047">ສິນຄ້າທີ່ຕິດຕາມ</translation>
 <translation id="6609880536175561541">Prc7 (ຊອງຈົດໝາຍ)</translation>
 <translation id="6611723696964473273">ຂ່າວເສດຖະກິດ</translation>
 <translation id="6612010098632894193">ວິດີໂອອອນລາຍ</translation>
@@ -2587,6 +2595,7 @@
 <translation id="8004582292198964060">ບຣາວ​ເຊີ</translation>
 <translation id="8009225694047762179">ຈັດການລະຫັດຜ່ານ</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{ບັດນີ້ ແລະ ທີ່ຢູ່ຮຽກເກັບເງິນຂອງມັນຈະຖືກບັນທຶກໄວ້. ທ່ານຈະສາມາດໃຊ້ມັນໄດ້ໃນເວລາເຂົ້າສູ່ລະບົບ <ph name="USER_EMAIL" />.}other{ບັດເຫຼົ່ານີ້ ແລະ ທີ່ຢູ່ຮຽກເກັບເງິນຂອງພວກມັນຈະຖືກບັນທຶກໄວ້. ທ່ານຈະສາມາດໃຊ້ພວກມັນໄດ້ໃນເວລາເຂົ້າສູ່ລະບົບ <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">ຜູ້ໂຈມຕີໃນເວັບໄຊນີ້ອາດຈະຫຼອກໃຫ້ທ່ານເຮັດບາງຢ່າງທີ່ອັນຕະລາຍ ເຊັ່ນ ການຕິດຕັ້ງຊອບແວ ຫຼື ເປີດເຜີຍຂໍ້ມູນສ່ວນຕົວຂອງທ່ານ (ຕົວຢ່າງ: ລະຫັດຜ່ານ, ເບີໂທລະສັບ ຫຼື ບັດເຄຣດິດ).</translation>
 <translation id="8026334261755873520">ລຶບຂໍ້​ມູນການທ່ອງ​ເນັດ</translation>
 <translation id="8027077570865220386">ຖາດ 15</translation>
@@ -2638,6 +2647,7 @@
 <translation id="8148608574971654810">ເວີຊັນ PDF:</translation>
 <translation id="8149426793427495338">ຄອມພິວເຕີຂອງທ່ານໄດ້ເຂົ້າສູ່ໂໝດນອນຫຼັບແລ້ວ.</translation>
 <translation id="8150722005171944719">ໄຟລ໌ຢູ່ທີ່ <ph name="URL" /> ບໍ່ສາມາດອ່ານໄດ້. ມັນອາດຈະຖືກເອົາອອກໄປ, ຍ້າຍໜີ,​ຫຼື ການອະນຸຍາດໄຟລ໌ອາດຈະກໍາລັງ​ປ້ອງ​ກັນການການເຂົ້າຫາ.</translation>
+<translation id="8153865548451212769">{0,plural, =1{ນະໂຍບາຍຜູ້ເບິ່ງແຍງລະບົບບໍ່ແນະນຳໃຫ້ດາວໂຫຼດໄຟລ໌ນີ້ໃສ່ໃນ <ph name="DESTINATION_NAME" />}other{ນະໂຍບາຍຜູ້ເບິ່ງແຍງລະບົບບໍ່ແນະນຳໃຫ້ດາວໂຫຼດໄຟລ໌ເຫຼົ່ານີ້ໃສ່ໃນ <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">ອອກຈາກເວັບໄຊ</translation>
 <translation id="8163866351304776260">ເຈາະຮູຢູ່ເບື້ອງຍ້າຍສີ່ຮູ</translation>
 <translation id="8175796834047840627">Chrome ກຳລັງສະເໜີບັນທຶກບັດຂອງທ່ານໄວ້ໃນບັນຊີ Google ຂອງທ່ານ ເພາະວ່າທ່ານເຂົ້າສູ່ລະບົບຢູ່. ທ່ານສາມາດປ່ຽນລັກສະນະການນໍາໃຊ້ນີ້ໄດ້ໃນການຕັ້ງຄ່າ.</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index e5794d2f..a72b89a 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Prieiga prie vietinių duomenų</translation>
 <translation id="1594030484168838125">Pasirinkti</translation>
 <translation id="1596296697375291157">Trileriai, kriminaliniai ir detektyviniai filmai</translation>
+<translation id="1599199147673445968">Nauja kortelė? <ph name="BEGIN_LINK" />Įveskite išsamią kortelės informaciją<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Žaisti žaidimą „Dino Run“ naršyklėje „Chrome“</translation>
 <translation id="161042844686301425">Žydra</translation>
 <translation id="1611101756749861742">Antras ritinėlis</translation>
@@ -1007,6 +1008,7 @@
 <translation id="3664782872746246217">Raktiniai žodžiai:</translation>
 <translation id="3667704023705708645">Rizikos kapitalas</translation>
 <translation id="3671540257457995106">Leisti keisti dydį?</translation>
+<translation id="3672568546897166916">Klaida (<ph name="ERROR_PATH" />): <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Trečias ritinėlis</translation>
 <translation id="3676592649209844519">Įrenginio ID:</translation>
 <translation id="3677008721441257057">Ar norėjote apsilankyti &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index 6974318a..40f7145 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -648,6 +648,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />. Lai notīrītu jūsu pārlūkošanas vēsturi, sīkfailus, kešatmiņu un citus datus Chrome iestatījumos, nospiediet tabulēšanas taustiņu un pēc tam — ievadīšanas taustiņu.</translation>
 <translation id="2650446666397867134">Piekļuve failam tika noraidīta.</translation>
 <translation id="2653659639078652383">Iesniegt</translation>
+<translation id="2657637947725373811">{0,plural, =1{Vai pārsūtīt konfidenciālu failu?}zero{Vai pārsūtīt konfidenciālus failus?}one{Vai pārsūtīt konfidenciālus failus?}other{Vai pārsūtīt konfidenciālus failus?}}</translation>
 <translation id="2660779039299703961">Notikums</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Nav}=1{1 parole (šādam domēnam: <ph name="DOMAIN_LIST" />)}=2{2 paroles (šādiem domēniem: <ph name="DOMAIN_LIST" />)}zero{# paroļu (šādiem domēniem: <ph name="DOMAIN_LIST" />)}one{# parole (šādiem domēniem: <ph name="DOMAIN_LIST" />)}other{# paroles (šādiem domēniem: <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Augša</translation>
@@ -794,6 +795,7 @@
 <translation id="3108943290502734357">Vidējā paplāte</translation>
 <translation id="3109728660330352905">Jums nav pilnvaru, lai skatītu šo lapu.</translation>
 <translation id="3113284927548439113">Trešā maiņa</translation>
+<translation id="3115363211799416195">{0,plural, =1{Vai lejupielādēt konfidenciālu failu?}zero{Vai lejupielādēt konfidenciālus failus?}one{Vai lejupielādēt konfidenciālus failus?}other{Vai lejupielādēt konfidenciālus failus?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> pieprasa, lai jūs dublētu datus un atdotu šo <ph name="DEVICE_TYPE" /> ierīci.</translation>
 <translation id="3116158981186517402">Laminēšana</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -983,6 +985,7 @@
 <translation id="3615877443314183785">Ievadiet derīgu datumu</translation>
 <translation id="36224234498066874">Dzēst pārlūkošanas datus...</translation>
 <translation id="362276910939193118">Rādīt pilnu vēsturi</translation>
+<translation id="3628905806504633297">{0,plural, =1{Administratora politika nosaka, ka nav ieteicams pārsūtīt šo failu uz: <ph name="DESTINATION_NAME" />.}zero{Administratora politika nosaka, ka nav ieteicams pārsūtīt šos failus uz: <ph name="DESTINATION_NAME" />.}one{Administratora politika nosaka, ka nav ieteicams pārsūtīt šos failus uz: <ph name="DESTINATION_NAME" />.}other{Administratora politika nosaka, ka nav ieteicams pārsūtīt šos failus uz: <ph name="DESTINATION_NAME" />.}}</translation>
 <translation id="3630155396527302611">Ja tā jau ir norādīta kā programma, kurai ir atļauts piekļūt tīklam, noņemiet to no saraksta un pievienojiet vēlreiz.</translation>
 <translation id="3630699740441428070">Šīs ierīces administratori ir konfigurējuši jūsu tīkla savienojumu, tāpēc viņi, iespējams, var skatīt jūsu tīkla datplūsmu, tostarp apmeklētās vietnes.</translation>
 <translation id="3631244953324577188">Biometrija</translation>
@@ -1340,6 +1343,7 @@
 <translation id="4607603470419975064">Chrome padomu skatīšanas poga. Lai uzzinātu vairāk par Chrome funkcijām, nospiediet taustiņu Enter.</translation>
 <translation id="4607608436550361748">Skatīt Chrome padomus</translation>
 <translation id="4617273035598175554">Grafikas un animācijas programmatūra</translation>
+<translation id="4622292761762557753">Tomēr pārsūtīt</translation>
 <translation id="4627675673814409125">Šo politiku nevar iestatīt Chrome profila līmenī, un tā tiks ignorēta.</translation>
 <translation id="4628948037717959914">Fotoattēls</translation>
 <translation id="4631649115723685955">Saistīta skaidras naudas atmaksa</translation>
@@ -1655,6 +1659,7 @@
 <translation id="540969355065856584">Šis serveris nevarēja pierādīt, ka šī ir vietne <ph name="DOMAIN" />; tā drošības sertifikāts šobrīd nav derīgs. Iespējams, tas ir nepareizas konfigurācijas dēļ vai arī kāds ļaunprātīgi izmanto jūsu savienojumu.</translation>
 <translation id="5412040515238827314">Nederīgs formāts: ir jābūt rakstu sarakstam.</translation>
 <translation id="5412236728747081950">Šī vietne iegūst informāciju par jūsu interesēm no pārlūka Chrome, lai rādītu jums atbilstošākas reklāmas.</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> — <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">4. izvades vieta</translation>
 <translation id="5421136146218899937">Notīrīt pārlūkošanas datus</translation>
 <translation id="5426179911063097041">No vietnes <ph name="SITE" /> tiek mēģināts nosūtīt paziņojumus.</translation>
@@ -2587,6 +2592,7 @@
 <translation id="8004582292198964060">Pārlūkprogramma</translation>
 <translation id="8009225694047762179">Pārvaldīt paroles</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Šī karte un tās norēķinu adrese tiks saglabāta. Jūs varēsiet to izmantot, kad būsiet pierakstījies kontā <ph name="USER_EMAIL" />.}zero{Šīs kartes un to norēķinu adreses tiks saglabātas. Jūs varēsiet tās izmantot, kad būsiet pierakstījies kontā <ph name="USER_EMAIL" />.}one{Šīs kartes un to norēķinu adreses tiks saglabātas. Jūs varēsiet tās izmantot, kad būsiet pierakstījies kontā <ph name="USER_EMAIL" />.}other{Šīs kartes un to norēķinu adreses tiks saglabātas. Jūs varēsiet tās izmantot, kad būsiet pierakstījies kontā <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Uzbrucēji šajā vietnē var mudināt jūs veikt bīstamas darbības, piemēram, instalēt programmatūru vai atklāt savu personas informāciju (piemēram, paroles, tālruņa numurus vai informāciju par kredītkartēm).</translation>
 <translation id="8026334261755873520">Notīrīt pārlūkošanas datus</translation>
 <translation id="8027077570865220386">15. paplāte</translation>
@@ -2638,6 +2644,7 @@
 <translation id="8148608574971654810">PDF versija:</translation>
 <translation id="8149426793427495338">Dators tika pārslēgts miega režīmā.</translation>
 <translation id="8150722005171944719">Vietnē <ph name="URL" /> esošo failu nevar nolasīt. Iespējams, tas ir noņemts vai pārvietots vai piekļuvei nepieciešamas atļaujas.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Administratora politika nosaka, ka nav ieteicams lejupielādēt šo failu šeit: <ph name="DESTINATION_NAME" />.}zero{Administratora politika nosaka, ka nav ieteicams lejupielādēt šos failus šeit: <ph name="DESTINATION_NAME" />.}one{Administratora politika nosaka, ka nav ieteicams lejupielādēt šos failus šeit: <ph name="DESTINATION_NAME" />.}other{Administratora politika nosaka, ka nav ieteicams lejupielādēt šos failus šeit: <ph name="DESTINATION_NAME" />.}}</translation>
 <translation id="8157295877370077682">Pamest vietni</translation>
 <translation id="8163866351304776260">Četri caurumi kreisajā malā</translation>
 <translation id="8175796834047840627">Pārlūkprogrammā Chrome tiek piedāvāts saglabāt jūsu kartes Google kontā, jo esat pierakstījies. Varat mainīt šo darbību iestatījumos.</translation>
diff --git a/components/strings/components_strings_mk.xtb b/components/strings/components_strings_mk.xtb
index 789afe8..f1923cc 100644
--- a/components/strings/components_strings_mk.xtb
+++ b/components/strings/components_strings_mk.xtb
@@ -120,6 +120,7 @@
 <translation id="1266469291454105242">Отклучување уред</translation>
 <translation id="1269516672602708785">Набрзина создајте нов сајт во Google Sites</translation>
 <translation id="1270502636509132238">Начин на подигнување</translation>
+<translation id="1273592791152866347">Следењето на цената е исклучено</translation>
 <translation id="1281476433249504884">Фиока за складирање 1</translation>
 <translation id="1285320974508926690">Никогаш не преведувај ја оваа локација</translation>
 <translation id="1288548991597756084">Безбедно зачувајте ја картичката</translation>
@@ -248,6 +249,7 @@
 <translation id="155039086686388498">Engineering-D</translation>
 <translation id="1551884710160394169">Бесплатен и споделен софтвер</translation>
 <translation id="1553358976309200471">Ажурирај го Chrome</translation>
+<translation id="1554003749331233619">Отсега го следите производов. Страницава е зачувана во <ph name="LAST_BOOKMARKS_FOLDER" /></translation>
 <translation id="1555130319947370107">Сина</translation>
 <translation id="1559447966090556585">Да се добиваат известувања?</translation>
 <translation id="1559528461873125649">Нема таква датотека или директориум</translation>
@@ -561,6 +563,7 @@
 <translation id="2430968933669123598">Управувајте со сметката на Google, притиснете го копчето Enter за да управувате со податоците, приватноста и безбедноста на вашата сметка на Google</translation>
 <translation id="2436186046335138073">Ќе дозволите <ph name="HANDLER_HOSTNAME" /> да ги отвори сите врски на <ph name="PROTOCOL" />?</translation>
 <translation id="2438874542388153331">Четири дупки десно</translation>
+<translation id="2443309680964448806">Нешто тргна наопаку. Промената не се зачува.</translation>
 <translation id="2448295565072560657">Периферни уреди прикачени на уредов додека сте најавени</translation>
 <translation id="2450021089947420533">Патувања</translation>
 <translation id="2463739503403862330">Пополни</translation>
@@ -819,6 +822,7 @@
 <translation id="317878711435188021">да знае кога активно го користите уредов</translation>
 <translation id="3180358318770512945">Родителство</translation>
 <translation id="3187306450550410410">Флексибилни работни аранжмани</translation>
+<translation id="3190736958609431397">Отследи</translation>
 <translation id="319282854780294203">Друштвени мрежи</translation>
 <translation id="3194737229810486521"><ph name="URL" /> сака трајно да складира податоци на вашиот уред</translation>
 <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> на <ph name="SERVER_NAME" /></translation>
@@ -904,6 +908,7 @@
 <translation id="3387261909427947069">Начини на плаќање</translation>
 <translation id="3391030046425686457">Адреса на испорака</translation>
 <translation id="3391482648489541560">изменување датотеки</translation>
+<translation id="3392028486601120379">URL-шемата „<ph name="URL_PATTERN" />“ има одредено патека. Патеките не се поддржани за овој клуч, отстранете ја патеката и обидете се повторно. На пр., *://example.com/ =&gt; *://example.com",</translation>
 <translation id="3395827396354264108">Метод за подигнување</translation>
 <translation id="3399952811970034796">Адреса за испорака</translation>
 <translation id="3402261774528610252">Врската за вчитување на сајтов користеше TLS 1.0 или TLS 1.1, што се застарени и ќе бидат оневозможени во иднина. Штом ќе се оневозможат, корисниците нема да можат да го вчитуваат сајтов. Серверот треба да овозможи TLS 1.2 или понова верзија.</translation>
@@ -999,6 +1004,7 @@
 <translation id="3637662659967048211">Зачувајте во сметката на Google</translation>
 <translation id="3640766068866876100">Index-4x6-Ext</translation>
 <translation id="3642638418806704195">Апликација:</translation>
+<translation id="3647286794400715637">Секој запис во низата со URL-адреси мора да содржи помеѓу 1 и 2 URL-адреси.</translation>
 <translation id="3650584904733503804">Потврдувањето е успешно</translation>
 <translation id="3653033846669030038">Тематски паркови</translation>
 <translation id="3655241534245626312">Оди до поставките за дозвола</translation>
@@ -1037,6 +1043,7 @@
 <translation id="3738166223076830879">Администраторот управува со прелистувачот.</translation>
 <translation id="3740319564441798148">Автобуски и железнички линии на долги релации</translation>
 <translation id="3744111561329211289">Синхронизација во заднина</translation>
+<translation id="3744286742364977428">Датотеките што ги преземате се испраќаат до Google Cloud или трети страни за анализа. На пример, можеби ќе се скенираат за да се провери дали содржат чувствителни податоци или злонамерен софтвер и можеби ќе се складираат согласно правилата на компанијата.</translation>
 <translation id="3744899669254331632">Не може да го посетите <ph name="SITE" /> во моментов бидејќи веб-локацијата испрати измешани акредитиви кои Chromium не може да ги обработи. Грешките и нападите на мрежите се најчесто привремени, па веројатно оваа страница подоцна ќе работи.</translation>
 <translation id="3745099705178523657">Откако ќе потврдите, деталите за картичката од вашата сметка на Google ќе се споделат со сајтов.</translation>
 <translation id="3748148204939282805">Напаѓачите на <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> може да ве измамат да направите нешто опасно, како што е инсталирање софтвер или откривање лични информации (на пример, лозинки, телефонски броеви или кредитни картички). <ph name="BEGIN_LEARN_MORE_LINK" />Дознајте повеќе<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -1144,6 +1151,7 @@
 <translation id="4087296516249690906">Копче за создавање настан, притиснете го копчето Enter за да набрзина создадете нов настан во „Календар на Google“</translation>
 <translation id="4088981014127559358">Промена на страната 1 на сликата Y</translation>
 <translation id="4089152113577680600">Фиока 14</translation>
+<translation id="4097288585054919042">Исклучете ги известувањата</translation>
 <translation id="4098354747657067197">Пред вас е страница за измама</translation>
 <translation id="4099048595830172239">Правилото за администратор не препорачува споделување на екранот со <ph name="APPLICATION_TITLE" /> кога се видливи доверливи содржини:</translation>
 <translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />, притиснете го копчето Tab, а потоа Enter за да ги приспособите голимините и типовите на фонтовите во Chrome</translation>
@@ -1180,6 +1188,7 @@
 <translation id="4176463684765177261">Оневозможено</translation>
 <translation id="4176535426287761656">Имоти со поделена сопственост и за одмор</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
+<translation id="4186035307311647330">Отследи ја цената</translation>
 <translation id="4194250254487269611">Вашата картичка не може да се зачува во моментов</translation>
 <translation id="4196861286325780578">&amp;Повтори преместување</translation>
 <translation id="4202554117186904723">Петта ролна</translation>
@@ -1226,6 +1235,7 @@
 <translation id="4275830172053184480">Рестартирај го уредот</translation>
 <translation id="4277028893293644418">Ресетирај ја лозинката</translation>
 <translation id="4278390842282768270">Дозволено</translation>
+<translation id="4282346679996504092">Известувањата за овој производ се исклучени, а обележувачот е отстранет</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Картичкава е зачувана во вашата сметка на Google}one{Картичкиве се зачувани во вашата сметка на Google}other{Картичкиве се зачувани во вашата сметка на Google}}</translation>
 <translation id="4287885627794386150">Подобно за пробен период, но не е активно</translation>
 <translation id="4297502707443874121">Сликичка за страницата <ph name="THUMBNAIL_PAGE" /></translation>
@@ -1264,6 +1274,7 @@
 <translation id="4358059973562876591">Шаблоните што ги назначивте не може да се применат поради грешка со правилото на DnsOverHttpsMode.</translation>
 <translation id="4358461427845829800">Управувајте со начините на плаќање…</translation>
 <translation id="4359160567981085931">Тукушто ја внесовте својата лозинка на измамнички сајт. Chrome може да помогне. За да ја смените лозинката и да го известите Google дека е можно вашата сметка да е изложена на ризик, кликнете „Заштити ја сметката“.</translation>
+<translation id="4363222835916186793">Известувањата за овој производ се исклучени</translation>
 <translation id="4367563149485757821">Number-12 (плик)</translation>
 <translation id="437040971055499437">Се појавил безбедносен настан</translation>
 <translation id="4372516964750095882">Fanfold-Us</translation>
@@ -1416,6 +1427,7 @@
 <translation id="4792686369684665359">Испраќањето на податоците не е безбедно</translation>
 <translation id="4796594887379589189">ID на работен налог</translation>
 <translation id="4798078619018708837">Внесете ги рокот на важност и CVC за <ph name="CREDIT_CARD" /> за да ги ажурирате деталите за картичката. Откако ќе потврдите, деталите за картичката од вашата сметка на Google ќе се споделат со сајтов.</translation>
+<translation id="4798269756263412078">Добивајте известувања ако цената се намали на кој било сајт. Известувањата ќе се испраќаат на вашата е-пошта.</translation>
 <translation id="4800132727771399293">Проверете го датумот на истекување на КВК и обидете се повторно</translation>
 <translation id="4803924862070940586"><ph name="FORMATTED_TOTAL_AMOUNT" /> <ph name="CURRENCY_CODE" /></translation>
 <translation id="4806051791961048632">Користете TouchID</translation>
@@ -1659,6 +1671,7 @@
 <translation id="5396631636586785122">Шиење на работ десно</translation>
 <translation id="5398772614898833570">Рекламите се блокирани</translation>
 <translation id="5400836586163650660">Сива</translation>
+<translation id="540630185148148480">Вклучете известувања</translation>
 <translation id="540969355065856584">Серверот не може да докаже дека е <ph name="DOMAIN" />; неговиот безбедносен сертификат не е важечки во моментов. Тоа може да се должи на погрешна конфигурација или на напаѓач што го пресретнува поврзувањето.</translation>
 <translation id="5412040515238827314">Неважечки формат: се очекува список со шеми.</translation>
 <translation id="5412236728747081950">Сајтов ги добива вашите интереси од Chrome за да ви прикажува порелевантни реклами</translation>
@@ -1723,6 +1736,7 @@
 <translation id="5580958916614886209">Проверете го месецот на истекување и обидете се повторно</translation>
 <translation id="558420943003240152">Управувајте со лозинките и криптографските клучеви…</translation>
 <translation id="5586446728396275693">Нема зачувани адреси</translation>
+<translation id="5586831831248371458">Пребарајте <ph name="KEYWORD_SUFFIX" /></translation>
 <translation id="5587987780934666589">Корисник на платформа</translation>
 <translation id="5593349413089863479">Врската не е потполно безбедна</translation>
 <translation id="5595485650161345191">Измени адреса</translation>
@@ -1842,6 +1856,7 @@
 <translation id="5938153366081463283">Додајте виртуелна картичка</translation>
 <translation id="5938793338444039872">Troy</translation>
 <translation id="5946937721014915347">Се отвора <ph name="SITE_NAME" />…</translation>
+<translation id="5947508410139465809">Датотеките што ги прикачувате или приложувате се испраќаат до Google Cloud или трети страни за анализа. На пример, можеби ќе се скенираат за да се провери дали содржат чувствителни податоци или злонамерен софтвер и можеби ќе се складираат согласно правилата на компанијата.</translation>
 <translation id="5951495562196540101">Не може да се регистрирате со сметка на потрошувач (достапна е вклучена лиценца).</translation>
 <translation id="5953516610448771166">„Автоматски титлови“ не е достапна за овие аудиовизуелни содржини. За да добиете титлови, блокирајте <ph name="CONTENT_SETTINGS" /> за сајтов.</translation>
 <translation id="5955063559762970069">Хотели и сместувања</translation>
@@ -1930,6 +1945,7 @@
 <translation id="6177128806592000436">Врската со овој сајт не е безбедна</translation>
 <translation id="6180316780098470077">Обиди се повторно со интервалот</translation>
 <translation id="61877208875190028">Женска облека</translation>
+<translation id="6194209731893739467">Видете ги сите ваши следени производи тука</translation>
 <translation id="6195371403461054755">Геологија</translation>
 <translation id="6196640612572343990">Блокирај колачиња од трети лица</translation>
 <translation id="6203231073485539293">Проверете го поврзувањето на интернет</translation>
@@ -1965,6 +1981,7 @@
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6295618774959045776">CVC:</translation>
 <translation id="6300452962057769623">{0,plural, =0{Уредот ќе се рестартира сега}=1{Уредот ќе се рестартира за 1 секунда}one{Уредот ќе се рестартира за # секунда}other{Уредот ќе се рестартира за # секунди}}</translation>
+<translation id="6301104306974789820">Добивајте известувања за следењето на цената</translation>
 <translation id="6302269476990306341">Се запира „Помошникот на Google“ во Chrome</translation>
 <translation id="6305205051461490394"><ph name="URL" /> е недостапна.</translation>
 <translation id="6311165245110979290">Достапна е виртуелна картичка</translation>
@@ -2024,6 +2041,7 @@
 <translation id="6451458296329894277">Потврди повторно поднесување на формулар</translation>
 <translation id="6456955391422100996">Рекламата е отстранета.</translation>
 <translation id="6457206614190510200">Шиење на работ од превиткувањето</translation>
+<translation id="6457455098507772300">Известувањата за намалување на цената се појавуваат како скокачки известувања на вашиот компјутер</translation>
 <translation id="6458606150257356946">Сепак залепи</translation>
 <translation id="6464094930452079790">слики</translation>
 <translation id="6465306955648956876">Управувајте со лозинките…</translation>
@@ -2067,6 +2085,7 @@
 <translation id="6591833882275308647">Вашиот <ph name="DEVICE_TYPE" /> не е управуван</translation>
 <translation id="6592952801936330159">Копче „Управувај со поставките за сајтови“, притиснете Enter за да управувате со дозволите и податоците коишто се складираат на сајтовите во поставките за Chrome</translation>
 <translation id="6596325263575161958">Опции за шифрирање</translation>
+<translation id="6599642189720630047">Следени производи</translation>
 <translation id="6609880536175561541">Prc7 (плик)</translation>
 <translation id="6611723696964473273">Вести за економија</translation>
 <translation id="6612010098632894193">Онлајн видео</translation>
@@ -2080,6 +2099,7 @@
 <translation id="663260587451432563">JIS B4</translation>
 <translation id="6643016212128521049">Исчисти</translation>
 <translation id="6645291930348198241">да пристапува до колачиња и податоци за сајтот.</translation>
+<translation id="6645478838938543427">Известувањата за намалување на цената ќе се испраќаат на <ph name="EMAIL_ADDRESS" /></translation>
 <translation id="6646269444027925224">{COUNT,plural, =0{Ниту еден}=1{Од 1 сајт (нема да ве одјавиме од сметката на Google)}one{Од # сајт (нема да ве одјавиме од сметката на Google)}other{Од # сајтови (нема да ве одјавиме од сметката на Google)}}</translation>
 <translation id="6648459603387803038">Администраторот може далечински да го менува поставувањето на прелистувачот. Со активноста на уредов може да се управува и надвор од Chrome.</translation>
 <translation id="6648524591329069940">Фонт Serif</translation>
@@ -2273,6 +2293,7 @@
 <translation id="7182878459783632708">Не се поставени политики</translation>
 <translation id="7186367841673660872">Оваа страница е преведена од<ph name="ORIGINAL_LANGUAGE" />на<ph name="LANGUAGE_LANGUAGE" /></translation>
 <translation id="718872491229180389">Навивање</translation>
+<translation id="7192188280913829296">Атрибутот „vendor_id“ исто така мора да биде одреден.</translation>
 <translation id="7192203810768312527">Ќе ослободи <ph name="SIZE" />. Некои сајтови може да се вчитуваат побавно при вашата следна посета.</translation>
 <translation id="7193661028827781021">Референца</translation>
 <translation id="719464814642662924">Visa</translation>
diff --git a/components/strings/components_strings_mn.xtb b/components/strings/components_strings_mn.xtb
index 0ccd5a0f..c30ecc5 100644
--- a/components/strings/components_strings_mn.xtb
+++ b/components/strings/components_strings_mn.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Суурин өгөгдлийн хандалт</translation>
 <translation id="1594030484168838125">Сонгох</translation>
 <translation id="1596296697375291157">Онц сонирхолтой, гэмт хэргийн болон нууцлаг кино</translation>
+<translation id="1599199147673445968">Шинэ карт уу? <ph name="BEGIN_LINK" />Картын дэлгэрэнгүйг оруулна уу<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Chrome-д Dino Run тоглоомыг тоглох</translation>
 <translation id="161042844686301425">Шар хөх өнгө</translation>
 <translation id="1611101756749861742">Хоёр дахь хуйлмал</translation>
@@ -1007,6 +1008,7 @@
 <translation id="3664782872746246217">Түлхүүр үг:</translation>
 <translation id="3667704023705708645">Эрсдэлт хөрөнгө</translation>
 <translation id="3671540257457995106">Хэмжээг өөрчлөхийг зөвшөөрөх үү?</translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" />-д алдаа гарлаа: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Гурав дахь хуйлмал</translation>
 <translation id="3676592649209844519">Төхөөрөмжийн ID:</translation>
 <translation id="3677008721441257057">Та &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; руу очихыг хүссэн үү?</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index df6ff06..1a699d7 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -120,6 +120,7 @@
 <translation id="1266469291454105242">डिव्हाइस अनलॉक</translation>
 <translation id="1269516672602708785">Google Sites मध्ये नवीन साइट झटपट तयार करा</translation>
 <translation id="1270502636509132238">घेण्याची पद्धत</translation>
+<translation id="1273592791152866347">किमतीचा बंद ठेवणे बंद आहे</translation>
 <translation id="1281476433249504884">स्टॅकर १</translation>
 <translation id="1285320974508926690">या साइटचा कधीही भाषांतर करु नका</translation>
 <translation id="1288548991597756084">कार्ड सुरक्षितपणे सेव्ह करा</translation>
@@ -248,6 +249,7 @@
 <translation id="155039086686388498">Engineering-D</translation>
 <translation id="1551884710160394169">फ्रीवेअर आणि शेअरवेअर</translation>
 <translation id="1553358976309200471">Chrome अपडेट करा</translation>
+<translation id="1554003749331233619">तुम्ही आता हे उत्पादन ट्रॅक करत आहात. हे पेज <ph name="LAST_BOOKMARKS_FOLDER" /> मध्ये सेव्ह केले आहे</translation>
 <translation id="1555130319947370107">निळा</translation>
 <translation id="1559447966090556585">सूचना मिळवायच्या आहेत का?</translation>
 <translation id="1559528461873125649">अशी कोणतीही फाइल किंवा डिरेक्टरी नाही</translation>
@@ -265,6 +267,7 @@
 <translation id="1592005682883173041">स्थानिक डेटा ॲक्सेस</translation>
 <translation id="1594030484168838125">निवडा</translation>
 <translation id="1596296697375291157">रोमांचक, गुन्हेविषयक आणि गूढ चित्रपट</translation>
+<translation id="1599199147673445968">नवीन कार्ड हवे आहे? <ph name="BEGIN_LINK" />कार्ड तपशील एंटर करा<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Chrome मध्ये Dino Run गेम खेळा</translation>
 <translation id="161042844686301425">निळसर</translation>
 <translation id="1611101756749861742">दुसरा रोल</translation>
@@ -560,6 +563,7 @@
 <translation id="2430968933669123598">Google खाते व्यवस्थापित करा, तुमच्या Google खाते मध्ये तुमची माहिती, गोपनीयता आणि सुरक्षा व्यवस्थापित करण्यासाठी एंटर दाबा</translation>
 <translation id="2436186046335138073"><ph name="HANDLER_HOSTNAME" /> ला सर्व <ph name="PROTOCOL" /> लिंक उघडण्याची अनुमती द्यायची?</translation>
 <translation id="2438874542388153331">क्वाड पंच राइट</translation>
+<translation id="2443309680964448806">काहीतरी चूक झाली. तुम्ही केलेला बदल सेव्ह केला गेला नाही.</translation>
 <translation id="2448295565072560657">तुम्ही लॉग इन केलेले असताना या डिव्हाइसला अटॅच केलेली उपकरणे</translation>
 <translation id="2450021089947420533">प्रवास</translation>
 <translation id="2463739503403862330">भरून टाका</translation>
@@ -818,6 +822,7 @@
 <translation id="317878711435188021">तुम्ही हे डिव्हाइस ॲक्टिव्हपणे वापरता याविषयी जाणून घ्या</translation>
 <translation id="3180358318770512945">पालकत्व</translation>
 <translation id="3187306450550410410">कर्मचाऱ्याच्या सोयीनुसार काम करण्याच्या सुविधा</translation>
+<translation id="3190736958609431397">माग ठेवणे रद्द करा</translation>
 <translation id="319282854780294203">सोशल नेटवर्क</translation>
 <translation id="3194737229810486521"><ph name="URL" /> ला तुमच्या डिव्हाइसवर डेटा कायमचा स्टोअर करायचा आहे</translation>
 <translation id="3195213714973468956"><ph name="SERVER_NAME" /> वर <ph name="PRINTER_NAME" /></translation>
@@ -903,6 +908,7 @@
 <translation id="3387261909427947069">पेमेंट पद्धती</translation>
 <translation id="3391030046425686457">वितरण पत्ता</translation>
 <translation id="3391482648489541560">फाइलचे संपादन</translation>
+<translation id="3392028486601120379">URL पॅटर्न "<ph name="URL_PATTERN" />" मध्ये पाथ नमूद केलेला आहे. या कीसाठी पाथना सपोर्ट नाही, कृपया पाथ काढून टाका आणि पुन्हा प्रयत्न करा. उदा. *://example.com/ =&gt; *://example.com",</translation>
 <translation id="3395827396354264108">पिकअप पद्धत</translation>
 <translation id="3399952811970034796">वितरण पत्ता</translation>
 <translation id="3402261774528610252">कनेक्शनने ही साइट लोड करण्यासाठी कालबाह्य झालेले TLS 1.0 किंवा TLS 1.1 वापरले आहेत. ते भविष्यात बंद केले जातील. बंद केल्यानंतर, वापरकर्त्यांना ही साइट लोड करण्यापासून प्रतिबंधित केले जाईल. सर्व्हर TLS 1.2 किंवा त्यापुढील आवृत्तीवर सुरू करणे आवश्यक आहे.</translation>
@@ -997,6 +1003,7 @@
 <translation id="3637662659967048211">Google खाते मध्ये सेव्ह करा</translation>
 <translation id="3640766068866876100">Index-4x6-Ext</translation>
 <translation id="3642638418806704195">ॲप्लिकेशन:</translation>
+<translation id="3647286794400715637">प्रत्येक URLs स्ट्रिंग एंट्रीमध्ये एक ते दोन URLs असणे आवश्यक आहे.</translation>
 <translation id="3650584904733503804">प्रमाणीकरण यशस्वी</translation>
 <translation id="3653033846669030038">थीम पार्क</translation>
 <translation id="3655241534245626312">परवानगी सेटिंग्जवर जा</translation>
@@ -1005,6 +1012,7 @@
 <translation id="3664782872746246217">कीवर्ड:</translation>
 <translation id="3667704023705708645">व्हेंचर कॅपिटल</translation>
 <translation id="3671540257457995106">आकार बदलण्याची अनुमती द्यायची आहे का?</translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" /> येथे एरर: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">तिसरा रोल</translation>
 <translation id="3676592649209844519">डिव्हाइस आयडी:</translation>
 <translation id="3677008721441257057">तुम्हाला &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; म्हणायचे आहे का?</translation>
@@ -1034,6 +1042,7 @@
 <translation id="3738166223076830879">तुमचा ब्राउझर तुमच्या अ‍ॅडमिनिस्ट्रेटरद्वारे व्यवस्थापित केला जातो.</translation>
 <translation id="3740319564441798148">लांब पल्ल्याची बस आणि रेल्वे</translation>
 <translation id="3744111561329211289">पार्श्वभूमी सिंक</translation>
+<translation id="3744286742364977428">तुम्ही डाउनलोड केलेल्या फाइल विश्लेषणासाठी Google Cloud किंवा तृतीय पक्षांकडे पाठवल्या जातात. उदाहरणार्थ, त्या संवेदनशील डेटा किंवा मालवेअरसाठी स्कॅन केल्या जाऊ शकतात आणि कंपनीच्या धोरणांवर आधारित स्टोअर केल्या जाऊ शकतात.</translation>
 <translation id="3744899669254331632">Chromium प्रक्रिया करू शकत नसलेले सरमिसळ केलेले क्रेडेन्‍शियल वेबसाइटने पाठविल्‍याने तुम्ही आत्ता <ph name="SITE" /> ला भेट देऊ शकत नाही. नेटवर्क एरर आणि आक्रमण सहसा तात्पुरते आहेत त्यामुळे संभवत: हे पेज नंतर कार्य करेल.</translation>
 <translation id="3745099705178523657">तुम्ही निश्चित केल्यानंतर, तुमच्या Google खात्यामधील कार्ड तपशील या साइटसोबत शेअर केला जाईल.</translation>
 <translation id="3748148204939282805"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> वरील हल्लेखोर कदाचित तुम्हाला सॉफ्टवेअर इंस्टॉल करणे किंवा तुमची वैयक्तिक माहिती (उदाहरणार्थ, पासवर्ड, फोन नंबर किंवा क्रेडिट कार्डे) उघड करणे यासारख्या काही धोकादायक गोष्टी करण्यासाठी तुम्हाला फसवू शकतात. <ph name="BEGIN_LEARN_MORE_LINK" />आणखी जाणून घ्या<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -1141,6 +1150,7 @@
 <translation id="4087296516249690906">इव्‍हेंट तयार करा बटण, Google Calendar मध्ये नवीन इव्‍हेंट झटपट तयार करण्यासाठी एंटर दाबा</translation>
 <translation id="4088981014127559358">साइन १ इमेज Y शिफ्ट</translation>
 <translation id="4089152113577680600">ट्रे १४</translation>
+<translation id="4097288585054919042">सूचना बंद करा</translation>
 <translation id="4098354747657067197">भ्रामक साइट पुढे आहे</translation>
 <translation id="4099048595830172239">गोपनीय आशय दृश्यमान असताना, अ‍ॅडमिनिस्ट्रेटर धोरण हे तुमची स्क्रीन <ph name="APPLICATION_TITLE" /> सोबत शेअर करण्याची शिफारस करत नाही:</translation>
 <translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome मधील फॉंटचे आकार आणि टाइपफेस कस्टमाइझ करण्यासाठी, टॅब दाबून एंटर दाबा</translation>
@@ -1177,6 +1187,7 @@
 <translation id="4176463684765177261">अक्षम केले</translation>
 <translation id="4176535426287761656">टाइमशेअर आणि सुट्‍ट्यांसाठीच्या मालमत्ता</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
+<translation id="4186035307311647330">किमतीचा बंद ठेवणे बंद करा</translation>
 <translation id="4194250254487269611">तुमचे कार्ड आता सेव्ह केले जाऊ शकत नाही</translation>
 <translation id="4196861286325780578">&amp;हलवा पुन्हा करा</translation>
 <translation id="4202554117186904723">पाचवा रोल</translation>
@@ -1223,6 +1234,7 @@
 <translation id="4275830172053184480">तुमचा डिव्हाइस रीस्टार्ट करा</translation>
 <translation id="4277028893293644418">पासवर्ड रीसेट करा</translation>
 <translation id="4278390842282768270">अनुमत</translation>
+<translation id="4282346679996504092">या उत्पादनासाठी सूचना बंद केल्या आहेत आणि बुकमार्क काढून टाकला आहे</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{हे कार्ड तुमच्या Google खात्यात सेव्ह केले गेले}other{ही कार्डे तुमच्या Google खात्यात सेव्ह केली गेली}}</translation>
 <translation id="4287885627794386150">चाचणीसाठी पात्र आहे पण ॲक्टिव्ह नाही</translation>
 <translation id="4297502707443874121"><ph name="THUMBNAIL_PAGE" /> पेजची थंबनेल</translation>
@@ -1261,6 +1273,7 @@
 <translation id="4358059973562876591">DnsOverHttpsMode धोरणामधील एररमुळे तुम्ही नमूद केलेली टेम्पलेट कदाचित लागू केली जाऊ शकत नाहीत.</translation>
 <translation id="4358461427845829800">पेमेंट पद्धती व्यवस्थापित करा</translation>
 <translation id="4359160567981085931">तुम्ही आताच एका फसव्या साइटवर तुमचा पासवर्ड एंटर केला आहे. Chrome मदत करू शकते. तुमचा पासवर्ड बदलण्यासाठी आणि तुमच्या खात्याला धोका असल्याचे Google ला सूचित करण्यासाठी, खाते संरक्षित करा वर क्लिक करा.</translation>
+<translation id="4363222835916186793">या उत्पादनासाठी सूचना बंद केल्या आहेत</translation>
 <translation id="4367563149485757821">Number-12 (Envelope)</translation>
 <translation id="437040971055499437">सुरक्षितता इव्‍हेंट सुरू होतो</translation>
 <translation id="4372516964750095882">Fanfold-Us</translation>
@@ -1413,6 +1426,7 @@
 <translation id="4792686369684665359">तुम्‍ही सबमिट करणार आहात ती माहिती सुरक्षित नाही</translation>
 <translation id="4796594887379589189">जॉब खाते आयडी</translation>
 <translation id="4798078619018708837">तुमच्या कार्डाचा तपशील अपडेट करण्यासाठी <ph name="CREDIT_CARD" /> साठी कार्डची एक्स्पायरेशन तारीख आणि CVC टाका. तुम्ही निश्चित केल्यानंतर, तुमच्या Google खात्यामधील कार्डाचा तपशील या साइटसोबत शेअर केला जाईल.</translation>
+<translation id="4798269756263412078">कोणत्याही साइटवर किंमत कमी झाल्यास सूचना मिळवा. तुमच्या ईमेलवर सूचना पाठवल्या जातील.</translation>
 <translation id="4800132727771399293">तुमची कालबाह्यता तारीख आणि CVC तपासा आणि पुन्हा प्रयत्न करा</translation>
 <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation>
 <translation id="4806051791961048632">टच आयडी वापरा</translation>
@@ -1656,6 +1670,7 @@
 <translation id="5396631636586785122">एज स्टिच राइट</translation>
 <translation id="5398772614898833570">जाहिराती ब्लॉक केल्या</translation>
 <translation id="5400836586163650660">राखाडी</translation>
+<translation id="540630185148148480">सूचना सुरू करा</translation>
 <translation id="540969355065856584">हा सर्व्हर <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट यावेळी वैध नाही. हे कदाचित चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोर तुमचे कनेक्शन इंटरसेप्ट करत असल्‍यामुळे होऊ शकते.</translation>
 <translation id="5412040515238827314">फॉरमॅट चुकीचा आहे: सूचीचा पॅटर्न अपेक्षित आहे.</translation>
 <translation id="5412236728747081950">तुम्हाला आणखी उपयुक्त जाहिराती दाखवण्यासाठी ही साइट Chrome मधून तुमची स्वारस्ये मिळवते</translation>
@@ -1720,6 +1735,7 @@
 <translation id="5580958916614886209">तुमचा कालबाह्यता महिना तपासा आणि पुन्हा प्रयत्न करा</translation>
 <translation id="558420943003240152">पासवर्ड आणि पासकी व्यवस्थापित करा…</translation>
 <translation id="5586446728396275693">कोणतेही सेव्ह केलेले ॲड्रेस नाही</translation>
+<translation id="5586831831248371458"><ph name="KEYWORD_SUFFIX" /> शोधा</translation>
 <translation id="5587987780934666589">प्लॅटफॉर्म वापरकर्ता</translation>
 <translation id="5593349413089863479">कनेक्शन पूर्णपणे सुरक्षित नाही</translation>
 <translation id="5595485650161345191">पत्ता संपादित करा</translation>
@@ -1839,6 +1855,7 @@
 <translation id="5938153366081463283">व्हर्च्युअल कार्ड जोडा</translation>
 <translation id="5938793338444039872">ट्रॉय</translation>
 <translation id="5946937721014915347"><ph name="SITE_NAME" /> उघडत आहे…</translation>
+<translation id="5947508410139465809">तुम्ही अपलोड किंवा अटॅच केलेल्या फाइल विश्लेषणासाठी Google Cloud किंवा तृतीय पक्षांकडे पाठवल्या जातात. उदाहरणार्थ, त्या संवेदनशील डेटा किंवा मालवेअरसाठी स्कॅन केल्या जाऊ शकतात आणि कंपनीच्या धोरणांवर आधारित स्टोअर केल्या जाऊ शकतात.</translation>
 <translation id="5951495562196540101">उपभोक्ता खात्याने नोंदणी करू शकत नाही (पॅकेज केलेला परवाना उपलब्ध).</translation>
 <translation id="5953516610448771166">या मीडियासाठी लाइव्ह कॅप्शन उपलब्ध नाही. कॅप्शन मिळवण्यासाठी, या साइटकरिता <ph name="CONTENT_SETTINGS" /> ब्लॉक करा.</translation>
 <translation id="5955063559762970069">हॉटेल आणि निवासस्थाने</translation>
@@ -1928,6 +1945,7 @@
 <translation id="6177128806592000436">या साइटवरील तुमचे कनेक्शन सुरक्षित नाही</translation>
 <translation id="6180316780098470077">दोन प्रयत्नांमधील मध्यांतर</translation>
 <translation id="61877208875190028">महिलांचे कपडे</translation>
+<translation id="6194209731893739467">तुमची सर्व माग ठेवलेली उत्पादने येथे पहा</translation>
 <translation id="6195371403461054755">भूशास्त्र</translation>
 <translation id="6196640612572343990">तृतीय-पक्ष कुकीज ब्लॉक करा</translation>
 <translation id="6203231073485539293">तुमचे इंटरनेट कनेक्शन तपासा</translation>
@@ -1963,6 +1981,7 @@
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6295618774959045776">CVC:</translation>
 <translation id="6300452962057769623">{0,plural, =0{Your device will restart now}=1{तुमचे डिव्हाइस एका सेकंदामध्ये रीस्टार्ट होईल}other{तुमचे डिव्हाइस # सेकंदांमध्ये रीस्टार्ट होईल}}</translation>
+<translation id="6301104306974789820">किमतीचा माग ठेवणाऱ्या सूचना मिळवा</translation>
 <translation id="6302269476990306341">Chrome मधील Google असिस्टंट थांबत आहे</translation>
 <translation id="6305205051461490394"><ph name="URL" /> आवाक्याबाहेर आहे.</translation>
 <translation id="6311165245110979290">व्हर्च्युअल कार्ड उपलब्ध आहे</translation>
@@ -2022,6 +2041,7 @@
 <translation id="6451458296329894277">फॉर्म रीसबमिशनची पुष्टी करा</translation>
 <translation id="6456955391422100996">जाहिरात काढून टाकली आहे.</translation>
 <translation id="6457206614190510200">साडल स्टिच</translation>
+<translation id="6457455098507772300">किमतीमध्ये घट झाल्याच्या सूचना तुमच्या डेस्कटॉपवर पॉपअप सूचना म्हणून दाखवल्या जातात</translation>
 <translation id="6458606150257356946">तरीही पेस्ट करा</translation>
 <translation id="6464094930452079790">इमेज</translation>
 <translation id="6465306955648956876">पासवर्ड व्यवस्थापित करा...</translation>
@@ -2079,6 +2099,7 @@
 <translation id="663260587451432563">JIS B4</translation>
 <translation id="6643016212128521049">साफ करा</translation>
 <translation id="6645291930348198241">कुकी आणि साइट डेटा अ‍ॅक्सेस करा.</translation>
+<translation id="6645478838938543427">किमतीमध्ये घट झाल्याच्या सूचना <ph name="EMAIL_ADDRESS" /> वर पाठवल्या जातील</translation>
 <translation id="6646269444027925224">{COUNT,plural, =0{काहीही नाही}=1{एका साइटवरून (तुम्हाला तुमच्या Google खात्यातून साइन आउट केले जाणार नाही)}other{# साइटवरून (तुम्हाला तुमच्या Google खात्यातून साइन आउट केले जाणार नाही)}}</translation>
 <translation id="6648459603387803038">तुमचा अ‍ॅडमिनिस्ट्रेटर तुमच्या ब्राउझरचा सेटअप रिमोट पद्धतीने बदलू शकतो. या डिव्हाइसवरील अ‍ॅक्टिव्हिटी कदाचित Chrome च्या बाहेर व्यवस्थापित केलेली असू शकते.</translation>
 <translation id="6648524591329069940">Serif Font</translation>
@@ -2272,6 +2293,7 @@
 <translation id="7182878459783632708">कोणतीही धोरणे सेट नाहीत</translation>
 <translation id="7186367841673660872">हे पृष्ठ<ph name="ORIGINAL_LANGUAGE" />मधून<ph name="LANGUAGE_LANGUAGE" />मध्ये अनुवादित केले गेले आहे</translation>
 <translation id="718872491229180389">चीअरलीडिंग</translation>
+<translation id="7192188280913829296">ॲट्रिब्यूट "vendor_id" देखील नमूद करणे आवश्यक आहे.</translation>
 <translation id="7192203810768312527"><ph name="SIZE" /> जागा मोकळी करते. काही साइट तुमच्या पुढील भेटीच्या वेळी आणखी धीम्या गतीने लोड होऊ शकतात.</translation>
 <translation id="7193661028827781021">संदर्भ</translation>
 <translation id="719464814642662924">Visa</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 46fc6d5..9b59404 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -648,6 +648,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, tekan Tab kemudian Enter untuk Mengosongkan sejarah penyemakan imbas, kuki, cache dan pelbagai lagi dalam tetapan Chrome</translation>
 <translation id="2650446666397867134">Akses ke fail dinafikan</translation>
 <translation id="2653659639078652383">Serah</translation>
+<translation id="2657637947725373811">{0,plural, =1{Pindahkan fail sulit?}other{Pindahkan fail sulit?}}</translation>
 <translation id="2660779039299703961">Acara</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Tiada}=1{1 kata laluan (untuk <ph name="DOMAIN_LIST" />)}=2{2 kata laluan (untuk <ph name="DOMAIN_LIST" />)}other{# kata laluan (untuk <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Atas</translation>
@@ -794,6 +795,7 @@
 <translation id="3108943290502734357">Dulang Tengah</translation>
 <translation id="3109728660330352905">Anda tidak mempunyai kebenaran untuk melihat halaman ini.</translation>
 <translation id="3113284927548439113">Syif ketiga</translation>
+<translation id="3115363211799416195">{0,plural, =1{Muat turun fail sulit?}other{Muat turun fail sulit?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> menghendaki anda menyandarkan data anda dan mengembalikan <ph name="DEVICE_TYPE" /> ini.</translation>
 <translation id="3116158981186517402">Lamina</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -983,6 +985,7 @@
 <translation id="3615877443314183785">Masukkan tarikh tamat tempoh yang sah</translation>
 <translation id="36224234498066874">Kosongkan Data Semakan Imbas...</translation>
 <translation id="362276910939193118">Paparkan Sejarah Penuh</translation>
+<translation id="3628905806504633297">{0,plural, =1{Dasar pentadbir tidak mengesyorkan anda memindahkan fail ini ke <ph name="DESTINATION_NAME" />}other{Dasar pentadbir tidak mengesyorkan anda memindahkan fail ini ke <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">Jika apl telah disenaraikan sebagai atur cara yang dibenarkan untuk mengakses
       rangkaian, cuba alihkannya keluar daripada senarai dan tambahkannya  
       semula.</translation>
@@ -1342,6 +1345,7 @@
 <translation id="4607603470419975064">Butang lihat petua Chrome, tekan kekunci Enter untuk mengetahui tentang ciri Chrome</translation>
 <translation id="4607608436550361748">Lihat petua Chrome</translation>
 <translation id="4617273035598175554">Grafik &amp; perisian animasi</translation>
+<translation id="4622292761762557753">Pindahkan juga</translation>
 <translation id="4627675673814409125">Dasar ini tidak dapat ditetapkan pada tahap profil Chrome dan akan diabaikan.</translation>
 <translation id="4628948037717959914">Foto</translation>
 <translation id="4631649115723685955">Pulangan tunai dipautkan</translation>
@@ -1657,6 +1661,7 @@
 <translation id="540969355065856584">Pelayan ini tidak dapat membuktikan bahawa pelayan adalah <ph name="DOMAIN" />; sijil keselamatan pelayan tidak sah pada masa ini. Ini mungkin disebabkan oleh kesilapan konfigurasi atau penyerang memintas sambungan anda.</translation>
 <translation id="5412040515238827314">Format tidak sah: Menjangkakan senarai pola.</translation>
 <translation id="5412236728747081950">Laman ini mendapat minat anda daripada Chrome untuk memaparkan iklan yang lebih berkaitan kepada anda</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Petak 4</translation>
 <translation id="5421136146218899937">Kosongkan data semakan imbas...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> mahu menghantar pemberitahuan kepada anda</translation>
@@ -2589,6 +2594,7 @@
 <translation id="8004582292198964060">Penyemak Imbas</translation>
 <translation id="8009225694047762179">Urus Kata Laluan</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Kad ini dan alamat pengebilannya akan disimpan. Anda akan dapat menggunakan kad ini apabila anda log masuk ke <ph name="USER_EMAIL" />.}other{Kad ini dan alamat pengebilannya akan disimpan. Anda akan dapat menggunakan kad ini apabila anda log masuk ke <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Penyerang pada tapak ini mungkin menipu anda supaya melakukan sesuatu yang berbahaya seperti memasang perisian atau mendedahkan maklumat peribadi anda (contohnya, kata laluan, nombor telefon atau maklumat kad kredit).</translation>
 <translation id="8026334261755873520">Kosongkan data semakan imbas</translation>
 <translation id="8027077570865220386">Dulang 15</translation>
@@ -2640,6 +2646,7 @@
 <translation id="8148608574971654810">Versi PDF:</translation>
 <translation id="8149426793427495338">Komputer anda dalam mod tidur.</translation>
 <translation id="8150722005171944719">Fail di <ph name="URL" /> tidak boleh dibaca.  Fail mungkin telah dialih keluar, dipindahkan atau kebenaran fail mungkin menghalang akses.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Dasar pentadbir tidak mengesyorkan anda memuat turun fail ini ke <ph name="DESTINATION_NAME" />}other{Dasar pentadbir tidak mengesyorkan anda memuat turun fail ini ke <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Tinggalkan tapak</translation>
 <translation id="8163866351304776260">Empat tebukan kiri</translation>
 <translation id="8175796834047840627">Chrome menawarkan penyimpanan kad dalam Akaun Google anda kerana anda log masuk. Anda boleh menukar gelagat ini dalam tetapan.</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb
index 7b24b7d..b690de1 100644
--- a/components/strings/components_strings_ne.xtb
+++ b/components/strings/components_strings_ne.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">स्थानीय डेटा पहुँच</translation>
 <translation id="1594030484168838125">छनौट गर्नुहोस्</translation>
 <translation id="1596296697375291157">थ्रिलर, अपराध तथा रहस्यमयी कथा भएका चलचित्रहरू</translation>
+<translation id="1599199147673445968">नयाँ कार्ड हो? <ph name="BEGIN_LINK" />कार्डसम्बन्धी विवरण हाल्नुहोस्<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Chrome मा Dino Run गेम खेल्नुहोस्</translation>
 <translation id="161042844686301425">सायन</translation>
 <translation id="1611101756749861742">दोस्रो रोल</translation>
@@ -1003,6 +1004,7 @@
 <translation id="3664782872746246217">किवर्डहरू:</translation>
 <translation id="3667704023705708645">उद्यम पुँजी</translation>
 <translation id="3671540257457995106">आकार बदल्न दिने हो?</translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" /> मा त्रुटि भयो: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">तेस्रो रोल</translation>
 <translation id="3676592649209844519">यन्त्रको ID:</translation>
 <translation id="3677008721441257057">तपाईंले &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; भन्न खोज्नुभएको हो?</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index c40af59..1557966bb 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -2061,6 +2061,7 @@
 <translation id="6591833882275308647">Je <ph name="DEVICE_TYPE" /> wordt niet beheerd</translation>
 <translation id="6592952801936330159">Knop Site-instellingen beheren, druk op Enter om rechten en opgeslagen gegevens voor sites te beheren in de Chrome-instellingen</translation>
 <translation id="6596325263575161958">Opties voor encryptie</translation>
+<translation id="6599642189720630047">Gevolgde producten</translation>
 <translation id="6609880536175561541">Prc7 (envelop)</translation>
 <translation id="6611723696964473273">Economisch nieuws</translation>
 <translation id="6612010098632894193">Online video</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index 4a5f541..225bdf3 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Tilgang til lokale data</translation>
 <translation id="1594030484168838125">Velg</translation>
 <translation id="1596296697375291157">Thriller-, krim- og mysteriefilmer</translation>
+<translation id="1599199147673445968">Nytt kort? <ph name="BEGIN_LINK" />Oppgi kortopplysningene<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Spill Dino Run-spillet i Chrome</translation>
 <translation id="161042844686301425">Cyan</translation>
 <translation id="1611101756749861742">Andre rull</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Nøkkelord:</translation>
 <translation id="3667704023705708645">Risikokapital</translation>
 <translation id="3671540257457995106">Vil du tillate størrelsesendringer?</translation>
+<translation id="3672568546897166916">Feil i <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Tredje rull</translation>
 <translation id="3676592649209844519">Enhets-ID:</translation>
 <translation id="3677008721441257057">Mente du &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb
index a82d216f..012ac56 100644
--- a/components/strings/components_strings_or.xtb
+++ b/components/strings/components_strings_or.xtb
@@ -648,6 +648,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome ସେଟିଂସରେ ଆପଣଙ୍କ ବ୍ରାଉଜିଂ ଇତିହାସ, କୁକୀ, କ୍ୟାଶ୍ ଏବଂ ଆହୁରି ଅନେକ କିଛି ଖାଲି କରିବାକୁ Tab କରି Enter ଦବାନ୍ତୁ</translation>
 <translation id="2650446666397867134">ଫାଇଲ୍‌ଟିକୁ ଆକ୍‌ସେସ୍ ଦେବାକୁ ମନା କରି ଦିଆଯାଇଥିଲା</translation>
 <translation id="2653659639078652383">ଉପସ୍ଥାପନ</translation>
+<translation id="2657637947725373811">{0,plural, =1{ଗୋପନୀୟ ଫାଇଲ ଟ୍ରାନ୍ସଫର କରିବେ?}other{ଗୋପନୀୟ ଫାଇଲଗୁଡ଼ିକ ଟ୍ରାନ୍ସଫର କରିବେ?}}</translation>
 <translation id="2660779039299703961">ଇଭେଣ୍ଟ</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{କୌଣସିଟି ନୁହେଁ}=1{1ଟି ପାସ୍‌ୱାର୍ଡ (<ph name="DOMAIN_LIST" /> ପାଇଁ)}=2{2ଟି ପାସ୍‌ୱାର୍ଡ (<ph name="DOMAIN_LIST" /> ପାଇଁ)}other{#ଟି ପାସ୍‌ୱାର୍ଡ (<ph name="DOMAIN_LIST" /> ପାଇଁ)}}</translation>
 <translation id="2666092431469916601">ଶୀର୍ଷ</translation>
@@ -794,6 +795,7 @@
 <translation id="3108943290502734357">ମଧ୍ୟମ ଟ୍ରେ</translation>
 <translation id="3109728660330352905">ଏହି ପୃଷ୍ଠାକୁ ଦେଖିବା ପାଇଁ ଆପଣଙ୍କ ପାଖରେ ଅଧିକାର ନାହିଁ।</translation>
 <translation id="3113284927548439113">ତୃତୀୟ ସିଫ୍ଟ</translation>
+<translation id="3115363211799416195">{0,plural, =1{ଗୋପନୀୟ ଫାଇଲ ଡାଉନଲୋଡ କରିବେ?}other{ଗୋପନୀୟ ଫାଇଲଗୁଡ଼ିକ ଡାଉନଲୋଡ କରିବେ?}}</translation>
 <translation id="3115874930288085374">ଆପଣ ଆପଣଙ୍କ ଡାଟାର ବ୍ୟାକଅପ୍ ନେଇ ଏହି <ph name="DEVICE_TYPE" />କୁ ଫେରସ୍ତ କରନ୍ତୁ ବୋଲି <ph name="ENROLLMENT_DOMAIN" /> ଚାହେଁ।</translation>
 <translation id="3116158981186517402">ଲାମିନେଟ୍</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -981,6 +983,7 @@
 <translation id="3615877443314183785">ଗୋଟିଏ ବୈଧ ମିଆଦ ଶେଷ ହେଉଥିବା ତାରିଖ ଲେଖନ୍ତୁ</translation>
 <translation id="36224234498066874">ବ୍ରାଉଜିଂ ଡାଟା ଖାଲି କରନ୍ତୁ...</translation>
 <translation id="362276910939193118">ସମ୍ପୂର୍ଣ୍ଣ ଇତିବୃତ୍ତି ଦେଖାନ୍ତୁ</translation>
+<translation id="3628905806504633297">{0,plural, =1{<ph name="DESTINATION_NAME" />କୁ ଏହି ଫାଇଲ ଟ୍ରାନ୍ସଫର କରିବା ପାଇଁ ଆଡମିନିଷ୍ଟ୍ରେଟର ନୀତି ସୁପାରିଶ କରେ ନାହିଁ}other{<ph name="DESTINATION_NAME" />କୁ ଏହି ଫାଇଲଗୁଡ଼ିକ ଟ୍ରାନ୍ସଫର କରିବା ପାଇଁ ଆଡମିନିଷ୍ଟ୍ରେଟର ନୀତି ସୁପାରିଶ କରେ ନାହିଁ}}</translation>
 <translation id="3630155396527302611">ଯଦି ଏହାକୁ ନେଟ୍‍ୱାର୍କକୁ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ଅନୁମତି ଦିଆଯାଇଥିବା ଗୋଟିଏ ପ୍ରୋଗ୍ରାମ୍ ଭାବେ ପୂର୍ବରୁ ତାଲିକାଭୁକ୍ତ କରାଯାଇଥାଏ, ତେବେ ତାଲିକାରୁ ଏହାକୁ କାଢ଼ି, ପୂନର୍ବାର ଯୋଗ କରିବା ପାଇଁ ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="3630699740441428070">ଏହି ଡିଭାଇସର ଆଡମିନିଷ୍ଟ୍ରେଟରମାନେ ଆପଣଙ୍କ ନେଟୱାର୍କ ସଂଯୋଗ କନଫିଗର୍ କରିଛନ୍ତି, ଯାହା ଆପଣ ଭିଜିଟ୍ କରିଥିବା ୱେବସାଇଟଗୁଡ଼ିକ ସମେତ, ଆପଣଙ୍କ ନେଟୱାର୍କ ଟ୍ରାଫିକକୁ ଦେଖିବା ପାଇଁ ସେମାନଙ୍କୁ ଅନୁମତି ଦେଇପାରେ।</translation>
 <translation id="3631244953324577188">ବାୟୋମେଟ୍ରିକ୍ସ</translation>
@@ -1338,6 +1341,7 @@
 <translation id="4607603470419975064">"Chrome ଟିପ୍ସ ଦେଖନ୍ତୁ" ବଟନ୍, Chromeର ଫିଚରଗୁଡ଼ିକ ବିଷୟରେ ଜାଣିବା ପାଇଁ Enter ଦବାନ୍ତୁ</translation>
 <translation id="4607608436550361748">Chrome ଟିପ୍ସ ଦେଖନ୍ତୁ</translation>
 <translation id="4617273035598175554">ଗ୍ରାଫିକ୍ସ ଏବଂ ଆନିମେସନ ସଫ୍ଟୱେର</translation>
+<translation id="4622292761762557753">ଯେ କୌଣସି ମତେ ଟ୍ରାନ୍ସଫର କରନ୍ତୁ</translation>
 <translation id="4627675673814409125">ଏହି ନୀତିକୁ Chrome ପ୍ରୋଫାଇଲ ଲେଭେଲରେ ସେଟ କରାଯାଇପାରିବ ନାହିଁ ଏବଂ ଏହାକୁ ଅଣଦେଖା କରାଯିବ।</translation>
 <translation id="4628948037717959914">ଫଟୋ</translation>
 <translation id="4631649115723685955">କ୍ୟାସବ୍ୟାକ୍ ଲିଙ୍କ୍ କରାଯାଇଛି</translation>
@@ -1654,6 +1658,7 @@
 <translation id="540969355065856584">ଏହି ସର୍ଭର୍, ଏହା <ph name="DOMAIN" /> ବୋଲି ପ୍ରମାଣିତ କରିପାରିଲା ନାହିଁ; ଏହି ସମୟରେ ଏହାର ସୁରକ୍ଷା ସାର୍ଟିଫିକେଟ୍ ବୈଧ ନୁହେଁ। ଏହା ହୁଏତ ଏକ ଭୁଲ୍ କନଫିଗ୍‍‍ରେସନ୍ କିମ୍ବା ଜଣେ ଆକ୍ରମଣକାରୀ ଆପଣଙ୍କର ସଂଯୋଗକୁ ପ୍ରତିରୋଧ କରୁଥିବା କାରଣରୁ ହୋଇପାରେ।</translation>
 <translation id="5412040515238827314">ଅବୈଧ ଫର୍ମାଟ: ପାଟର୍ନଗୁଡ଼ିକର ଏକ ତାଲିକା ଆଶା କରାଯାଉଛି।</translation>
 <translation id="5412236728747081950">ଆପଣଙ୍କୁ ଅଧିକ ପ୍ରାସଙ୍ଗିକ ବିଜ୍ଞାପନ ଦେଖାଇବା ପାଇଁ ଏହି ସାଇଟ Chromeରୁ ଆପଣଙ୍କର ରୁଚିଗୁଡ଼ିକ ପାଇଥାଏ</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">ଷ୍ଟାକର୍ 4</translation>
 <translation id="5421136146218899937">ବ୍ରାଉଜିଂ ଡାଟା ଖାଲି କରନ୍ତୁ...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> ଆପଣଙ୍କୁ ବିଜ୍ଞପ୍ତି ପଠାଇବାକୁ ଚାହୁଁଛି</translation>
@@ -2585,6 +2590,7 @@
 <translation id="8004582292198964060">ବ୍ରାଉଜର</translation>
 <translation id="8009225694047762179">ପାସ୍‌ୱର୍ଡଗୁଡ଼ିକୁ ପରିଚାଳିତ କରନ୍ତୁ</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{ଏହି କାର୍ଡ ଏବଂ ଏହାର ବିଲିଂ ଠିକଣା ସେଭ୍‌ କରାଯିବ। <ph name="USER_EMAIL" />ରେ ସାଇନ୍‌ ଇନ୍‌ ରହିବା ଦ୍ୱାରା ଆପଣ ଏହାକୁ ବ୍ୟବହାର କରିବାକୁ ସକ୍ଷମ ହେବେ।}other{ଏହି କାର୍ଡଗୁଡ଼ିକ ଏବଂ ସେମାନଙ୍କର ବିଲିଂ ଠିକଣାଗୁଡ଼ିକ ସେଭ୍‌ କରାଯିବ। <ph name="USER_EMAIL" />ରେ ସାଇନ୍‌ ଇନ୍‌ ରହିବା ଦ୍ୱାରା ଆପଣ ସେଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିବାକୁ ସକ୍ଷମ ହେବେ।}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">ଏହି ସାଇଟ୍‍‍ରେ ଆକ୍ରମଣକାରୀ ଆପଣଙ୍କୁ କିଛି ବିପଜ୍ଜନକ କାର୍ଯ୍ୟ ଯେପରିକି, ସଫ୍ଟୱେର୍ ଇନ୍‌ଷ୍ଟଲେସନ୍ କିମ୍ବା ଆପଣଙ୍କର ବ୍ୟକ୍ତିଗତ ସୂଚନା (ଉଦାହରଣସ୍ୱରୂପ, ପାସ୍‌ୱର୍ଡ, ଫୋନ୍ ନମ୍ବର କିମ୍ବା କ୍ରେଡିଟ୍ କାର୍ଡ) ପ୍ରକାଶ କରିବା ପାଇଁ ପ୍ରତାରିତ କରିପାରନ୍ତି।</translation>
 <translation id="8026334261755873520">ବ୍ରାଉଜିଂ ଡାଟା ଖାଲି କରନ୍ତୁ</translation>
 <translation id="8027077570865220386">ଟ୍ରେ 15</translation>
@@ -2636,6 +2642,7 @@
 <translation id="8148608574971654810">PDF ସଂସ୍କରଣ:</translation>
 <translation id="8149426793427495338">ଆପଣଙ୍କର କମ୍ପୁଟର୍‌ ନିଷ୍କ୍ରିୟ ହୋ‍ଇଯାଇଛି।</translation>
 <translation id="8150722005171944719"><ph name="URL" />ରେ ଫାଇଲ୍‍ଟି ପଠନଯୋଗ୍ୟ ନୁହେଁ।  ହୁଏତ ଏହା କାଢ଼ି ଦିଆଯାଇଛି, ଘୁଞ୍ଚାଯାଇଛି କିମ୍ବା ଫାଇଲ୍ ଅନୁମତିର ଆକ୍ସେସ୍‍କୁ ପ୍ରତିବନ୍ଧିତ କରାଯାଇଛି।</translation>
+<translation id="8153865548451212769">{0,plural, =1{<ph name="DESTINATION_NAME" />କୁ ଏହି ଫାଇଲ ଡାଉନଲୋଡ କରିବା ପାଇଁ ଆଡମିନିଷ୍ଟ୍ରେଟର ନୀତି ସୁପାରିଶ କରେ ନାହିଁ}other{<ph name="DESTINATION_NAME" />କୁ ଏହି ଫାଇଲଗୁଡ଼ିକ ଡାଉନଲୋଡ କରିବା ପାଇଁ ଆଡମିନିଷ୍ଟ୍ରେଟର ନୀତି ସୁପାରିଶ କରେ ନାହିଁ}}</translation>
 <translation id="8157295877370077682">ସାଇଟ୍‍ରୁ ବାହାରି ଆସନ୍ତୁ</translation>
 <translation id="8163866351304776260">ବାମ ପଟରେ ଚାରୋଟି ପଞ୍ଚ୍</translation>
 <translation id="8175796834047840627">ଆପଣଙ୍କର Google ଆକାଉଣ୍ଟରେ ଆପଣଙ୍କ କାର୍ଡଗୁଡ଼ିକ ସେଭ୍‍ କରିବାକୁ Chrome ଅଫର୍‍ ଦେଉଛି କାରଣ ଆପଣ ସାଇନ୍‍ ଇନ୍‍ କରିଛନ୍ତି। ଆପଣ ସେଟିଂସ୍‌ରେ ଏହି ଆଚରଣର ପରିବର୍ତ୍ତନ କରିପାରିବେ।</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb
index 8ea7ff8..87fead6 100644
--- a/components/strings/components_strings_pa.xtb
+++ b/components/strings/components_strings_pa.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">ਸਥਾਨਕ  ਡਾਟਾ  ਪਹੁੰਚ</translation>
 <translation id="1594030484168838125">ਚੁਣੋ</translation>
 <translation id="1596296697375291157">ਰੋਮਾਂਚਕ, ਅਪਰਾਧਕ ਅਤੇ ਰਹੱਸਮਈ ਫ਼ਿਲਮਾਂ</translation>
+<translation id="1599199147673445968">ਕੀ ਨਵਾਂ ਕਾਰਡ ਹੈ? <ph name="BEGIN_LINK" />ਕਾਰਡ ਦੇ ਵੇਰਵੇ ਦਾਖਲ ਕਰੋ<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Chrome ਵਿੱਚ Dino Run ਗੇਮ ਖੇਡੋ</translation>
 <translation id="161042844686301425">Cyan</translation>
 <translation id="1611101756749861742">ਦੂਜਾ ਰੋਲ</translation>
@@ -1003,6 +1004,7 @@
 <translation id="3664782872746246217">ਪ੍ਰਮੁੱਖ-ਸ਼ਬਦ:</translation>
 <translation id="3667704023705708645">ਵੈਂਚਰ ਕੈਪੀਟਲ</translation>
 <translation id="3671540257457995106">ਕੀ ਆਕਾਰ ਬਦਲਣ ਦੀ ਇਜਾਜ਼ਤ ਦੇਣੀ ਹੈ?</translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" /> ਵਿੱਚ ਗੜਬੜ: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">ਤੀਜਾ ਰੋਲ</translation>
 <translation id="3676592649209844519">ਡੀਵਾਈਸ ਆਈ.ਡੀ.:</translation>
 <translation id="3677008721441257057">ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; ਤੋਂ ਹੈ?</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index 2bf15d0a..568912e 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Lokalny dostęp do danych</translation>
 <translation id="1594030484168838125">Wybierz</translation>
 <translation id="1596296697375291157">Thrillery i filmy kryminalne</translation>
+<translation id="1599199147673445968">Nowa karta? <ph name="BEGIN_LINK" />Podaj dane karty<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Zagraj w grę Dino Run w Chrome</translation>
 <translation id="161042844686301425">Cyjan</translation>
 <translation id="1611101756749861742">Rolka 2</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Słowa kluczowe:</translation>
 <translation id="3667704023705708645">Kapitał podwyższonego ryzyka</translation>
 <translation id="3671540257457995106">Zezwolić na zmianę rozmiaru?</translation>
+<translation id="3672568546897166916">Błąd w ścieżce <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Rolka 3</translation>
 <translation id="3676592649209844519">Identyfikator urządzenia:</translation>
 <translation id="3677008721441257057">Czy chodziło Ci o &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index 43a0904..d3195101 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Acesso a dados locais</translation>
 <translation id="1594030484168838125">Escolher</translation>
 <translation id="1596296697375291157">Filmes de suspense, crime e mistério</translation>
+<translation id="1599199147673445968">Novo cartão? <ph name="BEGIN_LINK" />Insira os detalhes dele<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Iniciar o jogo do Dinossauro do Chrome</translation>
 <translation id="161042844686301425">Ciano</translation>
 <translation id="1611101756749861742">Segundo rolo</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Palavras-chave:</translation>
 <translation id="3667704023705708645">Capital de risco</translation>
 <translation id="3671540257457995106">Permitir o redimensionamento?</translation>
+<translation id="3672568546897166916">Erro em <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Terceiro rolo</translation>
 <translation id="3676592649209844519">Código do dispositivo:</translation>
 <translation id="3677008721441257057">Você quis dizer &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index b061b8b..965dbbc 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -120,6 +120,7 @@
 <translation id="1266469291454105242">Desbloqueio do dispositivo</translation>
 <translation id="1269516672602708785">Crie rapidamente um novo site no Google Sites</translation>
 <translation id="1270502636509132238">Método de recolha</translation>
+<translation id="1273592791152866347">Acompanhamento de preços desativado</translation>
 <translation id="1281476433249504884">Empilhador 1</translation>
 <translation id="1285320974508926690">Nunca traduzir este site</translation>
 <translation id="1288548991597756084">Guarde o cartão de forma segura</translation>
@@ -248,6 +249,7 @@
 <translation id="155039086686388498">Engineering-D</translation>
 <translation id="1551884710160394169">Programas sem custo financeiro e shareware</translation>
 <translation id="1553358976309200471">Atualizar o Chrome</translation>
+<translation id="1554003749331233619">Está agora a acompanhar este produto. Esta página foi guardada em <ph name="LAST_BOOKMARKS_FOLDER" /></translation>
 <translation id="1555130319947370107">Azul</translation>
 <translation id="1559447966090556585">Pretende receber notificações?</translation>
 <translation id="1559528461873125649">Esse ficheiro ou diretório não existe</translation>
@@ -561,6 +563,7 @@
 <translation id="2430968933669123598">Faça a gestão da Conta Google, prima Enter para gerir as suas informações, privacidade e segurança na Conta Google</translation>
 <translation id="2436186046335138073">Permitir que <ph name="HANDLER_HOSTNAME" /> abra todos os links <ph name="PROTOCOL" />?</translation>
 <translation id="2438874542388153331">Perfuração quádrupla à direita</translation>
+<translation id="2443309680964448806">Algo correu mal. A alteração não foi guardada.</translation>
 <translation id="2448295565072560657">Periféricos ligados a este dispositivo quanto tem sessão iniciada</translation>
 <translation id="2450021089947420533">Percursos</translation>
 <translation id="2463739503403862330">Preencher</translation>
@@ -819,6 +822,7 @@
 <translation id="317878711435188021">Saber quando está a utilizar ativamente este dispositivo.</translation>
 <translation id="3180358318770512945">Parentalidade</translation>
 <translation id="3187306450550410410">Condições de trabalho flexíveis</translation>
+<translation id="3190736958609431397">Desativar monitorização</translation>
 <translation id="319282854780294203">Redes sociais</translation>
 <translation id="3194737229810486521"><ph name="URL" /> pretende armazenar permanentemente dados no seu dispositivo.</translation>
 <translation id="3195213714973468956"><ph name="PRINTER_NAME" /> no servidor <ph name="SERVER_NAME" /></translation>
@@ -904,6 +908,7 @@
 <translation id="3387261909427947069">Métodos de pagamento</translation>
 <translation id="3391030046425686457">Endereço de entrega</translation>
 <translation id="3391482648489541560">edição de ficheiros</translation>
+<translation id="3392028486601120379">O padrão do URL "<ph name="URL_PATTERN" />" tem um caminho especificado. Os caminhos não são suportados para esta chave. Remova o caminho e tente novamente. Por exemplo, *://example.com/ =&gt; *://example.com",</translation>
 <translation id="3395827396354264108">Método de recolha</translation>
 <translation id="3399952811970034796">Endereço de entrega</translation>
 <translation id="3402261774528610252">A ligação utilizada para carregar este site utilizou as versões TLS 1.0 ou TLS 1.1, que foram descontinuadas e serão desativadas no futuro. Após a desativação, os utilizadores serão impedidos de carregar este site. O servidor deverá ativar a versão TLS 1.2 ou posterior.</translation>
@@ -999,6 +1004,7 @@
 <translation id="3637662659967048211">Guardar na Conta Google</translation>
 <translation id="3640766068866876100">Index-4x6-Ext</translation>
 <translation id="3642638418806704195">Aplicação:</translation>
+<translation id="3647286794400715637">Cada entrada de string de URLs tem de conter entre 1 e 2 URLs.</translation>
 <translation id="3650584904733503804">Validação com êxito</translation>
 <translation id="3653033846669030038">Parques temáticos</translation>
 <translation id="3655241534245626312">Aceder às definições de autorização</translation>
@@ -1037,6 +1043,7 @@
 <translation id="3738166223076830879">O seu navegador é gerido pelo seu administrador.</translation>
 <translation id="3740319564441798148">Transportes terrestres de longo curso</translation>
 <translation id="3744111561329211289">Sincronização em segundo plano</translation>
+<translation id="3744286742364977428">Os ficheiros que transfere são enviados para o Google Cloud ou para terceiros para análise. Por exemplo, podem ser analisados quanto a dados confidenciais ou software malicioso e podem ser armazenados com base nas políticas da empresa.</translation>
 <translation id="3744899669254331632">Não pode visitar <ph name="SITE" /> neste momento, porque o Website enviou credenciais baralhadas que o Chromium não consegue processar. Os erros de rede e os ataques são geralmente temporários, pelo que esta página deverá funcionar mais tarde.</translation>
 <translation id="3745099705178523657">Depois de confirmar, os detalhes do cartão da sua Conta Google são partilhados com este site.</translation>
 <translation id="3748148204939282805">Os atacantes em <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> podem levá-lo a tomar medidas perigosas, como instalar software ou revelar as suas informações pessoais (por exemplo, palavras-passe, números de telefone ou cartões de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation>
@@ -1144,6 +1151,7 @@
 <translation id="4087296516249690906">Botão Criar evento, prima Enter para criar rapidamente um novo evento no Calendário Google</translation>
 <translation id="4088981014127559358">Turno Y da imagem 1 lateral</translation>
 <translation id="4089152113577680600">Tabuleiro 14</translation>
+<translation id="4097288585054919042">Desativar alertas</translation>
 <translation id="4098354747657067197">O site seguinte é fraudulento</translation>
 <translation id="4099048595830172239">A política do administrador não recomenda a partilha do seu ecrã com a app <ph name="APPLICATION_TITLE" /> quando está visível conteúdo confidencial:</translation>
 <translation id="4099391883283080991"><ph name="CUSTOMIZE_CHROME_FONTS_FOCUSED_FRIENDLY_MATCH_TEXT" />, Prima Tab e, em seguida, Enter para personalizar os tipos de letra e os respetivos tamanhos no Chrome</translation>
@@ -1180,6 +1188,7 @@
 <translation id="4176463684765177261">Desativado</translation>
 <translation id="4176535426287761656">Timeshares e propriedades de férias</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
+<translation id="4186035307311647330">Desativar acompanhamento de preços</translation>
 <translation id="4194250254487269611">Não é possível guardar o seu cartão neste momento.</translation>
 <translation id="4196861286325780578">&amp;Refazer movimentação</translation>
 <translation id="4202554117186904723">Quinto rolo</translation>
@@ -1226,6 +1235,7 @@
 <translation id="4275830172053184480">Reiniciar o dispositivo</translation>
 <translation id="4277028893293644418">Repor palavra-passe</translation>
 <translation id="4278390842282768270">Permitido</translation>
+<translation id="4282346679996504092">Os alertas para este produto foram desativados e o marcador foi removido</translation>
 <translation id="428639260510061158">{NUM_CARDS,plural, =1{Este cartão foi guardado na sua Conta Google.}other{Estes cartões foram guardados na sua Conta Google.}}</translation>
 <translation id="4287885627794386150">Elegível para avaliação, mas não ativa</translation>
 <translation id="4297502707443874121">Miniatura da página <ph name="THUMBNAIL_PAGE" /></translation>
@@ -1264,6 +1274,7 @@
 <translation id="4358059973562876591">Os modelos que especificou podem não ser aplicados devido a um erro com a política DnsOverHttpsMode.</translation>
 <translation id="4358461427845829800">Gerir métodos de pagamento…</translation>
 <translation id="4359160567981085931">Acabou de introduzir a sua palavra-passe num site fraudulento. O Chrome pode ajudar. Para alterar a sua palavra-passe e notificar a Google de que a sua conta pode estar em risco, clique em Proteger conta.</translation>
+<translation id="4363222835916186793">Os alertas para este produto foram desativados</translation>
 <translation id="4367563149485757821">Number-12 (Envelope)</translation>
 <translation id="437040971055499437">Ocorre um evento de segurança</translation>
 <translation id="4372516964750095882">Fanfold-Us</translation>
@@ -1416,6 +1427,7 @@
 <translation id="4792686369684665359">As informações que está prestes a enviar não são seguras</translation>
 <translation id="4796594887379589189">ID da conta da tarefa</translation>
 <translation id="4798078619018708837">Introduza a data de validade e o Código de Segurança/CVC de <ph name="CREDIT_CARD" /> para atualizar os detalhes do cartão. Depois de confirmar, os detalhes do cartão da sua Conta Google são partilhados com este site.</translation>
+<translation id="4798269756263412078">Obtenha alertas se o preço descer em qualquer site. Vão ser enviados alertas para o seu email.</translation>
 <translation id="4800132727771399293">Verifique a data de validade e o Código de Segurança/CVC e tente novamente</translation>
 <translation id="4803924862070940586"><ph name="CURRENCY_CODE" /> <ph name="FORMATTED_TOTAL_AMOUNT" /></translation>
 <translation id="4806051791961048632">Usar Touch ID</translation>
@@ -1659,6 +1671,7 @@
 <translation id="5396631636586785122">Coser extremidade direita</translation>
 <translation id="5398772614898833570">Anúncios bloqueados</translation>
 <translation id="5400836586163650660">Cinzento</translation>
+<translation id="540630185148148480">Ativar alertas</translation>
 <translation id="540969355065856584">Este servidor não conseguiu provar que é <ph name="DOMAIN" />; de momento, o respetivo certificado de segurança não é válido. Isto pode ser provocado por uma configuração incorreta ou por um atacante que esteja a intercetar a sua ligação.</translation>
 <translation id="5412040515238827314">Formato inválido: esperava-se uma lista de padrões.</translation>
 <translation id="5412236728747081950">Este site obtém os seus interesses do Chrome para lhe mostrar anúncios mais relevantes</translation>
@@ -1723,6 +1736,7 @@
 <translation id="5580958916614886209">Verifique o mês de validade e tente novamente</translation>
 <translation id="558420943003240152">Gerir palavras-passe e chaves de acesso…</translation>
 <translation id="5586446728396275693">Nenhum endereço guardado</translation>
+<translation id="5586831831248371458">Pesquisar <ph name="KEYWORD_SUFFIX" /></translation>
 <translation id="5587987780934666589">Utilizador da plataforma</translation>
 <translation id="5593349413089863479">A ligação não é totalmente segura</translation>
 <translation id="5595485650161345191">Editar morada</translation>
@@ -1842,6 +1856,7 @@
 <translation id="5938153366081463283">Adicione um cartão virtual</translation>
 <translation id="5938793338444039872">Troy</translation>
 <translation id="5946937721014915347">A abrir <ph name="SITE_NAME" />…</translation>
+<translation id="5947508410139465809">Os ficheiros que carrega ou anexa são enviados para o Google Cloud ou para terceiros para análise. Por exemplo, podem ser analisados quanto a dados confidenciais ou software malicioso e podem ser armazenados com base nas políticas da empresa.</translation>
 <translation id="5951495562196540101">Não é possível inscrever-se com conta de consumidor (licença incluída disponível).</translation>
 <translation id="5953516610448771166">As Legendas instantâneas não estão disponíveis para este conteúdo multimédia. Para obter legendas, bloqueie <ph name="CONTENT_SETTINGS" /> para este site.</translation>
 <translation id="5955063559762970069">Hotéis e alojamentos</translation>
@@ -1930,6 +1945,7 @@
 <translation id="6177128806592000436">A sua ligação a este site não é segura</translation>
 <translation id="6180316780098470077">Intervalo entre tentativas</translation>
 <translation id="61877208875190028">Vestuário para senhora</translation>
+<translation id="6194209731893739467">Veja todos os produtos monitorizados aqui</translation>
 <translation id="6195371403461054755">Geologia</translation>
 <translation id="6196640612572343990">Bloquear cookies de terceiros</translation>
 <translation id="6203231073485539293">Verificar a ligação à Internet</translation>
@@ -1965,6 +1981,7 @@
 <translation id="6293309776179964942">JIS B5</translation>
 <translation id="6295618774959045776">Código de segurança:</translation>
 <translation id="6300452962057769623">{0,plural, =0{O seu dispositivo será reiniciado agora}=1{O seu dispositivo será reiniciado dentro de 1 segundo}other{O seu dispositivo será reiniciado dentro de # segundos}}</translation>
+<translation id="6301104306974789820">Receba notificações de monitorização de preços</translation>
 <translation id="6302269476990306341">Paragem do Assistente Google no Chrome</translation>
 <translation id="6305205051461490394"><ph name="URL" /> está inacessível.</translation>
 <translation id="6311165245110979290">Cartão virtual disponível</translation>
@@ -2024,6 +2041,7 @@
 <translation id="6451458296329894277">Confirmar nova submissão de formulário</translation>
 <translation id="6456955391422100996">Anúncio removido.</translation>
 <translation id="6457206614190510200">Agrafar ao meio</translation>
+<translation id="6457455098507772300">Os alertas de descida do preço aparecem como notificações de pop-up no ambiente de trabalho</translation>
 <translation id="6458606150257356946">Colar mesmo assim</translation>
 <translation id="6464094930452079790">imagens</translation>
 <translation id="6465306955648956876">Gerir palavras-passe…</translation>
@@ -2081,6 +2099,7 @@
 <translation id="663260587451432563">JIS B4</translation>
 <translation id="6643016212128521049">Limpar</translation>
 <translation id="6645291930348198241">Aceder aos cookies e dados de sites.</translation>
+<translation id="6645478838938543427">Os alertas de descida do preço vão ser enviados para <ph name="EMAIL_ADDRESS" /></translation>
 <translation id="6646269444027925224">{COUNT,plural, =0{Nenhum}=1{De 1 site (a sessão na sua Conta Google não é terminada).}other{De # sites (a sessão na sua Conta Google não é terminada).}}</translation>
 <translation id="6648459603387803038">O administrador pode alterar a configuração do navegador remotamente. A atividade neste dispositivo também pode ser gerida fora do Chrome.</translation>
 <translation id="6648524591329069940">Tipo de letra Serif</translation>
@@ -2274,6 +2293,7 @@
 <translation id="7182878459783632708">Não estão definidas políticas</translation>
 <translation id="7186367841673660872">Esta página foi traduzida de<ph name="ORIGINAL_LANGUAGE" />para<ph name="LANGUAGE_LANGUAGE" /></translation>
 <translation id="718872491229180389">Claques</translation>
+<translation id="7192188280913829296">O atributo "vendor_id" também tem de ser especificado.</translation>
 <translation id="7192203810768312527">Liberta <ph name="SIZE" />. É possível que alguns sites sejam carregados mais lentamente na sua próxima visita.</translation>
 <translation id="7193661028827781021">Referência</translation>
 <translation id="719464814642662924">Visa</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index 5f238e2..dcffa8ce 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Доступ к данным на устройстве</translation>
 <translation id="1594030484168838125">Выбрать</translation>
 <translation id="1596296697375291157">Триллеры, криминальные и детективные фильмы</translation>
+<translation id="1599199147673445968">Новая карта? <ph name="BEGIN_LINK" />Введите реквизиты<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Играть в игру Dino Run в Chrome</translation>
 <translation id="161042844686301425">Голубой</translation>
 <translation id="1611101756749861742">Второй рулон</translation>
@@ -648,6 +649,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />. Нажмите Tab и затем Ввод, чтобы открыть настройки Chrome и удалить историю браузера, файлы cookie, кеш и прочее.</translation>
 <translation id="2650446666397867134">Доступ к файлу запрещен</translation>
 <translation id="2653659639078652383">Отправить</translation>
+<translation id="2657637947725373811">{0,plural, =1{Передать конфиденциальный файл?}one{Передать конфиденциальные файлы?}few{Передать конфиденциальные файлы?}many{Передать конфиденциальные файлы?}other{Передать конфиденциальные файлы?}}</translation>
 <translation id="2660779039299703961">Событие</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Нет}=1{1 пароль (для <ph name="DOMAIN_LIST" />)}=2{2 пароля (для <ph name="DOMAIN_LIST" />)}one{# пароль (для <ph name="DOMAIN_LIST" />)}few{# пароля (для <ph name="DOMAIN_LIST" />)}many{# паролей (для <ph name="DOMAIN_LIST" />)}other{# пароля (для <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">Наверх</translation>
@@ -794,6 +796,7 @@
 <translation id="3108943290502734357">Средний лоток</translation>
 <translation id="3109728660330352905">У вас нет прав для просмотра этой страницы.</translation>
 <translation id="3113284927548439113">До третьей смены</translation>
+<translation id="3115363211799416195">{0,plural, =1{Скачать конфиденциальный файл?}one{Скачать конфиденциальные файлы?}few{Скачать конфиденциальные файлы?}many{Скачать конфиденциальные файлы?}other{Скачать конфиденциальные файлы?}}</translation>
 <translation id="3115874930288085374">По правилам домена <ph name="ENROLLMENT_DOMAIN" /> вам нужно выполнить резервное копирование данных и вернуть <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">Ламинация</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -982,6 +985,7 @@
 <translation id="3615877443314183785">Укажите правильный срок действия.</translation>
 <translation id="36224234498066874">Очистить историю...</translation>
 <translation id="362276910939193118">Показать всю историю</translation>
+<translation id="3628905806504633297">{0,plural, =1{Администратор не рекомендует передавать этот файл в место назначения "<ph name="DESTINATION_NAME" />".}one{Администратор не рекомендует передавать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}few{Администратор не рекомендует передавать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}many{Администратор не рекомендует передавать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}other{Администратор не рекомендует передавать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}}</translation>
 <translation id="3630155396527302611">Если программа входит в список тех, которым разрешен доступ к сети,
       удалите ее из списка и добавьте туда снова.</translation>
 <translation id="3630699740441428070">Администраторы этого устройства настроили подключение к Интернету так, чтобы видеть ваш сетевой трафик, в том числе сайты, которые вы посещаете.</translation>
@@ -1002,6 +1006,7 @@
 <translation id="3664782872746246217">Ключевые слова:</translation>
 <translation id="3667704023705708645">Венчурный капитал</translation>
 <translation id="3671540257457995106">Разрешить изменение размера?</translation>
+<translation id="3672568546897166916">Ошибка: <ph name="ERROR_PATH" />. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Третий рулон</translation>
 <translation id="3676592649209844519">Идентификатор устройства:</translation>
 <translation id="3677008721441257057">Возможно, вы хотели открыть сайт &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
@@ -1340,6 +1345,7 @@
 <translation id="4607603470419975064">Кнопка "Посмотреть советы по работе с Chrome". Чтобы узнать больше о функциях Chrome, нажмите Ввод.</translation>
 <translation id="4607608436550361748">Посмотреть советы по работе с Chrome</translation>
 <translation id="4617273035598175554">ПО для графики и анимации</translation>
+<translation id="4622292761762557753">Все равно передать</translation>
 <translation id="4627675673814409125">Это правило нельзя установить на уровне профиля Chrome, поэтому оно будет игнорироваться.</translation>
 <translation id="4628948037717959914">Фото</translation>
 <translation id="4631649115723685955">С кешбэком</translation>
@@ -1655,6 +1661,7 @@
 <translation id="540969355065856584">Не удалось подтвердить, что это сервер <ph name="DOMAIN" />. Его сертификат безопасности может быть недействителен в настоящее время. Возможно, сервер настроен неправильно или кто-то пытается перехватить ваши данные.</translation>
 <translation id="5412040515238827314">Недействительный формат. Необходимо указать список шаблонов.</translation>
 <translation id="5412236728747081950">Этот сайт использует информацию из Chrome о ваших интересах, чтобы показывать более подходящие рекламные объявления.</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> – <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Укладчик 4</translation>
 <translation id="5421136146218899937">Очистить историю...</translation>
 <translation id="5426179911063097041">С сайта <ph name="SITE" /> поступил запрос на отправку уведомлений.</translation>
@@ -2587,6 +2594,7 @@
 <translation id="8004582292198964060">Браузер</translation>
 <translation id="8009225694047762179">Управление паролями</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Данные этой карты и ее платежный адрес будут сохранены. Вы сможете пользоваться ею после входа в аккаунт <ph name="USER_EMAIL" />.}one{Данные этих карт и их платежные адреса будут сохранены. Вы сможете пользоваться ими после входа в аккаунт <ph name="USER_EMAIL" />.}few{Данные этих карт и их платежные адреса будут сохранены. Вы сможете пользоваться ими после входа в аккаунт <ph name="USER_EMAIL" />.}many{Данные этих карт и их платежные адреса будут сохранены. Вы сможете пользоваться ими после входа в аккаунт <ph name="USER_EMAIL" />.}other{Данные этих карт и их платежные адреса будут сохранены. Вы сможете пользоваться ими после входа в аккаунт <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Посещение этого сайта может привести к установке вредоносного ПО или хищению личной информации (например, паролей, телефонных номеров и данных банковских карт).</translation>
 <translation id="8026334261755873520">Очистить историю</translation>
 <translation id="8027077570865220386">Лоток 15</translation>
@@ -2638,6 +2646,7 @@
 <translation id="8148608574971654810">Версия PDF:</translation>
 <translation id="8149426793427495338">Ваш компьютер перешел в спящий режим.</translation>
 <translation id="8150722005171944719">Файл по адресу <ph name="URL" /> недоступен. Возможно, он был удален или перемещен либо права доступа к нему ограничены.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Администратор не рекомендует скачивать этот файл в место назначения "<ph name="DESTINATION_NAME" />".}one{Администратор не рекомендует скачивать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}few{Администратор не рекомендует скачивать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}many{Администратор не рекомендует скачивать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}other{Администратор не рекомендует скачивать эти файлы в место назначения "<ph name="DESTINATION_NAME" />".}}</translation>
 <translation id="8157295877370077682">Закрыть сайт</translation>
 <translation id="8163866351304776260">Четыре отверстия слева</translation>
 <translation id="8175796834047840627">Chrome предлагает вам сохранить карты в аккаунте Google, поскольку вы вошли в систему. Этот параметр можно изменить в разделе настроек.</translation>
diff --git a/components/strings/components_strings_si.xtb b/components/strings/components_strings_si.xtb
index 57808bb..727bda1 100644
--- a/components/strings/components_strings_si.xtb
+++ b/components/strings/components_strings_si.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">ස්ථානීය දත්ත ප්‍රවේශය</translation>
 <translation id="1594030484168838125">තෝරන්න</translation>
 <translation id="1596296697375291157">ත්‍රාසජනක, අපරාධ සහ අභිරහස් චිත්‍රපට</translation>
+<translation id="1599199147673445968">නව කාඩ්පත ද? <ph name="BEGIN_LINK" />කාඩ්පත් විස්තර ඇතුළු කරන්න<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Chrome තුළ Dino Run ක්‍රීඩා කරන්න</translation>
 <translation id="161042844686301425">සියන්</translation>
 <translation id="1611101756749861742">Second Roll</translation>
@@ -648,6 +649,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome සැකසීම් තුළ ඔබගේ බ්‍රවුස් කිරීමේ ඉතිහාසය, කුකි, හැඹිලිය සහ තවත් දේ හිස් කිරීමට, Tab ඔබා අනතුරුව Enter ඔබන්න</translation>
 <translation id="2650446666397867134">ගොනුවට පිවිසුම ප්‍රතික්ශේප විය</translation>
 <translation id="2653659639078652383">ඉදිරිපත් කරන්න</translation>
+<translation id="2657637947725373811">{0,plural, =1{රහස්‍ය ගොනුව මාරු කරන්න ද?}one{රහස්‍ය ගොනු මාරු කරන්න ද?}other{රහස්‍ය ගොනු මාරු කරන්න ද?}}</translation>
 <translation id="2660779039299703961">ඉසව්ව</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{කිසිවක් නැත}=1{1 මුරපදයක් (<ph name="DOMAIN_LIST" /> සඳහා)}=2{මුරපද 2 ක් (<ph name="DOMAIN_LIST" /> සඳහා)}one{මුරපද # ක් (<ph name="DOMAIN_LIST" /> සඳහා)}other{මුරපද # ක් (<ph name="DOMAIN_LIST" /> සඳහා)}}</translation>
 <translation id="2666092431469916601">ඉහල</translation>
@@ -794,6 +796,7 @@
 <translation id="3108943290502734357">Middle Tray</translation>
 <translation id="3109728660330352905">ඔබට මෙම පිටුව බැලීමට අනුමැතිය නැත.</translation>
 <translation id="3113284927548439113">තෙවන වැඩ මුරය</translation>
+<translation id="3115363211799416195">{0,plural, =1{රහස්‍ය ගොනුව බාගන්න ද?}one{රහස්‍ය ගොනු බාගන්න ද?}other{රහස්‍ය ගොනු බාගන්න ද?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> හට ඔබ ඔබේ දත්ත උපස්ථ කර මෙම <ph name="DEVICE_TYPE" /> ආපසු දීමට අවශ්‍යයි</translation>
 <translation id="3116158981186517402">ලැමිනේට් කරන්න</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -983,6 +986,7 @@
 <translation id="3615877443314183785">වලංගු කල් ඉකුත් වීමේ දිනයක් ඇතුළු කරන්න</translation>
 <translation id="36224234498066874">බ්‍රවුස් කිරීමේ දත්ත හිස් කරන්න...</translation>
 <translation id="362276910939193118">පූර්ණ ඉතිහාසය පෙන්වන්න</translation>
+<translation id="3628905806504633297">{0,plural, =1{පරිපාලක ප්‍රතිපත්තිය මෙම ගොනුව <ph name="DESTINATION_NAME" /> වෙත මාරු කිරීම නිර්දේශ නොකරයි}one{පරිපාලක ප්‍රතිපත්තිය මෙම ගොනු <ph name="DESTINATION_NAME" /> වෙත මාරු කිරීම නිර්දේශ නොකරයි}other{පරිපාලක ප්‍රතිපත්තිය මෙම ගොනු <ph name="DESTINATION_NAME" /> වෙත මාරු කිරීම නිර්දේශ නොකරයි}}</translation>
 <translation id="3630155396527302611">එය දැනටමත් ජාලයට ප්‍රවේශ විය හැකි ක්‍රමලේඛයක් ලෙස ලැයිස්තුගත කර තිබේ නම්, එය
       ලැයිස්තුවෙන් ඉවත් කර නැවත එක් කිරීමට උත්සාහ කරන්න.</translation>
 <translation id="3630699740441428070">මෙම උපාංගයේ පරිපාලකයින් ඔබගේ ජාල සම්බන්ධතාව වින්‍යාස කර ඇති අතර, එමඟින් ඔබ පිවිසෙන වෙබ් අඩවි ඇතුළුව ඔබේ ජාල තදබදය බැලීමට ඔවුන්ට ඉඩ දෙනු ඇත.</translation>
@@ -1003,6 +1007,7 @@
 <translation id="3664782872746246217">මූලපද:</translation>
 <translation id="3667704023705708645">ව්‍යාපාර ප්‍රාග්ධනය</translation>
 <translation id="3671540257457995106">ප්‍රතිප්‍රමාණ කිරීමට ඉඩ දෙන්නද?</translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" /> හි දී දෝෂයකි: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Third Roll</translation>
 <translation id="3676592649209844519">උපාංග හැඳුනුම:</translation>
 <translation id="3677008721441257057">ඔබ අදහස් කළේ &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; ද?</translation>
@@ -1341,6 +1346,7 @@
 <translation id="4607603470419975064">Chrome ඉඟි බොත්තම බලන්න, Chrome විශේෂාංග ගැන දැන ගැනීමට Enter ඔබන්න</translation>
 <translation id="4607608436550361748">Chrome ඉඟි බලන්න</translation>
 <translation id="4617273035598175554">චිත්‍රක සහ සජීවිකරණ මෘදුකාංග</translation>
+<translation id="4622292761762557753">කෙසේ හෝ මාරු කරන්න</translation>
 <translation id="4627675673814409125">මෙම ප්‍රතිපත්තිය Chrome පැතිකඩ මට්ටමේදී සැකසිය නොහැකි අතර නොසලකා හරිනු ඇත.</translation>
 <translation id="4628948037717959914">ඡායාරූපය</translation>
 <translation id="4631649115723685955">මුදල් ආපසු දීම සබැඳි කරන ලදි</translation>
@@ -1656,6 +1662,7 @@
 <translation id="540969355065856584">මෙම සේවාදායකයට එය <ph name="DOMAIN" /> බව සනාථ කිරීමට නොහැකි විය; එහි ආරක්ෂණ සහතිකය මෙම අවස්ථවේ වලංගු නැත. මෙය වැරදි වින්‍යාස කිරීමක් හෝ ප්‍රහාරකයකු ඔබගේ සබැඳුමට බාධා කිරීමක් නිසා විය හැකිය.</translation>
 <translation id="5412040515238827314">අවලංගු ආකෘතියකි: රටා ලැයිස්තුවක් බලාපොරොත්තු විය.</translation>
 <translation id="5412236728747081950">මෙම අඩවිය ඔබට වඩාත් අදාළ වෙළඳ දැන්වීම් පෙන්වීමට Chrome වෙතින් ඔබගේ ලැදිකම් ලබා ගනී</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">අට්ටිය 4</translation>
 <translation id="5421136146218899937">පිරික්සුම් දත්ත හිස් කරන්න...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> හට ඔබට දැනුම්දීම් එවීමට අවශ්‍යයි</translation>
@@ -2060,6 +2067,7 @@
 <translation id="6591833882275308647">ඔබේ <ph name="DEVICE_TYPE" /> කළමනා නොකෙරේ</translation>
 <translation id="6592952801936330159">අඩවි සැකසීම් කළමනාකරණය කරන්න බොත්තම, Chrome සැකසීම් තුළ අඩවි හරහා ගබඩා කර ඇති අවසර සහ දත්ත කළමනාකරණය කිරීමට Enter ඔබන්න</translation>
 <translation id="6596325263575161958">සංකේතනය කිරීමේ විකල්ප</translation>
+<translation id="6599642189720630047">හඹා ගිය නිෂ්පාදන</translation>
 <translation id="6609880536175561541">Prc7 (ලියුම් කවරය)</translation>
 <translation id="6611723696964473273">ආර්ථික පුවත්</translation>
 <translation id="6612010098632894193">ඔන්ලයින් වීඩියෝ</translation>
@@ -2587,6 +2595,7 @@
 <translation id="8004582292198964060">බ්‍රවුසරය</translation>
 <translation id="8009225694047762179">මුරපද කළමනාකරණය</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{මෙම කාඩ්පත සහ මෙහි බිල්පත් ලිපිනය සුරකිනු ලැබේ. ඔබට <ph name="USER_EMAIL" /> වෙත පුරනය වූ විට එය භාවිත කිරීමට හැකි වෙයි.}one{මෙම කාඩ්පත් සහ මේවායේ බිල්පත් ලිපින සුරකිනු ලැබේ. ඔබට <ph name="USER_EMAIL" /> වෙත පුරනය වූ විට ඒවා භාවිත කිරීමට හැකි වෙයි.}other{මෙම කාඩ්පත් සහ මේවායේ බිල්පත් ලිපින සුරකිනු ලැබේ. ඔබට <ph name="USER_EMAIL" /> වෙත පුරනය වූ විට ඒවා භාවිත කිරීමට හැකි වෙයි.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">මෙම අඩවියෙහි ප්‍රහාරකයන් මෘදුකාංගයක් ස්ථාපනය හෝ ඔබේ පුද්ගලික තොරතුරු (උදාහරණ ලෙස, මුරපද, දුරකථන අංක, හෝ ණය කාඩ්පත්) හෙළිදරව් කිරීම වැනි අවදානම් සහගත දේවල්වලට ඔබව පෙළඹවිය හැකිය.</translation>
 <translation id="8026334261755873520">පිරික්සුම් දත්ත හිස් කරන්න</translation>
 <translation id="8027077570865220386">Tray 15</translation>
@@ -2638,6 +2647,7 @@
 <translation id="8148608574971654810">PDF අනුවාදය:</translation>
 <translation id="8149426793427495338">ඔබේ පරිගණකය නින්දට ගියේය.</translation>
 <translation id="8150722005171944719"><ph name="URL" /> හි ඇති ගොනුව කියවිය නොහැක. එය ඉවත්කර, ස්ථාන මාරු කර හෝ ගොනු බලතල මගින් පිවිසිම වලකා තිබිය හැක.</translation>
+<translation id="8153865548451212769">{0,plural, =1{පරිපාලක ප්‍රතිපත්තිය මෙම ගොනුව <ph name="DESTINATION_NAME" /> වෙත බාගැනීම නිර්දේශ නොකරයි}one{පරිපාලක ප්‍රතිපත්තිය මෙම ගොනු <ph name="DESTINATION_NAME" /> වෙත බාගැනීම නිර්දේශ නොකරයි}other{පරිපාලක ප්‍රතිපත්තිය මෙම ගොනු <ph name="DESTINATION_NAME" /> වෙත බාගැනීම නිර්දේශ නොකරයි}}</translation>
 <translation id="8157295877370077682">අඩවිය හැර යන්න</translation>
 <translation id="8163866351304776260">වමට සිවු වරක් අනින්න</translation>
 <translation id="8175796834047840627">ඔබ පුරනය වී සිටින බැවින් Chrome ඔබට ඔබේ කාඩ්පත් ඔබේ Google ගිණුමට සුරැකීම පිරිනමයි. ඔබට මෙම හැසිරීම සැකසීම් තුළ වෙනස් කළ හැක.</translation>
diff --git a/components/strings/components_strings_sq.xtb b/components/strings/components_strings_sq.xtb
index 25ccd6b..d7efc0dd 100644
--- a/components/strings/components_strings_sq.xtb
+++ b/components/strings/components_strings_sq.xtb
@@ -648,6 +648,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, shtyp "Tab", më pas "Enter" për të pastruar historikun e shfletimit, kukit, memorien specifike etj. te cilësimet e Chrome</translation>
 <translation id="2650446666397867134">Qasja te skedari u refuzua</translation>
 <translation id="2653659639078652383">Dërgoje</translation>
+<translation id="2657637947725373811">{0,plural, =1{Të transferohet skedari konfidencial?}other{Të transferohen skedarët konfidencialë?}}</translation>
 <translation id="2660779039299703961">Ngjarje</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{Asnjë}=1{1 fjalëkalim (për <ph name="DOMAIN_LIST" />)}=2{2 fjalëkalime (për <ph name="DOMAIN_LIST" />)}other{# fjalëkalime (për <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">I sipërm</translation>
@@ -794,6 +795,7 @@
 <translation id="3108943290502734357">Tabakaja e mesit</translation>
 <translation id="3109728660330352905">Nuk ke autorizim për të parë këtë faqe.</translation>
 <translation id="3113284927548439113">Turni i tretë</translation>
+<translation id="3115363211799416195">{0,plural, =1{Të shkarkohet skedari konfidencial?}other{Të shkarkohen skedarët konfidencialë?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> kërkon që të rezervosh të dhënat e tua dhe ta kthesh këtë pajisje <ph name="DEVICE_TYPE" />.</translation>
 <translation id="3116158981186517402">Laminim</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -983,6 +985,7 @@
 <translation id="3615877443314183785">Fut një datë të vlefshme skadimi</translation>
 <translation id="36224234498066874">Pastro të dhënat e shfletimit...</translation>
 <translation id="362276910939193118">Shfaq historikun e plotë</translation>
+<translation id="3628905806504633297">{0,plural, =1{Politika e administratorit nuk rekomandon transferimin e këtij skedari te: <ph name="DESTINATION_NAME" />}other{Politika e administratorit nuk rekomandon transferimin e këtyre skedarëve te: <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="3630155396527302611">Nëse tashmë është i listuar si program që lejohet të ketë qasje te rrjeti,
       provo që ta heqësh nga lista dhe ta shtosh përsëri.</translation>
 <translation id="3630699740441428070">Lidhjen e rrjetit tënd e kanë konfiguruar administratorët e kësaj pajisjeje, gjë që mund t'u lejojë atyre të shikojnë trafikun e rrjetit tënd, duke përfshirë edhe cilat faqe interneti viziton.</translation>
@@ -1287,7 +1290,7 @@
 <translation id="4441832193888514600">Shpërfillur për shkak se politika mund të shtohet vetëm si politikë e përdoruesit të resë kompjuterike.</translation>
 <translation id="4450893287417543264">Mos e shfaq përsëri</translation>
 <translation id="4451135742916150903">Mund të kërkojë të lidhet me pajisjet HID</translation>
-<translation id="4452328064229197696">Fjalëkalimi që sapo përdore u gjet në një nxjerrje të paautorizuar të të dhënave. Për të mbrojtur llogaritë e tua, "Menaxheri i fjalëkalimeve" i Google rekomandon të kontrollosh fjalëkalimet e ruajtura.</translation>
+<translation id="4452328064229197696">Fjalëkalimi që sapo përdore u gjet në një nxjerrje të paautorizuar të të dhënave. Për të mbrojtur llogaritë e tua, "Menaxheri i fjalëkalimeve i Google" rekomandon të kontrollosh fjalëkalimet e ruajtura.</translation>
 <translation id="4455222631300069614">Ndrysho fjalëkalimin tënd tani</translation>
 <translation id="4460315069258617173">Lejohet derisa të mbyllësh skedat për këtë faqe</translation>
 <translation id="4464826014807964867">Sajtet e uebit me informacione nga organizata jote</translation>
@@ -1341,6 +1344,7 @@
 <translation id="4607603470419975064">Butoni "Shiko këshilla për Chrome", shtyp Enter për të mësuar për veçoritë e Chrome</translation>
 <translation id="4607608436550361748">Shiko këshillat për Chrome</translation>
 <translation id="4617273035598175554">Softuerët për grafika dhe animim</translation>
+<translation id="4622292761762557753">Transfero gjithsesi</translation>
 <translation id="4627675673814409125">Kjo politikë nuk mund të caktohet në nivelin e profilit të Chrome dhe do të shpërfillet.</translation>
 <translation id="4628948037717959914">Fotografia</translation>
 <translation id="4631649115723685955">Oferta e kthimit të parave është e lidhur</translation>
@@ -1656,6 +1660,7 @@
 <translation id="540969355065856584">Ky server nuk mund të provojë se është <ph name="DOMAIN" />; certifikata e tij e sigurisë është e pavlefshme në këtë moment. Kjo mund të shkaktohet për shkak të konfigurimit të pasaktë ose në rast të ndërhyrjes së ndonjë sulmuesi në lidhjen tënde.</translation>
 <translation id="5412040515238827314">Format i pavlefshëm: Pritet një listë motivesh.</translation>
 <translation id="5412236728747081950">Ky sajt merr interesat e tua nga Chrome për të të shfaqur reklama më të përshtatshme</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">Stivuesi 4</translation>
 <translation id="5421136146218899937">Pastro të dhënat e shfletimit...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> dëshiron të të dërgojë njoftime</translation>
@@ -1853,7 +1858,7 @@
 <translation id="5989320800837274978">Nuk janë specifikuar serverë përfaqësues fiksë dhe as ndonjë URL e skriptit .pac.</translation>
 <translation id="5992691462791905444">Palosje inxhinierike Z</translation>
 <translation id="5995727681868049093">Menaxho informacionin, privatësinë dhe sigurinë tënde në "Llogarinë tënde të Google"</translation>
-<translation id="5997247540087773573">Fjalëkalimi që sapo përdore u gjet në një nxjerrje të paautorizuar të të dhënave. Për të mbrojtur llogaritë e tua, "Menaxheri i fjalëkalimeve" i Google rekomandon ta ndryshosh atë tani dhe të kontrollosh fjalëkalimet e ruajtura.</translation>
+<translation id="5997247540087773573">Fjalëkalimi që sapo përdore u gjet në një nxjerrje të paautorizuar të të dhënave. Për të mbrojtur llogaritë e tua, "Menaxheri i fjalëkalimeve i Google" rekomandon ta ndryshosh atë tani dhe të kontrollosh fjalëkalimet e ruajtura.</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> rezultate për "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6006484371116297560">Klasike</translation>
 <translation id="6008122969617370890">Renditja N deri në 1</translation>
@@ -1884,7 +1889,7 @@
 <translation id="6051221802930200923">Nuk mund ta vizitosh <ph name="SITE" /> në këtë moment sepse sajti i uebit përdor gozhdimin e certifikatës. Gabimet dhe sulmet e rrjetit janë zakonisht të përkohshme, prandaj kjo faqe ndoshta do të funksionojë më vonë.</translation>
 <translation id="6051898664905071243">Numri i faqeve:</translation>
 <translation id="6052284303005792909">•</translation>
-<translation id="6052319569711353666">Fjalëkalimi që sapo përdore u gjet në një nxjerrje të paautorizuar të të dhënave. "Menaxheri i fjalëkalimeve" i Google rekomandon ndryshimin e këtij fjalëkalimi tani.</translation>
+<translation id="6052319569711353666">Fjalëkalimi që sapo përdore u gjet në një nxjerrje të paautorizuar të të dhënave. "Menaxheri i fjalëkalimeve i Google" rekomandon ndryshimin e këtij fjalëkalimi tani.</translation>
 <translation id="6055888660316801977">Kredencial pagese të sigurt pa fletë përkatëse kredenciali</translation>
 <translation id="6058977677006700226">Dëshiron t'i përdorësh kartat në të gjitha pajisjet e tua?</translation>
 <translation id="6059925163896151826">Pajisjet USB</translation>
@@ -2059,6 +2064,7 @@
 <translation id="6591833882275308647">Pajisja jote <ph name="DEVICE_TYPE" /> nuk është e menaxhuar</translation>
 <translation id="6592952801936330159">Butoni "Menaxho cilësimet e sajtit". Shtyp "Enter" për të menaxhuar lejet dhe të dhënat e ruajtura nëpër sajte te cilësimet e Chrome</translation>
 <translation id="6596325263575161958">Opsionet e enkriptimit</translation>
+<translation id="6599642189720630047">Produktet e monitoruara</translation>
 <translation id="6609880536175561541">Prc7 (Zarf)</translation>
 <translation id="6611723696964473273">Lajmet nga ekonomia</translation>
 <translation id="6612010098632894193">Videot në linjë</translation>
@@ -2586,6 +2592,7 @@
 <translation id="8004582292198964060">Shfletuesi</translation>
 <translation id="8009225694047762179">Menaxho fjalëkalimet</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{Kjo kartë dhe adresa e saj e faturimit do të ruhen. Do të jesh në gjendje ta përdorësh kur të jesh identifikuar në <ph name="USER_EMAIL" />.}other{Këto karta dhe adresat e tyre të faturimit do të ruhen. Do të jesh në gjendje t'i përdorësh kur të jesh identifikuar në <ph name="USER_EMAIL" />.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">Sulmuesit në këtë sajt mund të të mashtrojnë që të bësh diçka të rrezikshme si të instalosh softuerë ose të zbulosh informacione personal (për shembull, fjalëkalime, numra telefoni ose karta krediti).</translation>
 <translation id="8026334261755873520">Pastro të dhënat e shfletimit</translation>
 <translation id="8027077570865220386">Tabakaja 15</translation>
@@ -2637,6 +2644,7 @@
 <translation id="8148608574971654810">Versioni i PDF-së:</translation>
 <translation id="8149426793427495338">Kompjuteri yt kaloi në gjumë.</translation>
 <translation id="8150722005171944719">Skedari në <ph name="URL" /> nuk është i lexueshëm: mund të jetë hequr, lëvizur ose lejet e tij mund të pengojnë qasjen.</translation>
+<translation id="8153865548451212769">{0,plural, =1{Politika e administratorit nuk rekomandon shkarkimin e këtij skedari te: <ph name="DESTINATION_NAME" />}other{Politika e administratorit nuk rekomandon shkarkimin e këtyre skedarëve te: <ph name="DESTINATION_NAME" />}}</translation>
 <translation id="8157295877370077682">Largohu nga sajti</translation>
 <translation id="8163866351304776260">Katër shpime majtas</translation>
 <translation id="8175796834047840627">Chrome po ofron që të ruash kartat e tua në "Llogarinë tënde të Google" sepse je identifikuar. Mund ta ndryshosh këtë sjellje te cilësimet.</translation>
diff --git a/components/strings/components_strings_sr-Latn.xtb b/components/strings/components_strings_sr-Latn.xtb
index d3dd54a..e6807250 100644
--- a/components/strings/components_strings_sr-Latn.xtb
+++ b/components/strings/components_strings_sr-Latn.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Pristup lokalnim podacima</translation>
 <translation id="1594030484168838125">Odaberi</translation>
 <translation id="1596296697375291157">Trileri, kriminalistički filmovi i filmovi misterije</translation>
+<translation id="1599199147673445968">Nova kartica? <ph name="BEGIN_LINK" />Unesite podatke o kartici<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Igrajte igru Dinosaurus u Chrome-u</translation>
 <translation id="161042844686301425">Plavozelena</translation>
 <translation id="1611101756749861742">Drugi kotur</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Ključne reči:</translation>
 <translation id="3667704023705708645">Akcijski kapital</translation>
 <translation id="3671540257457995106">Želite da dozvolite promenu veličine?</translation>
+<translation id="3672568546897166916">Greška na <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Treći kotur</translation>
 <translation id="3676592649209844519">ID uređaja:</translation>
 <translation id="3677008721441257057">Da li ste mislili &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index 5b330559..847873f 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Приступ локалним подацима</translation>
 <translation id="1594030484168838125">Одабери</translation>
 <translation id="1596296697375291157">Трилери, криминалистички филмови и филмови мистерије</translation>
+<translation id="1599199147673445968">Нова картица? <ph name="BEGIN_LINK" />Унесите податке о картици<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Играјте игру Диносаурус у Chrome-у</translation>
 <translation id="161042844686301425">Плавозелена</translation>
 <translation id="1611101756749861742">Други котур</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Кључне речи:</translation>
 <translation id="3667704023705708645">Акцијски капитал</translation>
 <translation id="3671540257457995106">Желите да дозволите промену величине?</translation>
+<translation id="3672568546897166916">Грешка на <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Трећи котур</translation>
 <translation id="3676592649209844519">ИД уређаја:</translation>
 <translation id="3677008721441257057">Да ли сте мислили &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index 99298c7..12fa2c52 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Lokal dataåtkomst</translation>
 <translation id="1594030484168838125">Välj</translation>
 <translation id="1596296697375291157">Thriller, polis och kriminalgåtor, film</translation>
+<translation id="1599199147673445968">Har du ett nytt kort? <ph name="BEGIN_LINK" />Ange kortuppgifter<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Spela Dino Run-spelet i Chrome</translation>
 <translation id="161042844686301425">Cyanblå</translation>
 <translation id="1611101756749861742">Andra rullen</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Sökord:</translation>
 <translation id="3667704023705708645">Riskkapital</translation>
 <translation id="3671540257457995106">Vill du tillåta att storleken ändras?</translation>
+<translation id="3672568546897166916">Fel vid <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Tredje rullen</translation>
 <translation id="3676592649209844519">Enhets-id:</translation>
 <translation id="3677008721441257057">Menade du &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index f04edb1..1031c98 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">Ufikiaji wa Data Iliyo Katika Kifaa Chako</translation>
 <translation id="1594030484168838125">Chagua</translation>
 <translation id="1596296697375291157">Filamu za kutisha, uhalifu na zenye mafumbo</translation>
+<translation id="1599199147673445968">Je, hii ni kadi mpya? <ph name="BEGIN_LINK" />Weka Maelezo ya Kadi<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Cheza mchezo wa Dinosau Anayekimbia katika Chrome</translation>
 <translation id="161042844686301425">Samawati-Kijani</translation>
 <translation id="1611101756749861742">Gombo la Pili</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">Maneno muhimu:</translation>
 <translation id="3667704023705708645">Mtaji wa uwekezaji</translation>
 <translation id="3671540257457995106">Ungependa kuruhusu ukubwa ubadilishwe?</translation>
+<translation id="3672568546897166916">Hitilafu katika <ph name="ERROR_PATH" />: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">Gombo la Tatu</translation>
 <translation id="3676592649209844519">Kitambulisho cha Kifaa:</translation>
 <translation id="3677008721441257057">Unamaanisha &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
@@ -2065,6 +2067,7 @@
 <translation id="6591833882275308647"><ph name="DEVICE_TYPE" /> yako haidhibitiwi</translation>
 <translation id="6592952801936330159">Kitufe cha 'Dhibiti mipangilio ya tovuti', bonyeza 'Enter' ili udhibiti ruhusa na data iliyohifadhiwa kwenye tovuti mbalimbali katika mipangilio ya Chrome</translation>
 <translation id="6596325263575161958">Chaguo za usimbaji fiche</translation>
+<translation id="6599642189720630047">Bidhaa Unazofuatilia</translation>
 <translation id="6609880536175561541">Prc7 (Bahasha)</translation>
 <translation id="6611723696964473273">Habari za uchumi</translation>
 <translation id="6612010098632894193">Video ya mtandaoni</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index 8b1ab31..63d12d49 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">அகத் தரவு அணுகல்</translation>
 <translation id="1594030484168838125">தேர்வுசெய்</translation>
 <translation id="1596296697375291157">திகில், குற்றம் &amp; மர்மத் திரைப்படங்கள்</translation>
+<translation id="1599199147673445968">புதிய கார்டா? <ph name="BEGIN_LINK" />கார்டு விவரங்களை உள்ளிடுக<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">Chromeமில் டைனோசர் கேமை விளையாடலாம்</translation>
 <translation id="161042844686301425">சியான்</translation>
 <translation id="1611101756749861742">ரோல் 2</translation>
@@ -648,6 +649,7 @@
 <translation id="2649259151839507861"><ph name="CLEAR_BROWSING_DATA_FOCUSED_FRIENDLY_MATCH_TEXT" />, Chrome அமைப்புகளில் உலாவல் வரலாறு, குக்கீகள், தற்காலிகச் சேமிப்பு மற்றும் பலவற்றை அழிக்க Tab விசையை அழுத்திய பிறகு Enter விசையை அழுத்துங்கள்</translation>
 <translation id="2650446666397867134">ஃபைலுக்கான அணுகல் மறுக்கப்பட்டது</translation>
 <translation id="2653659639078652383">சமர்ப்பி</translation>
+<translation id="2657637947725373811">{0,plural, =1{ரகசியமான ஃபைலை நிச்சயம் மாற்ற வேண்டுமா?}other{ரகசியமான ஃபைல்களை நிச்சயம் மாற்ற வேண்டுமா?}}</translation>
 <translation id="2660779039299703961">நிகழ்வு</translation>
 <translation id="2664887757054927933">{COUNT,plural, =0{எதுவுமில்லை}=1{ஒரு கடவுச்சொல் (டொமைன்கள்: <ph name="DOMAIN_LIST" />)}=2{2 கடவுச்சொற்கள் (டொமைன்கள்: <ph name="DOMAIN_LIST" />)}other{# கடவுச்சொற்கள் (டொமைன்கள்: <ph name="DOMAIN_LIST" />)}}</translation>
 <translation id="2666092431469916601">மேலே</translation>
@@ -794,6 +796,7 @@
 <translation id="3108943290502734357">நடு டிரே</translation>
 <translation id="3109728660330352905">இந்தப் பக்கத்தைக் காண உங்களுக்கு அங்கீகாரம் அளிக்கப்படவில்லை.</translation>
 <translation id="3113284927548439113">மூன்றாம் ஷிஃப்ட்</translation>
+<translation id="3115363211799416195">{0,plural, =1{ரகசியமான ஃபைலை நிச்சயம் பதிவிறக்க வேண்டுமா?}other{ரகசியமான ஃபைல்களை நிச்சயம் பதிவிறக்க வேண்டுமா?}}</translation>
 <translation id="3115874930288085374"><ph name="ENROLLMENT_DOMAIN" /> டொமைனைப் பயன்படுத்த, உங்கள் தரவைக் காப்புப் பிரதி எடுத்துவிட்டு இந்த <ph name="DEVICE_TYPE" /> சாதனத்தைத் திருப்பியளிக்க வேண்டும்.</translation>
 <translation id="3116158981186517402">லேமினேட்</translation>
 <translation id="3120730422813725195">Elo</translation>
@@ -979,6 +982,7 @@
 <translation id="3615877443314183785">சரியான காலாவதித் தேதியை உள்ளிடவும்</translation>
 <translation id="36224234498066874">உலாவிய தரவை அழி...</translation>
 <translation id="362276910939193118">முழு வரலாற்றையும் காண்பி</translation>
+<translation id="3628905806504633297">{0,plural, =1{<ph name="DESTINATION_NAME" />க்கு இந்த ஃபைலை மாற்றுவதை நிர்வாகக் கொள்கை பரிந்துரைக்கவில்லை:}other{<ph name="DESTINATION_NAME" />க்கு இந்த ஃபைல்களை மாற்றுவதை நிர்வாகக் கொள்கை பரிந்துரைக்கவில்லை:}}</translation>
 <translation id="3630155396527302611">இது நெட்வொர்க்கை அணுகுவதற்கு அனுமதிக்கப்பட்ட நிரலாக ஏற்கனவே பட்டியலிடப்பட்டிருந்தால்,
       இதைப் பட்டியலில் இருந்து அகற்றி, மீண்டும் சேர்ப்பதற்கு முயலவும்.</translation>
 <translation id="3630699740441428070">உங்கள் நெட்வொர்க் இணைப்பை இந்தச் சாதனத்தின் நிர்வாகிகள் உள்ளமைத்துள்ளனர். இதனால் நீங்கள் எந்த இணையதளங்களுக்குச் செல்கிறீர்கள் என்ற விவரம் உட்பட உங்கள் நெட்வொர்க் டிராஃபிக்குகளையும் அவர்களால் பார்க்க முடியும்.</translation>
@@ -999,6 +1003,7 @@
 <translation id="3664782872746246217">தேடல் குறிப்புகள்:</translation>
 <translation id="3667704023705708645">துணிகர முதலீடு</translation>
 <translation id="3671540257457995106">அளவை மாற்ற அனுமதிக்கவா?</translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" /> இல் பிழை: <ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">ரோல் 3</translation>
 <translation id="3676592649209844519">சாதன ஐடி:</translation>
 <translation id="3677008721441257057">இதைக் குறிப்பிட்டீர்களா: &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
@@ -1337,6 +1342,7 @@
 <translation id="4607603470419975064">Chrome உதவிக்குறிப்புகளைக் காட்டும் பட்டன். Chrome அம்சங்கள் குறித்து அறிய Enter பட்டனை அழுத்துங்கள்</translation>
 <translation id="4607608436550361748">Chrome உதவிக்குறிப்புகளைக் காட்டு</translation>
 <translation id="4617273035598175554">கிராஃபிக்ஸ் &amp; அனிமேஷன் மென்பொருள்</translation>
+<translation id="4622292761762557753">பரவாயில்லை மாற்று</translation>
 <translation id="4627675673814409125">இந்தக் கொள்கையை Chrome சுயவிவர நிலையில் அமைக்க முடியாது என்பதால் புறக்கணிக்கப்படும்.</translation>
 <translation id="4628948037717959914">படம்</translation>
 <translation id="4631649115723685955">கேஷ்பேக் ஆஃபர் உள்ளது</translation>
@@ -1652,6 +1658,7 @@
 <translation id="540969355065856584"><ph name="DOMAIN" /> டொமைனை, சேவையகம் உறுதிப்படுத்தவில்லை; அதற்கான காரணங்கள்: இதன் பாதுகாப்புச் சான்றிதழ் தற்போது செல்லுபடியானதல்ல. இது தவறான உள்ளமைவினால் ஏற்பட்டிருக்கலாம் அல்லது தீங்கிழைப்பவர் உங்கள் இணைப்பில் குறுக்கிட்டிருக்கலாம்.</translation>
 <translation id="5412040515238827314">தவறான வடிவம்: பேட்டர்ன்களின் பட்டியல் எதிர்பார்க்கப்படுகிறது.</translation>
 <translation id="5412236728747081950">மிகவும் தொடர்புடைய விளம்பரங்களைக் காட்டுவதற்காக Chromeமில் இருந்து உங்கள் ஆர்வங்களை இந்தத் தளம் பெறுகிறது</translation>
+<translation id="5412245327974352290"><ph name="TRADITIONAL_TEXT" /> - <ph name="ADDITIONAL_TEXT" /></translation>
 <translation id="541416427766103491">ஸ்டேக்கர் 4</translation>
 <translation id="5421136146218899937">உலாவிய தரவை அழி...</translation>
 <translation id="5426179911063097041"><ph name="SITE" /> உங்களுக்கு அறிவிப்புகளை அனுப்ப விரும்புகிறது</translation>
@@ -2055,6 +2062,7 @@
 <translation id="6591833882275308647">உங்கள் <ph name="DEVICE_TYPE" /> சாதனம் நிர்வகிக்கப்படவில்லை</translation>
 <translation id="6592952801936330159">தள அமைப்புகளை நிர்வகிப்பதற்கான பட்டன். Chrome அமைப்புகளில் அனுமதிகளையும் தளங்கள் முழுவதும் சேமிக்கப்பட்டுள்ள தரவையும் நிர்வகிக்க, Enter விசையை அழுத்துங்கள்</translation>
 <translation id="6596325263575161958">என்க்ரிப்ஷன் விருப்பங்கள்</translation>
+<translation id="6599642189720630047">கண்காணிக்கப்படும் தயாரிப்புகள்</translation>
 <translation id="6609880536175561541">Prc7 (என்வலப்)</translation>
 <translation id="6611723696964473273">பொருளாதாரச் செய்திகள்</translation>
 <translation id="6612010098632894193">ஆன்லைன் வீடியோ</translation>
@@ -2582,6 +2590,7 @@
 <translation id="8004582292198964060">உலாவி</translation>
 <translation id="8009225694047762179">கடவுச்சொற்களை நிர்வகி</translation>
 <translation id="8012116502927253373">{NUM_CARDS,plural, =1{இந்தக் கார்டும் அதன் பில்லிங் முகவரியும் சேமிக்கப்படும். <ph name="USER_EMAIL" /> இல் உள்நுழைந்திருக்கும்போது இதைப் பயன்படுத்தலாம்.}other{இந்தக் கார்டுகளும் அவற்றின் பில்லிங் முகவரிகளும் சேமிக்கப்படும். <ph name="USER_EMAIL" /> இல் உள்நுழைந்திருக்கும்போது இவற்றைப் பயன்படுத்தலாம்.}}</translation>
+<translation id="8019861005170389898"><ph name="TRADITIONAL_TEXT" /> (<ph name="ADDITIONAL_TEXT" />)</translation>
 <translation id="8025119109950072390">இந்தத் தளத்தில் உள்ள ஹேக்கர்கள், உங்களை ஏமாற்றி, மென்பொருளை நிறுவுவது அல்லது தனிப்பட்ட தகவலை (எடுத்துக்காட்டாக, கடவுச்சொற்கள், ஃபோன் எண்கள் அல்லது கிரெடிட் கார்டுகள்) வெளிப்படுத்துவது போன்ற உங்களுக்கு ஆபத்தை விளைவிக்கும் செயல்களைச் செய்ய வைக்கலாம்.</translation>
 <translation id="8026334261755873520">உலாவிய தரவை அழி</translation>
 <translation id="8027077570865220386">டிரே 15</translation>
@@ -2633,6 +2642,7 @@
 <translation id="8148608574971654810">PDF பதிப்பு:</translation>
 <translation id="8149426793427495338">உங்கள் கம்ப்யூட்டர் உறக்கநிலைக்குச் சென்றது.</translation>
 <translation id="8150722005171944719"><ph name="URL" /> இல் உள்ள ஃபைல் படிக்கக் கூடியதாக இல்லை. அது அகற்றப்பட்டிருக்கலாம், நகர்த்தப்பட்டிருக்கலாம் அல்லது ஃபைல் அனுமதிகள் அணுகலைத் தடுத்திருக்கலாம்.</translation>
+<translation id="8153865548451212769">{0,plural, =1{<ph name="DESTINATION_NAME" /> இல் இந்த ஃபைலைப் பதிவிறக்குவதை நிர்வாகக் கொள்கை பரிந்துரைக்கவில்லை:}other{<ph name="DESTINATION_NAME" /> இல் இந்த ஃபைல்களைப் பதிவிறக்குவதை நிர்வாகக் கொள்கை பரிந்துரைக்கவில்லை}}</translation>
 <translation id="8157295877370077682">தளத்திலிருந்து வெளியேறு</translation>
 <translation id="8163866351304776260">குவாட் பஞ்ச் லெஃப்ட்</translation>
 <translation id="8175796834047840627">உங்கள் Google கணக்கில் உள்நுழைந்திருப்பதால் Chrome உங்கள் கார்டுகளை இந்தக் கணக்கில் சேமிப்பதற்குக் கோருகிறது. இதை அமைப்புகளில் மாற்றலாம்.</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index cd9424a..8d5e371 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -2067,6 +2067,7 @@
 <translation id="6591833882275308647"><ph name="DEVICE_TYPE" /> của bạn không được quản lý</translation>
 <translation id="6592952801936330159">Nút Quản lý chế độ cài đặt trang web, hãy nhấn Enter để quản lý quyền và dữ liệu lưu trữ trên các trang web trong phần Cài đặt của Chrome</translation>
 <translation id="6596325263575161958">Tùy chọn mã hóa</translation>
+<translation id="6599642189720630047">Sản phẩm bạn theo dõi</translation>
 <translation id="6609880536175561541">Prc7 (Phong bì)</translation>
 <translation id="6611723696964473273">Tin tức kinh tế</translation>
 <translation id="6612010098632894193">Video trực tuyến</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index 403e8a60..54f5bbc2 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">本地数据访问权限</translation>
 <translation id="1594030484168838125">选择</translation>
 <translation id="1596296697375291157">惊悚片、犯罪片与悬疑片</translation>
+<translation id="1599199147673445968">想使用新卡?<ph name="BEGIN_LINK" />输入信用卡详情<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">在 Chrome 中玩《Dino Run》游戏</translation>
 <translation id="161042844686301425">青色</translation>
 <translation id="1611101756749861742">第 2 卷</translation>
@@ -1002,6 +1003,7 @@
 <translation id="3664782872746246217">关键字:</translation>
 <translation id="3667704023705708645">风险投资</translation>
 <translation id="3671540257457995106">允许调整大小?</translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" /> 出错了:<ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">第 3 卷</translation>
 <translation id="3676592649209844519">设备 ID:</translation>
 <translation id="3677008721441257057">您是想访问 &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt; 吧?</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb
index 82bab19..b63d4400 100644
--- a/components/strings/components_strings_zh-HK.xtb
+++ b/components/strings/components_strings_zh-HK.xtb
@@ -2066,7 +2066,7 @@
 <translation id="6591833882275308647">您的 <ph name="DEVICE_TYPE" /> 未受管理</translation>
 <translation id="6592952801936330159">管理網站設定按鈕,㩒一下 Enter 鍵就可以喺 Chrome 設定度管理所有網站嘅權限同儲存嘅資料</translation>
 <translation id="6596325263575161958">加密選項</translation>
-<translation id="6599642189720630047">追蹤的產品</translation>
+<translation id="6599642189720630047">已追蹤的產品</translation>
 <translation id="6609880536175561541">Prc7 (信封)</translation>
 <translation id="6611723696964473273">經濟新聞</translation>
 <translation id="6612010098632894193">網上影片</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 79425d9..07ead27 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -265,6 +265,7 @@
 <translation id="1592005682883173041">本機資料存取權</translation>
 <translation id="1594030484168838125">選擇</translation>
 <translation id="1596296697375291157">恐怖、犯罪與懸疑片</translation>
+<translation id="1599199147673445968">要更新信用卡資訊嗎?<ph name="BEGIN_LINK" />輸入卡片資料<ph name="END_LINK" /></translation>
 <translation id="160851722280695521">暢玩 Chrome 恐龍遊戲</translation>
 <translation id="161042844686301425">青色</translation>
 <translation id="1611101756749861742">第二卷</translation>
@@ -1006,6 +1007,7 @@
 <translation id="3664782872746246217">關鍵字:</translation>
 <translation id="3667704023705708645">創業投資</translation>
 <translation id="3671540257457995106">要允許調整大小嗎?</translation>
+<translation id="3672568546897166916"><ph name="ERROR_PATH" /> 發生錯誤:<ph name="ERROR_MESSAGE" /></translation>
 <translation id="3675563144891642599">第三卷</translation>
 <translation id="3676592649209844519">裝置 ID:</translation>
 <translation id="3677008721441257057">你是否要前往 &lt;a href="#" id="dont-proceed-link"&gt;<ph name="DOMAIN" />&lt;/a&gt;?</translation>
diff --git a/components/sync/base/features.h b/components/sync/base/features.h
index 0806302..ee93865 100644
--- a/components/sync/base/features.h
+++ b/components/sync/base/features.h
@@ -103,6 +103,12 @@
     "SyncChromeOSAppsToggleSharing", base::FEATURE_DISABLED_BY_DEFAULT};
 #endif  // BUILDFLAG(IS_CHROMEOS)
 
+// Whether the periodic degraded recoverability polling is enabled.
+inline constexpr base::Feature
+    kSyncTrustedVaultPeriodicDegradedRecoverabilityPolling{
+        "SyncTrustedVaultDegradedRecoverabilityHandler",
+        base::FEATURE_DISABLED_BY_DEFAULT};
+
 #if BUILDFLAG(IS_IOS)
 // Whether RPC is enabled.
 inline constexpr base::Feature kSyncTrustedVaultPassphraseiOSRPC{
diff --git a/components/sync/driver/sync_session_durations_metrics_recorder.cc b/components/sync/driver/sync_session_durations_metrics_recorder.cc
index da062ab..dfbe77ea 100644
--- a/components/sync/driver/sync_session_durations_metrics_recorder.cc
+++ b/components/sync/driver/sync_session_durations_metrics_recorder.cc
@@ -27,9 +27,20 @@
   return session_length;
 }
 
-void LogDuration(const std::string& histogram, base::TimeDelta session_length) {
-  DVLOG(1) << "Logging " << histogram << " of " << session_length;
-  base::UmaHistogramLongTimes(histogram, session_length);
+void LogDuration(const std::string& histogram_suffix,
+                 base::TimeDelta session_length) {
+  DVLOG(1) << "Logging Session.TotalDuration*." + histogram_suffix << " of "
+           << session_length;
+  // Log the 1-day long session duration histograms.
+  base::UmaHistogramCustomTimes(
+      "Session.TotalDurationMax1Day." + histogram_suffix, session_length,
+      base::Milliseconds(1), base::Hours(24), 50);
+
+  // Log the legacy 1-hour long histogram.
+  // TODO(https://crbug.com/1355203): Remove these histograms once they are no
+  // longer used to generate the sign-in and sync usage dashboards.
+  base::UmaHistogramLongTimes("Session.TotalDuration." + histogram_suffix,
+                              session_length);
 }
 
 }  // namespace
@@ -229,14 +240,14 @@
     base::TimeDelta session_length) {
   switch (signin_status_) {
     case FeatureState::ON:
-      LogDuration("Session.TotalDuration.WithAccount", session_length);
+      LogDuration("WithAccount", session_length);
       break;
     case FeatureState::UNKNOWN:
       // Since the feature wasn't working for the user if we didn't know its
       // state, log the status as off.
       [[fallthrough]];
     case FeatureState::OFF:
-      LogDuration("Session.TotalDuration.WithoutAccount", session_length);
+      LogDuration("WithoutAccount", session_length);
       break;
   }
 }
@@ -251,26 +262,22 @@
                       " known when LogSyncAndAccountDuration() is called";
       break;
     case GetFeatureStates(FeatureState::ON, FeatureState::ON):
-      LogDuration("Session.TotalDuration.OptedInToSyncWithAccount",
-                  session_length);
+      LogDuration("OptedInToSyncWithAccount", session_length);
       break;
     case GetFeatureStates(FeatureState::ON, FeatureState::UNKNOWN):
       // Sync engine not initialized yet, default to it being off.
       [[fallthrough]];
     case GetFeatureStates(FeatureState::ON, FeatureState::OFF):
-      LogDuration("Session.TotalDuration.NotOptedInToSyncWithAccount",
-                  session_length);
+      LogDuration("NotOptedInToSyncWithAccount", session_length);
       break;
     case GetFeatureStates(FeatureState::OFF, FeatureState::ON):
-      LogDuration("Session.TotalDuration.OptedInToSyncWithoutAccount",
-                  session_length);
+      LogDuration("OptedInToSyncWithoutAccount", session_length);
       break;
     case GetFeatureStates(FeatureState::OFF, FeatureState::UNKNOWN):
       // Sync engine not initialized yet, default to it being off.
       [[fallthrough]];
     case GetFeatureStates(FeatureState::OFF, FeatureState::OFF):
-      LogDuration("Session.TotalDuration.NotOptedInToSyncWithoutAccount",
-                  session_length);
+      LogDuration("NotOptedInToSyncWithoutAccount", session_length);
       break;
     default:
       NOTREACHED() << "Unexpected feature states: "
diff --git a/components/sync/driver/sync_session_durations_metrics_recorder_unittest.cc b/components/sync/driver/sync_session_durations_metrics_recorder_unittest.cc
index 4e583714..f2be1b3 100644
--- a/components/sync/driver/sync_session_durations_metrics_recorder_unittest.cc
+++ b/components/sync/driver/sync_session_durations_metrics_recorder_unittest.cc
@@ -62,6 +62,12 @@
   }
 
   std::string GetSessionHistogramName(const std::string& histogram_suffix) {
+    return std::string("Session.TotalDurationMax1Day.") + histogram_suffix;
+  }
+
+  // TODO(https://crbug.com/1355203): Deprecate this method.
+  std::string GetSessionHistogramLegacyName(
+      const std::string& histogram_suffix) {
     return std::string("Session.TotalDuration.") + histogram_suffix;
   }
 
@@ -72,6 +78,8 @@
     for (const std::string& histogram_suffix : histogram_suffixes) {
       ht.ExpectTimeBucketCount(GetSessionHistogramName(histogram_suffix),
                                expected_session_time, 1);
+      ht.ExpectTimeBucketCount(GetSessionHistogramLegacyName(histogram_suffix),
+                               expected_session_time, 1);
     }
   }
 
@@ -79,6 +87,7 @@
                         const std::vector<std::string>& histogram_suffixes) {
     for (const std::string& histogram_suffix : histogram_suffixes) {
       ht.ExpectTotalCount(GetSessionHistogramName(histogram_suffix), 1);
+      ht.ExpectTotalCount(GetSessionHistogramLegacyName(histogram_suffix), 1);
     }
   }
 
@@ -86,6 +95,7 @@
                        const std::vector<std::string>& histogram_suffixes) {
     for (const std::string& histogram_suffix : histogram_suffixes) {
       ht.ExpectTotalCount(GetSessionHistogramName(histogram_suffix), 0);
+      ht.ExpectTotalCount(GetSessionHistogramLegacyName(histogram_suffix), 0);
     }
   }
 
diff --git a/components/sync/protocol/history_specifics.proto b/components/sync/protocol/history_specifics.proto
index 2f7f7de..eccc9ac 100644
--- a/components/sync/protocol/history_specifics.proto
+++ b/components/sync/protocol/history_specifics.proto
@@ -100,4 +100,7 @@
 
   // Whether a password field was found on the page.
   optional SyncEnums.PasswordState password_state = 16;
+
+  // URL of the favicon for this page.
+  optional string favicon_url = 17;
 }
diff --git a/components/sync/protocol/proto_visitors.h b/components/sync/protocol/proto_visitors.h
index f8f574c..fe8b4592 100644
--- a/components/sync/protocol/proto_visitors.h
+++ b/components/sync/protocol/proto_visitors.h
@@ -793,6 +793,7 @@
   VISIT(http_response_code);
   VISIT(page_language);
   VISIT_ENUM(password_state);
+  VISIT(favicon_url);
 }
 
 VISIT_PROTO_FIELDS(
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc
index 466fb890..1bacfac8 100644
--- a/components/sync/trusted_vault/standalone_trusted_vault_backend.cc
+++ b/components/sync/trusted_vault/standalone_trusted_vault_backend.cc
@@ -363,6 +363,7 @@
   }
   primary_account_ = primary_account;
   AbandonConnectionRequest();
+  degraded_recoverability_handler_ = nullptr;
   ongoing_get_recoverability_request_.reset();
   ongoing_add_recovery_method_request_.reset();
   RemoveNonPrimaryAccountKeysIfMarkedForDeletion();
@@ -370,7 +371,12 @@
     DCHECK(!pending_trusted_recovery_method_.has_value());
     return;
   }
-
+  if (base::FeatureList::IsEnabled(
+          kSyncTrustedVaultPeriodicDegradedRecoverabilityPolling)) {
+    degraded_recoverability_handler_ =
+        std::make_unique<TrustedVaultDegradedRecoverabilityHandler>(
+            connection_.get(), this, primary_account_.value());
+  }
   sync_pb::LocalTrustedVaultPerUser* per_user_vault =
       FindUserVault(primary_account->gaia);
   if (!per_user_vault) {
@@ -472,8 +478,22 @@
 void StandaloneTrustedVaultBackend::GetIsRecoverabilityDegraded(
     const CoreAccountInfo& account_info,
     base::OnceCallback<void(bool)> cb) {
-  // TODO(crbug.com/1201659): Improve this logic properly and add test coverage,
-  // including throttling and periodic polling.
+  if (base::FeatureList::IsEnabled(
+          kSyncTrustedVaultPeriodicDegradedRecoverabilityPolling)) {
+    sync_pb::LocalTrustedVaultPerUser* per_user_vault =
+        FindUserVault(account_info.gaia);
+    if (!per_user_vault) {
+      // If the account does not exist, then the recoverability state is
+      // unknown.
+      // TODO(crbug.com/1247990): Pass optional value with nullopt indicating
+      // that value is not yet known.
+      std::move(cb).Run(false);
+      return;
+    }
+    std::move(cb).Run(per_user_vault->degraded_recoverability_state()
+                          .is_recoverability_degraded());
+    return;
+  }
   ongoing_get_recoverability_request_ =
       connection_->DownloadIsRecoverabilityDegraded(
           account_info,
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend.h b/components/sync/trusted_vault/standalone_trusted_vault_backend.h
index b40a91c..ad6fcd9 100644
--- a/components/sync/trusted_vault/standalone_trusted_vault_backend.h
+++ b/components/sync/trusted_vault/standalone_trusted_vault_backend.h
@@ -245,6 +245,12 @@
   // be overridden in tests.
   raw_ptr<base::Clock> clock_;
 
+  // Used to take care of polling the degraded recoverability state from the
+  // server for the |primary_account|. Instance changes whenever
+  // |primary_account| changes.
+  std::unique_ptr<TrustedVaultDegradedRecoverabilityHandler>
+      degraded_recoverability_handler_;
+
   std::vector<uint8_t> last_added_recovery_method_public_key_for_testing_;
 
   bool device_registration_state_recorded_to_uma_ = false;
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc b/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc
index 06cfad1..874cf8e6 100644
--- a/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc
+++ b/components/sync/trusted_vault/standalone_trusted_vault_backend_unittest.cc
@@ -271,6 +271,26 @@
               DegradedRecoverabilityStateEq(degraded_recoverability_state));
 }
 
+TEST_F(StandaloneTrustedVaultBackendTest, ShouldFindTheRecoverabilityDegraded) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeature(
+      kSyncTrustedVaultPeriodicDegradedRecoverabilityPolling);
+  // The TaskEnvironment is needed because this test initializes the handler,
+  // which works with time.
+  base::test::SingleThreadTaskEnvironment environment{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME};
+  const CoreAccountInfo account_info = MakeAccountInfoWithGaiaId("user");
+  backend()->SetPrimaryAccount(account_info,
+                               /*has_persistent_auth_error=*/false);
+  sync_pb::LocalTrustedVaultDegradedRecoverabilityState
+      degraded_recoverability_state;
+  degraded_recoverability_state.set_is_recoverability_degraded(true);
+  backend()->WriteDegradedRecoverabilityState(degraded_recoverability_state);
+  base::MockCallback<base::OnceCallback<void(bool)>> cb;
+  EXPECT_CALL(cb, Run(true));
+  backend()->GetIsRecoverabilityDegraded(account_info, cb.Get());
+}
+
 TEST_F(StandaloneTrustedVaultBackendTest, ShouldFetchEmptyKeys) {
   const CoreAccountInfo account_info = MakeAccountInfoWithGaiaId("user");
   // Callback should be called immediately.
diff --git a/components/viz/service/display/display_resource_provider.cc b/components/viz/service/display/display_resource_provider.cc
index 6f80ebf..e2089bda 100644
--- a/components/viz/service/display/display_resource_provider.cc
+++ b/components/viz/service/display/display_resource_provider.cc
@@ -66,7 +66,7 @@
     if (resource.transferable.is_software)
       backing_memory_allocated = !!resource.shared_bitmap;
     else
-      backing_memory_allocated = resource.gl_id != 0 || resource.image_context;
+      backing_memory_allocated = !!resource.image_context;
 
     if (!backing_memory_allocated) {
       // Don't log unallocated resources - they have no backing memory.
@@ -516,33 +516,19 @@
 DisplayResourceProvider::ChildResource::ChildResource(
     int child_id,
     const TransferableResource& transferable)
-    : child_id(child_id), transferable(transferable), filter(GL_NONE) {
+    : child_id(child_id), transferable(transferable) {
   if (is_gpu_resource_type())
     UpdateSyncToken(transferable.mailbox_holder.sync_token);
-  else
-    SetSynchronized();
 }
 
 DisplayResourceProvider::ChildResource::ChildResource(ChildResource&& other) =
     default;
 DisplayResourceProvider::ChildResource::~ChildResource() = default;
 
-void DisplayResourceProvider::ChildResource::SetLocallyUsed() {
-  synchronization_state_ = LOCALLY_USED;
-  sync_token_.Clear();
-}
-
-void DisplayResourceProvider::ChildResource::SetSynchronized() {
-  synchronization_state_ = SYNCHRONIZED;
-}
-
 void DisplayResourceProvider::ChildResource::UpdateSyncToken(
     const gpu::SyncToken& sync_token) {
   DCHECK(is_gpu_resource_type());
-  // An empty sync token may be used if commands are guaranteed to have run on
-  // the gpu process or in case of context loss.
   sync_token_ = sync_token;
-  synchronization_state_ = sync_token.HasData() ? NEEDS_WAIT : SYNCHRONIZED;
 }
 
 }  // namespace viz
diff --git a/components/viz/service/display/display_resource_provider.h b/components/viz/service/display/display_resource_provider.h
index be07f99..2908dd8 100644
--- a/components/viz/service/display/display_resource_provider.h
+++ b/components/viz/service/display/display_resource_provider.h
@@ -160,19 +160,6 @@
     const bool was_access_to_gpu_thread_allowed_;
   };
 
-  // Sets the current read fence. If a resource is locked for read
-  // and has read fences enabled, the resource will not allow writes
-  // until this fence has passed. This is used if a client uses
-  // TransferableResource::SynchronizationType::kGpuCommandsCompleted.
-  void SetGpuCommandsCompletedFence(ResourceFence* fence) {
-    current_gpu_commands_completed_fence_ = fence;
-  }
-  // Sets the current release fence. If a client uses
-  // TransferableResource::SynchronizationType::kReleaseFence, resources must be
-  // returned only after a release fence is stored in this resource fence.
-  // Returned only when gpu commands and the gpu fence are submitted.
-  void SetReleaseFence(ResourceFence* fence) { current_release_fence_ = fence; }
-
   // Creates accounting for a child. Returns a child ID. surface_id is used to
   // associate resources to the surface they belong to. This is used for
   // overlays on webview where overlays are updated outside of normal draw (i.e
@@ -222,35 +209,6 @@
     FOR_SHUTDOWN,
   };
 
-  enum SynchronizationState {
-    // The LOCALLY_USED state is the state each resource defaults to when
-    // constructed or modified or read. This state indicates that the
-    // resource has not been properly synchronized and it would be an error
-    // to return this resource to a client.
-    LOCALLY_USED,
-
-    // The NEEDS_WAIT state is the state that indicates a resource has been
-    // modified but it also has an associated sync token assigned to it.
-    // The sync token has not been waited on with the local context. When
-    // a sync token arrives from a client, it is automatically initialized as
-    // NEEDS_WAIT as well since we still need to wait on it before the resource
-    // is synchronized on the current context. It is an error to use the
-    // resource locally for reading or writing if the resource is in this state.
-    NEEDS_WAIT,
-
-    // The SYNCHRONIZED state indicates that the resource has been properly
-    // synchronized locally. This can either synchronized externally (such
-    // as the case of software rasterized bitmaps), or synchronized
-    // internally using a sync token that has been waited upon. In the
-    // former case where the resource was synchronized externally, a
-    // corresponding sync token will not exist. In the latter case which was
-    // synchronized from the NEEDS_WAIT state, a corresponding sync token will
-    // exist which is associated with the resource. This sync token is still
-    // valid and still associated with the resource and can be passed as an
-    // external resource for others to wait on.
-    SYNCHRONIZED,
-  };
-
   struct Child {
     Child();
     Child(Child&& other);
@@ -276,26 +234,13 @@
     ~ChildResource();
 
     bool is_gpu_resource_type() const { return !transferable.is_software; }
-    bool needs_sync_token() const {
-      return is_gpu_resource_type() && synchronization_state_ == LOCALLY_USED;
-    }
     const gpu::SyncToken& sync_token() const { return sync_token_; }
-    SynchronizationState synchronization_state() const {
-      return synchronization_state_;
-    }
-    // If true the gpu resource needs its SyncToken waited on in order to be
-    // synchronized for use.
-    bool ShouldWaitSyncToken() const {
-      return synchronization_state_ == NEEDS_WAIT;
-    }
 
     bool InUse() const {
       return lock_for_read_count > 0 || locked_for_external_use ||
              lock_for_overlay_count > 0;
     }
 
-    void SetLocallyUsed();
-    void SetSynchronized();
     void UpdateSyncToken(const gpu::SyncToken& sync_token);
 
     // This is the id of the client the resource comes from.
@@ -324,12 +269,6 @@
     // When the resource should be deleted until it is actually reaped.
     bool marked_for_deletion = false;
 
-    // Texture id for texture-backed resources, when the mailbox is mapped into
-    // a client GL id in this process.
-    GLuint gl_id = 0;
-    // The current min/mag filter for GL texture-backed resources. The original
-    // filter as given from the client is saved in |transferable|.
-    GLenum filter;
     // A pointer to the shared memory structure for software-backed resources,
     // when it is mapped into memory in this process.
     std::unique_ptr<SharedBitmap> shared_bitmap;
@@ -357,11 +296,9 @@
     gfx::GpuFenceHandle release_fence;
 
    private:
-    // Tracks if a sync token needs to be waited on before using the resource.
-    SynchronizationState synchronization_state_;
     // A SyncToken associated with a texture-backed or GpuMemoryBuffer-backed
     // resource. It is given from a child to the service, and waited on in order
-    // to use the resource, and this is tracked by the |synchronization_state_|.
+    // to use the resource.
     gpu::SyncToken sync_token_;
   };
 
@@ -409,8 +346,6 @@
   ChildMap children_;
 
   base::flat_map<int, std::vector<ResourceId>> batched_returning_resources_;
-  scoped_refptr<ResourceFence> current_gpu_commands_completed_fence_;
-  scoped_refptr<ResourceFence> current_release_fence_;
   // Keep track of whether deleted resources should be batched up or returned
   // immediately.
   int batch_return_resources_lock_count_ = 0;
diff --git a/components/viz/service/display/display_resource_provider_skia.h b/components/viz/service/display/display_resource_provider_skia.h
index 6fc3b43..e2f23424 100644
--- a/components/viz/service/display/display_resource_provider_skia.h
+++ b/components/viz/service/display/display_resource_provider_skia.h
@@ -72,6 +72,19 @@
     std::vector<std::pair<ResourceId, ChildResource*>> resources_;
   };
 
+  // Sets the current read fence. If a resource is locked for read
+  // and has read fences enabled, the resource will not allow writes
+  // until this fence has passed. This is used if a client uses
+  // TransferableResource::SynchronizationType::kGpuCommandsCompleted.
+  void SetGpuCommandsCompletedFence(ResourceFence* fence) {
+    current_gpu_commands_completed_fence_ = fence;
+  }
+  // Sets the current release fence. If a client uses
+  // TransferableResource::SynchronizationType::kReleaseFence, resources must be
+  // returned only after a release fence is stored in this resource fence.
+  // Returned only when gpu commands and the gpu fence are submitted.
+  void SetReleaseFence(ResourceFence* fence) { current_release_fence_ = fence; }
+
  private:
   // DisplayResourceProvider overrides:
   std::vector<ReturnedResource> DeleteAndReturnUnusedResourcesToChildImpl(
@@ -81,6 +94,9 @@
 
   // Used to release resources held by an external consumer.
   raw_ptr<ExternalUseClient> external_use_client_ = nullptr;
+
+  scoped_refptr<ResourceFence> current_gpu_commands_completed_fence_;
+  scoped_refptr<ResourceFence> current_release_fence_;
 };
 
 }  // namespace viz
diff --git a/components/viz/service/display_embedder/compositor_gpu_thread.cc b/components/viz/service/display_embedder/compositor_gpu_thread.cc
index 8ba3ef7..5c6e89c 100644
--- a/components/viz/service/display_embedder/compositor_gpu_thread.cc
+++ b/components/viz/service/display_embedder/compositor_gpu_thread.cc
@@ -40,8 +40,12 @@
     gpu::VulkanImplementation* vulkan_implementation,
     gpu::VulkanDeviceQueue* device_queue,
     bool enable_watchdog) {
-  if (!features::IsDrDcEnabled())
+  DCHECK(gpu_channel_manager);
+
+  if (!features::IsDrDcEnabled() ||
+      gpu_channel_manager->gpu_driver_bug_workarounds().disable_drdc) {
     return nullptr;
+  }
 
 #if BUILDFLAG(IS_ANDROID)
   // When using angle via enabling passthrough command decoder on android, angle
diff --git a/components/viz/service/gl/gpu_service_impl.cc b/components/viz/service/gl/gpu_service_impl.cc
index 4eab547..9c0cd7e 100644
--- a/components/viz/service/gl/gpu_service_impl.cc
+++ b/components/viz/service/gl/gpu_service_impl.cc
@@ -565,7 +565,8 @@
     // When using real buffers for testing overlay configurations, we need
     // access to SharedImageManager on the viz thread to obtain the buffer
     // corresponding to a mailbox.
-    const bool display_context_on_another_thread = features::IsDrDcEnabled();
+    const bool display_context_on_another_thread =
+        features::IsDrDcEnabled() && !gpu_driver_bug_workarounds_.disable_drdc;
     bool thread_safe_manager = display_context_on_another_thread;
     // Raw draw needs to access shared image backing on the compositor thread.
     thread_safe_manager |= features::IsUsingRawDraw();
diff --git a/components/webapps/browser/BUILD.gn b/components/webapps/browser/BUILD.gn
index 76e56c9..6daa65c 100644
--- a/components/webapps/browser/BUILD.gn
+++ b/components/webapps/browser/BUILD.gn
@@ -10,6 +10,7 @@
   sources = [
     "install_result_code.cc",
     "install_result_code.h",
+    "uninstall_result_code.cc",
     "uninstall_result_code.h",
   ]
 }
diff --git a/components/webapps/browser/installable/installable_metrics.h b/components/webapps/browser/installable/installable_metrics.h
index 39d0c3d..de6a691 100644
--- a/components/webapps/browser/installable/installable_metrics.h
+++ b/components/webapps/browser/installable/installable_metrics.h
@@ -171,8 +171,12 @@
   // yet been fully uninstalled are re-uninstalled.
   kStartupCleanup = 16,
 
+  // Used to track uninstalls for web_apps which are installed as sub-apps and
+  // are being removed because of the removal of the parent app.
+  kParentUninstall = 17,
+
   // Add any new values above this one.
-  kMaxValue = kStartupCleanup,
+  kMaxValue = kParentUninstall,
 };
 
 // This is the result of the promotability check that is recorded in the
diff --git a/components/webapps/browser/uninstall_result_code.cc b/components/webapps/browser/uninstall_result_code.cc
new file mode 100644
index 0000000..74e9ecfa
--- /dev/null
+++ b/components/webapps/browser/uninstall_result_code.cc
@@ -0,0 +1,24 @@
+// 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/webapps/browser/uninstall_result_code.h"
+
+#include <string>
+
+namespace webapps {
+
+std::string ConvertUninstallResultCodeToString(UninstallResultCode code) {
+  switch (code) {
+    case UninstallResultCode::kSuccess:
+      return "Success";
+    case UninstallResultCode::kNoAppToUninstall:
+      return "No App found for uninstall";
+    case UninstallResultCode::kCancelled:
+      return "Uninstall cancelled";
+    case UninstallResultCode::kError:
+      return "Error";
+  }
+}
+
+}  // namespace webapps
diff --git a/components/webapps/browser/uninstall_result_code.h b/components/webapps/browser/uninstall_result_code.h
index e130234..327af68 100644
--- a/components/webapps/browser/uninstall_result_code.h
+++ b/components/webapps/browser/uninstall_result_code.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_WEBAPPS_BROWSER_UNINSTALL_RESULT_CODE_H_
 #define COMPONENTS_WEBAPPS_BROWSER_UNINSTALL_RESULT_CODE_H_
 
+#include <string>
+
 namespace webapps {
 
 enum class UninstallResultCode {
@@ -13,6 +15,9 @@
   kCancelled,
   kError,
 };
-}
+
+std::string ConvertUninstallResultCodeToString(UninstallResultCode code);
+
+}  // namespace webapps
 
 #endif  // COMPONENTS_WEBAPPS_BROWSER_UNINSTALL_RESULT_CODE_H_
diff --git a/content/browser/accessibility/accessibility_auralinux_browsertest.cc b/content/browser/accessibility/accessibility_auralinux_browsertest.cc
index b529935..b08f4ab 100644
--- a/content/browser/accessibility/accessibility_auralinux_browsertest.cc
+++ b/content/browser/accessibility/accessibility_auralinux_browsertest.cc
@@ -2066,11 +2066,13 @@
   AtkObject* document = GetRendererAccessible();
   ASSERT_TRUE(ATK_IS_COMPONENT(document));
 
-  auto* node = static_cast<ui::AXPlatformNodeAuraLinux*>(
-      ui::AXPlatformNode::FromNativeViewAccessible(document));
-  std::pair<int, int> offsets = node->GetSelectionOffsetsForAtk();
-  EXPECT_EQ(0, offsets.first);
-  EXPECT_EQ(3, offsets.second);
+  {
+    auto* node = static_cast<ui::AXPlatformNodeAuraLinux*>(
+        ui::AXPlatformNode::FromNativeViewAccessible(document));
+    std::pair<int, int> offsets = node->GetSelectionOffsetsForAtk();
+    EXPECT_EQ(0, offsets.first);
+    EXPECT_EQ(3, offsets.second);
+  }
 
   std::vector<int> expected = {12, 18, 14};  // text length of each child
   int number_of_children = atk_object_get_n_accessible_children(document);
diff --git a/content/browser/aggregation_service/COMMON_METADATA b/content/browser/aggregation_service/COMMON_METADATA
index 4f8aa58..de41146 100644
--- a/content/browser/aggregation_service/COMMON_METADATA
+++ b/content/browser/aggregation_service/COMMON_METADATA
@@ -1,4 +1,4 @@
 monorail {
-  component: "Internals>ConversionMeasurement"
+  component: "Internals>AttributionReporting"
 }
 team_email: "privacy-sandbox-dev@chromium.org"
diff --git a/content/browser/aggregation_service/aggregatable_report_unittest.cc b/content/browser/aggregation_service/aggregatable_report_unittest.cc
index fd6df45..ed4212d5 100644
--- a/content/browser/aggregation_service/aggregatable_report_unittest.cc
+++ b/content/browser/aggregation_service/aggregatable_report_unittest.cc
@@ -108,9 +108,9 @@
 
         ASSERT_EQ(data_array.size(),
                   expected_payload_contents.contributions.size());
-        for (size_t i = 0; i < data_array.size(); ++i) {
-          ASSERT_TRUE(data_array[i].is_map());
-          const cbor::Value::MapValue& data_map = data_array[i].GetMap();
+        for (size_t j = 0; j < data_array.size(); ++j) {
+          ASSERT_TRUE(data_array[j].is_map());
+          const cbor::Value::MapValue& data_map = data_array[j].GetMap();
 
           ASSERT_TRUE(CborMapContainsKeyAndType(
               data_map, "bucket", cbor::Value::Type::BYTE_STRING));
@@ -123,7 +123,7 @@
           absl::uint128 bucket;
           base::HexStringToUInt128(base::HexEncode(bucket_byte_string),
                                    &bucket);
-          EXPECT_EQ(bucket, expected_payload_contents.contributions[i].bucket);
+          EXPECT_EQ(bucket, expected_payload_contents.contributions[j].bucket);
 
           ASSERT_TRUE(CborMapContainsKeyAndType(
               data_map, "value", cbor::Value::Type::BYTE_STRING));
@@ -136,7 +136,7 @@
           uint32_t value;
           base::HexStringToUInt(base::HexEncode(value_byte_string), &value);
           EXPECT_EQ(static_cast<int64_t>(value),
-                    expected_payload_contents.contributions[i].value);
+                    expected_payload_contents.contributions[j].value);
         }
 
         EXPECT_FALSE(payload_map.contains(cbor::Value("dpf_key")));
diff --git a/content/browser/attribution_reporting/COMMON_METADATA b/content/browser/attribution_reporting/COMMON_METADATA
index 4f8aa58..de41146 100644
--- a/content/browser/attribution_reporting/COMMON_METADATA
+++ b/content/browser/attribution_reporting/COMMON_METADATA
@@ -1,4 +1,4 @@
 monorail {
-  component: "Internals>ConversionMeasurement"
+  component: "Internals>AttributionReporting"
 }
 team_email: "privacy-sandbox-dev@chromium.org"
diff --git a/content/browser/browsing_data/browsing_data_remover_impl.cc b/content/browser/browsing_data/browsing_data_remover_impl.cc
index 4fb0f7b..82ac565 100644
--- a/content/browser/browsing_data/browsing_data_remover_impl.cc
+++ b/content/browser/browsing_data/browsing_data_remover_impl.cc
@@ -429,6 +429,10 @@
     storage_partition_remove_mask |=
         StoragePartition::REMOVE_DATA_MASK_AGGREGATION_SERVICE;
   }
+  if (remove_mask & DATA_TYPE_PRIVATE_AGGREGATION_INTERNAL) {
+    storage_partition_remove_mask |=
+        StoragePartition::REMOVE_DATA_MASK_PRIVATE_AGGREGATION_INTERNAL;
+  }
   if (remove_mask & DATA_TYPE_INTEREST_GROUPS) {
     storage_partition_remove_mask |=
         StoragePartition::REMOVE_DATA_MASK_INTEREST_GROUPS;
diff --git a/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc b/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc
index f09421c..5311e0d 100644
--- a/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc
+++ b/content/browser/browsing_data/browsing_data_remover_impl_unittest.cc
@@ -1371,6 +1371,15 @@
             StoragePartition::REMOVE_DATA_MASK_AGGREGATION_SERVICE);
 }
 
+TEST_F(BrowsingDataRemoverImplTest, RemovePrivateAggregationData) {
+  BlockUntilBrowsingDataRemoved(
+      base::Time(), base::Time::Max(),
+      BrowsingDataRemover::DATA_TYPE_PRIVATE_AGGREGATION_INTERNAL, false);
+  StoragePartitionRemovalData removal_data = GetStoragePartitionRemovalData();
+  EXPECT_EQ(removal_data.remove_mask,
+            StoragePartition::REMOVE_DATA_MASK_PRIVATE_AGGREGATION_INTERNAL);
+}
+
 class MultipleTasksObserver {
  public:
   // A simple implementation of BrowsingDataRemover::Observer.
diff --git a/content/browser/browsing_data/clear_site_data_handler_browsertest.cc b/content/browser/browsing_data/clear_site_data_handler_browsertest.cc
index 101d1d0..ae40168 100644
--- a/content/browser/browsing_data/clear_site_data_handler_browsertest.cc
+++ b/content/browser/browsing_data/clear_site_data_handler_browsertest.cc
@@ -106,7 +106,7 @@
                    : 0) |
           (cache ? BrowsingDataRemover::DATA_TYPE_CACHE : 0);
       data_type_mask &=
-          ~BrowsingDataRemover::DATA_TYPE_ATTRIBUTION_REPORTING_INTERNAL;
+          ~BrowsingDataRemover::DATA_TYPE_PRIVACY_SANDBOX_INTERNAL;
 
       BrowsingDataFilterBuilderImpl filter_builder(
           BrowsingDataFilterBuilder::Mode::kDelete);
diff --git a/content/browser/browsing_data/clear_site_data_utils.cc b/content/browser/browsing_data/clear_site_data_utils.cc
index b6c75de6..c7754d7 100644
--- a/content/browser/browsing_data/clear_site_data_utils.cc
+++ b/content/browser/browsing_data/clear_site_data_utils.cc
@@ -98,8 +98,7 @@
       remove_mask |= BrowsingDataRemover::DATA_TYPE_DOM_STORAGE;
       remove_mask |= BrowsingDataRemover::DATA_TYPE_PRIVACY_SANDBOX;
       // Internal data should not be removed by site-initiated deletions.
-      remove_mask &=
-          ~BrowsingDataRemover::DATA_TYPE_ATTRIBUTION_REPORTING_INTERNAL;
+      remove_mask &= ~BrowsingDataRemover::DATA_TYPE_PRIVACY_SANDBOX_INTERNAL;
     }
     if (clear_cache_)
       remove_mask |= BrowsingDataRemover::DATA_TYPE_CACHE;
diff --git a/content/browser/compositor/test/test_image_transport_factory.cc b/content/browser/compositor/test/test_image_transport_factory.cc
index 4559caf..7fcab06e 100644
--- a/content/browser/compositor/test/test_image_transport_factory.cc
+++ b/content/browser/compositor/test/test_image_transport_factory.cc
@@ -48,8 +48,9 @@
 
 void TestImageTransportFactory::CreateLayerTreeFrameSink(
     base::WeakPtr<ui::Compositor> compositor) {
-  compositor->SetLayerTreeFrameSink(cc::FakeLayerTreeFrameSink::Create3d(),
-                                    nullptr);
+  compositor->SetLayerTreeFrameSink(
+      cc::FakeLayerTreeFrameSink::Create3d(),
+      mojo::AssociatedRemote<viz::mojom::DisplayPrivate>());
 }
 
 scoped_refptr<viz::ContextProvider>
diff --git a/content/browser/compositor/viz_process_transport_factory.cc b/content/browser/compositor/viz_process_transport_factory.cc
index 46471262..33fb401 100644
--- a/content/browser/compositor/viz_process_transport_factory.cc
+++ b/content/browser/compositor/viz_process_transport_factory.cc
@@ -38,8 +38,11 @@
 #include "gpu/command_buffer/client/gles2_interface.h"
 #include "gpu/command_buffer/client/raster_interface.h"
 #include "gpu/ipc/client/gpu_channel_host.h"
+#include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
+#include "services/viz/privileged/mojom/compositing/display_private.mojom.h"
+#include "services/viz/privileged/mojom/compositing/external_begin_frame_controller.mojom.h"
 #include "services/viz/public/cpp/gpu/context_provider_command_buffer.h"
 #include "ui/base/ui_base_features.h"
 
@@ -378,18 +381,18 @@
   mojo::PendingReceiver<viz::mojom::CompositorFrameSinkClient> client_receiver =
       root_params->compositor_frame_sink_client
           .InitWithNewPipeAndPassReceiver();
-  compositor_data.display_private.reset();
+  mojo::AssociatedRemote<viz::mojom::DisplayPrivate> display_private;
   root_params->display_private =
-      compositor_data.display_private.BindNewEndpointAndPassReceiver();
+      display_private.BindNewEndpointAndPassReceiver();
   compositor_data.display_client =
       std::make_unique<HostDisplayClient>(compositor);
   root_params->display_client =
       compositor_data.display_client->GetBoundRemote(resize_task_runner_);
-
+  mojo::AssociatedRemote<viz::mojom::ExternalBeginFrameController>
+      external_begin_frame_controller;
   if (compositor->use_external_begin_frame_control()) {
     root_params->external_begin_frame_controller =
-        compositor_data.external_begin_frame_controller
-            .BindNewEndpointAndPassReceiver();
+        external_begin_frame_controller.BindNewEndpointAndPassReceiver();
   }
 
   root_params->frame_sink_id = compositor->frame_sink_id();
@@ -427,10 +430,10 @@
           std::move(context_provider), std::move(worker_context_provider),
           &params);
   compositor->SetLayerTreeFrameSink(std::move(frame_sink),
-                                    compositor_data.display_private.get());
+                                    std::move(display_private));
   if (compositor->use_external_begin_frame_control()) {
     compositor->SetExternalBeginFrameController(
-        compositor_data.external_begin_frame_controller.get());
+        std::move(external_begin_frame_controller));
   }
 
 #if BUILDFLAG(IS_WIN)
diff --git a/content/browser/compositor/viz_process_transport_factory.h b/content/browser/compositor/viz_process_transport_factory.h
index 4473da8..390093e 100644
--- a/content/browser/compositor/viz_process_transport_factory.h
+++ b/content/browser/compositor/viz_process_transport_factory.h
@@ -14,9 +14,6 @@
 #include "content/browser/compositor/image_transport_factory.h"
 #include "gpu/command_buffer/common/context_result.h"
 #include "gpu/ipc/client/gpu_channel_host.h"
-#include "mojo/public/cpp/bindings/associated_remote.h"
-#include "services/viz/privileged/mojom/compositing/display_private.mojom.h"
-#include "services/viz/privileged/mojom/compositing/external_begin_frame_controller.mojom.h"
 #include "services/viz/privileged/mojom/compositing/frame_sink_manager.mojom.h"
 #include "services/viz/public/mojom/compositing/compositor_frame_sink.mojom.h"
 #include "ui/compositor/compositor.h"
@@ -90,12 +87,7 @@
     CompositorData& operator=(CompositorData&& other);
     ~CompositorData();
 
-    // Privileged interface that controls the display for a root
-    // CompositorFrameSink.
-    mojo::AssociatedRemote<viz::mojom::DisplayPrivate> display_private;
     std::unique_ptr<viz::HostDisplayClient> display_client;
-    mojo::AssociatedRemote<viz::mojom::ExternalBeginFrameController>
-        external_begin_frame_controller;
   };
 
   // Disables GPU compositing. This notifies UI and renderer compositors to drop
diff --git a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
index ff2affa..acf3ede 100644
--- a/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
+++ b/content/browser/devtools/protocol/devtools_protocol_browsertest.cc
@@ -2009,23 +2009,25 @@
   ASSERT_TRUE(cookies);
   EXPECT_EQ(1u, cookies->size());
 
-  const base::Value& cookie_value = cookies->front();
-  EXPECT_TRUE(cookie_value.is_dict());
-  const base::DictionaryValue& cookie =
-      base::Value::AsDictionaryValue(cookie_value);
   std::string name;
   std::string value;
-  EXPECT_TRUE(cookie.GetString("name", &name));
-  EXPECT_TRUE(cookie.GetString("value", &value));
-  EXPECT_EQ("cookie_for_this_url", name);
-  EXPECT_EQ("mendacious", value);
+  {
+    const base::Value& cookie_value = cookies->front();
+    EXPECT_TRUE(cookie_value.is_dict());
+    const base::DictionaryValue& cookie =
+        base::Value::AsDictionaryValue(cookie_value);
+    EXPECT_TRUE(cookie.GetString("name", &name));
+    EXPECT_TRUE(cookie.GetString("value", &value));
+    EXPECT_EQ("cookie_for_this_url", name);
+    EXPECT_EQ("mendacious", value);
 
-  // Then get all the cookies in the cookie jar.
-  SendCommandSync("Network.getAllCookies");
+    // Then get all the cookies in the cookie jar.
+    SendCommandSync("Network.getAllCookies");
 
-  cookies = result()->FindList("cookies");
-  ASSERT_TRUE(cookies);
-  EXPECT_EQ(2u, cookies->size());
+    cookies = result()->FindList("cookies");
+    ASSERT_TRUE(cookies);
+    EXPECT_EQ(2u, cookies->size());
+  }
 
   // Note: the cookies will be returned in unspecified order.
   size_t found = 0;
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc
index 4a6f20d..d350c78 100644
--- a/content/browser/devtools/protocol/page_handler.cc
+++ b/content/browser/devtools/protocol/page_handler.cc
@@ -1468,6 +1468,8 @@
       return Page::PrerenderFinalStatusEnum::TriggerDestroyed;
     case PrerenderHost::FinalStatus::kUaChangeRequiresReload:
       return Page::PrerenderFinalStatusEnum::UaChangeRequiresReload;
+    case PrerenderHost::FinalStatus::kHasEffectiveUrl:
+      return Page::PrerenderFinalStatusEnum::HasEffectiveUrl;
   }
 }
 
diff --git a/content/browser/devtools/protocol/webauthn_handler.cc b/content/browser/devtools/protocol/webauthn_handler.cc
index 7328687..aee0e02 100644
--- a/content/browser/devtools/protocol/webauthn_handler.cc
+++ b/content/browser/devtools/protocol/webauthn_handler.cc
@@ -160,15 +160,14 @@
     return Response::ServerError(kDevToolsNotAttached);
 
   AuthenticatorEnvironmentImpl::GetInstance()->EnableVirtualAuthenticatorFor(
-      frame_host_->frame_tree_node(),
-      enable_ui.fromMaybe(/*default_value=*/false));
+      frame_host_, enable_ui.fromMaybe(/*default_value=*/false));
   return Response::Success();
 }
 
 Response WebAuthnHandler::Disable() {
   if (frame_host_) {
     AuthenticatorEnvironmentImpl::GetInstance()->DisableVirtualAuthenticatorFor(
-        frame_host_->frame_tree_node());
+        frame_host_);
   }
   return Response::Success();
 }
@@ -178,7 +177,7 @@
     String* out_authenticator_id) {
   VirtualAuthenticatorManagerImpl* authenticator_manager =
       AuthenticatorEnvironmentImpl::GetInstance()
-          ->MaybeGetVirtualAuthenticatorManager(frame_host_->frame_tree_node());
+          ->MaybeGetVirtualAuthenticatorManager(frame_host_);
   if (!authenticator_manager)
     return Response::ServerError(kVirtualEnvironmentNotEnabled);
 
@@ -262,7 +261,7 @@
     const String& authenticator_id) {
   VirtualAuthenticatorManagerImpl* authenticator_manager =
       AuthenticatorEnvironmentImpl::GetInstance()
-          ->MaybeGetVirtualAuthenticatorManager(frame_host_->frame_tree_node());
+          ->MaybeGetVirtualAuthenticatorManager(frame_host_);
   if (!authenticator_manager)
     return Response::ServerError(kVirtualEnvironmentNotEnabled);
 
@@ -456,7 +455,7 @@
   *out_authenticator = nullptr;
   VirtualAuthenticatorManagerImpl* authenticator_manager =
       AuthenticatorEnvironmentImpl::GetInstance()
-          ->MaybeGetVirtualAuthenticatorManager(frame_host_->frame_tree_node());
+          ->MaybeGetVirtualAuthenticatorManager(frame_host_);
   if (!authenticator_manager)
     return Response::ServerError(kVirtualEnvironmentNotEnabled);
 
diff --git a/content/browser/fenced_frame/fenced_frame_browsertest.cc b/content/browser/fenced_frame/fenced_frame_browsertest.cc
index bf4a096..393ad4c9 100644
--- a/content/browser/fenced_frame/fenced_frame_browsertest.cc
+++ b/content/browser/fenced_frame/fenced_frame_browsertest.cc
@@ -1978,12 +1978,15 @@
 // Tests that the fenced frame gets navigated to an actual url given a urn:uuid.
 IN_PROC_BROWSER_TEST_P(FencedFrameParameterizedBrowserTest,
                        CheckFencedFrameNavigationWithUUID) {
+  base::HistogramTester histogram_tester;
   GURL main_url = https_server()->GetURL("b.test", "/hello.html");
   EXPECT_TRUE(NavigateToURL(shell(), main_url));
   // It is safe to obtain the root frame tree node here, as it doesn't change.
   FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
                             ->GetPrimaryFrameTree()
                             .root();
+  histogram_tester.ExpectTotalCount(
+      "Navigation.BrowserMappedUrnUuidInIframeOrFencedFrame", 0);
 
   {
     EXPECT_TRUE(ExecJs(root,
@@ -2007,11 +2010,24 @@
   std::string navigate_urn_script = JsReplace("f.src = $1;", urn_uuid);
 
   {
-    TestFrameNavigationObserver observer(fenced_frame_root_node);
+    TestFrameNavigationObserver navigation_observer(fenced_frame_root_node);
+    WebContentsConsoleObserver console_observer(web_contents());
+    auto filter =
+        [](const content::WebContentsConsoleObserver::Message& message) {
+          return message.log_level ==
+                 blink::mojom::ConsoleMessageLevel::kWarning;
+        };
+    console_observer.SetFilter(base::BindRepeating(filter));
+    console_observer.SetPattern(
+        "FLEDGE will deprecate supporting iframes to render the winning ad*");
     EXPECT_EQ(urn_uuid.spec(), EvalJs(root, navigate_urn_script));
-    observer.WaitForCommit();
+    navigation_observer.WaitForCommit();
+    // No console warning is emitted for urn::uuid navigation in fenced frames.
+    EXPECT_TRUE(console_observer.messages().empty());
   }
 
+  histogram_tester.ExpectBucketCount(
+      "Navigation.BrowserMappedUrnUuidInIframeOrFencedFrame", 0, 1);
   EXPECT_EQ(
       https_url,
       fenced_frame_root_node->current_frame_host()->GetLastCommittedURL());
@@ -4818,9 +4834,12 @@
 
 IN_PROC_BROWSER_TEST_P(UUIDFrameTreeBrowserTest,
                        CheckIframeNavigationWithUUID) {
+  base::HistogramTester histogram_tester;
   GURL main_url = https_server()->GetURL("b.test", "/hello.html");
   GURL initial_frame_url = https_server()->GetURL("a.test", "/hello.html");
   EXPECT_TRUE(NavigateToURL(shell(), main_url));
+  histogram_tester.ExpectTotalCount(
+      "Navigation.BrowserMappedUrnUuidInIframeOrFencedFrame", 0);
 
   // It is safe to obtain the root frame tree node here, as it doesn't change.
   FrameTreeNode* root = web_contents()->GetPrimaryFrameTree().root();
@@ -4835,6 +4854,8 @@
   // Initially navigate the iframe to somewhere specific.
   EXPECT_TRUE(NavigateIframeAndCheckURL(web_contents(), "test_iframe",
                                         initial_frame_url, initial_frame_url));
+  histogram_tester.ExpectTotalCount(
+      "Navigation.BrowserMappedUrnUuidInIframeOrFencedFrame", 0);
 
   GURL frame_url(
       https_server()->GetURL("a.test", "/fenced_frames/title1.html"));
@@ -4842,14 +4863,39 @@
       root->current_frame_host()->GetPage().fenced_frame_urls_map();
   auto urn_uuid = AddAndVerifyFencedFrameURL(&url_mapping, frame_url);
 
+  WebContentsConsoleObserver console_observer(web_contents());
+  auto filter =
+      [](const content::WebContentsConsoleObserver::Message& message) {
+        return message.log_level == blink::mojom::ConsoleMessageLevel::kWarning;
+      };
+  console_observer.SetFilter(base::BindRepeating(filter));
+  console_observer.SetPattern(
+      "FLEDGE will deprecate supporting iframes to render the winning ad*");
+
   if (GetParam()) {
     // If the feature is enabled, we should navigate to the mapped page.
     EXPECT_TRUE(NavigateIframeAndCheckURL(web_contents(), "test_iframe",
                                           urn_uuid, frame_url));
+    histogram_tester.ExpectBucketCount(
+        "Navigation.BrowserMappedUrnUuidInIframeOrFencedFrame", 1, 1);
+    // A console warning is emitted during navigation. This will be removed
+    // once navigation support for urn::uuid in iframes is deprecated.
+    // TODO(crbug.com/1355857)
+    EXPECT_FALSE(console_observer.messages().empty());
+    EXPECT_EQ(
+        console_observer.GetMessageAt(0),
+        "FLEDGE will deprecate supporting iframes to render the winning ad. "
+        "Please use fenced frames instead. See "
+        "https://developer.chrome.com/en/docs/privacy-sandbox/fenced-frame/"
+        "#examples");
   } else {
     // If the feature is disabled, navigation should fail.
     EXPECT_FALSE(NavigateIframeAndCheckURL(web_contents(), "test_iframe",
                                            urn_uuid, GURL()));
+    histogram_tester.ExpectBucketCount(
+        "Navigation.BrowserMappedUrnUuidInIframeOrFencedFrame", 1, 0);
+    // No console warning is emitted if the feature is disabled.
+    EXPECT_TRUE(console_observer.messages().empty());
   }
 
   // Parent will still see the src as the urn_uuid and not the mapped url.
diff --git a/content/browser/interest_group/interest_group_auction.cc b/content/browser/interest_group/interest_group_auction.cc
index 9b9501f..05553be9 100644
--- a/content/browser/interest_group/interest_group_auction.cc
+++ b/content/browser/interest_group/interest_group_auction.cc
@@ -478,7 +478,9 @@
             bid_state);
     bid_state->worklet_handle->GetBidderWorklet()->GenerateBid(
         auction_worklet::mojom::BidderWorkletNonSharedParams::New(
-            interest_group.name, interest_group.execution_mode,
+            interest_group.name,
+            interest_group.enable_bidding_signals_prioritization,
+            interest_group.priority_vector, interest_group.execution_mode,
             interest_group.daily_update_url,
             interest_group.trusted_bidding_signals_keys,
             interest_group.user_bidding_signals, interest_group.ads,
diff --git a/content/browser/interest_group/interest_group_browsertest.cc b/content/browser/interest_group/interest_group_browsertest.cc
index 82d7f48..bdf08ab 100644
--- a/content/browser/interest_group/interest_group_browsertest.cc
+++ b/content/browser/interest_group/interest_group_browsertest.cc
@@ -6100,9 +6100,9 @@
           /*expiry=*/base::Time(),
           /*owner=*/bidder_origin,
           /*name=*/"cars",
-          /*priority=*/0.0, /*enable_bidding_signals_prioritization=*/false,
-          /*priority_vector=*/absl::nullopt,
-          /*priority_signals_overrides=*/absl::nullopt, /*execution_mode=*/
+          /*priority=*/0.0, /*enable_bidding_signals_prioritization=*/true,
+          /*priority_vector=*/{{{"foo", 2}, {"bar", -11}}},
+          /*priority_signals_overrides=*/{{{"foo", 1}}}, /*execution_mode=*/
           blink::InterestGroup::ExecutionMode::kCompatibilityMode,
           /*bidding_url=*/
           https_server_->GetURL(
@@ -6180,9 +6180,9 @@
           /*expiry=*/base::Time(),
           /*owner=*/bidder_origin,
           /*name=*/"cars",
-          /*priority=*/0.0, /*enable_bidding_signals_prioritization=*/false,
-          /*priority_vector=*/absl::nullopt,
-          /*priority_signals_overrides=*/absl::nullopt, /*execution_mode=*/
+          /*priority=*/0.0, /*enable_bidding_signals_prioritization=*/true,
+          /*priority_vector=*/{{{"foo", 2}, {"bar", -11}}},
+          /*priority_signals_overrides=*/{{{"foo", 1}}}, /*execution_mode=*/
           blink::InterestGroup::ExecutionMode::kCompatibilityMode,
           /*bidding_url=*/
           https_server_->GetURL(
@@ -6267,8 +6267,8 @@
           /*owner=*/bidder_origin,
           /*name=*/"cars",
           /*priority=*/0.0, /*enable_bidding_signals_prioritization=*/false,
-          /*priority_vector=*/absl::nullopt,
-          /*priority_signals_overrides=*/absl::nullopt, /*execution_mode=*/
+          /*priority_vector=*/{{{"FOO", 2}}},
+          /*priority_signals_overrides=*/{{{"FOO", 1}}}, /*execution_mode=*/
           blink::InterestGroup::ExecutionMode::kCompatibilityMode,
           /*bidding_url=*/
           https_server_->GetURL(
diff --git a/content/browser/portal/portal_browsertest.cc b/content/browser/portal/portal_browsertest.cc
index b2a75a99..7e3e475 100644
--- a/content/browser/portal/portal_browsertest.cc
+++ b/content/browser/portal/portal_browsertest.cc
@@ -2150,8 +2150,6 @@
     EXPECT_EQ(blink::mojom::PortalActivateResult::kPredecessorWasAdopted,
               activated_observer.WaitForActivateResult());
     adoption_observer.WaitUntilPortalCreated();
-    // TODO(https://crbug.com/1332461): Investigate why this does not return
-    // true.
     ASSERT_TRUE(waiter.WaitForNotification());
   }
   EXPECT_EQ(0, main_frame->accessibility_fatal_error_count_for_testing());
diff --git a/content/browser/preloading/prerender/prerender_host.cc b/content/browser/preloading/prerender/prerender_host.cc
index 9fe41026..3ab5db58 100644
--- a/content/browser/preloading/prerender/prerender_host.cc
+++ b/content/browser/preloading/prerender/prerender_host.cc
@@ -733,6 +733,7 @@
     case FinalStatus::kMemoryLimitExceeded:
     case FinalStatus::kFailToGetMemoryUsage:
     case FinalStatus::kDataSaverEnabled:
+    case FinalStatus::kHasEffectiveUrl:
       attempt_->SetFailureReason(ToPreloadingFailureReason(status));
       return;
   }
diff --git a/content/browser/preloading/prerender/prerender_host.h b/content/browser/preloading/prerender/prerender_host.h
index 2caf0a23..710c139f 100644
--- a/content/browser/preloading/prerender/prerender_host.h
+++ b/content/browser/preloading/prerender/prerender_host.h
@@ -111,7 +111,8 @@
     kMemoryLimitExceeded = 36,
     kFailToGetMemoryUsage = 37,
     kDataSaverEnabled = 38,
-    kMaxValue = kDataSaverEnabled,
+    kHasEffectiveUrl = 39,
+    kMaxValue = kHasEffectiveUrl,
   };
 
   // These values are persisted to logs. Entries should not be renumbered and
diff --git a/content/browser/preloading/prerender/prerender_host_registry.cc b/content/browser/preloading/prerender/prerender_host_registry.cc
index 8460d57b..8566627 100644
--- a/content/browser/preloading/prerender/prerender_host_registry.cc
+++ b/content/browser/preloading/prerender/prerender_host_registry.cc
@@ -168,6 +168,17 @@
       }
     }
 
+    // Disallow all pages that have an effective URL like host apps and NTP.
+    if (SiteInstanceImpl::HasEffectiveURL(web_contents.GetBrowserContext(),
+                                          web_contents.GetURL())) {
+      RecordPrerenderHostFinalStatus(
+          PrerenderHost::FinalStatus::kHasEffectiveUrl, attributes,
+          ukm::kInvalidSourceId);
+      if (attempt)
+        attempt->SetEligibility(PreloadingEligibility::kHasEffectiveUrl);
+      return RenderFrameHost::kNoFrameTreeNodeId;
+    }
+
     // Once all eligibility checks are completed, set the status to kEligible.
     if (attempt)
       attempt->SetEligibility(PreloadingEligibility::kEligible);
diff --git a/content/browser/preloading/prerender/prerender_host_registry_unittest.cc b/content/browser/preloading/prerender/prerender_host_registry_unittest.cc
index a921eeb..5b2c937e 100644
--- a/content/browser/preloading/prerender/prerender_host_registry_unittest.cc
+++ b/content/browser/preloading/prerender/prerender_host_registry_unittest.cc
@@ -1023,6 +1023,38 @@
                   .has_potentially_trustworthy_unique_origin);
 }
 
+TEST_F(PrerenderHostRegistryTest, DisallowPageHavingEffectiveUrl) {
+  const GURL kOriginalUrl("https://example.com/");
+  const GURL kModifiedSiteUrl("custom-scheme://custom");
+
+  EffectiveURLContentBrowserClient modified_client(
+      kOriginalUrl, kModifiedSiteUrl,
+      /* requires_dedicated_process */ false);
+  ContentBrowserClient* old_client =
+      SetBrowserClientForTesting(&modified_client);
+
+  std::unique_ptr<TestWebContents> web_contents =
+      CreateWebContents(kOriginalUrl);
+  RenderFrameHostImpl* render_frame_host = web_contents->GetPrimaryMainFrame();
+  ASSERT_TRUE(render_frame_host);
+
+  const GURL kPrerenderingUrl = GURL("https://example.com/empty.html");
+  RenderFrameHostImpl* initiator_rfh = web_contents->GetPrimaryMainFrame();
+  PrerenderHostRegistry* registry = web_contents->GetPrerenderHostRegistry();
+  const int prerender_frame_tree_node_id = registry->CreateAndStartHost(
+      GeneratePrerenderAttributes(kPrerenderingUrl,
+                                  PrerenderTriggerType::kSpeculationRule, "",
+                                  initiator_rfh),
+      *web_contents);
+  EXPECT_EQ(prerender_frame_tree_node_id, RenderFrameHost::kNoFrameTreeNodeId);
+  PrerenderHost* prerender_host =
+      registry->FindNonReservedHostById(prerender_frame_tree_node_id);
+  EXPECT_EQ(prerender_host, nullptr);
+  ExpectUniqueSampleOfFinalStatus(PrerenderHost::FinalStatus::kHasEffectiveUrl);
+
+  SetBrowserClientForTesting(old_client);
+}
+
 // End replication state matching tests ------------
 
 }  // namespace
diff --git a/content/browser/preloading/prerender/prerender_internals_handler_impl.cc b/content/browser/preloading/prerender/prerender_internals_handler_impl.cc
index 61f5e003..81f26b26 100644
--- a/content/browser/preloading/prerender/prerender_internals_handler_impl.cc
+++ b/content/browser/preloading/prerender/prerender_internals_handler_impl.cc
@@ -82,6 +82,8 @@
       return "FailToGetMemoryUsage";
     case PrerenderHost::FinalStatus::kDataSaverEnabled:
       return "DataSaverEnabled";
+    case PrerenderHost::FinalStatus::kHasEffectiveUrl:
+      return "HasEffectiveUrl";
   }
   NOTREACHED();
   return "";
diff --git a/content/browser/private_aggregation/private_aggregation_budget_key.h b/content/browser/private_aggregation/private_aggregation_budget_key.h
index 08acfc7..ee36a34 100644
--- a/content/browser/private_aggregation/private_aggregation_budget_key.h
+++ b/content/browser/private_aggregation/private_aggregation_budget_key.h
@@ -25,6 +25,8 @@
   // Represents a period of time for which budget usage is recorded. This
   // interval includes the `start_time()` instant but excludes the end time
   // (`start_time() + kDuration`) instant.
+  // TODO(crbug.com/1353473): Ensure `base::Time::Min()` and nearby times are
+  // handled correctly.
   class TimeWindow {
    public:
     static constexpr base::TimeDelta kDuration = base::Hours(1);
diff --git a/content/browser/private_aggregation/private_aggregation_budgeter.cc b/content/browser/private_aggregation/private_aggregation_budgeter.cc
index 6535d68..2406597 100644
--- a/content/browser/private_aggregation/private_aggregation_budgeter.cc
+++ b/content/browser/private_aggregation/private_aggregation_budgeter.cc
@@ -25,7 +25,10 @@
 #include "content/browser/private_aggregation/private_aggregation_budget_key.h"
 #include "content/browser/private_aggregation/private_aggregation_budget_storage.h"
 #include "content/browser/private_aggregation/proto/private_aggregation_budgets.pb.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/protobuf/src/google/protobuf/repeated_field.h"
+#include "url/gurl.h"
+#include "url/origin.h"
 
 namespace content {
 
@@ -77,14 +80,13 @@
     const PrivateAggregationBudgetKey& budget_key,
     base::OnceCallback<void(bool)> on_done) {
   if (storage_status_ == StorageStatus::kInitializing) {
-    if (pending_consume_budget_calls_.size() >= kMaxPendingCalls) {
+    if (pending_calls_.size() >= kMaxPendingCalls) {
       std::move(on_done).Run(false);
       return;
     }
 
-    // `base::Unretained` is safe as `pending_consume_budget_calls_` is owned by
-    // `this`.
-    pending_consume_budget_calls_.push_back(base::BindOnce(
+    // `base::Unretained` is safe as `pending_calls_` is owned by `this`.
+    pending_calls_.push_back(base::BindOnce(
         &PrivateAggregationBudgeter::ConsumeBudgetImpl, base::Unretained(this),
         budget, budget_key, std::move(on_done)));
   } else {
@@ -92,6 +94,24 @@
   }
 }
 
+void PrivateAggregationBudgeter::ClearData(
+    base::Time delete_begin,
+    base::Time delete_end,
+    StoragePartition::StorageKeyMatcherFunction filter,
+    base::OnceClosure done) {
+  if (storage_status_ == StorageStatus::kInitializing) {
+    // To ensure that data deletion always succeeds, we don't check
+    // `pending_calls.size()` here.
+
+    // `base::Unretained` is safe as `pending_calls_` is owned by `this`.
+    pending_calls_.push_back(base::BindOnce(
+        &PrivateAggregationBudgeter::ClearDataImpl, base::Unretained(this),
+        delete_begin, delete_end, std::move(filter), std::move(done)));
+  } else {
+    ClearDataImpl(delete_begin, delete_end, std::move(filter), std::move(done));
+  }
+}
+
 void PrivateAggregationBudgeter::OnStorageDoneInitializing(
     std::unique_ptr<PrivateAggregationBudgetStorage> storage) {
   DCHECK(shutdown_initializing_storage_);
@@ -110,10 +130,10 @@
 }
 
 void PrivateAggregationBudgeter::ProcessAllPendingCalls() {
-  for (base::OnceClosure& cb : pending_consume_budget_calls_) {
+  for (base::OnceClosure& cb : pending_calls_) {
     std::move(cb).Run();
   }
-  pending_consume_budget_calls_.clear();
+  pending_calls_.clear();
 }
 
 // TODO(crbug.com/1336733): Consider enumerating different error cases and log
@@ -215,4 +235,98 @@
   std::move(on_done).Run(budget_increase_allowed);
 }
 
+void PrivateAggregationBudgeter::ClearDataImpl(
+    base::Time delete_begin,
+    base::Time delete_end,
+    StoragePartition::StorageKeyMatcherFunction filter,
+    base::OnceClosure done) {
+  switch (storage_status_) {
+    case StorageStatus::kInitializing:
+      NOTREACHED();
+      break;
+    case StorageStatus::kInitializationFailed:
+      std::move(done).Run();
+      return;
+    case StorageStatus::kOpen:
+      break;
+  }
+
+  // TODO(alexmt): Delay `done` being run until after the database task is
+  // complete.
+
+  // Treat null times as unbounded lower or upper range. This is used by
+  // browsing data remover.
+  if (delete_begin.is_null())
+    delete_begin = base::Time::Min();
+
+  if (delete_end.is_null())
+    delete_end = base::Time::Max();
+
+  bool is_all_time_covered = delete_begin.is_min() && delete_end.is_max();
+
+  if (is_all_time_covered && filter.is_null()) {
+    storage_->budgets_data()->DeleteAllData();
+    std::move(done).Run();
+    return;
+  }
+
+  std::vector<std::string> origins_to_delete;
+
+  for (const auto& [origin_key, budgets] :
+       storage_->budgets_data()->GetAllCached()) {
+    if (filter.is_null() ||
+        filter.Run(blink::StorageKey(url::Origin::Create(GURL(origin_key))))) {
+      origins_to_delete.push_back(origin_key);
+    }
+  }
+
+  if (is_all_time_covered) {
+    storage_->budgets_data()->DeleteData(origins_to_delete);
+    std::move(done).Run();
+    return;
+  }
+
+  // Ensure we round down to capture any time windows that partially overlap.
+  int64_t serialized_delete_begin =
+      delete_begin.is_min()
+          ? SerializeTimeForStorage(base::Time::Min())
+          : SerializeTimeForStorage(
+                PrivateAggregationBudgetKey::TimeWindow(delete_begin)
+                    .start_time());
+
+  // No need to round up as we compare against the time window's start time.
+  int64_t serialized_delete_end = SerializeTimeForStorage(delete_end);
+
+  for (const std::string& origin_key : origins_to_delete) {
+    proto::PrivateAggregationBudgets budgets;
+    storage_->budgets_data()->TryGetData(origin_key, &budgets);
+
+    static constexpr PrivateAggregationBudgetKey::Api kAllApis[] = {
+        PrivateAggregationBudgetKey::Api::kFledge,
+        PrivateAggregationBudgetKey::Api::kSharedStorage};
+
+    for (PrivateAggregationBudgetKey::Api api : kAllApis) {
+      google::protobuf::RepeatedPtrField<
+          proto::PrivateAggregationBudgetPerHour>* hourly_budgets =
+          GetHourlyBudgets(api, budgets);
+      DCHECK(hourly_budgets);
+
+      auto new_end = std::remove_if(
+          hourly_budgets->begin(), hourly_budgets->end(),
+          [=](const proto::PrivateAggregationBudgetPerHour& elem) {
+            return elem.hour_start_timestamp() >= serialized_delete_begin &&
+                   elem.hour_start_timestamp() <= serialized_delete_end;
+          });
+      hourly_budgets->erase(new_end, hourly_budgets->end());
+    }
+    storage_->budgets_data()->UpdateData(origin_key, budgets);
+  }
+
+  // A no-op call to force the database to be flushed immediately instead of
+  // waiting up to `PrivateAggregationBudgetStorage::kFlushDelay`.
+  storage_->budgets_data()->DeleteData({});
+
+  std::move(done).Run();
+}
+
 }  // namespace content
diff --git a/content/browser/private_aggregation/private_aggregation_budgeter.h b/content/browser/private_aggregation/private_aggregation_budgeter.h
index 24a94ce..a46db83 100644
--- a/content/browser/private_aggregation/private_aggregation_budgeter.h
+++ b/content/browser/private_aggregation/private_aggregation_budgeter.h
@@ -13,6 +13,7 @@
 #include "base/time/time.h"
 #include "content/browser/private_aggregation/private_aggregation_budget_key.h"
 #include "content/common/content_export.h"
+#include "content/public/browser/storage_partition.h"
 
 template <class T>
 class scoped_refptr;
@@ -44,8 +45,9 @@
   // Maximum budget allowed to be claimed per-origin per-day per-API.
   static constexpr int kMaxBudgetPerScope = 65536;
 
-  // To avoid unbounded memory growth, limit the number of pending consume
-  // budget calls during initialization.
+  // To avoid unbounded memory growth, limit the number of pending calls during
+  // initialization. Data clearing calls can be posted even if it would exceed
+  // this limit.
   static constexpr int kMaxPendingCalls = 1000;
 
   // The total length of time that per-origin per-API budgets are enforced
@@ -87,6 +89,17 @@
                              const PrivateAggregationBudgetKey& budget_key,
                              base::OnceCallback<void(bool)> on_done);
 
+  // Deletes all data in storage for any budgets that could have been set
+  // between `delete_begin` and `delete_end` time (inclusive). Note that the
+  // discrete time windows used may lead to more data being deleted than
+  // strictly necessary. Null times are treated as unbounded lower or upper
+  // range. If `!filter.is_null()`, budget keys with an origin that does *not*
+  // match the `filter` are retained (i.e. not cleared).
+  virtual void ClearData(base::Time delete_begin,
+                         base::Time delete_end,
+                         StoragePartition::StorageKeyMatcherFunction filter,
+                         base::OnceClosure done);
+
   // TODO(crbug.com/1328439): Clear stale data periodically and on startup.
 
  protected:
@@ -104,13 +117,18 @@
   void ConsumeBudgetImpl(int additional_budget,
                          const PrivateAggregationBudgetKey& budget_key,
                          base::OnceCallback<void(bool)> on_done);
+  void ClearDataImpl(base::Time delete_begin,
+                     base::Time delete_end,
+                     StoragePartition::StorageKeyMatcherFunction filter,
+                     base::OnceClosure done);
 
   void ProcessAllPendingCalls();
 
-  // While the storage initializes, queues calls to ConsumeBudget() in the
-  // order the calls are received. Should be empty after storage is initialized.
-  // The size is limited to `kMaxPendingCalls`.
-  std::vector<base::OnceClosure> pending_consume_budget_calls_;
+  // While the storage initializes, queues calls (e.g. to `ConsumeBudget()`) in
+  // the order the calls are received. Should be empty after storage is
+  // initialized. The size is limited to `kMaxPendingCalls` except that
+  // `ClearData()` can store additional tasks beyond that limit.
+  std::vector<base::OnceClosure> pending_calls_;
 
   // `nullptr` until initialization is complete or if initialization failed.
   // Otherwise, owned by this class until destruction. Iff present,
diff --git a/content/browser/private_aggregation/private_aggregation_budgeter_unittest.cc b/content/browser/private_aggregation/private_aggregation_budgeter_unittest.cc
index 5f40b51..685a1f2 100644
--- a/content/browser/private_aggregation/private_aggregation_budgeter_unittest.cc
+++ b/content/browser/private_aggregation/private_aggregation_budgeter_unittest.cc
@@ -23,12 +23,18 @@
 #include "base/test/task_environment.h"
 #include "base/time/time.h"
 #include "content/browser/private_aggregation/private_aggregation_budget_storage.h"
+#include "content/browser/storage_partition_impl.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
 namespace content {
 
+namespace {
+
+const base::Time kExampleTime = base::Time::FromJavaTime(1652984901234);
+
 class PrivateAggregationBudgeterUnderTest : public PrivateAggregationBudgeter {
  public:
   PrivateAggregationBudgeterUnderTest(
@@ -547,7 +553,7 @@
 }
 
 TEST_F(PrivateAggregationBudgeterTest,
-       MaxPendingCallsExceeded_AdditionalCallsRejected) {
+       MaxPendingCallsExceeded_AdditionalConsumeBudgetCallsRejected) {
   base::RunLoop run_loop;
   CreateBudgeter(/*exclusively_run_in_memory=*/false,
                  /*on_done_initializing=*/run_loop.QuitClosure());
@@ -592,6 +598,52 @@
 }
 
 TEST_F(PrivateAggregationBudgeterTest,
+       MaxPendingCallsExceeded_AdditionalDataClearingCallsAllowed) {
+  base::RunLoop run_loop;
+  CreateBudgeter(/*exclusively_run_in_memory=*/false,
+                 /*on_done_initializing=*/run_loop.QuitClosure());
+
+  PrivateAggregationBudgetKey example_key =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")),
+          base::Time::FromJavaTime(1652984901234),
+          PrivateAggregationBudgetKey::Api::kFledge);
+
+  int num_consume_queries_succeeded = 0;
+
+  for (int i = 0; i < PrivateAggregationBudgeter::kMaxPendingCalls; ++i) {
+    // Queries should be processed in the order they are received.
+    budgeter()->ConsumeBudget(
+        /*budget=*/1, example_key,
+        base::BindLambdaForTesting(
+            [&num_consume_queries_succeeded, i](bool succeeded) {
+              EXPECT_TRUE(succeeded);
+              EXPECT_EQ(num_consume_queries_succeeded++, i);
+            }));
+  }
+
+  EXPECT_EQ(num_consume_queries_succeeded, 0);
+  EXPECT_EQ(GetStorageStatus(),
+            PrivateAggregationBudgeter::StorageStatus::kInitializing);
+
+  // Despite the limit being reached, data clearing requests are allowed to
+  // cause the limit to be exceeded and are queued.
+  bool was_callback_run = false;
+  budgeter()->ClearData(
+      base::Time::Min(), base::Time::Max(),
+      StoragePartition::StorageKeyMatcherFunction(),
+      base::BindLambdaForTesting([&]() { was_callback_run = true; }));
+  EXPECT_FALSE(was_callback_run);
+
+  run_loop.Run();
+  EXPECT_EQ(num_consume_queries_succeeded,
+            PrivateAggregationBudgeter::kMaxPendingCalls);
+  EXPECT_EQ(GetStorageStatus(),
+            PrivateAggregationBudgeter::StorageStatus::kOpen);
+  EXPECT_TRUE(was_callback_run);
+}
+
+TEST_F(PrivateAggregationBudgeterTest,
        BudgeterDestroyedImmediatelyAfterInitialization_DoesNotCrash) {
   base::RunLoop run_loop;
   CreateBudgeter(
@@ -611,4 +663,511 @@
   base::RunLoop().RunUntilIdle();
 }
 
+TEST_F(PrivateAggregationBudgeterTest, ClearDataBasicTest) {
+  int num_queries_processed = 0;
+
+  CreateBudgeterAndWait();
+
+  PrivateAggregationBudgetKey example_key =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")), kExampleTime,
+          PrivateAggregationBudgetKey::Api::kFledge);
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  // Maximum budget has been used so this should fail.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, example_key,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  budgeter()->ClearData(
+      kExampleTime, kExampleTime, StoragePartition::StorageKeyMatcherFunction(),
+      base::BindLambdaForTesting([&]() { ++num_queries_processed; }));
+
+  base::RunLoop run_loop;
+
+  // After clearing, we can use the full budget again
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key,
+      base::BindLambdaForTesting([&](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+        run_loop.Quit();
+      }));
+  run_loop.Run();
+  EXPECT_EQ(num_queries_processed, 4);
+}
+
+TEST_F(PrivateAggregationBudgeterTest, ClearDataCrossesWindowBoundary) {
+  int num_queries_processed = 0;
+
+  CreateBudgeterAndWait();
+
+  PrivateAggregationBudgetKey example_key_1 =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")), kExampleTime,
+          PrivateAggregationBudgetKey::Api::kFledge);
+
+  PrivateAggregationBudgetKey example_key_2 =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")),
+          kExampleTime + PrivateAggregationBudgetKey::TimeWindow::kDuration,
+          PrivateAggregationBudgetKey::Api::kFledge);
+
+  EXPECT_NE(example_key_1.time_window().start_time(),
+            example_key_2.time_window().start_time());
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, example_key_1,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/(PrivateAggregationBudgeter::kMaxBudgetPerScope - 1),
+      example_key_2,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  // The full budget has been used across the two time windows.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, example_key_2,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  budgeter()->ClearData(
+      kExampleTime,
+      kExampleTime + PrivateAggregationBudgetKey::TimeWindow::kDuration,
+      StoragePartition::StorageKeyMatcherFunction(),
+      base::BindLambdaForTesting([&]() { ++num_queries_processed; }));
+
+  base::RunLoop run_loop;
+
+  // After clearing, we can use the full budget again.
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key_2,
+      base::BindLambdaForTesting([&](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+        run_loop.Quit();
+      }));
+  run_loop.Run();
+  EXPECT_EQ(num_queries_processed, 5);
+}
+
+TEST_F(PrivateAggregationBudgeterTest,
+       ClearDataDoesntAffectWindowsOutsideRange) {
+  int num_queries_processed = 0;
+
+  CreateBudgeterAndWait();
+
+  PrivateAggregationBudgetKey key_to_clear =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")), kExampleTime,
+          PrivateAggregationBudgetKey::Api::kFledge);
+
+  PrivateAggregationBudgetKey key_after =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")),
+          kExampleTime + PrivateAggregationBudgetKey::TimeWindow::kDuration,
+          PrivateAggregationBudgetKey::Api::kFledge);
+
+  PrivateAggregationBudgetKey key_before =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")),
+          kExampleTime - PrivateAggregationBudgetKey::TimeWindow::kDuration,
+          PrivateAggregationBudgetKey::Api::kFledge);
+
+  EXPECT_LT(key_to_clear.time_window().start_time(),
+            key_after.time_window().start_time());
+
+  EXPECT_GT(key_to_clear.time_window().start_time(),
+            key_before.time_window().start_time());
+
+  base::RepeatingCallback<void(bool)> expect_succeeded =
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+      });
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, key_before, expect_succeeded);
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/(PrivateAggregationBudgeter::kMaxBudgetPerScope - 2),
+      key_to_clear, expect_succeeded);
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, key_after, expect_succeeded);
+
+  // The full budget has been used across the three time windows.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, key_after,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  // This will only clear the `key_to_clear`'s budget.
+  budgeter()->ClearData(
+      kExampleTime, kExampleTime, StoragePartition::StorageKeyMatcherFunction(),
+      base::BindLambdaForTesting([&]() { ++num_queries_processed; }));
+
+  // After clearing, we can have a budget of exactly
+  // (`PrivateAggregationBudgeter::kMaxBudgetPerScope` - 2) that we can use.
+  budgeter()->ConsumeBudget(
+      /*budget=*/(PrivateAggregationBudgeter::kMaxBudgetPerScope - 2),
+      key_after, expect_succeeded);
+
+  base::RunLoop run_loop;
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, key_after, base::BindLambdaForTesting([&](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+        run_loop.Quit();
+      }));
+  run_loop.Run();
+  EXPECT_EQ(num_queries_processed, 7);
+}
+
+TEST_F(PrivateAggregationBudgeterTest, ClearDataAllApisAffected) {
+  int num_queries_processed = 0;
+
+  CreateBudgeterAndWait();
+
+  PrivateAggregationBudgetKey fledge_key =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")), kExampleTime,
+          PrivateAggregationBudgetKey::Api::kFledge);
+
+  PrivateAggregationBudgetKey shared_storage_key =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")), kExampleTime,
+          PrivateAggregationBudgetKey::Api::kSharedStorage);
+
+  base::RepeatingCallback<void(bool)> expect_succeeded =
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+      });
+  base::RepeatingCallback<void(bool)> expect_not_succeeded =
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+      });
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, fledge_key,
+      expect_succeeded);
+
+  // Maximum budget has been used so this should fail.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, fledge_key, expect_not_succeeded);
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope,
+      shared_storage_key, expect_succeeded);
+
+  // Maximum budget has been used so this should fail.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, shared_storage_key, expect_not_succeeded);
+
+  budgeter()->ClearData(
+      kExampleTime, kExampleTime, StoragePartition::StorageKeyMatcherFunction(),
+      base::BindLambdaForTesting([&]() { ++num_queries_processed; }));
+
+  // After clearing, we can use the full budget again
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, fledge_key,
+      expect_succeeded);
+  base::RunLoop run_loop;
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope,
+      shared_storage_key, base::BindLambdaForTesting([&](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+        run_loop.Quit();
+      }));
+  run_loop.Run();
+  EXPECT_EQ(num_queries_processed, 7);
+}
+
+TEST_F(PrivateAggregationBudgeterTest, ClearAllDataBasicTest) {
+  int num_queries_processed = 0;
+
+  CreateBudgeterAndWait();
+
+  PrivateAggregationBudgetKey example_key =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")), kExampleTime,
+          PrivateAggregationBudgetKey::Api::kFledge);
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  // Maximum budget has been used so this should fail.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, example_key,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  budgeter()->ClearData(
+      base::Time::Min(), base::Time::Max(),
+      StoragePartition::StorageKeyMatcherFunction(),
+      base::BindLambdaForTesting([&]() { ++num_queries_processed; }));
+
+  base::RunLoop run_loop;
+
+  // After clearing, we can use the full budget again
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key,
+      base::BindLambdaForTesting([&](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+        run_loop.Quit();
+      }));
+  run_loop.Run();
+  EXPECT_EQ(num_queries_processed, 4);
+}
+
+TEST_F(PrivateAggregationBudgeterTest, ClearAllDataNullTimes) {
+  int num_queries_processed = 0;
+
+  CreateBudgeterAndWait();
+
+  PrivateAggregationBudgetKey example_key =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")), kExampleTime,
+          PrivateAggregationBudgetKey::Api::kFledge);
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  // Maximum budget has been used so this should fail.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, example_key,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  budgeter()->ClearData(
+      base::Time(), base::Time(), StoragePartition::StorageKeyMatcherFunction(),
+      base::BindLambdaForTesting([&]() { ++num_queries_processed; }));
+
+  base::RunLoop run_loop;
+
+  // After clearing, we can use the full budget again
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key,
+      base::BindLambdaForTesting([&](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+        run_loop.Quit();
+      }));
+  run_loop.Run();
+  EXPECT_EQ(num_queries_processed, 4);
+}
+
+TEST_F(PrivateAggregationBudgeterTest, ClearAllDataNullStartNonNullEndTime) {
+  int num_queries_processed = 0;
+
+  CreateBudgeterAndWait();
+
+  PrivateAggregationBudgetKey example_key =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          url::Origin::Create(GURL("https://a.example/")), kExampleTime,
+          PrivateAggregationBudgetKey::Api::kFledge);
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  // Maximum budget has been used so this should fail.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, example_key,
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+      }));
+
+  budgeter()->ClearData(
+      base::Time(), base::Time::Max(),
+      StoragePartition::StorageKeyMatcherFunction(),
+      base::BindLambdaForTesting([&]() { ++num_queries_processed; }));
+
+  base::RunLoop run_loop;
+
+  // After clearing, we can use the full budget again
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key,
+      base::BindLambdaForTesting([&](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+        run_loop.Quit();
+      }));
+  run_loop.Run();
+  EXPECT_EQ(num_queries_processed, 4);
+}
+
+TEST_F(PrivateAggregationBudgeterTest, ClearDataFilterSelectsOrigins) {
+  int num_queries_processed = 0;
+
+  CreateBudgeterAndWait();
+
+  const url::Origin kOriginA = url::Origin::Create(GURL("https://a.example/"));
+  const url::Origin kOriginB = url::Origin::Create(GURL("https://b.example/"));
+
+  PrivateAggregationBudgetKey example_key_a =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          kOriginA, kExampleTime, PrivateAggregationBudgetKey::Api::kFledge);
+
+  PrivateAggregationBudgetKey example_key_b =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          kOriginB, kExampleTime, PrivateAggregationBudgetKey::Api::kFledge);
+
+  base::RepeatingCallback<void(bool)> expect_succeeded =
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+      });
+  base::RepeatingCallback<void(bool)> expect_not_succeeded =
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+      });
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key_a,
+      expect_succeeded);
+
+  // Maximum budget has been used so this should fail.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, example_key_a, expect_not_succeeded);
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key_b,
+      expect_succeeded);
+
+  // Maximum budget has been used so this should fail.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, example_key_b, expect_not_succeeded);
+
+  budgeter()->ClearData(
+      kExampleTime, kExampleTime,
+      base::BindLambdaForTesting([&](const blink::StorageKey& storage_key) {
+        return storage_key == blink::StorageKey(kOriginA);
+      }),
+      base::BindLambdaForTesting([&]() { ++num_queries_processed; }));
+
+  // After clearing, we can use the full budget again for the cleared origin.
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key_a,
+      expect_succeeded);
+  base::RunLoop run_loop;
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key_b,
+      base::BindLambdaForTesting([&](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+        run_loop.Quit();
+      }));
+  run_loop.Run();
+  EXPECT_EQ(num_queries_processed, 7);
+}
+
+TEST_F(PrivateAggregationBudgeterTest, ClearDataAllTimeFilterSelectsOrigins) {
+  int num_queries_processed = 0;
+
+  CreateBudgeterAndWait();
+
+  const url::Origin kOriginA = url::Origin::Create(GURL("https://a.example/"));
+  const url::Origin kOriginB = url::Origin::Create(GURL("https://b.example/"));
+
+  PrivateAggregationBudgetKey example_key_a =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          kOriginA, kExampleTime, PrivateAggregationBudgetKey::Api::kFledge);
+
+  PrivateAggregationBudgetKey example_key_b =
+      PrivateAggregationBudgetKey::CreateForTesting(
+          kOriginB, kExampleTime, PrivateAggregationBudgetKey::Api::kFledge);
+
+  base::RepeatingCallback<void(bool)> expect_succeeded =
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_TRUE(succeeded);
+        ++num_queries_processed;
+      });
+  base::RepeatingCallback<void(bool)> expect_not_succeeded =
+      base::BindLambdaForTesting([&num_queries_processed](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+      });
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key_a,
+      expect_succeeded);
+
+  // Maximum budget has been used so this should fail.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, example_key_a, expect_not_succeeded);
+
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key_b,
+      expect_succeeded);
+
+  // Maximum budget has been used so this should fail.
+  budgeter()->ConsumeBudget(
+      /*budget=*/1, example_key_b, expect_not_succeeded);
+
+  budgeter()->ClearData(
+      base::Time::Min(), base::Time::Max(),
+      base::BindLambdaForTesting([&](const blink::StorageKey& storage_key) {
+        return storage_key == blink::StorageKey(kOriginA);
+      }),
+      base::BindLambdaForTesting([&]() { ++num_queries_processed; }));
+
+  // After clearing, we can use the full budget again for the cleared origin.
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key_a,
+      expect_succeeded);
+  base::RunLoop run_loop;
+  budgeter()->ConsumeBudget(
+      /*budget=*/PrivateAggregationBudgeter::kMaxBudgetPerScope, example_key_b,
+      base::BindLambdaForTesting([&](bool succeeded) {
+        EXPECT_FALSE(succeeded);
+        ++num_queries_processed;
+        run_loop.Quit();
+      }));
+  run_loop.Run();
+  EXPECT_EQ(num_queries_processed, 7);
+}
+
+}  // namespace
+
 }  // namespace content
diff --git a/content/browser/private_aggregation/private_aggregation_manager.h b/content/browser/private_aggregation/private_aggregation_manager.h
index 8abe8f9..a929890 100644
--- a/content/browser/private_aggregation/private_aggregation_manager.h
+++ b/content/browser/private_aggregation/private_aggregation_manager.h
@@ -5,10 +5,16 @@
 #ifndef CONTENT_BROWSER_PRIVATE_AGGREGATION_PRIVATE_AGGREGATION_MANAGER_H_
 #define CONTENT_BROWSER_PRIVATE_AGGREGATION_PRIVATE_AGGREGATION_MANAGER_H_
 
+#include "base/callback_forward.h"
 #include "content/browser/private_aggregation/private_aggregation_budget_key.h"
 #include "content/common/private_aggregation_host.mojom-forward.h"
+#include "content/public/browser/storage_partition.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 
+namespace base {
+class Time;
+}
+
 namespace url {
 class Origin;
 }
@@ -35,6 +41,18 @@
       PrivateAggregationBudgetKey::Api api_for_budgeting,
       mojo::PendingReceiver<mojom::PrivateAggregationHost>
           pending_receiver) = 0;
+
+  // Deletes all data in storage for any budgets that could have been set
+  // between `delete_begin` and `delete_end` time (inclusive). Note that the
+  // discrete time windows used in the budgeter may lead to more data being
+  // deleted than strictly necessary. Null times are treated as unbounded lower
+  // or upper range. If `!filter.is_null()`, budget keys with an origin that
+  // does *not* match the `filter` are retained (i.e. not cleared).
+  virtual void ClearBudgetData(
+      base::Time delete_begin,
+      base::Time delete_end,
+      StoragePartition::StorageKeyMatcherFunction filter,
+      base::OnceClosure done) = 0;
 };
 
 }  // namespace content
diff --git a/content/browser/private_aggregation/private_aggregation_manager_impl.cc b/content/browser/private_aggregation/private_aggregation_manager_impl.cc
index 5b34908..0432478 100644
--- a/content/browser/private_aggregation/private_aggregation_manager_impl.cc
+++ b/content/browser/private_aggregation/private_aggregation_manager_impl.cc
@@ -10,11 +10,13 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/callback.h"
 #include "base/check.h"
 #include "base/files/file_path.h"
 #include "base/numerics/checked_math.h"
 #include "base/task/lazy_thread_pool_task_runner.h"
 #include "base/task/task_traits.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/private_aggregation/private_aggregation_budget_key.h"
@@ -23,6 +25,7 @@
 #include "content/browser/storage_partition_impl.h"
 #include "content/common/aggregatable_report.mojom.h"
 #include "content/common/private_aggregation_host.mojom.h"
+#include "content/public/browser/storage_partition.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "url/origin.h"
 
@@ -85,6 +88,15 @@
                                 std::move(pending_receiver));
 }
 
+void PrivateAggregationManagerImpl::ClearBudgetData(
+    base::Time delete_begin,
+    base::Time delete_end,
+    StoragePartition::StorageKeyMatcherFunction filter,
+    base::OnceClosure done) {
+  budgeter_->ClearData(delete_begin, delete_end, std::move(filter),
+                       std::move(done));
+}
+
 void PrivateAggregationManagerImpl::OnReportRequestReceivedFromHost(
     AggregatableReportRequest report_request,
     PrivateAggregationBudgetKey budget_key) {
diff --git a/content/browser/private_aggregation/private_aggregation_manager_impl.h b/content/browser/private_aggregation/private_aggregation_manager_impl.h
index 127f9f1..2c7ddc3 100644
--- a/content/browser/private_aggregation/private_aggregation_manager_impl.h
+++ b/content/browser/private_aggregation/private_aggregation_manager_impl.h
@@ -7,15 +7,18 @@
 
 #include <memory>
 
+#include "base/callback_forward.h"
 #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"
 #include "content/common/private_aggregation_host.mojom.h"
+#include "content/public/browser/storage_partition.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 
 namespace base {
 class FilePath;
+class Time;
 }
 
 namespace url {
@@ -52,6 +55,10 @@
       PrivateAggregationBudgetKey::Api api_for_budgeting,
       mojo::PendingReceiver<mojom::PrivateAggregationHost> pending_receiver)
       override;
+  void ClearBudgetData(base::Time delete_begin,
+                       base::Time delete_end,
+                       StoragePartition::StorageKeyMatcherFunction filter,
+                       base::OnceClosure done) override;
 
  protected:
   // Protected for testing.
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 8808f8a05..0eba4dfd 100644
--- a/content/browser/private_aggregation/private_aggregation_manager_impl_unittest.cc
+++ b/content/browser/private_aggregation/private_aggregation_manager_impl_unittest.cc
@@ -12,8 +12,10 @@
 #include "base/callback_helpers.h"
 #include "base/files/file_path.h"
 #include "base/memory/ptr_util.h"
+#include "base/run_loop.h"
 #include "base/task/sequenced_task_runner.h"
 #include "base/task/thread_pool.h"
+#include "base/test/bind.h"
 #include "base/time/time.h"
 #include "content/browser/aggregation_service/aggregatable_report.h"
 #include "content/browser/aggregation_service/aggregation_service.h"
@@ -28,6 +30,7 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "url/gurl.h"
 #include "url/origin.h"
 
@@ -287,4 +290,46 @@
       mojo::PendingReceiver<mojom::PrivateAggregationHost>()));
 }
 
+TEST_F(PrivateAggregationManagerImplTest,
+       ClearBudgetingData_InvokesClearDataIdentically) {
+  {
+    base::RunLoop run_loop;
+    EXPECT_CALL(*budgeter_,
+                ClearData(kExampleTime, kExampleTime + base::Days(1), _, _))
+        .WillOnce(Invoke([](base::Time delete_begin, base::Time delete_end,
+                            StoragePartition::StorageKeyMatcherFunction filter,
+                            base::OnceClosure done) {
+          EXPECT_TRUE(filter.is_null());
+          std::move(done).Run();
+        }));
+    manager_.ClearBudgetData(kExampleTime, kExampleTime + base::Days(1),
+                             StoragePartition::StorageKeyMatcherFunction(),
+                             run_loop.QuitClosure());
+    run_loop.Run();
+  }
+
+  StoragePartition::StorageKeyMatcherFunction example_filter;
+  example_filter =
+      base::BindLambdaForTesting([](const blink::StorageKey& storage_key) {
+        return storage_key.origin() ==
+               url::Origin::Create(GURL("https://example.com"));
+      });
+
+  {
+    base::RunLoop run_loop;
+    EXPECT_CALL(*budgeter_,
+                ClearData(kExampleTime - base::Days(10), kExampleTime, _, _))
+        .WillOnce(Invoke([&example_filter](
+                             base::Time delete_begin, base::Time delete_end,
+                             StoragePartition::StorageKeyMatcherFunction filter,
+                             base::OnceClosure done) {
+          EXPECT_EQ(filter, example_filter);
+          std::move(done).Run();
+        }));
+    manager_.ClearBudgetData(kExampleTime - base::Days(10), kExampleTime,
+                             example_filter, run_loop.QuitClosure());
+    run_loop.Run();
+  }
+}
+
 }  // namespace content
diff --git a/content/browser/private_aggregation/private_aggregation_test_utils.cc b/content/browser/private_aggregation/private_aggregation_test_utils.cc
index 9327e2cb..669de520 100644
--- a/content/browser/private_aggregation/private_aggregation_test_utils.cc
+++ b/content/browser/private_aggregation/private_aggregation_test_utils.cc
@@ -21,6 +21,9 @@
 
 MockPrivateAggregationHost::~MockPrivateAggregationHost() = default;
 
+MockPrivateAggregationManager::MockPrivateAggregationManager() = default;
+MockPrivateAggregationManager::~MockPrivateAggregationManager() = default;
+
 MockPrivateAggregationContentBrowserClient::
     MockPrivateAggregationContentBrowserClient() = default;
 
diff --git a/content/browser/private_aggregation/private_aggregation_test_utils.h b/content/browser/private_aggregation/private_aggregation_test_utils.h
index ac4696f..c047479 100644
--- a/content/browser/private_aggregation/private_aggregation_test_utils.h
+++ b/content/browser/private_aggregation/private_aggregation_test_utils.h
@@ -12,12 +12,18 @@
 #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_manager.h"
 #include "content/common/aggregatable_report.mojom-forward.h"
+#include "content/public/browser/storage_partition.h"
 #include "content/public/test/test_browser_context.h"
 #include "content/test/test_content_browser_client.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
+namespace base {
+class Time;
+}
+
 namespace url {
 class Origin;
 }
@@ -35,6 +41,14 @@
                const PrivateAggregationBudgetKey&,
                base::OnceCallback<void(bool)>),
               (override));
+
+  MOCK_METHOD(void,
+              ClearData,
+              (base::Time,
+               base::Time,
+               StoragePartition::StorageKeyMatcherFunction,
+               base::OnceClosure),
+              (override));
 };
 
 // Note: the `TestBrowserContext` may require a `BrowserTaskEnvironment` to be
@@ -55,13 +69,35 @@
   MOCK_METHOD(void,
               SendHistogramReport,
               (std::vector<mojom::AggregatableReportHistogramContributionPtr>,
-               mojom::AggregationServiceMode aggregation_mode),
+               mojom::AggregationServiceMode),
               (override));
 
  private:
   TestBrowserContext test_browser_context_;
 };
 
+class MockPrivateAggregationManager : public PrivateAggregationManager {
+ public:
+  MockPrivateAggregationManager();
+  ~MockPrivateAggregationManager() override;
+
+  MOCK_METHOD(bool,
+              BindNewReceiver,
+              (url::Origin,
+               url::Origin,
+               PrivateAggregationBudgetKey::Api,
+               mojo::PendingReceiver<mojom::PrivateAggregationHost>),
+              (override));
+
+  MOCK_METHOD(void,
+              ClearBudgetData,
+              (base::Time,
+               base::Time,
+               StoragePartition::StorageKeyMatcherFunction,
+               base::OnceClosure),
+              (override));
+};
+
 class MockPrivateAggregationContentBrowserClient
     : public TestContentBrowserClient {
  public:
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index 17ea073..4b3d430 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -1912,7 +1912,8 @@
   MaybeAssignInvalidPrerenderFrameTreeNodeId();
 
   // Fenced frames are not allowed to load if nested in iframes with CSPEE.
-  if (frame_tree_node_->IsFencedFrameRoot()) {
+  bool is_fenced_frame = frame_tree_node_->IsFencedFrameRoot();
+  if (is_fenced_frame) {
     DCHECK(!frame_tree_node_->csp_attribute());
     if (GetParentFrameOrOuterDocument()->required_csp()) {
       GURL sanitized_blocked_url =
@@ -1935,9 +1936,30 @@
     }
   }
 
-  // If this is a fenced frame with a urn:uuid, then convert it to a url before
-  // starting the navigation; otherwise, proceed directly with the navigation.
+  // If this is a fenced frame with a urn:uuid, or an iframe with a urn::uuid
+  // given blink::features::kAllowURNsInIframes is enabled, then convert it to a
+  // url before starting the navigation; otherwise, proceed directly with the
+  // navigation.
+  // In long term, navigation support for urn::uuid in iframes will be
+  // deprecated. Currently we issue a console warning when navigation starts.
+  // TODO(crbug.com/1355857)
   if (NeedFencedFrameURLMapping()) {
+    if (!is_fenced_frame) {
+      // Iframes with urn::uuid.
+      DCHECK(!frame_tree_node_->IsMainFrame());
+      DCHECK(blink::features::IsAllowURNsInIframeEnabled());
+      AddDeferredConsoleMessage(
+          blink::mojom::ConsoleMessageLevel::kWarning,
+          "FLEDGE will deprecate supporting iframes to render the winning ad. "
+          "Please use fenced frames instead. See "
+          "https://developer.chrome.com/en/docs/privacy-sandbox/fenced-frame/"
+          "#examples");
+    }
+
+    UMA_HISTOGRAM_BOOLEAN(
+        "Navigation.BrowserMappedUrnUuidInIframeOrFencedFrame",
+        !is_fenced_frame);
+
     FencedFrameURLMapping& fenced_frame_urls_map = GetFencedFrameURLMap();
 
     // If the mapping finishes synchronously, OnFencedFrameURLMappingComplete
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
index 1a26e92..58808d00 100644
--- a/content/browser/renderer_host/render_frame_host_impl.cc
+++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -10963,9 +10963,9 @@
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kEnableWebAuthDeprecatedMojoTestingApi)) {
     auto* environment_singleton = AuthenticatorEnvironmentImpl::GetInstance();
-    environment_singleton->EnableVirtualAuthenticatorFor(frame_tree_node_,
+    environment_singleton->EnableVirtualAuthenticatorFor(this,
                                                          /*enable_ui=*/false);
-    environment_singleton->AddVirtualAuthenticatorReceiver(frame_tree_node_,
+    environment_singleton->AddVirtualAuthenticatorReceiver(this,
                                                            std::move(receiver));
   }
 #endif  // !BUILDFLAG(IS_ANDROID)
diff --git a/content/browser/renderer_host/visible_time_request_trigger_unittest.cc b/content/browser/renderer_host/visible_time_request_trigger_unittest.cc
index 94ae9df..8e21a586 100644
--- a/content/browser/renderer_host/visible_time_request_trigger_unittest.cc
+++ b/content/browser/renderer_host/visible_time_request_trigger_unittest.cc
@@ -149,22 +149,24 @@
                  << "With field bitmask " << std::hex << i);
     const auto fields = RequestFieldSet::FromEnumBitmask(i);
 
-    // Check that these fields are set in the result if they're set in either or
-    // both of the requests.
-    const auto expected = request_with_fields(fields);
+    {
+      // Check that these fields are set in the result if they're set in either
+      // or both of the requests.
+      const auto expected = request_with_fields(fields);
 
-    ExpectEqualRequests(VisibleTimeRequestTrigger::ConsumeAndMergeRequests(
-                            RecordContentToVisibleTimeRequest::New(),
-                            request_with_fields(fields)),
-                        *expected);
-    ExpectEqualRequests(VisibleTimeRequestTrigger::ConsumeAndMergeRequests(
-                            request_with_fields(fields),
-                            RecordContentToVisibleTimeRequest::New()),
-                        *expected);
-    ExpectEqualRequests(
-        VisibleTimeRequestTrigger::ConsumeAndMergeRequests(
-            request_with_fields(fields), request_with_fields(fields)),
-        *expected);
+      ExpectEqualRequests(VisibleTimeRequestTrigger::ConsumeAndMergeRequests(
+                              RecordContentToVisibleTimeRequest::New(),
+                              request_with_fields(fields)),
+                          *expected);
+      ExpectEqualRequests(VisibleTimeRequestTrigger::ConsumeAndMergeRequests(
+                              request_with_fields(fields),
+                              RecordContentToVisibleTimeRequest::New()),
+                          *expected);
+      ExpectEqualRequests(
+          VisibleTimeRequestTrigger::ConsumeAndMergeRequests(
+              request_with_fields(fields), request_with_fields(fields)),
+          *expected);
+    }
 
     // Check that when these fields are combined with another set of fields,
     // all fields are set in the result.
diff --git a/content/browser/site_instance_impl.h b/content/browser/site_instance_impl.h
index b2275e08..640a8497 100644
--- a/content/browser/site_instance_impl.h
+++ b/content/browser/site_instance_impl.h
@@ -357,6 +357,11 @@
   // RenderFrameHostManager.
   static GURL GetEffectiveURL(BrowserContext* browser_context, const GURL& url);
 
+  // True if |url| resolves to an effective URL that is different from |url|.
+  // See GetEffectiveURL().  This will be true for hosted apps as well as NTP
+  // URLs.
+  static bool HasEffectiveURL(BrowserContext* browser_context, const GURL& url);
+
   // Return an ID of the next BrowsingInstance to be created.  This ID is
   // guaranteed to be higher than any ID of an existing BrowsingInstance.
   // This is useful when process model decisions need to be scoped only to
@@ -492,11 +497,6 @@
                          const UrlInfo& dest_url_info,
                          bool should_compare_effective_urls);
 
-  // True if |url| resolves to an effective URL that is different from |url|.
-  // See GetEffectiveURL().  This will be true for hosted apps as well as NTP
-  // URLs.
-  static bool HasEffectiveURL(BrowserContext* browser_context, const GURL& url);
-
   // Returns true if |url| and its |site_url| can be placed inside a default
   // SiteInstance.
   //
diff --git a/content/browser/storage_partition_impl.cc b/content/browser/storage_partition_impl.cc
index ed2ca33..e3d2e623 100644
--- a/content/browser/storage_partition_impl.cc
+++ b/content/browser/storage_partition_impl.cc
@@ -79,6 +79,7 @@
 #include "content/browser/notifications/platform_notification_context_impl.h"
 #include "content/browser/payments/payment_app_context_impl.h"
 #include "content/browser/preloading/prerender/prerender_host_registry.h"
+#include "content/browser/private_aggregation/private_aggregation_manager.h"
 #include "content/browser/private_aggregation/private_aggregation_manager_impl.h"
 #include "content/browser/push_messaging/push_messaging_context.h"
 #include "content/browser/quota/quota_context.h"
@@ -972,6 +973,7 @@
       InterestGroupManagerImpl* interest_group_manager,
       AttributionManager* attribution_manager,
       AggregationService* aggregation_service,
+      PrivateAggregationManager* private_aggregation_manager,
       storage::SharedStorageManager* shared_storage_manager,
       bool perform_storage_cleanup,
       const base::Time begin,
@@ -1004,7 +1006,8 @@
     kAggregationService = 9,
     kSharedStorage = 10,
     kGpuCache = 11,
-    kMaxValue = kGpuCache,
+    kPrivateAggregation = 12,
+    kMaxValue = kPrivateAggregation,
   };
 
   base::OnceClosure CreateTaskCompletionClosure(TracingDataType data_type);
@@ -1725,7 +1728,7 @@
   return shared_storage_manager_.get();
 }
 
-PrivateAggregationManagerImpl*
+PrivateAggregationManager*
 StoragePartitionImpl::GetPrivateAggregationManager() {
   DCHECK(initialized_);
   return private_aggregation_manager_.get();
@@ -2202,8 +2205,8 @@
       quota_manager_.get(), special_storage_policy_.get(),
       filesystem_context_.get(), GetCookieManagerForBrowserProcess(),
       interest_group_manager_.get(), attribution_manager_.get(),
-      aggregation_service_.get(), shared_storage_manager_.get(),
-      perform_storage_cleanup, begin, end);
+      aggregation_service_.get(), private_aggregation_manager_.get(),
+      shared_storage_manager_.get(), perform_storage_cleanup, begin, end);
 }
 
 void StoragePartitionImpl::DeletionHelperDone(base::OnceClosure callback) {
@@ -2405,6 +2408,7 @@
     InterestGroupManagerImpl* interest_group_manager,
     AttributionManager* attribution_manager,
     AggregationService* aggregation_service,
+    PrivateAggregationManager* private_aggregation_manager,
     storage::SharedStorageManager* shared_storage_manager,
     bool perform_storage_cleanup,
     const base::Time begin,
@@ -2547,6 +2551,13 @@
         CreateTaskCompletionClosure(TracingDataType::kAggregationService));
   }
 
+  if (private_aggregation_manager &&
+      (remove_mask_ & REMOVE_DATA_MASK_PRIVATE_AGGREGATION_INTERNAL)) {
+    private_aggregation_manager->ClearBudgetData(
+        begin, end, filter,
+        CreateTaskCompletionClosure(TracingDataType::kPrivateAggregation));
+  }
+
   // TODO(crbug.com/1340250): The Plugin Private File System is removed, but
   // some devices may still have old data on their machine. For now greedily try
   // to delete this data, but we'll want to remove this code at some point.
@@ -2830,8 +2841,7 @@
 }
 
 void StoragePartitionImpl::OverridePrivateAggregationManagerForTesting(
-    std::unique_ptr<PrivateAggregationManagerImpl>
-        private_aggregation_manager) {
+    std::unique_ptr<PrivateAggregationManager> private_aggregation_manager) {
   DCHECK(initialized_);
   private_aggregation_manager_ = std::move(private_aggregation_manager);
 }
diff --git a/content/browser/storage_partition_impl.h b/content/browser/storage_partition_impl.h
index 7839dfd1..4555678a 100644
--- a/content/browser/storage_partition_impl.h
+++ b/content/browser/storage_partition_impl.h
@@ -88,7 +88,7 @@
 class NativeIOContextImpl;
 class PaymentAppContextImpl;
 class PrefetchURLLoaderService;
-class PrivateAggregationManagerImpl;
+class PrivateAggregationManager;
 class PushMessagingContext;
 class QuotaContext;
 class SharedStorageWorkletHostManager;
@@ -145,8 +145,7 @@
   void OverrideAttributionManagerForTesting(
       std::unique_ptr<AttributionManager> attribution_manager);
   void OverridePrivateAggregationManagerForTesting(
-      std::unique_ptr<PrivateAggregationManagerImpl>
-          private_aggregation_manager);
+      std::unique_ptr<PrivateAggregationManager> private_aggregation_manager);
 
   // Returns the StoragePartitionConfig that represents this StoragePartition.
   const StoragePartitionConfig& GetConfig();
@@ -265,7 +264,7 @@
   // Gets the SharedStorageManager for the StoragePartition, or nullptr if it
   // doesn't exist because the feature is disabled.
   storage::SharedStorageManager* GetSharedStorageManager();
-  PrivateAggregationManagerImpl* GetPrivateAggregationManager();
+  PrivateAggregationManager* GetPrivateAggregationManager();
 
   // blink::mojom::DomStorage interface.
   void OpenLocalStorage(
@@ -670,7 +669,7 @@
   std::unique_ptr<SharedStorageWorkletHostManager>
       shared_storage_worklet_host_manager_;
 
-  std::unique_ptr<PrivateAggregationManagerImpl> private_aggregation_manager_;
+  std::unique_ptr<PrivateAggregationManager> private_aggregation_manager_;
 
   // ReceiverSet for DomStorage, using the
   // ChildProcessSecurityPolicyImpl::Handle as the binding context type. The
diff --git a/content/browser/storage_partition_impl_unittest.cc b/content/browser/storage_partition_impl_unittest.cc
index c9d893b..e641937 100644
--- a/content/browser/storage_partition_impl_unittest.cc
+++ b/content/browser/storage_partition_impl_unittest.cc
@@ -58,6 +58,8 @@
 #include "content/browser/interest_group/interest_group_manager_impl.h"
 #include "content/browser/interest_group/interest_group_permissions_cache.h"
 #include "content/browser/interest_group/interest_group_permissions_checker.h"
+#include "content/browser/private_aggregation/private_aggregation_manager.h"
+#include "content/browser/private_aggregation/private_aggregation_test_utils.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/generated_code_cache_settings.h"
@@ -2150,6 +2152,115 @@
   }
 }
 
+TEST_F(StoragePartitionImplTest, RemovePrivateAggregationData) {
+  StoragePartitionImpl* partition = static_cast<StoragePartitionImpl*>(
+      browser_context()->GetDefaultStoragePartition());
+
+  auto private_aggregation_manager =
+      std::make_unique<MockPrivateAggregationManager>();
+  auto* private_aggregation_manager_ptr = private_aggregation_manager.get();
+  partition->OverridePrivateAggregationManagerForTesting(
+      std::move(private_aggregation_manager));
+
+  const uint32_t kTestClearMask =
+      StoragePartition::REMOVE_DATA_MASK_PRIVATE_AGGREGATION_INTERNAL;
+  const uint32_t kTestQuotaClearMask =
+      StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL;
+  const auto kTestOrigin = GURL("https://example.com");
+  const auto kOtherOrigin = GURL("https://example.net");
+  const auto kBeginTime = base::Time() + base::Hours(1);
+  const auto kEndTime = base::Time() + base::Hours(2);
+  const auto invoke_callback =
+      [](base::Time delete_begin, base::Time delete_end,
+         StoragePartition::StorageKeyMatcherFunction filter,
+         base::OnceClosure done) { std::move(done).Run(); };
+  const auto is_test_origin_valid =
+      [&kTestOrigin](
+          content::StoragePartition::StorageKeyMatcherFunction filter) {
+        return filter.Run(blink::StorageKey(url::Origin::Create(kTestOrigin)));
+      };
+  const auto is_other_origin_valid =
+      [&kOtherOrigin](
+          content::StoragePartition::StorageKeyMatcherFunction filter) {
+        return filter.Run(blink::StorageKey(url::Origin::Create(kOtherOrigin)));
+      };
+  const auto is_filter_null =
+      [&](content::StoragePartition::StorageKeyMatcherFunction filter) {
+        return filter.is_null();
+      };
+
+  // Verify that each of the StoragePartition interfaces for clearing origin
+  // based data calls aggregation service appropriately.
+  EXPECT_CALL(
+      *private_aggregation_manager_ptr,
+      ClearBudgetData(
+          base::Time(), base::Time::Max(),
+          testing::AllOf(testing::Truly(is_test_origin_valid),
+                         testing::Not(testing::Truly(is_other_origin_valid))),
+          testing::_))
+      .WillOnce(invoke_callback);
+  {
+    base::RunLoop run_loop;
+    partition->ClearDataForOrigin(kTestClearMask, kTestQuotaClearMask,
+                                  kTestOrigin, run_loop.QuitClosure());
+    run_loop.Run();
+    testing::Mock::VerifyAndClearExpectations(private_aggregation_manager_ptr);
+  }
+
+  EXPECT_CALL(
+      *private_aggregation_manager_ptr,
+      ClearBudgetData(
+          kBeginTime, kEndTime,
+          testing::AllOf(testing::Truly(is_test_origin_valid),
+                         testing::Not(testing::Truly(is_other_origin_valid))),
+          testing::_))
+      .WillOnce(testing::Invoke(invoke_callback));
+  {
+    base::RunLoop run_loop;
+    partition->ClearData(kTestClearMask, kTestQuotaClearMask,
+                         blink::StorageKey(url::Origin::Create(kTestOrigin)),
+                         kBeginTime, kEndTime, run_loop.QuitClosure());
+    run_loop.Run();
+    testing::Mock::VerifyAndClearExpectations(private_aggregation_manager_ptr);
+  }
+
+  EXPECT_CALL(
+      *private_aggregation_manager_ptr,
+      ClearBudgetData(
+          kBeginTime, kEndTime,
+          testing::AllOf(testing::Truly(is_test_origin_valid),
+                         testing::Not(testing::Truly(is_other_origin_valid))),
+          testing::_))
+      .WillOnce(testing::Invoke(invoke_callback));
+  {
+    base::RunLoop run_loop;
+    partition->ClearData(
+        kTestClearMask, kTestQuotaClearMask,
+        base::BindLambdaForTesting([&](const blink::StorageKey& storage_key,
+                                       storage::SpecialStoragePolicy* policy) {
+          return storage_key ==
+                 blink::StorageKey(url::Origin::Create(kTestOrigin));
+        }),
+        /*cookie_deletion_filter=*/nullptr,
+        /*perform_storage_cleanup=*/false, kBeginTime, kEndTime,
+        run_loop.QuitClosure());
+    run_loop.Run();
+    testing::Mock::VerifyAndClearExpectations(private_aggregation_manager_ptr);
+  }
+
+  EXPECT_CALL(*private_aggregation_manager_ptr,
+              ClearBudgetData(kBeginTime, kEndTime,
+                              testing::Truly(is_filter_null), testing::_))
+      .WillOnce(testing::Invoke(invoke_callback));
+  {
+    base::RunLoop run_loop;
+    partition->ClearData(kTestClearMask, kTestQuotaClearMask,
+                         blink::StorageKey(), kBeginTime, kEndTime,
+                         run_loop.QuitClosure());
+    run_loop.Run();
+  }
+}
+
 // https://crbug.com/1221382
 // Make sure StorageServiceImpl can be stored in a SequenceLocalStorageSlot and
 // that it can be safely destroyed when the thread terminates.
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 77196ac..b3c50d5 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -3521,6 +3521,8 @@
                         "render_frame_host", rfh, "is_fullscreen",
                         is_fullscreen);
 
+  GetView()->FullscreenStateChanged(is_fullscreen);
+
   if (is_fullscreen) {
     if (options.is_null()) {
       ReceivedBadMessage(rfh->GetProcess(),
diff --git a/content/browser/web_contents/web_contents_view.h b/content/browser/web_contents/web_contents_view.h
index c046e7f8..09b2e69 100644
--- a/content/browser/web_contents/web_contents_view.h
+++ b/content/browser/web_contents/web_contents_view.h
@@ -112,6 +112,8 @@
   // loop has ended.
   virtual bool CloseTabAfterEventTrackingIfNeeded() = 0;
 #endif
+
+  virtual void FullscreenStateChanged(bool is_fullscreen) = 0;
 };
 
 // Factory function to create `WebContentsView`s. Implemented in the platform
diff --git a/content/browser/web_contents/web_contents_view_android.cc b/content/browser/web_contents/web_contents_view_android.cc
index 1ded872..40832661 100644
--- a/content/browser/web_contents/web_contents_view_android.cc
+++ b/content/browser/web_contents/web_contents_view_android.cc
@@ -291,6 +291,11 @@
 
 void WebContentsViewAndroid::OnCapturerCountChanged() {}
 
+void WebContentsViewAndroid::FullscreenStateChanged(bool is_fullscreen) {
+  if (select_popup_)
+    select_popup_->HideMenu();
+}
+
 void WebContentsViewAndroid::ShowContextMenu(RenderFrameHost& render_frame_host,
                                              const ContextMenuParams& params) {
   if (is_active_drag_ && drag_exceeded_movement_threshold_)
diff --git a/content/browser/web_contents/web_contents_view_android.h b/content/browser/web_contents/web_contents_view_android.h
index d22562ee..e4a4b97 100644
--- a/content/browser/web_contents/web_contents_view_android.h
+++ b/content/browser/web_contents/web_contents_view_android.h
@@ -83,6 +83,7 @@
                              RenderViewHost* new_host) override;
   void SetOverscrollControllerEnabled(bool enabled) override;
   void OnCapturerCountChanged() override;
+  void FullscreenStateChanged(bool is_fullscreen) override;
 
   // Backend implementation of RenderViewHostDelegateView.
   void ShowContextMenu(RenderFrameHost& render_frame_host,
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index 3e2342d2..c9ebd0933 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -1127,6 +1127,8 @@
   }
 }
 
+void WebContentsViewAura::FullscreenStateChanged(bool is_fullscreen) {}
+
 ////////////////////////////////////////////////////////////////////////////////
 // WebContentsViewAura, RenderViewHostDelegateView implementation:
 
diff --git a/content/browser/web_contents/web_contents_view_aura.h b/content/browser/web_contents/web_contents_view_aura.h
index 1774566..443cca7 100644
--- a/content/browser/web_contents/web_contents_view_aura.h
+++ b/content/browser/web_contents/web_contents_view_aura.h
@@ -194,6 +194,7 @@
                              RenderViewHost* new_host) override;
   void SetOverscrollControllerEnabled(bool enabled) override;
   void OnCapturerCountChanged() override;
+  void FullscreenStateChanged(bool is_fullscreen) override;
 
   // Overridden from RenderViewHostDelegateView:
   void ShowContextMenu(RenderFrameHost& render_frame_host,
diff --git a/content/browser/web_contents/web_contents_view_child_frame.cc b/content/browser/web_contents/web_contents_view_child_frame.cc
index 0e6bdea..c34f3f1 100644
--- a/content/browser/web_contents/web_contents_view_child_frame.cc
+++ b/content/browser/web_contents/web_contents_view_child_frame.cc
@@ -111,6 +111,8 @@
 
 void WebContentsViewChildFrame::OnCapturerCountChanged() {}
 
+void WebContentsViewChildFrame::FullscreenStateChanged(bool is_fullscreen) {}
+
 void WebContentsViewChildFrame::RestoreFocus() {
   NOTREACHED();
 }
diff --git a/content/browser/web_contents/web_contents_view_child_frame.h b/content/browser/web_contents/web_contents_view_child_frame.h
index dbb734e..efb711a 100644
--- a/content/browser/web_contents/web_contents_view_child_frame.h
+++ b/content/browser/web_contents/web_contents_view_child_frame.h
@@ -58,6 +58,7 @@
   bool CloseTabAfterEventTrackingIfNeeded() override;
 #endif
   void OnCapturerCountChanged() override;
+  void FullscreenStateChanged(bool is_fullscreen) override;
 
   // Backend implementation of RenderViewHostDelegateView.
   void ShowContextMenu(RenderFrameHost& render_frame_host,
diff --git a/content/browser/web_contents/web_contents_view_mac.h b/content/browser/web_contents/web_contents_view_mac.h
index 16b1f62..55ef6316 100644
--- a/content/browser/web_contents/web_contents_view_mac.h
+++ b/content/browser/web_contents/web_contents_view_mac.h
@@ -90,6 +90,7 @@
   void SetOverscrollControllerEnabled(bool enabled) override;
   bool CloseTabAfterEventTrackingIfNeeded() override;
   void OnCapturerCountChanged() override;
+  void FullscreenStateChanged(bool is_fullscreen) override;
 
   // RenderViewHostDelegateView:
   void StartDragging(const DropData& drop_data,
diff --git a/content/browser/web_contents/web_contents_view_mac.mm b/content/browser/web_contents/web_contents_view_mac.mm
index b78d203..127182a 100644
--- a/content/browser/web_contents/web_contents_view_mac.mm
+++ b/content/browser/web_contents/web_contents_view_mac.mm
@@ -143,6 +143,8 @@
 
 void WebContentsViewMac::OnCapturerCountChanged() {}
 
+void WebContentsViewMac::FullscreenStateChanged(bool is_fullscreen) {}
+
 void WebContentsViewMac::StartDragging(
     const DropData& drop_data,
     DragOperationsMask allowed_operations,
diff --git a/content/browser/web_package/web_bundle_element_browsertest.cc b/content/browser/web_package/web_bundle_element_browsertest.cc
index 515f45e..1b84760 100644
--- a/content/browser/web_package/web_bundle_element_browsertest.cc
+++ b/content/browser/web_package/web_bundle_element_browsertest.cc
@@ -7,6 +7,7 @@
 #include "base/memory/raw_ptr.h"
 #include "base/path_service.h"
 #include "base/run_loop.h"
+#include "base/strings/strcat.h"
 #include "base/test/scoped_feature_list.h"
 #include "build/build_config.h"
 #include "components/web_package/web_bundle_builder.h"
@@ -424,15 +425,13 @@
       {"/web_bundle/uuid-in-package.wbn", "loaded"},
       {"/server-redirect?/web_bundle/uuid-in-package.wbn", "failed"}};
 
-  for (const auto& pair : test_cases) {
-    const char* url = pair.first;
-    std::string expected_message = pair.second;
-    ExecuteScriptAsync(shell(), GetScriptForWebBundle(url));
+  for (const auto& [input_url, expected_message] : test_cases) {
+    ExecuteScriptAsync(shell(), GetScriptForWebBundle(input_url));
     std::string message;
     EXPECT_TRUE(dom_message_queue.WaitForMessage(&message));
-    EXPECT_EQ("\"" + expected_message + "\"", message);
+    EXPECT_EQ(base::StrCat({"\"", expected_message, "\""}), message);
 
-    if (expected_message == "failed")
+    if (std::string(expected_message) == "failed")
       console_observer.Wait();
   }
 }
diff --git a/content/browser/webauth/authenticator_common.cc b/content/browser/webauth/authenticator_common.cc
index cae87b7..570beb19 100644
--- a/content/browser/webauth/authenticator_common.cc
+++ b/content/browser/webauth/authenticator_common.cc
@@ -19,6 +19,7 @@
 #include "build/build_config.h"
 #include "content/browser/bad_message.h"
 #include "content/browser/renderer_host/back_forward_cache_disable.h"
+#include "content/browser/renderer_host/render_frame_host_impl.h"
 #include "content/browser/webauth/authenticator_environment_impl.h"
 #include "content/browser/webauth/client_data_json.h"
 #include "content/browser/webauth/virtual_authenticator_manager_impl.h"
@@ -241,9 +242,7 @@
   }
   const bool testing_api_enabled =
       AuthenticatorEnvironmentImpl::GetInstance()
-          ->IsVirtualAuthenticatorEnabledFor(
-              static_cast<RenderFrameHostImpl*>(render_frame_host)
-                  ->frame_tree_node());
+          ->IsVirtualAuthenticatorEnabledFor(render_frame_host);
   if (testing_api_enabled) {
     return *timeout;
   }
@@ -323,9 +322,7 @@
     bool is_u2f_api_request) {
   VirtualAuthenticatorManagerImpl* virtual_authenticator_manager =
       AuthenticatorEnvironmentImpl::GetInstance()
-          ->MaybeGetVirtualAuthenticatorManager(
-              static_cast<RenderFrameHostImpl*>(render_frame_host)
-                  ->frame_tree_node());
+          ->MaybeGetVirtualAuthenticatorManager(render_frame_host);
   if (virtual_authenticator_manager) {
     return virtual_authenticator_manager->MakeDiscoveryFactory();
   }
@@ -395,8 +392,7 @@
   }
   VirtualAuthenticatorManagerImpl* virtual_authenticator_manager =
       AuthenticatorEnvironmentImpl::GetInstance()
-          ->MaybeGetVirtualAuthenticatorManager(
-              render_frame_host_impl->frame_tree_node());
+          ->MaybeGetVirtualAuthenticatorManager(render_frame_host_impl);
   if (virtual_authenticator_manager) {
     delegate->SetVirtualEnvironment(true);
     if (!virtual_authenticator_manager->is_ui_enabled()) {
diff --git a/content/browser/webauth/authenticator_environment_impl.cc b/content/browser/webauth/authenticator_environment_impl.cc
index b07042e..f9fae92 100644
--- a/content/browser/webauth/authenticator_environment_impl.cc
+++ b/content/browser/webauth/authenticator_environment_impl.cc
@@ -38,59 +38,59 @@
 AuthenticatorEnvironmentImpl::~AuthenticatorEnvironmentImpl() = default;
 
 void AuthenticatorEnvironmentImpl::EnableVirtualAuthenticatorFor(
-    FrameTreeNode* node,
+    RenderFrameHost* rfh,
     bool enable_ui) {
   // Do not create a new virtual authenticator if there is one already defined
   // for the |node|.
-  if (base::Contains(virtual_authenticator_managers_, node))
+  if (VirtualAuthenticatorManagerImpl::GetForCurrentDocument(rfh))
     return;
 
-  node->AddObserver(this);
-  auto virtual_authenticator_manager =
-      std::make_unique<VirtualAuthenticatorManagerImpl>();
+  auto* virtual_authenticator_manager =
+      VirtualAuthenticatorManagerImpl::GetOrCreateForCurrentDocument(rfh);
   virtual_authenticator_manager->enable_ui(enable_ui);
-  virtual_authenticator_managers_[node] =
-      std::move(virtual_authenticator_manager);
 }
 
 void AuthenticatorEnvironmentImpl::DisableVirtualAuthenticatorFor(
-    FrameTreeNode* node) {
-  if (!base::Contains(virtual_authenticator_managers_, node))
+    RenderFrameHost* rfh) {
+  auto* virtual_authenticator_manager =
+      VirtualAuthenticatorManagerImpl::GetForCurrentDocument(rfh);
+  if (!virtual_authenticator_manager)
     return;
 
-  node->RemoveObserver(this);
-  virtual_authenticator_managers_.erase(node);
+  VirtualAuthenticatorManagerImpl::DeleteForCurrentDocument(rfh);
 }
 
 bool AuthenticatorEnvironmentImpl::IsVirtualAuthenticatorEnabledFor(
-    FrameTreeNode* node) {
-  return MaybeGetVirtualAuthenticatorManager(node) != nullptr;
+    RenderFrameHost* rfh) {
+  return MaybeGetVirtualAuthenticatorManager(rfh) != nullptr;
 }
 
 VirtualAuthenticatorManagerImpl*
 AuthenticatorEnvironmentImpl::MaybeGetVirtualAuthenticatorManager(
-    FrameTreeNode* node) {
-  for (; node; node = FrameTreeNode::From(node->parent())) {
-    if (base::Contains(virtual_authenticator_managers_, node)) {
-      return virtual_authenticator_managers_[node].get();
+    RenderFrameHost* rfh) {
+  for (; rfh; rfh = rfh->GetParent()) {
+    if (auto* virtual_authenticator_manager =
+            VirtualAuthenticatorManagerImpl::GetForCurrentDocument(rfh)) {
+      return virtual_authenticator_manager;
     }
   }
   return nullptr;
 }
 
 void AuthenticatorEnvironmentImpl::AddVirtualAuthenticatorReceiver(
-    FrameTreeNode* node,
+    RenderFrameHost* rfh,
     mojo::PendingReceiver<blink::test::mojom::VirtualAuthenticatorManager>
         receiver) {
-  auto it = virtual_authenticator_managers_.find(node);
-  DCHECK(it != virtual_authenticator_managers_.end());
-  it->second->AddReceiver(std::move(receiver));
+  auto* virtual_authenticator_manager =
+      VirtualAuthenticatorManagerImpl::GetForCurrentDocument(rfh);
+  DCHECK(virtual_authenticator_manager);
+  virtual_authenticator_manager->AddReceiver(std::move(receiver));
 }
 
 bool AuthenticatorEnvironmentImpl::HasVirtualUserVerifyingPlatformAuthenticator(
-    FrameTreeNode* node) {
+    RenderFrameHost* rfh) {
   VirtualAuthenticatorManagerImpl* authenticator_manager =
-      MaybeGetVirtualAuthenticatorManager(node);
+      MaybeGetVirtualAuthenticatorManager(rfh);
   if (!authenticator_manager) {
     return false;
   }
@@ -130,9 +130,4 @@
   replaced_discovery_factory_ = std::move(factory);
 }
 
-void AuthenticatorEnvironmentImpl::OnFrameTreeNodeDestroyed(
-    FrameTreeNode* node) {
-  DisableVirtualAuthenticatorFor(node);
-}
-
 }  // namespace content
diff --git a/content/browser/webauth/authenticator_environment_impl.h b/content/browser/webauth/authenticator_environment_impl.h
index 3eff8ea..52ffe45e 100644
--- a/content/browser/webauth/authenticator_environment_impl.h
+++ b/content/browser/webauth/authenticator_environment_impl.h
@@ -11,9 +11,9 @@
 #include "base/memory/raw_ptr.h"
 #include "base/no_destructor.h"
 #include "build/build_config.h"
-#include "content/browser/renderer_host/frame_tree_node.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/authenticator_environment.h"
+#include "content/public/browser/render_frame_host.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "third_party/blink/public/mojom/webauthn/virtual_authenticator.mojom-forward.h"
 
@@ -33,8 +33,7 @@
 //
 // This class is a singleton.
 class CONTENT_EXPORT AuthenticatorEnvironmentImpl
-    : public AuthenticatorEnvironment,
-      FrameTreeNode::Observer {
+    : public AuthenticatorEnvironment {
  public:
   static AuthenticatorEnvironmentImpl* GetInstance();
 
@@ -46,32 +45,32 @@
   // descendants.
   // Does not have any effect if the |node| already has the virtual environment
   // enabled.
-  void EnableVirtualAuthenticatorFor(FrameTreeNode* node, bool enable_ui);
+  void EnableVirtualAuthenticatorFor(RenderFrameHost* rfh, bool enable_ui);
 
   // Disables the scoped virtual authenticator environment for this |node|,
   // resetting the state. If the environment is set on one of the |node|'s
   // parents instead, this won't have any effect.
-  void DisableVirtualAuthenticatorFor(FrameTreeNode* node);
+  void DisableVirtualAuthenticatorFor(RenderFrameHost* rfh);
 
   // Returns whether the virtual authenticator environment is enabled for
   // |node|.
-  bool IsVirtualAuthenticatorEnabledFor(FrameTreeNode* node);
+  bool IsVirtualAuthenticatorEnabledFor(RenderFrameHost* rfh);
 
   // Returns the virtual fido discovery factory for the |node| if the virtual
   // environment is enabled for it, otherwise returns nullptr.
   VirtualAuthenticatorManagerImpl* MaybeGetVirtualAuthenticatorManager(
-      FrameTreeNode* node);
+      RenderFrameHost* rfh);
 
   // Adds the receiver to the virtual authenticator enabled for the |node|. The
   // virtual authenticator must be enabled beforehand.
   void AddVirtualAuthenticatorReceiver(
-      FrameTreeNode* node,
+      RenderFrameHost* rfh,
       mojo::PendingReceiver<blink::test::mojom::VirtualAuthenticatorManager>
           receiver);
 
   // Returns whether |node| has the virtual authenticator environment enabled
   // with a user-verifying platform installed in that environment.
-  bool HasVirtualUserVerifyingPlatformAuthenticator(FrameTreeNode* node);
+  bool HasVirtualUserVerifyingPlatformAuthenticator(RenderFrameHost* rfh);
 
   // Returns the override installed by
   // ReplaceDefaultDiscoveryFactoryForTesting().
@@ -95,9 +94,6 @@
   void ReplaceDefaultDiscoveryFactoryForTesting(
       std::unique_ptr<device::FidoDiscoveryFactory> factory) override;
 
-  // FrameTreeNode::Observer:
-  void OnFrameTreeNodeDestroyed(FrameTreeNode* node) override;
-
  protected:
   AuthenticatorEnvironmentImpl();
   ~AuthenticatorEnvironmentImpl() override;
@@ -107,9 +103,6 @@
 
   std::unique_ptr<device::FidoDiscoveryFactory> replaced_discovery_factory_;
 
-  std::map<FrameTreeNode*, std::unique_ptr<VirtualAuthenticatorManagerImpl>>
-      virtual_authenticator_managers_;
-
 #if BUILDFLAG(IS_WIN)
   raw_ptr<device::WinWebAuthnApi> win_webauthn_api_for_testing_ = nullptr;
 #endif
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc
index 6de138c8..cec007f 100644
--- a/content/browser/webauth/authenticator_impl_unittest.cc
+++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -23,6 +23,7 @@
 #include "base/path_service.h"
 #include "base/rand_util.h"
 #include "base/run_loop.h"
+#include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -2387,9 +2388,8 @@
 
 TEST_F(AuthenticatorContentBrowserClientTest, ChromeExtensionBadRpIds) {
   // Permit WebAuthn in extensions.
-  constexpr char kExtensionScheme[] = "chrome-extension";
   static const std::string kExtensionOrigin =
-      std::string(kExtensionScheme) + "://abcdefg";
+      base::StrCat({kExtensionScheme, "://abcdefg"});
   test_client_.GetTestWebAuthenticationDelegate()->permit_extensions = true;
 
   // Extensions are not permitted to assert RP IDs different from their
diff --git a/content/browser/webauth/client_data_json.cc b/content/browser/webauth/client_data_json.cc
index c65d369b..86e922d8 100644
--- a/content/browser/webauth/client_data_json.cc
+++ b/content/browser/webauth/client_data_json.cc
@@ -115,7 +115,11 @@
   if (params.payment_options) {
     ret.append(R"(,"payment":{)");
 
-    ret.append(R"("rp":)");
+    ret.append(R"("rpId":)");
+    ret.append(ToJSONString(params.payment_rp));
+
+    // TODO(crbug.com/1356224): Remove legacy 'rp' parameter.
+    ret.append(R"(,"rp":)");
     ret.append(ToJSONString(params.payment_rp));
 
     ret.append(R"(,"topOrigin":)");
diff --git a/content/browser/webauth/virtual_authenticator_manager_impl.cc b/content/browser/webauth/virtual_authenticator_manager_impl.cc
index 2014eed..b0e9711 100644
--- a/content/browser/webauth/virtual_authenticator_manager_impl.cc
+++ b/content/browser/webauth/virtual_authenticator_manager_impl.cc
@@ -28,7 +28,10 @@
 
 }  // namespace
 
-VirtualAuthenticatorManagerImpl::VirtualAuthenticatorManagerImpl() = default;
+VirtualAuthenticatorManagerImpl::VirtualAuthenticatorManagerImpl(
+    RenderFrameHost* rfh)
+    : DocumentUserData<VirtualAuthenticatorManagerImpl>(rfh) {}
+
 VirtualAuthenticatorManagerImpl::~VirtualAuthenticatorManagerImpl() = default;
 
 void VirtualAuthenticatorManagerImpl::AddObserver(Observer* observer) {
@@ -155,4 +158,6 @@
   std::move(callback).Run();
 }
 
+DOCUMENT_USER_DATA_KEY_IMPL(VirtualAuthenticatorManagerImpl);
+
 }  // namespace content
diff --git a/content/browser/webauth/virtual_authenticator_manager_impl.h b/content/browser/webauth/virtual_authenticator_manager_impl.h
index d446914..99b02e7 100644
--- a/content/browser/webauth/virtual_authenticator_manager_impl.h
+++ b/content/browser/webauth/virtual_authenticator_manager_impl.h
@@ -12,6 +12,7 @@
 
 #include "base/memory/weak_ptr.h"
 #include "base/observer_list.h"
+#include "content/public/browser/document_user_data.h"
 #include "device/fido/fido_discovery_factory.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/receiver_set.h"
@@ -26,7 +27,8 @@
 // for the Web Authentication API. Allows setting up and configurating virtual
 // authenticator devices for testing.
 class VirtualAuthenticatorManagerImpl
-    : public blink::test::mojom::VirtualAuthenticatorManager {
+    : public DocumentUserData<VirtualAuthenticatorManagerImpl>,
+      public blink::test::mojom::VirtualAuthenticatorManager {
  public:
   class Observer : public base::CheckedObserver {
    public:
@@ -34,7 +36,7 @@
     virtual void AuthenticatorRemoved(const std::string& authenticator_id) = 0;
   };
 
-  VirtualAuthenticatorManagerImpl();
+  explicit VirtualAuthenticatorManagerImpl(RenderFrameHost* render_frame_host);
   VirtualAuthenticatorManagerImpl(const VirtualAuthenticatorManagerImpl&) =
       delete;
   VirtualAuthenticatorManagerImpl& operator=(
@@ -82,6 +84,9 @@
   void ClearAuthenticators(ClearAuthenticatorsCallback callback) override;
 
  private:
+  friend class DocumentUserData<VirtualAuthenticatorManagerImpl>;
+  DOCUMENT_USER_DATA_KEY_DECL();
+
   VirtualAuthenticator* AddAuthenticator(
       std::unique_ptr<VirtualAuthenticator> authenticator);
 
diff --git a/content/public/browser/authenticator_request_client_delegate.cc b/content/public/browser/authenticator_request_client_delegate.cc
index 40c923e..d2d8a83 100644
--- a/content/public/browser/authenticator_request_client_delegate.cc
+++ b/content/public/browser/authenticator_request_client_delegate.cc
@@ -59,10 +59,8 @@
     RenderFrameHost* render_frame_host) {
   // The testing API supports resident keys, but for real requests //content
   // doesn't by default.
-  FrameTreeNode* frame_tree_node =
-      static_cast<RenderFrameHostImpl*>(render_frame_host)->frame_tree_node();
   if (AuthenticatorEnvironmentImpl::GetInstance()
-          ->IsVirtualAuthenticatorEnabledFor(frame_tree_node)) {
+          ->IsVirtualAuthenticatorEnabledFor(render_frame_host)) {
     return true;
   }
   return false;
@@ -75,12 +73,10 @@
 absl::optional<bool> WebAuthenticationDelegate::
     IsUserVerifyingPlatformAuthenticatorAvailableOverride(
         RenderFrameHost* render_frame_host) {
-  FrameTreeNode* frame_tree_node =
-      static_cast<RenderFrameHostImpl*>(render_frame_host)->frame_tree_node();
   if (AuthenticatorEnvironmentImpl::GetInstance()
-          ->IsVirtualAuthenticatorEnabledFor(frame_tree_node)) {
+          ->IsVirtualAuthenticatorEnabledFor(render_frame_host)) {
     return AuthenticatorEnvironmentImpl::GetInstance()
-        ->HasVirtualUserVerifyingPlatformAuthenticator(frame_tree_node);
+        ->HasVirtualUserVerifyingPlatformAuthenticator(render_frame_host);
   }
   return absl::nullopt;
 }
diff --git a/content/public/browser/browsing_data_remover.h b/content/public/browser/browsing_data_remover.h
index ba28b4b..5e83a3d 100644
--- a/content/public/browser/browsing_data_remover.h
+++ b/content/public/browser/browsing_data_remover.h
@@ -131,9 +131,16 @@
   // information.
   static constexpr DataType DATA_TYPE_ATTRIBUTION_REPORTING_INTERNAL = 1 << 21;
 
+  // Private Aggregation API
+  // (https://github.com/alexmturner/private-aggregation-api) persistent
+  // storage. This only refers to data stored internally by the API, such as
+  // privacy budgeting information. Note that currently the API does not persist
+  // any other data. Should only be cleared by user-initiated deletions.
+  static constexpr DataType DATA_TYPE_PRIVATE_AGGREGATION_INTERNAL = 1 << 22;
+
   // Embedders can add more datatypes beyond this point.
   static constexpr DataType DATA_TYPE_CONTENT_END =
-      DATA_TYPE_ATTRIBUTION_REPORTING_INTERNAL;
+      DATA_TYPE_PRIVATE_AGGREGATION_INTERNAL;
 
   // All data stored by the Attribution Reporting API.
   static constexpr DataType DATA_TYPE_ATTRIBUTION_REPORTING =
@@ -144,7 +151,13 @@
   static constexpr DataType DATA_TYPE_PRIVACY_SANDBOX =
       DATA_TYPE_TRUST_TOKENS | DATA_TYPE_ATTRIBUTION_REPORTING |
       DATA_TYPE_AGGREGATION_SERVICE | DATA_TYPE_INTEREST_GROUPS |
-      DATA_TYPE_SHARED_STORAGE;
+      DATA_TYPE_SHARED_STORAGE | DATA_TYPE_PRIVATE_AGGREGATION_INTERNAL;
+
+  // Internal data stored by APIs in the Privacy Sandbox, e.g. privacy budgeting
+  // information.
+  static constexpr DataType DATA_TYPE_PRIVACY_SANDBOX_INTERNAL =
+      DATA_TYPE_ATTRIBUTION_REPORTING_INTERNAL |
+      DATA_TYPE_PRIVATE_AGGREGATION_INTERNAL;
 
   using OriginType = uint64_t;
   // Web storage origins that StoragePartition recognizes as NOT protected
diff --git a/content/public/browser/preloading.h b/content/public/browser/preloading.h
index 8fee6fe..82f1415 100644
--- a/content/public/browser/preloading.h
+++ b/content/public/browser/preloading.h
@@ -110,6 +110,10 @@
   // Preloading was ineligible because the Data Saver setting was enabled.
   kDataSaverEnabled = 7,
 
+  // Preloading was ineligible because it was triggered from a page that has an
+  // effective url.
+  kHasEffectiveUrl = 8,
+
   // TODO(crbug.com/1309934): Add more specific ineligibility reasons subject to
   // each preloading operation
   // This constant is used to define the value from which embedders can add more
diff --git a/content/public/browser/storage_partition.h b/content/public/browser/storage_partition.h
index b891926..6d40d3c3 100644
--- a/content/public/browser/storage_partition.h
+++ b/content/public/browser/storage_partition.h
@@ -189,6 +189,7 @@
     REMOVE_DATA_MASK_INTEREST_GROUP_PERMISSIONS_CACHE = 1 << 15,
 
     REMOVE_DATA_MASK_ATTRIBUTION_REPORTING_INTERNAL = 1 << 16,
+    REMOVE_DATA_MASK_PRIVATE_AGGREGATION_INTERNAL = 1 << 17,
 
     REMOVE_DATA_MASK_ALL = 0xFFFFFFFF,
 
diff --git a/content/renderer/render_process_impl.cc b/content/renderer/render_process_impl.cc
index 207cda4b9..2a25d9ad 100644
--- a/content/renderer/render_process_impl.cc
+++ b/content/renderer/render_process_impl.cc
@@ -162,8 +162,9 @@
   SetV8FlagIfNotFeature(features::kWebAssemblySimd,
                         "--no-experimental-wasm-simd");
 
-  SetV8FlagIfFeature(blink::features::kJSONModules,
-                     "--harmony-import-assertions");
+  constexpr char kImportAssertionsFlag[] = "--harmony-import-assertions";
+  v8::V8::SetFlagsFromString(kImportAssertionsFlag,
+                             sizeof(kImportAssertionsFlag));
 
   constexpr char kAtomicsFlag[] = "--harmony-atomics";
   v8::V8::SetFlagsFromString(kAtomicsFlag, sizeof(kAtomicsFlag));
diff --git a/content/services/auction_worklet/bidder_worklet.cc b/content/services/auction_worklet/bidder_worklet.cc
index 45c258f..f680ac5 100644
--- a/content/services/auction_worklet/bidder_worklet.cc
+++ b/content/services/auction_worklet/bidder_worklet.cc
@@ -519,6 +519,9 @@
           "owner", url::Origin::Create(script_source_url_).Serialize()) ||
       !interest_group_dict.Set("name",
                                bidder_worklet_non_shared_params->name) ||
+      !interest_group_dict.Set("useBiddingSignalsPrioritization",
+                               bidder_worklet_non_shared_params
+                                   ->enable_bidding_signals_prioritization) ||
       !interest_group_dict.Set("biddingLogicUrl", script_source_url_.spec()) ||
       (wasm_helper_url_ &&
        !interest_group_dict.Set("biddingWasmHelperUrl",
@@ -539,6 +542,23 @@
     return;
   }
 
+  if (bidder_worklet_non_shared_params->priority_vector) {
+    v8::Local<v8::Object> priority_vector = v8::Object::New(isolate);
+    gin::Dictionary priority_vector_dict(isolate, priority_vector);
+    for (const auto& pair :
+         *bidder_worklet_non_shared_params->priority_vector) {
+      if (!priority_vector_dict.Set(pair.first, pair.second)) {
+        PostErrorBidCallbackToUserThread(std::move(callback));
+        return;
+      }
+    }
+    if (!v8_helper_->InsertValue("priorityVector", priority_vector,
+                                 interest_group_object)) {
+      PostErrorBidCallbackToUserThread(std::move(callback));
+      return;
+    }
+  }
+
   if (bidder_worklet_non_shared_params->trusted_bidding_signals_keys) {
     std::vector<v8::Local<v8::Value>> trusted_bidding_signals_keys;
     for (const auto& key :
diff --git a/content/services/auction_worklet/bidder_worklet_unittest.cc b/content/services/auction_worklet/bidder_worklet_unittest.cc
index 0a8c276..9cfc5ca 100644
--- a/content/services/auction_worklet/bidder_worklet_unittest.cc
+++ b/content/services/auction_worklet/bidder_worklet_unittest.cc
@@ -216,6 +216,8 @@
   // test.
   void SetDefaultParameters() {
     interest_group_name_ = "Fred";
+    interest_group_enable_bidding_signals_prioritization_ = false;
+    interest_group_priority_vector_.reset();
     interest_group_user_bidding_signals_ = absl::nullopt;
     join_origin_ = url::Origin::Create(GURL("https://url.test/"));
     execution_mode_ =
@@ -255,6 +257,25 @@
     data_version_.reset();
   }
 
+  // Helper that creates and runs a script to validate that `expression`
+  // evaluates to true when evaluated in a generateBid() script. Does this by
+  // evaluating the expression in the content of generateBid() and throwing if
+  // it's not true. Otherwise, a bid is generated.
+  void RunGenerateBidExpectingExpressionIsTrue(const std::string& expression) {
+    std::string script = CreateGenerateBidScript(
+        /*raw_return_value=*/R"({bid: 1, render:"https://response.test/"})",
+        /*extra_code=*/base::StringPrintf(R"(let val = %s;
+                                             if (val !== true)
+                                             throw JSON.stringify(val);)",
+                                          expression.c_str()));
+
+    RunGenerateBidWithJavascriptExpectingResult(
+        script, mojom::BidderWorkletBid::New(
+                    /*ad=*/"null",
+                    /*bid=*/1, GURL("https://response.test/"),
+                    /*ad_components=*/absl::nullopt, base::TimeDelta()));
+  }
+
   // Configures `url_loader_factory_` to return a generateBid() script with the
   // specified return line. Then runs the script, expecting the provided result.
   void RunGenerateBidWithReturnValueExpectingResult(
@@ -424,7 +445,9 @@
   // configuration.
   mojom::BidderWorkletNonSharedParamsPtr CreateBidderWorkletNonSharedParams() {
     return mojom::BidderWorkletNonSharedParams::New(
-        interest_group_name_, execution_mode_, daily_update_url_,
+        interest_group_name_,
+        interest_group_enable_bidding_signals_prioritization_,
+        interest_group_priority_vector_, execution_mode_, daily_update_url_,
         interest_group_trusted_bidding_signals_keys_,
         interest_group_user_bidding_signals_, interest_group_ads_,
         interest_group_ad_components_);
@@ -588,6 +611,9 @@
   // Values used to construct the BiddingInterestGroup passed to the
   // BidderWorklet.
   std::string interest_group_name_;
+  bool interest_group_enable_bidding_signals_prioritization_;
+  absl::optional<base::flat_map<std::string, double>>
+      interest_group_priority_vector_;
   GURL interest_group_bidding_url_ = GURL("https://url.test/");
   url::Origin join_origin_;
   blink::mojom::InterestGroup::ExecutionMode execution_mode_ =
@@ -1471,6 +1497,39 @@
           /*ad_components=*/absl::nullopt, base::TimeDelta()));
 }
 
+TEST_F(BidderWorkletTest,
+       GenerateBidInterestGroupUseBiddingSignalsPrioritization) {
+  RunGenerateBidExpectingExpressionIsTrue(
+      "interestGroup.useBiddingSignalsPrioritization === false");
+
+  interest_group_enable_bidding_signals_prioritization_ = true;
+  RunGenerateBidExpectingExpressionIsTrue(
+      "interestGroup.useBiddingSignalsPrioritization === true");
+}
+
+TEST_F(BidderWorkletTest, GenerateBidInterestGroupPriorityVector) {
+  RunGenerateBidExpectingExpressionIsTrue(
+      "interestGroup.priorityVector === undefined");
+
+  interest_group_priority_vector_.emplace();
+  RunGenerateBidExpectingExpressionIsTrue(
+      "Object.keys(interestGroup.priorityVector).length === 0");
+
+  interest_group_priority_vector_->emplace("foo", 4);
+  RunGenerateBidExpectingExpressionIsTrue(
+      "Object.keys(interestGroup.priorityVector).length === 1");
+  RunGenerateBidExpectingExpressionIsTrue(
+      "interestGroup.priorityVector['foo'] === 4");
+
+  interest_group_priority_vector_->emplace("bar", -5);
+  RunGenerateBidExpectingExpressionIsTrue(
+      "Object.keys(interestGroup.priorityVector).length === 2");
+  RunGenerateBidExpectingExpressionIsTrue(
+      "interestGroup.priorityVector['foo'] === 4");
+  RunGenerateBidExpectingExpressionIsTrue(
+      "interestGroup.priorityVector['bar'] === -5");
+}
+
 TEST_F(BidderWorkletTest, GenerateBidInterestGroupBiddingLogicUrl) {
   const std::string kGenerateBidBody =
       R"({ad: interestGroup.biddingLogicUrl, bid:1,
diff --git a/content/services/auction_worklet/public/mojom/bidder_worklet.mojom b/content/services/auction_worklet/public/mojom/bidder_worklet.mojom
index fcd4f1ee..82c0def 100644
--- a/content/services/auction_worklet/public/mojom/bidder_worklet.mojom
+++ b/content/services/auction_worklet/public/mojom/bidder_worklet.mojom
@@ -35,8 +35,15 @@
 // same between InterestGroups.
 //
 // See blink.mojom.InterestGroup for documentation on individual fields.
+//
+// This doesn't include `priority` or `priority_signals_overrides` as they can
+// be modified by worklets, so could potentially have cross-origin information.
 struct BidderWorkletNonSharedParams {
   string name;
+
+  bool enable_bidding_signals_prioritization;
+  map<string, double>? priority_vector;
+
   blink.mojom.InterestGroup.ExecutionMode execution_mode;
 
   url.mojom.Url? daily_update_url;
diff --git a/content/test/data/interest_group/bidding_argument_validator.js b/content/test/data/interest_group/bidding_argument_validator.js
index fecb6ba..fb58c56 100644
--- a/content/test/data/interest_group/bidding_argument_validator.js
+++ b/content/test/data/interest_group/bidding_argument_validator.js
@@ -25,7 +25,7 @@
   if (!interestGroup)
     throw 'No interest group';
 
-  if (Object.keys(interestGroup).length !== 9) {
+  if (Object.keys(interestGroup).length !== 11) {
     throw 'Wrong number of interestGroupFields ' +
         JSON.stringify(interestGroup);
   }
@@ -35,6 +35,18 @@
   if (!interestGroup.owner.startsWith('https://a.test'))
     throw 'Missing a.test in owner ' + interestGroup.owner;
 
+  if (interestGroup.useBiddingSignalsPrioritization !== true) {
+    throw 'Incorrect useBiddingSignalsPrioritization ' +
+        interestGroup.useBiddingSignalsPrioritization;
+  }
+
+  if (Object.keys(interestGroup.priorityVector).length !== 2 ||
+      interestGroup.priorityVector['foo'] !== 2 ||
+      interestGroup.priorityVector['bar'] !== -11) {
+    throw 'Incorrect priorityVector ' +
+        JSON.stringify(interestGroup.priorityVector);
+  }
+
   if (!interestGroup.biddingLogicUrl.startsWith('https://a.test') ||
       !interestGroup.biddingLogicUrl.endsWith(
           '/bidding_argument_validator.js')) {
diff --git a/content/test/data/interest_group/component_auction_bidding_argument_validator.js b/content/test/data/interest_group/component_auction_bidding_argument_validator.js
index 560c7983..2d99d529 100644
--- a/content/test/data/interest_group/component_auction_bidding_argument_validator.js
+++ b/content/test/data/interest_group/component_auction_bidding_argument_validator.js
@@ -36,7 +36,7 @@
   if (!interestGroup)
     throw 'No interest group';
 
-  if (Object.keys(interestGroup).length !== 9) {
+  if (Object.keys(interestGroup).length !== 11) {
     throw 'Wrong number of interestGroupFields ' +
         JSON.stringify(interestGroup);
   }
@@ -46,6 +46,17 @@
   if (!interestGroup.owner.startsWith('https://a.test'))
     throw 'Missing a.test in owner ' + interestGroup.owner;
 
+  if (interestGroup.useBiddingSignalsPrioritization !== false) {
+    throw 'Incorrect useBiddingSignalsPrioritization ' +
+        interestGroup.useBiddingSignalsPrioritization;
+  }
+
+  if (Object.keys(interestGroup.priorityVector).length !== 1 ||
+    interestGroup.priorityVector['FOO'] !== 2) {
+    throw 'Incorrect priorityVector ' +
+        JSON.stringify(interestGroup.priorityVector);
+  }
+
   if (!interestGroup.biddingLogicUrl.startsWith('https://a.test') ||
       !interestGroup.biddingLogicUrl.endsWith(
           '/component_auction_bidding_argument_validator.js')) {
diff --git a/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt
index 57949ca60..9ae0395 100644
--- a/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/context_lost_expectations.txt
@@ -185,10 +185,6 @@
 crbug.com/1340081 [ linux release intel ] ContextLost_WebGLUnblockedAfterUserInitiatedReload [ RetryOnFailure ]
 crbug.com/1340081 [ linux release intel-0x5912 ] ContextLost_MacWebGLMultisamplingHighPowerSwitchDoesNotCrash [ RetryOnFailure ]
 
-# GPU process hanging inside Gallium driver
-crbug.com/1355622 [ chromeos chromeos-board-amd64-generic no-passthrough ] ContextLost_WorkerRAFAfterGPUCrash [ Failure ]
-crbug.com/1355622 [ chromeos chromeos-board-amd64-generic no-passthrough ] GpuCrash_GPUProcessCrashesExactlyOncePerVisitToAboutGpuCrash [ Failure ]
-
 #######################################################################
 # Automated Entries After This Point - Do Not Manually Add Below Here #
 #######################################################################
diff --git a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
index c2dfedeb..7afe763 100644
--- a/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/pixel_expectations.txt
@@ -385,6 +385,8 @@
 crbug.com/1287280 [ android android-pixel-6 no-passthrough android-chromium ] Pixel_CanvasDisplaySRGBAccelerated2D [ Failure ]
 crbug.com/1288586 [ android android-pixel-6 no-passthrough renderer-skia-gl android-webview-instrumentation ] Pixel_OffscreenCanvasWebGLDefault [ Failure ]
 crbug.com/1289884 [ android android-pixel-6 renderer-skia-vulkan android-webview-instrumentation ] * [ Failure ]
+crbug.com/1356252 [ android android-pixel-6 passthrough angle-opengles ] Pixel_ScissorTestWithPreserveDrawingBuffer [ Failure ]
+crbug.com/1356252 [ android android-pixel-6 passthrough angle-opengles ] Pixel_WebGLGreenTriangle_AA_NoAlpha [ Failure ]
 
 crbug.com/1290953 [ android android-nexus-5x android-webview-instrumentation ] Pixel_CanvasLowLatency2D [ Failure ]
 crbug.com/1290953 [ android android-nexus-5x android-webview-instrumentation ] Pixel_CanvasLowLatency2DDrawImage [ Failure ]
@@ -446,11 +448,6 @@
 # Crash on Linux FYI Release (NVIDIA) using SkiaRenderer/Vulkan
 crbug.com/1353189 [ linux renderer-skia-vulkan nvidia-0x2184 ] Pixel_VideoStreamFromWebGLAlphaCanvas_TwoCopy_CpuReadback [ Failure ]
 
-# GPU process hanging inside Gallium driver
-crbug.com/1355622 [ chromeos chromeos-board-amd64-generic no-passthrough ] Pixel_Video_Context_Loss_MP4 [ Failure ]
-crbug.com/1355622 [ chromeos chromeos-board-amd64-generic no-passthrough ] Pixel_Video_Context_Loss_VP9 [ Failure ]
-crbug.com/1355622 [ chromeos chromeos-board-amd64-generic no-passthrough ] Pixel_WebGLSadCanvas [ Failure ]
-
 #######################################################################
 # Automated Entries After This Point - Do Not Manually Add Below Here #
 #######################################################################
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
index 28775d5..fd51d83 100644
--- a/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/webgl_conformance_expectations.txt
@@ -651,7 +651,8 @@
 # This can be re-added once the general Android suppression due to DrDc (crbug.com/1289303) is removed.
 # crbug.com/1288595 [ android android-pixel-6 passthrough ] conformance/canvas/render-after-resize-test.html [ Failure ]
 crbug.com/1288603 [ android android-pixel-6 passthrough angle-opengles ] conformance/extensions/angle-instanced-arrays-out-of-bounds.html [ Failure ]
-
+crbug.com/1356252 [ android android-pixel-6 passthrough angle-opengles ] conformance/rendering/color-mask-preserved-during-implicit-clears.html [ Failure ]
+crbug.com/1356252 [ android android-pixel-6 passthrough angle-opengles ] conformance/state/gl-enable-enum-test.html [ Failure ]
 
 # Misc failures
 crbug.com/angleproject/2988 [ android angle-opengles ] conformance/context/context-size-change.html [ Failure ]
diff --git a/gin/v8_isolate_memory_dump_provider.cc b/gin/v8_isolate_memory_dump_provider.cc
index 17dd3ed..fcc8659 100644
--- a/gin/v8_isolate_memory_dump_provider.cc
+++ b/gin/v8_isolate_memory_dump_provider.cc
@@ -170,6 +170,12 @@
       "isolate_0x%" PRIXPTR,
       reinterpret_cast<uintptr_t>(isolate_holder_->isolate()));
 
+  // Dump statistics of the heap's spaces.
+  v8::HeapStatistics heap_statistics;
+  // The total heap sizes should be sampled before the individual space sizes
+  // because of concurrent allocation. DCHECKs below rely on this order.
+  isolate_holder_->isolate()->GetHeapStatistics(&heap_statistics);
+
   IsolateHolder::IsolateType isolate_type = isolate_holder_->isolate_type();
   std::string dump_base_name = "v8/" + IsolateTypeString(isolate_type);
   std::string dump_name_suffix =
@@ -211,12 +217,6 @@
                           space_used_size);
   }
 
-  // Dump statistics of the heap's spaces.
-  v8::HeapStatistics heap_statistics;
-  // The total heap sizes should be sampled before the individual space sizes
-  // because of concurrent allocation. DCHECKs below rely on this order.
-  isolate_holder_->isolate()->GetHeapStatistics(&heap_statistics);
-
   // Sanity checks that all spaces are accounted for in GetHeapSpaceStatistics.
   // Background threads may be running and allocating concurrently, so the sum
   // of space sizes may be exceed the total heap size that was sampled earlier.
diff --git a/gpu/command_buffer/common/capabilities.h b/gpu/command_buffer/common/capabilities.h
index 027528e7..0329162 100644
--- a/gpu/command_buffer/common/capabilities.h
+++ b/gpu/command_buffer/common/capabilities.h
@@ -8,7 +8,6 @@
 #include <stdint.h>
 #include <vector>
 
-#include "base/containers/flat_map.h"
 #include "gpu/command_buffer/common/gpu_memory_buffer_support.h"
 #include "gpu/gpu_export.h"
 #include "ui/gfx/buffer_types.h"
@@ -220,9 +219,6 @@
       gfx::BufferFormat::YVU_420,
   };
   std::vector<gfx::BufferUsageAndFormat> texture_target_exception_list;
-
-  base::flat_map<uint32_t, std::vector<uint64_t>> drm_formats_and_modifiers;
-  std::string drm_render_node;
 };
 
 }  // namespace gpu
diff --git a/gpu/command_buffer/service/BUILD.gn b/gpu/command_buffer/service/BUILD.gn
index 1c2420d..9060177 100644
--- a/gpu/command_buffer/service/BUILD.gn
+++ b/gpu/command_buffer/service/BUILD.gn
@@ -360,10 +360,6 @@
     "//ui/gl/init",
   ]
 
-  if (is_chromeos) {
-    deps += [ "//build/config/linux/libdrm" ]
-  }
-
   # If statically linked against ANGLE, link against angle:translator which is already included with ANGLE.
   if (use_static_angle) {
     deps += [ "//third_party/angle:translator" ]
diff --git a/gpu/command_buffer/service/gl_utils.cc b/gpu/command_buffer/service/gl_utils.cc
index 85c3b487..1933bd92 100644
--- a/gpu/command_buffer/service/gl_utils.cc
+++ b/gpu/command_buffer/service/gl_utils.cc
@@ -16,11 +16,6 @@
 #include "gpu/command_buffer/service/texture_manager.h"
 #include "ui/gl/gl_version_info.h"
 
-#if BUILDFLAG(IS_CHROMEOS)
-#include <drm_fourcc.h>
-#include "ui/gl/gl_surface_egl.h"
-#endif
-
 namespace gpu {
 namespace gles2 {
 
@@ -281,136 +276,6 @@
   }
 }
 
-#if BUILDFLAG(IS_CHROMEOS)
-bool IsValidFourCCFormat(uint32_t current_format) {
-  switch (current_format) {
-    case DRM_FORMAT_R8:
-    case DRM_FORMAT_GR88:
-    case DRM_FORMAT_ABGR8888:
-    case DRM_FORMAT_XBGR8888:
-    case DRM_FORMAT_ARGB8888:
-    case DRM_FORMAT_XRGB8888:
-    case DRM_FORMAT_ARGB2101010:
-    case DRM_FORMAT_ABGR2101010:
-    case DRM_FORMAT_RGB565:
-    case DRM_FORMAT_NV12:
-    case DRM_FORMAT_YVU420:
-    case DRM_FORMAT_P010:
-      return true;
-    default:
-      return false;
-  }
-}
-
-gfx::BufferFormat GetBufferFormatFromFourCCFormat(int format) {
-  switch (format) {
-    case DRM_FORMAT_R8:
-      return gfx::BufferFormat::R_8;
-    case DRM_FORMAT_GR88:
-      return gfx::BufferFormat::RG_88;
-    case DRM_FORMAT_ABGR8888:
-      return gfx::BufferFormat::RGBA_8888;
-    case DRM_FORMAT_XBGR8888:
-      return gfx::BufferFormat::RGBX_8888;
-    case DRM_FORMAT_ARGB8888:
-      return gfx::BufferFormat::BGRA_8888;
-    case DRM_FORMAT_XRGB8888:
-      return gfx::BufferFormat::BGRX_8888;
-    case DRM_FORMAT_ABGR2101010:
-      return gfx::BufferFormat::RGBA_1010102;
-    case DRM_FORMAT_ARGB2101010:
-      return gfx::BufferFormat::BGRA_1010102;
-    case DRM_FORMAT_RGB565:
-      return gfx::BufferFormat::BGR_565;
-    case DRM_FORMAT_NV12:
-      return gfx::BufferFormat::YUV_420_BIPLANAR;
-    case DRM_FORMAT_YVU420:
-      return gfx::BufferFormat::YVU_420;
-    case DRM_FORMAT_P010:
-      return gfx::BufferFormat::P010;
-    default:
-      NOTREACHED();
-      return gfx::BufferFormat::BGRA_8888;
-  }
-}
-
-void PopulateDRMCapabilities(Capabilities* caps) {
-  DCHECK(caps != nullptr);
-
-  EGLDisplay egl_display = gl::GLSurfaceEGL::GetGLDisplayEGL()->GetDisplay();
-  if (egl_display) {
-    if (gl::GLSurfaceEGL::GetGLDisplayEGL()
-            ->ext->b_EGL_EXT_image_dma_buf_import_modifiers) {
-      EGLint num_formats = 0;
-      if (eglQueryDmaBufFormatsEXT(egl_display, 0, nullptr, &num_formats) &&
-          num_formats > 0) {
-        std::vector<EGLint> formats_array(num_formats);
-        bool res = eglQueryDmaBufFormatsEXT(egl_display, num_formats,
-                                            formats_array.data(), &num_formats);
-        DCHECK(res);
-
-        for (EGLint format : formats_array) {
-          if (!IsValidFourCCFormat(format)) {
-            continue;
-          }
-
-          if (!caps->gpu_memory_buffer_formats.Has(
-                  GetBufferFormatFromFourCCFormat(format))) {
-            continue;
-          }
-
-          std::vector<uint64_t> modifiers;
-          // Advertise implicit modifier support
-          modifiers.push_back(DRM_FORMAT_MOD_INVALID);
-
-          EGLint num_modifiers = 0;
-          if (eglQueryDmaBufModifiersEXT(egl_display, format, 0, nullptr,
-                                         nullptr, &num_modifiers) &&
-              num_modifiers > 0) {
-            std::vector<EGLuint64KHR> modifiers_array(num_modifiers);
-            res = eglQueryDmaBufModifiersEXT(egl_display, format, num_modifiers,
-                                             modifiers_array.data(), nullptr,
-                                             &num_modifiers);
-            DCHECK(res);
-
-            for (uint64_t modifier : modifiers_array) {
-              modifiers.push_back(modifier);
-            }
-          }
-
-          caps->drm_formats_and_modifiers.emplace(format, modifiers);
-        }
-      }
-    }
-
-    if (gl::g_driver_egl.client_ext.b_EGL_EXT_device_query) {
-      EGLAttrib attrib;
-      if (eglQueryDisplayAttribEXT(egl_display, EGL_DEVICE_EXT, &attrib)) {
-        EGLDeviceEXT egl_device = (EGLDeviceEXT)attrib;
-        const char* device_extensions =
-            eglQueryDeviceStringEXT(egl_device, EGL_EXTENSIONS);
-        if (device_extensions) {
-          gfx::ExtensionSet device_extension_set =
-              gfx::MakeExtensionSet(device_extensions);
-          if (gfx::HasExtension(device_extension_set,
-                                "EGL_EXT_device_drm_render_node")) {
-            const char* path = eglQueryDeviceStringEXT(
-                egl_device, EGL_DRM_RENDER_NODE_FILE_EXT);
-            caps->drm_render_node = std::string(path);
-          }
-          if (caps->drm_render_node.empty() &&
-              gfx::HasExtension(device_extension_set, "EGL_EXT_device_drm")) {
-            const char* path =
-                eglQueryDeviceStringEXT(egl_device, EGL_DRM_DEVICE_FILE_EXT);
-            caps->drm_render_node = std::string(path);
-          }
-        }
-      }
-    }
-  }
-}
-#endif
-
 bool CheckUniqueAndNonNullIds(GLsizei n, const GLuint* client_ids) {
   if (n <= 0)
     return true;
diff --git a/gpu/command_buffer/service/gl_utils.h b/gpu/command_buffer/service/gl_utils.h
index a203446d0..5538bc4 100644
--- a/gpu/command_buffer/service/gl_utils.h
+++ b/gpu/command_buffer/service/gl_utils.h
@@ -79,10 +79,6 @@
 void PopulateNumericCapabilities(Capabilities* caps,
                                  const FeatureInfo* feature_info);
 
-#if BUILDFLAG(IS_CHROMEOS)
-void PopulateDRMCapabilities(Capabilities* caps);
-#endif
-
 bool CheckUniqueAndNonNullIds(GLsizei n, const GLuint* client_ids);
 
 const char* GetServiceVersionString(const FeatureInfo* feature_info);
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 0203148..db701f9 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -4337,10 +4337,6 @@
   caps.angle_rgbx_internal_format =
       feature_info_->feature_flags().angle_rgbx_internal_format;
 
-#if BUILDFLAG(IS_CHROMEOS)
-  PopulateDRMCapabilities(&caps);
-#endif
-
   return caps;
 }
 
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
index bb07519..c3bcb6af 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
@@ -1749,10 +1749,6 @@
   caps.angle_rgbx_internal_format =
       feature_info_->feature_flags().angle_rgbx_internal_format;
 
-#if BUILDFLAG(IS_CHROMEOS)
-  PopulateDRMCapabilities(&caps);
-#endif
-
   return caps;
 }
 
diff --git a/gpu/command_buffer/service/raster_decoder.cc b/gpu/command_buffer/service/raster_decoder.cc
index 921a4fa..a6f49a3 100644
--- a/gpu/command_buffer/service/raster_decoder.cc
+++ b/gpu/command_buffer/service/raster_decoder.cc
@@ -743,7 +743,11 @@
   }
 
   void SubmitIfNecessary(std::vector<GrBackendSemaphore> signal_semaphores) {
-    if (!signal_semaphores.empty()) {
+    // Note that when DrDc is enabled, we need to call
+    // AddVulkanCleanupTaskForSkiaFlush() on gpu main thread and do skia flush.
+    // This will ensure that vulkan memory allocated on gpu main thread will be
+    // cleaned up.
+    if (!signal_semaphores.empty() || is_drdc_enabled_) {
       GrFlushInfo flush_info = {
           .fNumSemaphores = signal_semaphores.size(),
           .fSignalSemaphores = signal_semaphores.data(),
@@ -1023,7 +1027,8 @@
           features::kDisableFlushWorkaroundForMacCrash)),
 #endif
       is_raw_draw_enabled_(features::IsUsingRawDraw()),
-      is_drdc_enabled_(features::IsDrDcEnabled()) {
+      is_drdc_enabled_(features::IsDrDcEnabled() &&
+                       !feature_info()->workarounds().disable_drdc) {
   DCHECK(shared_context_state_);
   shared_context_state_->AddContextLostObserver(this);
 }
diff --git a/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing_factory.cc b/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing_factory.cc
index 6e8bcfe2..9f30728 100644
--- a/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing_factory.cc
+++ b/gpu/command_buffer/service/shared_image/wrapped_sk_image_backing_factory.cc
@@ -423,7 +423,9 @@
 WrappedSkImageBackingFactory::WrappedSkImageBackingFactory(
     scoped_refptr<SharedContextState> context_state)
     : context_state_(std::move(context_state)),
-      is_drdc_enabled_(features::IsDrDcEnabled()) {}
+      is_drdc_enabled_(
+          features::IsDrDcEnabled() &&
+          !context_state_->feature_info()->workarounds().disable_drdc) {}
 
 WrappedSkImageBackingFactory::~WrappedSkImageBackingFactory() = default;
 
diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json
index 728b5995..8787ab36 100644
--- a/gpu/config/gpu_driver_bug_list.json
+++ b/gpu/config/gpu_driver_bug_list.json
@@ -4115,6 +4115,19 @@
       "features": [
         "cache_texture_in_ozone_backing"
       ]
+    },
+    {
+      "id": 401,
+      "description": "Disable DrDc on PowerVR Rouge* gpus.",
+      "cr_bugs": [1354201],
+      "os": {
+        "type": "android"
+      },
+      "gl_vendor": ".*Imagination.*",
+      "gl_renderer": ".*PowerVR Rogue.*",
+      "features": [
+        "disable_drdc"
+      ]
     }
   ]
 }
diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc
index f1e3f7f..ced976d 100644
--- a/gpu/config/gpu_finch_features.cc
+++ b/gpu/config/gpu_finch_features.cc
@@ -474,6 +474,10 @@
 #endif
 }
 
+// Note that DrDc is also disabled on some of the gpus (crbug.com/1354201).
+// Thread safe media will still be used on those gpus which should be fine for
+// now as the lock shouldn't have much overhead and is limited to only few gpus.
+// This should be fixed/updated later to account for disabled gpus.
 bool NeedThreadSafeAndroidMedia() {
   return IsDrDcEnabled() || IsUsingThreadSafeMediaForWebView();
 }
diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list.txt
index b6133766..b57098de 100644
--- a/gpu/config/gpu_workaround_list.txt
+++ b/gpu/config/gpu_workaround_list.txt
@@ -37,6 +37,7 @@
 disable_direct_composition_sw_video_overlays
 disable_direct_composition_video_overlays
 disable_discard_framebuffer
+disable_drdc
 disable_dual_source_blending_support
 disable_dxgi_zero_copy_video
 disable_dxva_video_decoder
diff --git a/gpu/ipc/common/gpu_command_buffer_traits_multi.h b/gpu/ipc/common/gpu_command_buffer_traits_multi.h
index f858268..9b1d576 100644
--- a/gpu/ipc/common/gpu_command_buffer_traits_multi.h
+++ b/gpu/ipc/common/gpu_command_buffer_traits_multi.h
@@ -162,8 +162,6 @@
 
   IPC_STRUCT_TRAITS_MEMBER(gpu_memory_buffer_formats)
   IPC_STRUCT_TRAITS_MEMBER(texture_target_exception_list)
-  IPC_STRUCT_TRAITS_MEMBER(drm_formats_and_modifiers)
-  IPC_STRUCT_TRAITS_MEMBER(drm_render_node)
 IPC_STRUCT_TRAITS_END()
 
 IPC_STRUCT_TRAITS_BEGIN(gpu::CommandBuffer::State)
diff --git a/infra/config/generated/builders/ci/android-code-coverage/properties.json b/infra/config/generated/builders/ci/android-code-coverage/properties.json
index d760379a..345214ce 100644
--- a/infra/config/generated/builders/ci/android-code-coverage/properties.json
+++ b/infra/config/generated/builders/ci/android-code-coverage/properties.json
@@ -4,6 +4,7 @@
       "overall",
       "unit"
     ],
+    "export_coverage_to_zoss": true,
     "use_java_coverage": true
   },
   "$build/reclient": {
diff --git a/infra/config/generated/builders/try/android-12-x64-rel-compilator/properties.json b/infra/config/generated/builders/try/android-12-x64-rel-compilator/properties.json
index 011e6b4..5ba8492 100644
--- a/infra/config/generated/builders/try/android-12-x64-rel-compilator/properties.json
+++ b/infra/config/generated/builders/try/android-12-x64-rel-compilator/properties.json
@@ -60,9 +60,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.android",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.android",
-    "builder_name": "android-12-x64-rel"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json b/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json
index 55b53bd..613b442 100644
--- a/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json
+++ b/infra/config/generated/builders/try/android-marshmallow-arm64-rel-compilator/properties.json
@@ -108,9 +108,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.android",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.android",
-    "builder_name": "android-marshmallow-arm64-rel"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-marshmallow-x86-rel-compilator/properties.json b/infra/config/generated/builders/try/android-marshmallow-x86-rel-compilator/properties.json
index f13c7fc4..6899b4a 100644
--- a/infra/config/generated/builders/try/android-marshmallow-x86-rel-compilator/properties.json
+++ b/infra/config/generated/builders/try/android-marshmallow-x86-rel-compilator/properties.json
@@ -74,9 +74,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.android",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.android",
-    "builder_name": "android-marshmallow-x86-rel"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-marshmallow-x86-rel-reclient-compilator/properties.json b/infra/config/generated/builders/try/android-marshmallow-x86-rel-reclient-compilator/properties.json
index a4e2bed8..70cdeb30 100644
--- a/infra/config/generated/builders/try/android-marshmallow-x86-rel-reclient-compilator/properties.json
+++ b/infra/config/generated/builders/try/android-marshmallow-x86-rel-reclient-compilator/properties.json
@@ -79,9 +79,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.android",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.android",
-    "builder_name": "android-marshmallow-x86-rel-reclient"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/android-pie-arm64-rel-compilator/properties.json b/infra/config/generated/builders/try/android-pie-arm64-rel-compilator/properties.json
index 357fabad..3e106b45 100644
--- a/infra/config/generated/builders/try/android-pie-arm64-rel-compilator/properties.json
+++ b/infra/config/generated/builders/try/android-pie-arm64-rel-compilator/properties.json
@@ -66,9 +66,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.android",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.android",
-    "builder_name": "android-pie-arm64-rel"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/chromeos-amd64-generic-rel-compilator/properties.json b/infra/config/generated/builders/try/chromeos-amd64-generic-rel-compilator/properties.json
index e4a7b321..e27f6ac2 100644
--- a/infra/config/generated/builders/try/chromeos-amd64-generic-rel-compilator/properties.json
+++ b/infra/config/generated/builders/try/chromeos-amd64-generic-rel-compilator/properties.json
@@ -59,9 +59,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.chromiumos",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.chromiumos",
-    "builder_name": "chromeos-amd64-generic-rel"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/linux-chromeos-rel-compilator/properties.json b/infra/config/generated/builders/try/linux-chromeos-rel-compilator/properties.json
index d5eb125..d414c4c 100644
--- a/infra/config/generated/builders/try/linux-chromeos-rel-compilator/properties.json
+++ b/infra/config/generated/builders/try/linux-chromeos-rel-compilator/properties.json
@@ -64,9 +64,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.chromiumos",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.chromiumos",
-    "builder_name": "linux-chromeos-rel"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/linux-rel-compilator/properties.json b/infra/config/generated/builders/try/linux-rel-compilator/properties.json
index 629b88b..40d75e1 100644
--- a/infra/config/generated/builders/try/linux-rel-compilator/properties.json
+++ b/infra/config/generated/builders/try/linux-rel-compilator/properties.json
@@ -180,9 +180,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.linux",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.linux",
-    "builder_name": "linux-rel"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/linux-rel-warmed-compilator/properties.json b/infra/config/generated/builders/try/linux-rel-warmed-compilator/properties.json
index 5b54a8f..111c6fd 100644
--- a/infra/config/generated/builders/try/linux-rel-warmed-compilator/properties.json
+++ b/infra/config/generated/builders/try/linux-rel-warmed-compilator/properties.json
@@ -177,9 +177,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.linux",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.linux",
-    "builder_name": "linux-rel-warmed"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/linux-rel/properties.json b/infra/config/generated/builders/try/linux-rel/properties.json
index 534966c..ed2efae5 100644
--- a/infra/config/generated/builders/try/linux-rel/properties.json
+++ b/infra/config/generated/builders/try/linux-rel/properties.json
@@ -161,6 +161,9 @@
     ],
     "use_clang_coverage": true
   },
+  "$build/flakiness": {
+    "check_for_flakiness": true
+  },
   "$recipe_engine/resultdb/test_presentation": {
     "column_keys": [],
     "grouping_keys": [
diff --git a/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json b/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json
index 62150599..c9a0a8a7 100644
--- a/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json
+++ b/infra/config/generated/builders/try/linux_chromium_asan_rel_ng-compilator/properties.json
@@ -97,9 +97,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.linux",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.linux",
-    "builder_name": "linux_chromium_asan_rel_ng"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/linux_chromium_compile_dbg_ng/properties.json b/infra/config/generated/builders/try/linux_chromium_compile_dbg_ng/properties.json
index 01a140e..9d7d5fe 100644
--- a/infra/config/generated/builders/try/linux_chromium_compile_dbg_ng/properties.json
+++ b/infra/config/generated/builders/try/linux_chromium_compile_dbg_ng/properties.json
@@ -81,13 +81,13 @@
   },
   "$build/goma": {
     "enable_ats": true,
-    "jobs": 150,
     "rpc_extra_params": "?prod",
     "server_host": "goma.chromium.org",
     "use_luci_auth": true
   },
   "$build/reclient": {
     "instance": "rbe-chromium-untrusted",
+    "jobs": 150,
     "metrics_project": "chromium-reclient-metrics"
   },
   "$recipe_engine/resultdb/test_presentation": {
diff --git a/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng-compilator/properties.json b/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng-compilator/properties.json
index 62118a6bc..6d7e79c86 100644
--- a/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng-compilator/properties.json
+++ b/infra/config/generated/builders/try/linux_chromium_tsan_rel_ng-compilator/properties.json
@@ -101,9 +101,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.linux",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.linux",
-    "builder_name": "linux_chromium_tsan_rel_ng"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/mac-rel-compilator/properties.json b/infra/config/generated/builders/try/mac-rel-compilator/properties.json
index 9309bf834..58b78d4 100644
--- a/infra/config/generated/builders/try/mac-rel-compilator/properties.json
+++ b/infra/config/generated/builders/try/mac-rel-compilator/properties.json
@@ -204,9 +204,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.mac",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.mac",
-    "builder_name": "mac-rel"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/mac12-arm64-rel-compilator/properties.json b/infra/config/generated/builders/try/mac12-arm64-rel-compilator/properties.json
index 3c90d3b9..67b5ef1 100644
--- a/infra/config/generated/builders/try/mac12-arm64-rel-compilator/properties.json
+++ b/infra/config/generated/builders/try/mac12-arm64-rel-compilator/properties.json
@@ -91,9 +91,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.mac",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.mac",
-    "builder_name": "mac12-arm64-rel"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/builders/try/win10_chromium_x64_rel_ng-compilator/properties.json b/infra/config/generated/builders/try/win10_chromium_x64_rel_ng-compilator/properties.json
index 73a053a..669722d5 100644
--- a/infra/config/generated/builders/try/win10_chromium_x64_rel_ng-compilator/properties.json
+++ b/infra/config/generated/builders/try/win10_chromium_x64_rel_ng-compilator/properties.json
@@ -177,9 +177,5 @@
     ]
   },
   "builder_group": "tryserver.chromium.win",
-  "orchestrator": {
-    "builder_group": "tryserver.chromium.win",
-    "builder_name": "win10_chromium_x64_rel_ng"
-  },
   "recipe": "chromium/compilator"
 }
\ No newline at end of file
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg
index 2b71254..a1e7375 100644
--- a/infra/config/generated/luci/cr-buildbucket.cfg
+++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -10044,7 +10044,7 @@
         '  "builder_group": "chromium.fuzz",'
         '  "recipe": "chromium_libfuzzer"'
         '}'
-      execution_timeout_secs: 14400
+      execution_timeout_secs: 18000
       build_numbers: YES
       service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com"
       experiments {
diff --git a/infra/config/lib/orchestrator.star b/infra/config/lib/orchestrator.star
index 86de3aa..e97f58d7 100644
--- a/infra/config/lib/orchestrator.star
+++ b/infra/config/lib/orchestrator.star
@@ -169,10 +169,6 @@
         compilator = compilators_by_name[orchestrator.compilator_name]
         compilator_properties = dict(orchestrator_properties)
         compilator_properties.update(json.decode(compilator.builder.properties))
-        compilator_properties["orchestrator"] = {
-            "builder_group": orchestrator.builder_group,
-            "builder_name": orchestrator.simple_name,
-        }
         compilator.builder.properties = json.encode(compilator_properties)
         _update_description(
             compilator.builder,
diff --git a/infra/config/subprojects/chromium/ci/chromium.fuzz.star b/infra/config/subprojects/chromium/ci/chromium.fuzz.star
index 2d3a696..b0f5ff0 100644
--- a/infra/config/subprojects/chromium/ci/chromium.fuzz.star
+++ b/infra/config/subprojects/chromium/ci/chromium.fuzz.star
@@ -456,7 +456,7 @@
         short_name = "win-asan",
     ),
     # crbug.com/1175182: Temporarily increase timeout
-    execution_timeout = 4 * time.hour,
+    execution_timeout = 5 * time.hour,
     executable = "recipe:chromium_libfuzzer",
     os = os.WINDOWS_DEFAULT,
     triggering_policy = scheduler.greedy_batching(
diff --git a/infra/config/subprojects/chromium/ci/chromium.fyi.star b/infra/config/subprojects/chromium/ci/chromium.fyi.star
index b6a29e4..5104722 100644
--- a/infra/config/subprojects/chromium/ci/chromium.fyi.star
+++ b/infra/config/subprojects/chromium/ci/chromium.fyi.star
@@ -1679,6 +1679,7 @@
     schedule = "triggered",
     triggered_by = [],
     use_java_coverage = True,
+    export_coverage_to_zoss = True,
     goma_backend = None,
     reclient_jobs = reclient.jobs.HIGH_JOBS_FOR_CI,
     reclient_instance = reclient.instance.DEFAULT_TRUSTED,
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
index 7401e4ac..03b8e0c 100644
--- a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
+++ b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
@@ -234,7 +234,7 @@
     name = "linux-rel",
     compilator = "linux-rel-compilator",
     branch_selector = branches.STANDARD_MILESTONE,
-    # check_for_flakiness = True,
+    check_for_flakiness = True,
     mirrors = [
         "ci/Linux Builder",
         "ci/Linux Tests",
@@ -460,7 +460,7 @@
             path = "linux_debug",
         ),
     ],
-    goma_jobs = goma.jobs.J150,
+    reclient_jobs = reclient.jobs.LOW_JOBS_FOR_CQ,
     main_list_view = "try",
     tryjob = try_.job(),
 )
diff --git a/ios/chrome/app/BUILD.gn b/ios/chrome/app/BUILD.gn
index a22b7b60..02b181f9 100644
--- a/ios/chrome/app/BUILD.gn
+++ b/ios/chrome/app/BUILD.gn
@@ -415,11 +415,10 @@
     "//ios/chrome/common/intents",
     "//ios/components/cookie_util",
     "//ios/net",
-    "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/app_distribution:app_distribution_api",
     "//ios/public/provider/chrome/browser/overrides:overrides_api",
     "//ios/public/provider/chrome/browser/ui_utils:ui_utils_api",
-    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
     "//ios/third_party/material_components_ios",
     "//ios/web/common:features",
     "//ios/web/common:uikit",
diff --git a/ios/chrome/app/application_delegate/BUILD.gn b/ios/chrome/app/application_delegate/BUILD.gn
index f03b340..a6c4c0e 100644
--- a/ios/chrome/app/application_delegate/BUILD.gn
+++ b/ios/chrome/app/application_delegate/BUILD.gn
@@ -83,7 +83,6 @@
     "//ios/chrome/test/providers/app_distribution",
     "//ios/public/provider/chrome/browser:test_support",
     "//ios/public/provider/chrome/browser/app_distribution:app_distribution_api",
-    "//ios/public/provider/chrome/browser/user_feedback:test_support",
     "//ios/testing:block_swizzler",
     "//ios/testing:ocmock_support",
     "//ios/testing:open_url_context",
@@ -249,7 +248,7 @@
     "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/app_distribution:app_distribution_api",
     "//ios/public/provider/chrome/browser/signin",
-    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
     "//ios/web",
     "//net",
     "//ui/base",
diff --git a/ios/chrome/app/application_delegate/app_state.mm b/ios/chrome/app/application_delegate/app_state.mm
index b0d5a04..cae912f 100644
--- a/ios/chrome/app/application_delegate/app_state.mm
+++ b/ios/chrome/app/application_delegate/app_state.mm
@@ -56,7 +56,7 @@
 #include "ios/public/provider/chrome/browser/app_distribution/app_distribution_api.h"
 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #include "ios/public/provider/chrome/browser/signin/chrome_identity_service.h"
-#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h"
+#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_api.h"
 #include "ios/web/public/thread/web_task_traits.h"
 #include "ios/web/public/thread/web_thread.h"
 #include "net/url_request/url_request_context.h"
@@ -359,7 +359,8 @@
   [metricsMediator updateMetricsStateBasedOnPrefsUserTriggered:NO];
 
   // Send any feedback that might be still on temporary storage.
-  ios::GetChromeBrowserProvider().GetUserFeedbackProvider()->Synchronize();
+  if (ios::provider::IsUserFeedbackSupported())
+    ios::provider::UploadAllPendingUserFeedback();
 
   GetApplicationContext()->OnAppEnterForeground();
 
diff --git a/ios/chrome/app/application_delegate/app_state_unittest.mm b/ios/chrome/app/application_delegate/app_state_unittest.mm
index ee19109..ecbd40c 100644
--- a/ios/chrome/app/application_delegate/app_state_unittest.mm
+++ b/ios/chrome/app/application_delegate/app_state_unittest.mm
@@ -52,7 +52,6 @@
 #import "ios/chrome/test/scoped_key_window.h"
 #include "ios/public/provider/chrome/browser/app_distribution/app_distribution_api.h"
 #include "ios/public/provider/chrome/browser/test_chrome_browser_provider.h"
-#include "ios/public/provider/chrome/browser/user_feedback/test_user_feedback_provider.h"
 #import "ios/testing/ocmock_complex_type_helper.h"
 #import "ios/testing/scoped_block_swizzler.h"
 #include "ios/web/public/test/web_task_environment.h"
@@ -719,10 +718,6 @@
   [[[getStartupInformationMock() stub] andReturnValue:@YES] isFirstRun];
 
   // Setup.
-  ios::TestChromeBrowserProvider::GetTestProvider()
-      .GetUserFeedbackProvider()
-      ->ResetSynchronizeCalled();
-
   id application = [OCMockObject mockForClass:[UIApplication class]];
   id metricsMediator = [OCMockObject mockForClass:[MetricsMediator class]];
   id memoryHelper = [OCMockObject mockForClass:[MemoryWarningHelper class]];
@@ -770,9 +765,6 @@
   EXPECT_OCMOCK_VERIFY(metricsMediator);
   EXPECT_OCMOCK_VERIFY(memoryHelper);
   EXPECT_OCMOCK_VERIFY(getStartupInformationMock());
-  EXPECT_TRUE(ios::TestChromeBrowserProvider::GetTestProvider()
-                  .GetUserFeedbackProvider()
-                  ->SynchronizeCalled());
 }
 
 // Tests that -applicationWillEnterForeground starts the browser if the
diff --git a/ios/chrome/app/application_delegate/metrics_mediator.mm b/ios/chrome/app/application_delegate/metrics_mediator.mm
index 5a2c2cd..84bc913a 100644
--- a/ios/chrome/app/application_delegate/metrics_mediator.mm
+++ b/ios/chrome/app/application_delegate/metrics_mediator.mm
@@ -29,7 +29,7 @@
 #include "ios/chrome/browser/crash_report/crash_helper.h"
 #include "ios/chrome/browser/main/browser.h"
 #include "ios/chrome/browser/metrics/first_user_action_recorder.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/signin_util.h"
 #include "ios/chrome/browser/system_flags.h"
 #import "ios/chrome/browser/ui/default_promo/default_browser_utils.h"
diff --git a/ios/chrome/app/main_controller.mm b/ios/chrome/app/main_controller.mm
index b6c2fd5b..7d3b5f7 100644
--- a/ios/chrome/app/main_controller.mm
+++ b/ios/chrome/app/main_controller.mm
@@ -89,7 +89,7 @@
 #import "ios/chrome/browser/metrics/window_configuration_recorder.h"
 #import "ios/chrome/browser/omaha/omaha_service.h"
 #import "ios/chrome/browser/passwords/password_manager_util_ios.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/screenshot/screenshot_metrics_recorder.h"
 #import "ios/chrome/browser/search_engines/extension_search_engine_data_updater.h"
 #include "ios/chrome/browser/search_engines/search_engines_util.h"
@@ -126,10 +126,9 @@
 #include "ios/net/cookies/cookie_store_ios.h"
 #import "ios/net/empty_nsurlcache.h"
 #include "ios/public/provider/chrome/browser/app_distribution/app_distribution_api.h"
-#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #import "ios/public/provider/chrome/browser/overrides/overrides_api.h"
 #import "ios/public/provider/chrome/browser/ui_utils/ui_utils_api.h"
-#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h"
+#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_api.h"
 #import "ios/web/common/features.h"
 #include "ios/web/public/webui/web_ui_ios_controller_factory.h"
 #import "net/base/mac/url_conversions.h"
@@ -834,13 +833,13 @@
 }
 
 - (void)sendQueuedFeedback {
-  [[DeferredInitializationRunner sharedInstance]
-      enqueueBlockNamed:kSendQueuedFeedback
-                  block:^{
-                    ios::GetChromeBrowserProvider()
-                        .GetUserFeedbackProvider()
-                        ->Synchronize();
-                  }];
+  if (ios::provider::IsUserFeedbackSupported()) {
+    [[DeferredInitializationRunner sharedInstance]
+        enqueueBlockNamed:kSendQueuedFeedback
+                    block:^{
+                      ios::provider::UploadAllPendingUserFeedback();
+                    }];
+  }
 }
 
 - (void)orientationDidChange:(NSNotification*)notification {
diff --git a/ios/chrome/app/resources/BUILD.gn b/ios/chrome/app/resources/BUILD.gn
index 458b3ce..753b023 100644
--- a/ios/chrome/app/resources/BUILD.gn
+++ b/ios/chrome/app/resources/BUILD.gn
@@ -62,6 +62,7 @@
     "$root_gen_dir/components/components_resources.pak",
     "$root_gen_dir/components/dev_ui_components_resources.pak",
     "$root_gen_dir/components/download_internals_resources.pak",
+    "$root_gen_dir/components/optimization_guide_internals_resources.pak",
     "$root_gen_dir/components/sync_driver_sync_internals_resources.pak",
     "$root_gen_dir/ios/chrome/ios_resources.pak",
     "$root_gen_dir/ios/web/ios_web_resources.pak",
@@ -72,6 +73,7 @@
   deps = [
     ":ios_resources",
     "//components/download/resources/download_internals:resources",
+    "//components/optimization_guide/optimization_guide_internals/resources",
     "//components/resources",
     "//components/sync/driver/resources",
     "//ios/web:resources",
diff --git a/ios/chrome/app/resources/Background+Info.plist b/ios/chrome/app/resources/Background+Info.plist
index 9388692..a16ca9e 100644
--- a/ios/chrome/app/resources/Background+Info.plist
+++ b/ios/chrome/app/resources/Background+Info.plist
@@ -5,6 +5,7 @@
 	<key>UIBackgroundModes</key>
 	<array>
 		<string>fetch</string>
+		<string>remote-notification</string>
 	</array>
 	<key>BGTaskSchedulerPermittedIdentifiers</key>
 	<array>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
index 224cce0..1784356b 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_am.xtb
@@ -66,6 +66,7 @@
 <translation id="5308226104666789935">Chromium ዝማኔዎች ካሉ መፈተሽ አልቻለም</translation>
 <translation id="5396916991083608703">Chromium እንደ ነባሪ ይቀናበር?</translation>
 <translation id="5521125884468363740">Chromiumን ከሚጠቀሙበት የትኛዉም ቦታ ሆነዉ ትሮችዎን ለማየት በመለያ ይግቡ እና ስምረትን ያብሩ</translation>
+<translation id="5522297504975449419">የተወሰኑ የChromium ባህሪያት ከእንግዲህ አይገኙም።</translation>
 <translation id="5573014823074921752">የChromium ጠቃሚ ምክር። ተጨማሪ የትር አማራጮችን ለማግኘት በመሣሪያ አሞሌው ውስጥ የትሮችን አሳይ አዝራሩን ነክተው ይያዙ፣ ይህ በማያ ገጽዎ አናት ወይም ግርጌ ላይ ነው ያለው።</translation>
 <translation id="5700709190537129682">Chromium የእርስዎን የይለፍ ቃላት መፈተሽ አይችልም</translation>
 <translation id="5777187867430702742">የChromium ገጽ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb
index c146747..aa0e432 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromiumএ আপডে’টৰ বাবে পৰীক্ষা কৰিব নোৱাৰে</translation>
 <translation id="5396916991083608703">Chromiumক ডিফ’ল্ট হিচাপে ছেট কৰিবনে?</translation>
 <translation id="5521125884468363740">আপুনি Chromium ব্যৱহাৰ কৰা সকলো ডিভাইচৰ পৰা নিজৰ টেবসমূহ চাবলৈ ছাইন ইন কৰক আৰু ছিংক অন কৰক</translation>
+<translation id="5522297504975449419">Chromiumৰ কিছুমান সুবিধা আৰু উপলব্ধ হৈ নাথাকিব।</translation>
 <translation id="5573014823074921752">Chromium ব্যৱহাৰৰ কিটিপ। টেবৰ অধিক বিকল্প পাবলৈ আপোনাৰ স্ক্রীণৰ একেবাৰে ওপৰত অথবা তলত থকা টুলবাৰৰ টেব দেখুৱাওক বুটামটো স্পৰ্শ কৰি ধৰি ৰাখক।</translation>
 <translation id="5700709190537129682">Chromiumএ আপোনাৰ পাছৱর্ডসমূহ পৰীক্ষা কৰিব নোৱাৰে</translation>
 <translation id="5777187867430702742">Chromium পৃষ্ঠা</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb
index 6eaac26da3..38410a9 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_be.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Браўзеру Chromium не ўдаецца праверыць наяўнасць абнаўленняў</translation>
 <translation id="5396916991083608703">Зрабіць Chromium стандартным браўзерам?</translation>
 <translation id="5521125884468363740">Каб мець доступ да сваіх укладак з усіх прылад, на якіх вы выкарыстоўваеце Chromium, увайдзіце на іх ва ўліковы запіс і ўключыце сінхранізацыю</translation>
+<translation id="5522297504975449419">Некаторыя функцыі Chromium перастануць быць даступнымі.</translation>
 <translation id="5573014823074921752">Падказка Chromium. Каб адкрыць больш параметраў укладкі, націсніце і ўтрымлівайце кнопку "Паказваць укладкі" на панэлі інструментаў, якая знаходзіцца ўнізе або ўверсе экрана.</translation>
 <translation id="5700709190537129682">Браўзеру Chromium не ўдаецца праверыць паролі</translation>
 <translation id="5777187867430702742">Старонка Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb
index 59e2ef6..d9dd59a33 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_bs.xtb
@@ -67,7 +67,7 @@
 <translation id="5308226104666789935">Chromium ne može provjeriti ima li ažuriranja</translation>
 <translation id="5396916991083608703">Postaviti Chromium kao zadani preglednik?</translation>
 <translation id="5521125884468363740">Da vidite svoje kartice s bilo kojeg uređaja na kojem koristite Chromium, prijavite se i uključite sinhronizaciju</translation>
-<translation id="5522297504975449419">Neke značajke Chromiuma više neće biti dostupne.</translation>
+<translation id="5522297504975449419">Neke funkcije Chromiuma više neće biti dostupne.</translation>
 <translation id="5573014823074921752">Savjet za Chromium. Za više opcija za kartice dodirnite i zadržite dugme Prikaži kartice na alatnoj traci, na dnu ili na vrhu ekrana.</translation>
 <translation id="5700709190537129682">Chromium ne može provjeriti vaše lozinke</translation>
 <translation id="5777187867430702742">Stranica Chromiuma</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb
index 78c4cd0a..cea1298e 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_de.xtb
@@ -66,6 +66,7 @@
 <translation id="5308226104666789935">Chromium kann nicht nach Aktualisierungen suchen</translation>
 <translation id="5396916991083608703">Chromium als Standardbrowser festlegen?</translation>
 <translation id="5521125884468363740">Melde dich an und aktiviere die Synchronisierung, um deine Tabs überall dort aufzurufen, wo du Chromium verwendest</translation>
+<translation id="5522297504975449419">Einige Chromium-Funktionen sind dann nicht mehr verfügbar.</translation>
 <translation id="5573014823074921752">Chromium-Tipp: Wenn du weitere Tab-Optionen sehen möchtest, berühre und halte die Schaltfläche "Tabs anzeigen" in der Symbolleiste. Diese befindet sich unten oder oben auf dem Bildschirm.</translation>
 <translation id="5700709190537129682">Chromium kann deine Passwörter nicht prüfen</translation>
 <translation id="5777187867430702742">Chromium-Seite</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
index c6fce67e..c597a00 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_es-419.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium no puede buscar actualizaciones.</translation>
 <translation id="5396916991083608703">¿Deseas establecer Chromium como navegador predeterminado?</translation>
 <translation id="5521125884468363740">Para ver tus pestañas donde sea que uses Chromium, accede a tu cuenta y activa la sincronización</translation>
+<translation id="5522297504975449419">Algunas funciones de Chromium ya no estarán disponibles.</translation>
 <translation id="5573014823074921752">Sugerencia de Chromium: Para obtener más opciones de pestañas, mantén presionado el botón Mostrar pestañas de la barra de herramientas, que se encuentra en la parte inferior o superior de la pantalla.</translation>
 <translation id="5700709190537129682">Chromium no puede revisar las contraseñas</translation>
 <translation id="5777187867430702742">Página de Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
index 8d5b4968..c289b1f2 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium ei voi tarkistaa, onko päivityksiä saatavilla</translation>
 <translation id="5396916991083608703">Valitaanko Chromium oletukseksi?</translation>
 <translation id="5521125884468363740">Kirjaudu sisään ja laita synkronointi päälle, jotta voit nähdä Chromium-välilehtesi missä tahansa</translation>
+<translation id="5522297504975449419">Jotkin Chromiumin ominaisuudet eivät ole enää käytettävissä.</translation>
 <translation id="5573014823074921752">Chromium-vinkki: Voit avata välilehtien lisäasetukset painamalla pitkään ylä- tai alapalkissa olevaa Näytä välilehdet ‑painiketta.</translation>
 <translation id="5700709190537129682">Chromium ei voi tarkistaa salasanojasi</translation>
 <translation id="5777187867430702742">Chromium-sivu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
index f94baab..5ebcfb5 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fr-CA.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium ne peut pas vérifier s'il y a des mises à jour</translation>
 <translation id="5396916991083608703">Définir Chromium comme navigateur par défaut?</translation>
 <translation id="5521125884468363740">Pour voir vos onglets partout où vous utilisez Chromium, connectez-vous et activez la synchronisation</translation>
+<translation id="5522297504975449419">Certaines fonctionnalités de Chromium ne seront plus offertes.</translation>
 <translation id="5573014823074921752">Astuce pour Chromium. Pour afficher plus d'options d'onglets, maintenez le doigt sur le bouton Afficher les onglets dans la barre d'outils, qui se trouve dans le bas ou le haut de votre écran.</translation>
 <translation id="5700709190537129682">Chromium ne peut pas vérifier vos mots de passe</translation>
 <translation id="5777187867430702742">Page Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
index dbf3a7e..cf8c5fe 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gl.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium non puido buscar actualizacións</translation>
 <translation id="5396916991083608703">Queres definir Chromium como navegador predeterminado?</translation>
 <translation id="5521125884468363740">Para ver as túas pestanas desde calquera dispositivo no que utilices Chromium, inicia sesión e activa a sincronización</translation>
+<translation id="5522297504975449419">Algunhas funcións de Chromium deixarán de estar dispoñibles.</translation>
 <translation id="5573014823074921752">Consello sobre Chromium: Para ver máis opcións relacionadas coas pestanas, mantén premido o botón Mostrar pestanas. Atoparalo na barra de ferramentas, situada na parte inferior ou superior da pantalla.</translation>
 <translation id="5700709190537129682">Chromium non puido comprobar os teus contrasinais</translation>
 <translation id="5777187867430702742">Páxina de Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
index 184d1d7..4ec333f 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hi.xtb
@@ -66,6 +66,7 @@
 <translation id="5308226104666789935">क्रोमियम अपडेट की जांच नहीं कर सका</translation>
 <translation id="5396916991083608703">Chromium को डिफ़ॉल्ट ब्राउज़र के तौर पर सेट करना चाहते हैं?</translation>
 <translation id="5521125884468363740">आप जिन डिवाइस पर क्रोमियम का इस्तेमाल करते हैं उन सभी पर खोले गए टैब देखने के लिए, सभी डिवाइस पर साइन इन करें और सिंक करने की सुविधा चालू करें</translation>
+<translation id="5522297504975449419">Chromium की कुछ सुविधाएं अब उपलब्ध नहीं होंगी.</translation>
 <translation id="5573014823074921752">'क्रोमियम' इस्तेमाल करने के लिए सलाह. ज़्यादा टैब विकल्पोंं के लिए टूलबार में 'टैब दिखाएं' बटन को दबाकर रखें. यह बटन आपकी स्क्रीन में सबसे नीचे या सबसे ऊपर होगा.</translation>
 <translation id="5700709190537129682">क्रोमियम आपके पासवर्ड की जांच नहीं कर सकता</translation>
 <translation id="5777187867430702742">क्रोमियम पेज</translation>
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 ee0e82a..46985892 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_it.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium non può controllare la disponibilità di aggiornamenti</translation>
 <translation id="5396916991083608703">Impostare Chromium come browser predefinito?</translation>
 <translation id="5521125884468363740">Esegui l'accesso su tutti i dispositivi su cui utilizzi Chromium e attiva la sincronizzazione per visualizzare le tue schede</translation>
+<translation id="5522297504975449419">Alcune funzionalità di Chromium non saranno più disponibili.</translation>
 <translation id="5573014823074921752">Suggerimento per Chromium. 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="5700709190537129682">Chromium non può controllare le tue password</translation>
 <translation id="5777187867430702742">Pagina di Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
index e55f560..dad4350 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">‏Chromium לא יכול לחפש עדכונים</translation>
 <translation id="5396916991083608703">‏להגדיר את Chromium כדפדפן ברירת המחדל?</translation>
 <translation id="5521125884468363740">‏כדי לראות את הכרטיסיות שלך מכל מקום שבו פתחת את Chromium יש להיכנס לחשבון ולהפעיל את הסנכרון</translation>
+<translation id="5522297504975449419">‏חלק מהתכונות של Chromium לא יהיו זמינות יותר.</translation>
 <translation id="5573014823074921752">‏טיפ למשתמשי Chromium: כדי לקבל אפשרויות נוספות של כרטיסיות, יש ללחוץ לחיצה ארוכה על הלחצן 'הצגת כרטיסיות' בסרגל הכלים, שנמצא בחלק התחתון או העליון של המסך.</translation>
 <translation id="5700709190537129682">‏Chromium לא יכול לבדוק את הסיסמאות שלך</translation>
 <translation id="5777187867430702742">‏דף Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
index 419cbfc..2383f9d 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lo.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium ບໍ່ສາມາດກວດຫາການອັບເດດໄດ້</translation>
 <translation id="5396916991083608703">ຕັ້ງ Chromium ເປັນຄ່າເລີ່ມຕົ້ນບໍ?</translation>
 <translation id="5521125884468363740">ເພື່ອເຫັນແຖບຂອງທ່ານຈາກທຸກບ່ອນທີ່ທ່ານໃຊ້ Chromium, ກະລຸນາເຂົ້າສູ່ລະບົບ ແລະ ເປີດການຊິ້ງຂໍ້ມູນ</translation>
+<translation id="5522297504975449419">ຄຸນສົມບັດບາງຢ່າງຂອງ Chromium ຈະບໍ່ສາມາດໃຊ້ໄດ້ອີກຕໍ່ໄປ.</translation>
 <translation id="5573014823074921752">ເຄັດລັບກ່ຽວກັບ Chromium. ສຳລັບຕົວເລືອກແຖບເພີ່ມເຕີມ, ກະລຸນາແຕະປຸ່ມສະແດງແຖບໃນແຖບເຄື່ອງມືຄ້າງໄວ້ ເຊິ່ງຢູ່ລຸ່ມສຸດ ຫຼື ເທິງສຸດຂອງໜ້າຈໍຂອງທ່ານ.</translation>
 <translation id="5700709190537129682">Chromium ບໍ່ສາມາດກວດລະຫັດຜ່ານຂອງທ່ານໄດ້</translation>
 <translation id="5777187867430702742">ໜ້າ Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb
index 7c0c2bb..91bb3d8 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_lv.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Pārlūkā Chromium nevar pārbaudīt atjauninājumu pieejamību.</translation>
 <translation id="5396916991083608703">Vai iestatīt Chromium kā noklusējuma pārlūku?</translation>
 <translation id="5521125884468363740">Lai skatītu cilnes no visām ierīcēm, kurās izmantojat pārlūku Chromium, pierakstieties un ieslēdziet sinhronizāciju.</translation>
+<translation id="5522297504975449419">Dažas Chromium funkcijas vairs nebūs pieejamas.</translation>
 <translation id="5573014823074921752">Chromium padoms. Lai iegūtu vairāk ciļņu iespēju, rīkjoslā, kas atrodas ekrāna apakšdaļā vai augšdaļā, pieskarieties pogai Rādīt cilnes un turiet to.</translation>
 <translation id="5700709190537129682">Pārlūkprogrammā Chromium nevar pārbaudīt jūsu paroles.</translation>
 <translation id="5777187867430702742">Chromium lapa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb
index b0cf211a..fa0b550 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium tidak dapat menyemak kemaskinian</translation>
 <translation id="5396916991083608703">Tetapkan Chromium sebagai Penyemak Imbas Lalai?</translation>
 <translation id="5521125884468363740">Untuk melihat tab anda daripada mana-mana tempat anda menggunakan Chromium, log masuk dan hidupkan penyegerakan</translation>
+<translation id="5522297504975449419">Sesetengah ciri Chromium tidak akan tersedia lagi.</translation>
 <translation id="5573014823074921752">Petua Chromium. Untuk melihat lebih banyak pilihan tab, sentuh &amp; tahan butang Tunjukkan Tab dalam bar alat, yang terletak di bahagian bawah atau atas skrin anda.</translation>
 <translation id="5700709190537129682">Chromium tidak dapat menyemak kata laluan anda</translation>
 <translation id="5777187867430702742">Halaman Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb
index 9096b58..c55ddba 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">ଅପଡେଟଗୁଡ଼ିକ ଅଛି କି ନାହିଁ ତାହା Chromium ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ</translation>
 <translation id="5396916991083608703">Chromiumକୁ ଡିଫଲ୍ଟ ଭାବେ ସେଟ୍ କରିବେ?</translation>
 <translation id="5521125884468363740">ଆପଣ Chromium ବ୍ୟବହାର କରୁଥିବା ଯେ କୌଣସି ସ୍ଥାନରୁ ଆପଣଙ୍କ ଟାବଗୁଡ଼ିକ ଦେଖିବାକୁ, ସାଇନ୍ ଇନ୍ କରି ସିଙ୍କ୍ ଚାଲୁ କରନ୍ତୁ</translation>
+<translation id="5522297504975449419">Chromiumର କିଛି ଫିଚର ଆଉ ଉପଲବ୍ଧ ହେବ ନାହିଁ।</translation>
 <translation id="5573014823074921752">Chromium ଟିପ୍। ଅଧିକ ଟାବ୍ ବିକଳ୍ପ ପାଇଁ, ଟୁଲ୍‌ବାର୍‌ରେ ଥିବା 'ଟାବ୍‍ଗୁଡ଼ିକ ଦେଖାନ୍ତୁ' ବଟନ୍‍କୁ ସ୍ପର୍ଶ କରି ଧରି ରଖନ୍ତୁ ଯାହା ଆପଣଙ୍କ ସ୍କ୍ରିନ୍‌ର ନିମ୍ନରେ କିମ୍ବା ଶୀର୍ଷରେ ରହିଥାଏ।</translation>
 <translation id="5700709190537129682">Chromium ଆପଣଙ୍କ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ</translation>
 <translation id="5777187867430702742">Chromium ପୃଷ୍ଠା</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
index 99965a1..54636cb 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ru.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Браузеру Chromium не удалось проверить наличие обновлений</translation>
 <translation id="5396916991083608703">Сделать Chromium браузером по умолчанию?</translation>
 <translation id="5521125884468363740">Чтобы ваши вкладки всегда были доступны вам при работе с Chromium, выполните вход и включите синхронизацию.</translation>
+<translation id="5522297504975449419">Некоторые функции Chromium станут недоступны</translation>
 <translation id="5573014823074921752">Совет для Chromium. Чтобы открыть список дополнительных действий с вкладками, нажмите и удерживайте кнопку "Показать вкладки" на панели инструментов в нижней или верхней части экрана.</translation>
 <translation id="5700709190537129682">Не удается проверить пароли в Chromium.</translation>
 <translation id="5777187867430702742">Страница Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb
index 8f3f3f1..55ebb99 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_si.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium හට යාවත්කාලීන සඳහා පරීක්ෂා කළ නොහැකිය</translation>
 <translation id="5396916991083608703">Chromium පෙරනිමිය ලෙස සකසන්නද?</translation>
 <translation id="5521125884468363740">ඔබ Chromium භාවිත කරන ඕනෑම ස්ථානයක සිට ඔබේ ටැබ බැලීමට, පුරා සමමුහුර්ත කිරීම ක්‍රියාත්මක කරන්න</translation>
+<translation id="5522297504975449419">සමහර Chromium විශේෂාංග තවදුරටත් නොතිබෙනු ඇත.</translation>
 <translation id="5573014823074921752">Chromium ඉඟිය. තවත් පටිති විකල්ප සඳහා, ඔබගේ තිරයේ පහළ හෝ ඉහළ මෙවලම් තීරුවේ ඇති පටිති පෙන්වන්න බොත්තම ස්පර්ශ කරගෙන සිටින්න.</translation>
 <translation id="5700709190537129682">Chromium හට ඔබේ මුරපද පරීක්‍ෂා කළ නොහැකිය</translation>
 <translation id="5777187867430702742">Chromium පිටුව</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb
index f16faa0..937346c 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sq.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium nuk mund të kontrollojë për përditësime</translation>
 <translation id="5396916991083608703">Të caktohet Chromium si parazgjedhje?</translation>
 <translation id="5521125884468363740">Për të parë skedat e tua nga çdo vend ku përdor Chromium, identifikohu dhe aktivizo sinkronizimin</translation>
+<translation id="5522297504975449419">Disa veçori të Chromium nuk do të ofrohen më.</translation>
 <translation id="5573014823074921752">Këshillë për Chromium. Për më shumë opsione për skedat, shtyp dhe mbaj shtypur butonin "Shfaq skedat" në shiritin e veglave që ndodhet në fund ose në krye të ekranit tënd.</translation>
 <translation id="5700709190537129682">Chromium nuk mund t'i kontrollojë fjalëkalimet e tua</translation>
 <translation id="5777187867430702742">Faqe e Chromium</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
index e926a1b1..04a1948 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
@@ -67,6 +67,7 @@
 <translation id="5308226104666789935">Chromium உலாவியால் புதுப்பிப்புகள் உள்ளனவா எனப் பார்க்க முடியவில்லை</translation>
 <translation id="5396916991083608703">Chromiumமை இயல்பு உலாவியாக அமைக்கவா?</translation>
 <translation id="5521125884468363740">நீங்கள் Chromiumமைப் பயன்படுத்தும் சாதனங்களில் உங்கள் தாவல்களைப் பார்க்க, உள்நுழைந்து ஒத்திசைவை இயக்கவும்</translation>
+<translation id="5522297504975449419">சில Chromium அம்சங்களை இனி பயன்படுத்த முடியாது.</translation>
 <translation id="5573014823074921752">Chromium உதவிக்குறிப்பு. கூடுதல் தாவல் விருப்பங்களைப் பார்க்க திரையின் கீழிருக்கும் / மேலிருக்கும் கருவிப்பட்டியிலுள்ள ‘தாவல்களைக் காட்டு’ பட்டனைத் தொட்டுப் பிடிக்கவும்.</translation>
 <translation id="5700709190537129682">Chromium உலாவியால் உங்கள் கடவுச்சொற்களைச் சரிபார்க்க முடியவில்லை</translation>
 <translation id="5777187867430702742">Chromium பக்கம்</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
index 45de98f..5adf3e0 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_am.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Chromeን ለመጠቀም የእርስዎ ድርጅት እርስዎ በመለያ እንዲገቡ ይጠይቃል።</translation>
 <translation id="6054613632208573261">በነባሪነት Chromeን ይጠቀሙ</translation>
 <translation id="6063091872902370735">የChrome በመለያ መግባትን ይፍቀዱ</translation>
+<translation id="6110625574506755980">የተወሰኑ የChrome ባህሪያት ከእንግዲህ አይገኙም።</translation>
 <translation id="6181930887571472871">ወደ Chrome ይቀይሩ</translation>
 <translation id="6238746320622508509">Chrome የእርስዎን ማንነት የማያሳውቁ ትሮች እንዲቆልፍ ይፍቀዱለት።</translation>
 <translation id="6387994324662817823">የይለፍ ቃላት የሚቀመጡት በዚህ መሣሪያ ላይ ብቻ ባለው የGoogle የይለፍ ቃል አስተዳዳሪ ላይ ነው።</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb
index 02125d92..14eb9f30 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Chrome ব্যৱহাৰ কৰিবলৈ আপোনাৰ প্ৰতিষ্ঠানৰ বাবে আপুনি ছাইন ইন কৰাৰ আৱশ্যক।</translation>
 <translation id="6054613632208573261">ডিফ’ল্ট হিচাপে Chrome ব্যৱহাৰ কৰক</translation>
 <translation id="6063091872902370735">Chromeত ছাইন ইন কৰিবলৈ দিয়ক</translation>
+<translation id="6110625574506755980">Chromeৰ কিছুমান সুবিধা আৰু উপলব্ধ হৈ নাথাকিব।</translation>
 <translation id="6181930887571472871">Chromeলৈ সলনি কৰক</translation>
 <translation id="6238746320622508509">Chromeক আপোনাৰ ইনক’গনিট’ টেবসমূহ লক কৰিবলৈ দিয়ক।</translation>
 <translation id="6387994324662817823">পাছৱৰ্ডসমূহ কেৱল এই ডিভাইচটোত থকা Google পাছৱৰ্ড পৰিচালকত ছেভ কৰা হয়।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb
index 05613cb..16738c9 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_be.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Палітыка вашай арганізацыі патрабуе, каб вы карысталіся браўзерам Chrome, выканаўшы ўваход ва ўліковы запіс.</translation>
 <translation id="6054613632208573261">Выкарыстоўвайце Chrome стандартна</translation>
 <translation id="6063091872902370735">Дазволіць уваход у Chrome</translation>
+<translation id="6110625574506755980">Некаторыя функцыі Chrome перастануць быць даступнымі.</translation>
 <translation id="6181930887571472871">Пераходзьце на Chrome</translation>
 <translation id="6238746320622508509">Дазвольце Chrome блакіраваць укладкі ў рэжыме інкогніта.</translation>
 <translation id="6387994324662817823">Паролі захоўваюцца ў Менеджары пароляў Google толькі на гэтай прыладзе.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb
index d666ead..ab8f161f4 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_bs.xtb
@@ -78,7 +78,7 @@
 <translation id="5998675059699164418">Vaša organizacija zahtijeva da se prijavite da koristite Chrome.</translation>
 <translation id="6054613632208573261">Koristite Chrome kao zadanu opciju</translation>
 <translation id="6063091872902370735">Omogućite prijavu pomoću Chromea</translation>
-<translation id="6110625574506755980">Neke značajke Chromea više neće biti dostupne.</translation>
+<translation id="6110625574506755980">Neke funkcije Chromea više neće biti dostupne.</translation>
 <translation id="6181930887571472871">Pređite na Chrome</translation>
 <translation id="6238746320622508509">Omogućite Chromeu da zaključa vaše anonimne kartice.</translation>
 <translation id="6387994324662817823">Lozinke se pohranjuju u Google Upravitelju lozinki samo na ovom uređaju.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb
index 185805e..225f394 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_de.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Deine Organisation verlangt, dass du dich für die Verwendung von Chrome anmeldest.</translation>
 <translation id="6054613632208573261">Standardmäßig Chrome verwenden</translation>
 <translation id="6063091872902370735">Anmeldung in Chrome zulassen</translation>
+<translation id="6110625574506755980">Einige Chrome-Funktionen sind dann nicht mehr verfügbar.</translation>
 <translation id="6181930887571472871">Zu Chrome wechseln</translation>
 <translation id="6238746320622508509">Erlaube Chrome, deine Inkognitotabs zu sperren.</translation>
 <translation id="6387994324662817823">Passwörter werden auf diesem Gerät nur im Google Passwortmanager gespeichert.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
index 617d40d2..8fe40a4 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es-419.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Tu organización requiere que accedas para usar Chrome.</translation>
 <translation id="6054613632208573261">Usa Chrome de forma predeterminada</translation>
 <translation id="6063091872902370735">Permitir el acceso a Chrome</translation>
+<translation id="6110625574506755980">Algunas funciones de Chrome ya no estarán disponibles.</translation>
 <translation id="6181930887571472871">Cambia a Chrome</translation>
 <translation id="6238746320622508509">Permite que Chrome bloquee tus pestañas de incógnito.</translation>
 <translation id="6387994324662817823">Las contraseñas se guardan en el Administrador de contraseñas de Google solo en este dispositivo.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
index a95f225..c0185ea 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Organisaatiosi edellyttää sisäänkirjautumista, jotta voit käyttää Chromea.</translation>
 <translation id="6054613632208573261">Käytä oletuksena Chromea</translation>
 <translation id="6063091872902370735">Salli Chrome-kirjautuminen</translation>
+<translation id="6110625574506755980">Jotkin Chromen ominaisuudet eivät ole enää käytettävissä.</translation>
 <translation id="6181930887571472871">Vaihda Chromeen</translation>
 <translation id="6238746320622508509">Anna Chromen lukita incognito-välilehtesi.</translation>
 <translation id="6387994324662817823">Salasanat tallennetaan Googlen Salasanojen ylläpitoon vain tällä laitteella.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
index 749d1dd..32ecd255 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr-CA.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Votre organisation vous demande de vous connecter pour utiliser Chrome.</translation>
 <translation id="6054613632208573261">Utiliser Chrome par défaut</translation>
 <translation id="6063091872902370735">Autoriser la connexion dans Chrome</translation>
+<translation id="6110625574506755980">Certaines fonctionnalités de Chrome ne seront plus offertes.</translation>
 <translation id="6181930887571472871">Passer à Chrome</translation>
 <translation id="6238746320622508509">Chrome peut verrouiller vos onglets de navigation privée.</translation>
 <translation id="6387994324662817823">Les mots de passe sont enregistrés dans le gestionnaire de mots de passe Google sur cet appareil uniquement.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb
index 342c62b..fc0c44e6 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gl.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">A túa organización esixe que inicies para usar Chrome.</translation>
 <translation id="6054613632208573261">Utiliza Chrome de forma predeterminada</translation>
 <translation id="6063091872902370735">Permitir inicio de sesión en Chrome</translation>
+<translation id="6110625574506755980">Algunhas funcións de Chrome deixarán de estar dispoñibles.</translation>
 <translation id="6181930887571472871">Pásate a Chrome</translation>
 <translation id="6238746320622508509">Permite que Chrome bloquee as pestanas do modo de incógnito.</translation>
 <translation id="6387994324662817823">Os contrasinais gárdanse no xestor de contrasinais de Google só neste dispositivo.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb
index e057663..0dc64c0 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hi.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">आपके संगठन के मुताबिक, यह ज़रूरी है कि Chrome का इस्तेमाल करने के लिए आप साइन इन करें.</translation>
 <translation id="6054613632208573261">Chrome को अपना डिफ़ॉल्ट ब्राउज़र बनाएं</translation>
 <translation id="6063091872902370735">Chrome में साइन-इन करने की अनुमति दें</translation>
+<translation id="6110625574506755980">Chrome की कुछ सुविधाएं अब उपलब्ध नहीं होंगी.</translation>
 <translation id="6181930887571472871">Chrome पर स्विच करें</translation>
 <translation id="6238746320622508509">Chrome को आपके गुप्त टैब लॉक करने दें.</translation>
 <translation id="6387994324662817823">पासवर्ड, सिर्फ़ इस डिवाइस में Google पासवर्ड मैनेजर में सेव हैं.</translation>
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 2152c4e..b8bb739 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
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">La tua organizzazione richiede l'accesso per usare Chrome.</translation>
 <translation id="6054613632208573261">Usa Chrome per impostazione predefinita</translation>
 <translation id="6063091872902370735">Consenti l'accesso a Chrome</translation>
+<translation id="6110625574506755980">Alcune funzionalità di Chrome non saranno più disponibili.</translation>
 <translation id="6181930887571472871">Passa a Chrome</translation>
 <translation id="6238746320622508509">Consenti a Chrome di bloccare le schede di navigazione in incognito.</translation>
 <translation id="6387994324662817823">Le password vengono salvate in Gestore delle password di Google solo su questo dispositivo.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb
index 8cc62e5..2579628 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_iw.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">‏לפי דרישת הארגון שלך, עליך להיכנס לחשבון כדי להשתמש ב-Chrome.</translation>
 <translation id="6054613632208573261">‏שימוש ב-Chrome כברירת מחדל</translation>
 <translation id="6063091872902370735">‏התרת כניסה אל Chrome</translation>
+<translation id="6110625574506755980">‏חלק מהתכונות של Chrome לא יהיו זמינות יותר.</translation>
 <translation id="6181930887571472871">‏לעבור ל-Chrome?</translation>
 <translation id="6238746320622508509">‏כרטיסיות מצב אנונימי יינעלו באמצעות Chrome.</translation>
 <translation id="6387994324662817823">‏סיסמאות נשמרות במנהל הסיסמאות של Google במכשיר הזה בלבד.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
index 0fdc2e8..654be391 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lo.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">ອົງການຂອງທ່ານຕ້ອງການໃຫ້ທ່ານເຂົ້າສູ່ລະບົບເພື່ອໃຊ້ Chrome.</translation>
 <translation id="6054613632208573261">ໃຊ້ Chrome ເປັນຄ່າເລີ່ມຕົ້ນ</translation>
 <translation id="6063091872902370735">ອະນຸຍາດການເຂົ້າສູ່ລະບົບ Chrome</translation>
+<translation id="6110625574506755980">ຄຸນສົມບັດບາງຢ່າງຂອງ Chrome ຈະບໍ່ສາມາດໃຊ້ໄດ້ອີກຕໍ່ໄປ.</translation>
 <translation id="6181930887571472871">ປ່ຽນເປັນ Chrome</translation>
 <translation id="6238746320622508509">ອະນຸຍາດໃຫ້ Chrome ລັອກແຖບບໍ່ເປີດເຜີຍຕົວຕົນຂອງທ່ານ.</translation>
 <translation id="6387994324662817823">ລະຫັດຜ່ານແມ່ນຖືກບັນທຶກໄປໃສ່ຕົວຈັດການລະຫັດຜ່ານ Google ຢູ່ອຸປະກອນນີ້ເທົ່ານັ້ນ.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb
index 7ef6ea78..4055687 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_lv.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Saskaņā ar jūsu organizācijas prasībām, lai izmantotu pārlūku Chrome, jums ir jāpierakstās.</translation>
 <translation id="6054613632208573261">Chrome izmantošana pēc noklusējuma</translation>
 <translation id="6063091872902370735">Atļaut pierakstīšanos pārlūkā Chrome</translation>
+<translation id="6110625574506755980">Dažas Chrome funkcijas vairs nebūs pieejamas.</translation>
 <translation id="6181930887571472871">Pāriet uz Chrome</translation>
 <translation id="6238746320622508509">Atļaujiet pārlūkā Chrome bloķēt inkognito cilnes.</translation>
 <translation id="6387994324662817823">Paroles tiek saglabātas tikai šīs ierīces Google paroļu pārvaldniekā.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb
index fabfd7db..2150996 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Organisasi anda menghendaki anda log masuk untuk menggunakan Chrome.</translation>
 <translation id="6054613632208573261">Gunakan Chrome secara Lalai</translation>
 <translation id="6063091872902370735">Benarkan Log Masuk Chrome</translation>
+<translation id="6110625574506755980">Sesetengah ciri Chrome tidak akan tersedia lagi.</translation>
 <translation id="6181930887571472871">Beralih kepada Chrome</translation>
 <translation id="6238746320622508509">Biarkan Chrome mengunci tab Inkognito anda.</translation>
 <translation id="6387994324662817823">Kata laluan disimpan pada Pengurus Kata Laluan Google pada peranti ini sahaja.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb
index 8dc8ae2..a4a5756 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Chrome ବ୍ୟବହାର କରିବାକୁ ଆପଣଙ୍କ ସଂସ୍ଥା ଆପଣ ସାଇନ ଇନ କରିବା ଆବଶ୍ୟକ କରେ।</translation>
 <translation id="6054613632208573261">Chromeକୁ ଡିଫଲ୍ଟ ଭାବେ ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="6063091872902370735">Chromeରେ ସାଇନ୍-ଇନ୍ କରିବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ</translation>
+<translation id="6110625574506755980">Chromeର କିଛି ଫିଚର ଆଉ ଉପଲବ୍ଧ ହେବ ନାହିଁ।</translation>
 <translation id="6181930887571472871">Chromeକୁ ସ୍ୱିଚ୍ କରନ୍ତୁ</translation>
 <translation id="6238746320622508509">Chromeକୁ ଆପଣଙ୍କ ଇନକଗ୍ନିଟୋ ଟାବଗୁଡ଼ିକୁ ଲକ୍ କରିବାକୁ ଦିଅନ୍ତୁ।</translation>
 <translation id="6387994324662817823">ଏହି ଡିଭାଇସରେ ପାସୱାର୍ଡଗୁଡ଼ିକ କେବଳ Google ପାସୱାର୍ଡ ମ୍ୟାନେଜରରେ ସେଭ କରାଯାଏ।</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
index 5c7e954..1c42223 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ru.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">По правилам организации, чтобы использовать Chrome, нужно выполнить вход.</translation>
 <translation id="6054613632208573261">Используйте Chrome по умолчанию</translation>
 <translation id="6063091872902370735">Разрешить вход в Chrome</translation>
+<translation id="6110625574506755980">Некоторые функции Chrome станут недоступны</translation>
 <translation id="6181930887571472871">Переходите на Chrome</translation>
 <translation id="6238746320622508509">Разрешите Chrome блокировать для посторонних доступ к вашим вкладкам инкогнито.</translation>
 <translation id="6387994324662817823">Пароли сохранены в Google Диспетчере паролей только на этом устройстве.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb
index 95a5856..e60e0f4a 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_si.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">ඔබගේ සංවිධානයට ඔබ Chrome භාවිත කිරීමට පිරීම අවශ්‍ය වේ.</translation>
 <translation id="6054613632208573261">පෙරනිමියෙන් Chrome භාවිත කරන්න</translation>
 <translation id="6063091872902370735">Chrome පිරීමට ඉඩ දෙන්න</translation>
+<translation id="6110625574506755980">සමහර Chrome විශේෂාංග තවදුරටත් නොතිබෙනු ඇත.</translation>
 <translation id="6181930887571472871">Chrome වෙත මාරු වන්න</translation>
 <translation id="6238746320622508509">Chrome හට ඔබගේ අප්‍රකට ටැබ අගුලු දැමීමට ඉඩ දෙන්න.</translation>
 <translation id="6387994324662817823">මුරපද මෙම උපාංගයේ Google මුරපද කළමනාකරු තුළ පමණක් සුරැකේ.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb
index 3950a11..005ed2cf 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sq.xtb
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="sq">
-<translation id="1143896152279775643">Fjalëkalimi yt do të ruhet në "Menaxherin e fjalëkalimeve" të Google për <ph name="EMAIL" />.</translation>
+<translation id="1143896152279775643">Fjalëkalimi yt do të ruhet në "Menaxherin e fjalëkalimeve të Google" për <ph name="EMAIL" />.</translation>
 <translation id="1282031177488366470">Ndihmo në përmirësimin e veçorive dhe cilësisë së funksionimit të Chrome</translation>
 <translation id="1462727070346936664">Identifikohu për të përfituar sa më shumë nga Chrome.</translation>
 <translation id="1479202195792305274">Chrome mund t'i kontrollojë fjalëkalimet e tua kur të identifikohesh me "Llogarinë tënde të Google".</translation>
@@ -27,7 +27,7 @@
 <translation id="2574249610672786438">Për të parë skedat e tua nga çdo vend ku përdor Chrome, identifikohu në të gjitha pajisjet e tua</translation>
 <translation id="2576431527583832481">Chrome sapo është përmirësuar! Ofrohet një version i ri.</translation>
 <translation id="257708665678654955">Dëshiron që Google Chrome të ofrojë përkthimin e faqeve në <ph name="LANGUAGE_NAME" /> nga ky sajt herën tjetër?</translation>
-<translation id="2671426118752779020">Fjalëkalimet që ke ruajtur në "Menaxherin e fjalëkalimeve" të Google mund t'i përdorësh në aplikacione të tjera në iPhone.</translation>
+<translation id="2671426118752779020">Fjalëkalimet që ke ruajtur në "Menaxherin e fjalëkalimeve të Google" mund t'i përdorësh në aplikacione të tjera në iPhone.</translation>
 <translation id="2689064829982324496">Për të dalë nga "Llogaria jote e Google" në të gjitha sajtet e uebit, <ph name="BEGIN_LINK" />dil nga Chrome<ph name="END_LINK" />.</translation>
 <translation id="2695886661449553974">Chrome nuk mund të kontrollonte për përditësime. Provo përsëri më vonë.</translation>
 <translation id="2732745070297234559">Chrome nuk mund t'i kontrollonte të gjitha fjalëkalimet. Provo sërish nesër.</translation>
@@ -78,16 +78,17 @@
 <translation id="5998675059699164418">Organizata jote kërkon që të identifikohesh për të përdorur Chrome.</translation>
 <translation id="6054613632208573261">Përdor Chrome me parazgjedhje</translation>
 <translation id="6063091872902370735">Lejo identifikimin në Chrome</translation>
+<translation id="6110625574506755980">Disa veçori të Chrome nuk do të ofrohen më.</translation>
 <translation id="6181930887571472871">Kalo te Chrome</translation>
 <translation id="6238746320622508509">Lejo që Chrome t'i kyçë skedat "e fshehta".</translation>
-<translation id="6387994324662817823">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve" të Google vetëm në këtë pajisje.</translation>
+<translation id="6387994324662817823">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve të Google" vetëm në këtë pajisje.</translation>
 <translation id="6412673304250309937">Kontrollon URL-të kundrejt një liste sajtesh të pasigurta të ruajtur në Chrome. Nëse një sajt përpiqet të vjedhë fjalëkalimin tënd, ose kur shkarkon një skedar të dëmshëm, Chrome mund t'i dërgojë po ashtu "Shfletimit të sigurt" URL-të, duke përfshirë pjesë të përmbajtjes së faqes.</translation>
 <translation id="6427126399757991875">Organizata jote po konfiguron Chrome...</translation>
 <translation id="6600954340915313787">Kopjuar në Chrome</translation>
 <translation id="6634107063912726160">Kur të dalësh, Chrome nuk do të sinkronizojë asnjë nga të dhënat e tua të reja me "Llogarinë tënde të Google". Të dhënat e sinkronizuara më herët qëndrojnë në llogari.</translation>
 <translation id="6648150602980899529">Po identifikohesh me një llogari të menaxhuar nga <ph name="DOMAIN" /> dhe po i jep administratorit të saj kontroll mbi të dhënat e tua të Chrome. Duke dalë nga Chrome do të fshihen të dhënat e tua nga kjo pajisje, por do të mbeten të ruajtura në llogarinë tënde të Google.</translation>
 <translation id="6676840375528380067">Të pastrohen të dhënat e tua të Chrome nga kjo pajisje?</translation>
-<translation id="6709398533399187136">Fjalëkalimi yt është ekspozuar në një nxjerrje të paautorizuar të të dhënave. "Menaxheri i fjalëkalimeve" i Google rekomandon ta ndryshosh tani.</translation>
+<translation id="6709398533399187136">Fjalëkalimi yt është ekspozuar në një nxjerrje të paautorizuar të të dhënave. "Menaxheri i fjalëkalimeve i Google" rekomandon ta ndryshosh tani.</translation>
 <translation id="6822673484890854830">Chrome nuk mund t'i kontrollonte të gjitha fjalëkalimet. Provo sërish më vonë.</translation>
 <translation id="6964931465519938134">Tani mund të përdorësh Chrome sa herë që troket te lidhjet në mesazhe, dokumente dhe aplikacione të tjera.</translation>
 <translation id="7059914902409643750">Bëje Chrome tëndin</translation>
@@ -97,7 +98,7 @@
 <translation id="7172660552945675509">Këshillë: <ph name="BEGIN_LINK" />Zhvendose Chrome te stacioni yt<ph name="END_LINK" /></translation>
 <translation id="7173660919484573146">Chrome përdor Face ID për të siguruar qasjen e autorizuar te fjalëkalimet e tua.</translation>
 <translation id="7187993566681480880">Të mban të sigurt në Chrome dhe mund të përdoret për të përmirësuar sigurinë tënde në aplikacionet e tjera të Google kur je i identifikuar.</translation>
-<translation id="72119412072970160">Fjalëkalimet që ke ruajtur në "Menaxherin e fjalëkalimeve" të Google mund t'i përdorësh në aplikacione të tjera në iPad.</translation>
+<translation id="72119412072970160">Fjalëkalimet që ke ruajtur në "Menaxherin e fjalëkalimeve të Google" mund t'i përdorësh në aplikacione të tjera në iPad.</translation>
 <translation id="7261678641327190792">Chrome nuk mund t'i kontrollojë fjalëkalimet e tua</translation>
 <translation id="7272930098487145294">Për të ruajtur imazhet, trokit te "Cilësimet" për të lejuar që Chrome të shtojë te fotografitë e tua</translation>
 <translation id="7275945473750112644">Llogaria jote menaxhohet nga <ph name="HOSTED_DOMAIN" />, prandaj të dhënat e tua të Chrome do të fshihen nga kjo pajisje</translation>
@@ -127,7 +128,7 @@
 <translation id="8540666473246803645">Google Chrome</translation>
 <translation id="8736550665979974340">Qëndro i sigurt me Google Chrome</translation>
 <translation id="8772179140489533211">Shfaq kërkesa për t'u identifikuar në Chrome.</translation>
-<translation id="8788269841521769222">Nuk është nevoja ta kujtosh këtë fjalëkalim. Ai do të ruhet në "Menaxherin e fjalëkalimeve" të Google për <ph name="EMAIL" /></translation>
+<translation id="8788269841521769222">Nuk është nevoja ta kujtosh këtë fjalëkalim. Ai do të ruhet në "Menaxherin e fjalëkalimeve të Google" për <ph name="EMAIL" /></translation>
 <translation id="8969290730818637510">Kur aktivizohet:
 <ph name="BEGIN_INDENT" />  • Ndihmo në përmirësimin e Chrome për njerëzit që e përdorin atë ashtu si ti.<ph name="END_INDENT" />
 
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
index 32027fc..7f582bf7 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
@@ -78,6 +78,7 @@
 <translation id="5998675059699164418">Chromeமைப் பயன்படுத்துவதற்கு உள்நுழையுமாறு உங்கள் நிறுவனம் கோருகிறது.</translation>
 <translation id="6054613632208573261">Chromeமை இயல்பு உலாவியாகப் பயன்படுத்துங்கள்</translation>
 <translation id="6063091872902370735">Chrome உள்நுழைவை அனுமதி</translation>
+<translation id="6110625574506755980">சில Chrome அம்சங்களை இனி பயன்படுத்த முடியாது.</translation>
 <translation id="6181930887571472871">Chromeமிற்கு மாறுங்கள்</translation>
 <translation id="6238746320622508509">மறைநிலைத் தாவல்களைப் பூட்ட Chromeமை அனுமதிக்கவும்.</translation>
 <translation id="6387994324662817823">இந்தச் சாதனத்தில் மட்டுமே உள்ள Google கடவுச்சொல் நிர்வாகியில் கடவுச்சொற்கள் சேமிக்கப்படுகின்றன.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index 2063fff..f684736 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -280,6 +280,7 @@
 <translation id="3277021493514034324">Websiteadresse kopiert</translation>
 <translation id="3285962946108803577">Seite teilen…</translation>
 <translation id="3290875554372353449">Konto auswählen</translation>
+<translation id="3305294846493618482">mehr</translation>
 <translation id="3311748811247479259">Aus</translation>
 <translation id="3324193307694657476">Adresse 2</translation>
 <translation id="3328801116991980348">Websiteinformationen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sq.xtb b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
index 74f8749..5d32ec9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sq.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sq.xtb
@@ -155,7 +155,7 @@
 <translation id="2271351792809375263">Përdor fjalëkalimin që ke ruajtur në Chrome në aplikacione të tjera në pajisjen tënde</translation>
 <translation id="2273327106802955778">Menyja "Më shumë"</translation>
 <translation id="2286505070150039482">Teksti i theksuar</translation>
-<translation id="2299218006564889602">Fjalëkalimet enkriptohen në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve" të Google.</translation>
+<translation id="2299218006564889602">Fjalëkalimet enkriptohen në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve të Google".</translation>
 <translation id="2302742851632557585">Ndryshoje fjalëkalimin në faqen e internetit</translation>
 <translation id="2316709634732130529">Përdor fjalëkalimin e sugjeruar</translation>
 <translation id="2320166752086256636">Fshih tastierën</translation>
@@ -649,7 +649,7 @@
 <translation id="6374469231428023295">Provo përsëri</translation>
 <translation id="6377118281273296434">Siguria e sajtit</translation>
 <translation id="6380866119319257197">Nëse e harron frazën e kalimit apo dëshiron të ndryshosh këtë cilësim, <ph name="BEGIN_LINK" />rivendos sinkronizimin<ph name="END_LINK" /></translation>
-<translation id="6387994324662817823">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve" të Google vetëm në këtë pajisje.</translation>
+<translation id="6387994324662817823">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve të Google" vetëm në këtë pajisje.</translation>
 <translation id="6389470377220713856">Emri në kartë</translation>
 <translation id="6406506848690869874">Sinkronizo</translation>
 <translation id="6410390304316730527">"Shfletimi i sigurt" të mbron kundër sulmuesve që mund të të mashtrojnë që të bësh diçka të rrezikshme si instalimi i softuerëve keqdashës ose të zbulosh informacion personal si fjalëkalime, numra telefoni ose karta krediti. Nëse e çaktivizon, ki kujdes kur shfleton sajte të panjohura ose pa reputacion.</translation>
@@ -720,7 +720,7 @@
 <translation id="6801927553864092214">Për të shfletuar në mënyrë private, hap një skedë "të fshehtë"</translation>
 <translation id="6807889908376551050">Shfaqi të gjitha...</translation>
 <translation id="681368974849482173">Elementi u krijua</translation>
-<translation id="683022620450280906">Fjalëkalimet e ruajtura mund t'i përdorësh në çdo pajisje. Ato janë të ruajtura në "Menaxherin e fjalëkalimeve" të Google për <ph name="EMAIL" /></translation>
+<translation id="683022620450280906">Fjalëkalimet e ruajtura mund t'i përdorësh në çdo pajisje. Ato janë të ruajtura në "Menaxherin e fjalëkalimeve të Google" për <ph name="EMAIL" /></translation>
 <translation id="6831043979455480757">Përkthe</translation>
 <translation id="6842136130964845393">Për t'u siguruar që mund të qasesh gjithmonë në fjalëkalimet e tua të ruajtura, verifiko që je ti</translation>
 <translation id="6851516051005285358">Kërko sajtin për desktop</translation>
@@ -851,7 +851,7 @@
 <translation id="797413074872316787">Për të sinkronizuar dhe personalizuar mes pajisjeve, aktivizo sinkronizimin.</translation>
 <translation id="7978018860671536736">3. Trokit "Plotëso automatikisht fjalëkalimet"</translation>
 <translation id="7982789257301363584">Rrjeti</translation>
-<translation id="7987685713885608670">Për siguri shtesë, enkripto fjalëkalimet në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve" të Google.</translation>
+<translation id="7987685713885608670">Për siguri shtesë, enkripto fjalëkalimet në pajisjen tënde para se të ruhen në "Menaxherin e fjalëkalimeve të Google".</translation>
 <translation id="7993619969781047893">Veçoritë në disa sajte mund të ndalojnë së funksionuari</translation>
 <translation id="800361585186029508">Hap URL-të e futura në Google Chrome.</translation>
 <translation id="8016714545083187120">Përdor gjithmonë lidhje të sigurta</translation>
diff --git a/ios/chrome/app/tests_fake_hook.mm b/ios/chrome/app/tests_fake_hook.mm
index ce6853a..4bde54a 100644
--- a/ios/chrome/app/tests_fake_hook.mm
+++ b/ios/chrome/app/tests_fake_hook.mm
@@ -13,6 +13,9 @@
 bool DisableAppGroupAccess() {
   return false;
 }
+bool DisableClientSideFieldTrials() {
+  return false;
+}
 bool DisableContentSuggestions() {
   return false;
 }
diff --git a/ios/chrome/app/tests_hook.h b/ios/chrome/app/tests_hook.h
index 3a4c837..8610047 100644
--- a/ios/chrome/app/tests_hook.h
+++ b/ios/chrome/app/tests_hook.h
@@ -16,6 +16,11 @@
 // This is used by internal code.
 bool DisableAppGroupAccess();
 
+// Returns true if client-side field trials should be disabled, so
+// that their associated base::Features always use the default
+// behavior, avoiding unexpected randomness during testing.
+bool DisableClientSideFieldTrials();
+
 // Returns true if ContentSuggestions should be disabled to allow other tests to
 // run unimpeded.
 bool DisableContentSuggestions();
diff --git a/ios/chrome/browser/BUILD.gn b/ios/chrome/browser/BUILD.gn
index fba5383..c886941 100644
--- a/ios/chrome/browser/BUILD.gn
+++ b/ios/chrome/browser/BUILD.gn
@@ -86,6 +86,7 @@
     "//components/version_info",
     "//components/webdata_services",
     "//google_apis",
+    "//ios/chrome/app:tests_hook",
     "//ios/chrome/app/strings",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/complex_tasks",
@@ -114,9 +115,9 @@
   public_deps = [
     ":chrome_paths",
     ":chrome_url_constants",
-    ":pref_names",
     ":utils",
     "//ios/chrome/browser/application_context",
+    "//ios/chrome/browser/prefs:pref_names",
   ]
   allow_circular_includes_from = [
     "//ios/chrome/browser/sync/glue",
@@ -157,19 +158,12 @@
 
   deps = [
     "//base",
+    "//components/optimization_guide/optimization_guide_internals/webui:url_constants",
     "//ios/components/webui:url_constants",
   ]
   frameworks = [ "UIKit.framework" ]
 }
 
-source_set("pref_names") {
-  configs += [ "//build/config/compiler:enable_arc" ]
-  sources = [
-    "pref_names.cc",
-    "pref_names.h",
-  ]
-}
-
 source_set("browser_impl") {
   configs += [ "//build/config/compiler:enable_arc" ]
   sources = [
diff --git a/ios/chrome/browser/application_context/BUILD.gn b/ios/chrome/browser/application_context/BUILD.gn
index b9a2356..ab801c59 100644
--- a/ios/chrome/browser/application_context/BUILD.gn
+++ b/ios/chrome/browser/application_context/BUILD.gn
@@ -40,7 +40,6 @@
     "//ios/chrome/app:tests_hook",
     "//ios/chrome/browser",
     "//ios/chrome/browser:chrome_paths",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/browser_state:browser_state_impl",
     "//ios/chrome/browser/component_updater",
@@ -52,6 +51,7 @@
     "//ios/chrome/browser/policy",
     "//ios/chrome/browser/prefs",
     "//ios/chrome/browser/prefs:browser_prefs",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/promos_manager",
     "//ios/chrome/browser/promos_manager:features",
     "//ios/chrome/browser/push_notification:push_notification_service",
diff --git a/ios/chrome/browser/application_context/application_context_impl.mm b/ios/chrome/browser/application_context/application_context_impl.mm
index 8b791be..8dc0d1a 100644
--- a/ios/chrome/browser/application_context/application_context_impl.mm
+++ b/ios/chrome/browser/application_context/application_context_impl.mm
@@ -55,9 +55,9 @@
 #import "ios/chrome/browser/metrics/ios_chrome_metrics_services_manager_client.h"
 #import "ios/chrome/browser/policy/browser_policy_connector_ios.h"
 #import "ios/chrome/browser/policy/configuration_policy_handler_list_factory.h"
-#import "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/browser/prefs/browser_prefs.h"
 #import "ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/promos_manager/features.h"
 #import "ios/chrome/browser/promos_manager/promos_manager.h"
 #import "ios/chrome/browser/push_notification/push_notification_service.h"
diff --git a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm
index dc3d18ef..90bda1f 100644
--- a/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm
+++ b/ios/chrome/browser/autocomplete/autocomplete_provider_client_impl.mm
@@ -33,7 +33,7 @@
 #import "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/main/browser_list.h"
 #import "ios/chrome/browser/main/browser_list_factory.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #include "ios/chrome/browser/signin/identity_manager_factory.h"
 #include "ios/chrome/browser/sync/sync_service_factory.h"
diff --git a/ios/chrome/browser/autocomplete/shortcuts_backend_factory.mm b/ios/chrome/browser/autocomplete/shortcuts_backend_factory.mm
index b6c1702b..ec1e7cb 100644
--- a/ios/chrome/browser/autocomplete/shortcuts_backend_factory.mm
+++ b/ios/chrome/browser/autocomplete/shortcuts_backend_factory.mm
@@ -14,7 +14,7 @@
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/history/history_service_factory.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #include "ios/chrome/browser/search_engines/ui_thread_search_terms_data.h"
 
diff --git a/ios/chrome/browser/bookmarks/bookmarks_utils.cc b/ios/chrome/browser/bookmarks/bookmarks_utils.cc
index c670a39..2171f5e 100644
--- a/ios/chrome/browser/bookmarks/bookmarks_utils.cc
+++ b/ios/chrome/browser/bookmarks/bookmarks_utils.cc
@@ -11,7 +11,7 @@
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 
 using bookmarks::BookmarkModel;
 using bookmarks::BookmarkNode;
diff --git a/ios/chrome/browser/browser_state/BUILD.gn b/ios/chrome/browser/browser_state/BUILD.gn
index 3481db4e..e41e726c 100644
--- a/ios/chrome/browser/browser_state/BUILD.gn
+++ b/ios/chrome/browser/browser_state/BUILD.gn
@@ -32,8 +32,8 @@
     "//components/variations/net",
     "//components/webdata_services",
     "//ios/chrome/browser:chrome_url_constants",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/net:net_types",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/components/webui:url_constants",
     "//ios/web/public/webui",
   ]
diff --git a/ios/chrome/browser/browser_state/browser_state_info_cache.cc b/ios/chrome/browser/browser_state/browser_state_info_cache.cc
index 00219ea..86a4599a 100644
--- a/ios/chrome/browser/browser_state/browser_state_info_cache.cc
+++ b/ios/chrome/browser/browser_state/browser_state_info_cache.cc
@@ -19,7 +19,7 @@
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/scoped_user_pref_update.h"
 #include "ios/chrome/browser/browser_state/browser_state_info_cache_observer.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 
 namespace {
 const char kGAIAIdKey[] = "gaia_id";
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl.mm b/ios/chrome/browser/browser_state/chrome_browser_state_impl.mm
index de4d69e..9e82184d 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl.mm
@@ -36,9 +36,9 @@
 #include "ios/chrome/browser/policy/browser_state_policy_connector.h"
 #include "ios/chrome/browser/policy/browser_state_policy_connector_factory.h"
 #include "ios/chrome/browser/policy/schema_registry_factory.h"
-#include "ios/chrome/browser/pref_names.h"
 #include "ios/chrome/browser/prefs/browser_prefs.h"
 #include "ios/chrome/browser/prefs/ios_chrome_pref_service_factory.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/web/public/thread/web_thread.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
index 7dd47c10..adc5f284 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_impl_io_data.mm
@@ -26,7 +26,7 @@
 #include "ios/chrome/browser/net/http_server_properties_factory.h"
 #include "ios/chrome/browser/net/ios_chrome_network_delegate.h"
 #include "ios/chrome/browser/net/ios_chrome_url_request_context_getter.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/components/cookie_util/cookie_util.h"
 #import "ios/net/cookies/cookie_store_ios.h"
 #import "ios/net/cookies/ns_http_system_cookie_store.h"
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.mm b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.mm
index 3d5a8a4..0ad59e6 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.mm
@@ -29,7 +29,7 @@
 #include "ios/chrome/browser/chrome_paths.h"
 #include "ios/chrome/browser/optimization_guide/optimization_guide_service.h"
 #include "ios/chrome/browser/optimization_guide/optimization_guide_service_factory.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/segmentation_platform/segmentation_platform_service_factory.h"
 #include "ios/chrome/browser/signin/account_consistency_service_factory.h"
 #include "ios/chrome/browser/signin/account_reconcilor_factory.h"
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.mm b/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.mm
index 82e561c..c6b8e21 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.mm
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_removal_controller.mm
@@ -20,7 +20,7 @@
 #include "ios/chrome/browser/browser_state/chrome_browser_state_manager.h"
 #include "ios/chrome/browser/chrome_constants.h"
 #include "ios/chrome/browser/chrome_paths_internal.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/public/provider/chrome/browser/signin/chrome_identity.h"
diff --git a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm
index da8b4bcd..5db8bdc 100644
--- a/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm
+++ b/ios/chrome/browser/browser_state/off_the_record_chrome_browser_state_io_data.mm
@@ -19,7 +19,7 @@
 #include "ios/chrome/browser/ios_chrome_io_thread.h"
 #include "ios/chrome/browser/net/ios_chrome_network_delegate.h"
 #include "ios/chrome/browser/net/ios_chrome_url_request_context_getter.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/components/cookie_util/cookie_util.h"
 #import "ios/net/cookies/system_cookie_store.h"
 #include "ios/web/public/thread/web_task_traits.h"
diff --git a/ios/chrome/browser/chrome_url_constants.cc b/ios/chrome/browser/chrome_url_constants.cc
index 126875a..b10ee0a 100644
--- a/ios/chrome/browser/chrome_url_constants.cc
+++ b/ios/chrome/browser/chrome_url_constants.cc
@@ -8,6 +8,7 @@
 
 #include <iterator>
 
+#include "components/optimization_guide/optimization_guide_internals/webui/url_constants.h"
 #include "ios/components/webui/web_ui_url_constants.h"
 
 const char kChromeUIChromeURLsURL[] = "chrome://chrome-urls/";
@@ -78,6 +79,7 @@
     kChromeUITermsHost,
     kChromeUIUserActionsHost,
     kChromeUIVersionHost,
+    optimization_guide_internals::kChromeUIOptimizationGuideInternalsHost,
 };
 const size_t kNumberOfChromeHostURLs = std::size(kChromeHostURLs);
 
diff --git a/ios/chrome/browser/commerce/BUILD.gn b/ios/chrome/browser/commerce/BUILD.gn
index b05290c7..79f720c 100644
--- a/ios/chrome/browser/commerce/BUILD.gn
+++ b/ios/chrome/browser/commerce/BUILD.gn
@@ -18,9 +18,9 @@
     "//components/prefs:prefs",
     "//components/unified_consent:unified_consent",
     "//ios/chrome/browser",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/optimization_guide",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/signin:signin",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/web",
@@ -66,10 +66,10 @@
     "//components/optimization_guide/core:test_support",
     "//components/sync_preferences:test_support",
     "//components/unified_consent:unified_consent",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/optimization_guide:optimization_guide",
     "//ios/chrome/browser/optimization_guide:unit_tests",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/signin:signin",
     "//ios/chrome/browser/signin:test_support",
     "//ios/chrome/browser/ui:feature_flags",
diff --git a/ios/chrome/browser/commerce/price_alert_util.mm b/ios/chrome/browser/commerce/price_alert_util.mm
index 5569296..2e9f178 100644
--- a/ios/chrome/browser/commerce/price_alert_util.mm
+++ b/ios/chrome/browser/commerce/price_alert_util.mm
@@ -9,7 +9,7 @@
 #include "components/prefs/pref_service.h"
 #include "components/unified_consent/url_keyed_data_collection_consent_helper.h"
 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
diff --git a/ios/chrome/browser/commerce/price_alert_util_unittest.mm b/ios/chrome/browser/commerce/price_alert_util_unittest.mm
index d2c4121..46a246a 100644
--- a/ios/chrome/browser/commerce/price_alert_util_unittest.mm
+++ b/ios/chrome/browser/commerce/price_alert_util_unittest.mm
@@ -10,7 +10,7 @@
 #include "components/unified_consent/pref_names.h"
 #include "components/unified_consent/unified_consent_service.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
@@ -70,7 +70,7 @@
     }
   }
 
-  void SignIn() { auth_service_->SignIn(fake_identity_, nil); }
+  void SignIn() { auth_service_->SignIn(fake_identity_); }
 
   void SignOut() {
     auth_service_->SignOut(signin_metrics::SIGNOUT_TEST,
diff --git a/ios/chrome/browser/commerce/shopping_persisted_data_tab_helper_unittest.mm b/ios/chrome/browser/commerce/shopping_persisted_data_tab_helper_unittest.mm
index 0e8a442..7864e36 100644
--- a/ios/chrome/browser/commerce/shopping_persisted_data_tab_helper_unittest.mm
+++ b/ios/chrome/browser/commerce/shopping_persisted_data_tab_helper_unittest.mm
@@ -115,7 +115,7 @@
     auth_service_ = static_cast<AuthenticationServiceFake*>(
         AuthenticationServiceFactory::GetInstance()->GetForBrowserState(
             browser_state_.get()));
-    auth_service_->SignIn(fake_identity_, nil);
+    auth_service_->SignIn(fake_identity_);
   }
 
   void MockOptimizationGuideResponse(
diff --git a/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm b/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm
index 3c869be..f5cfa27d 100644
--- a/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm
+++ b/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm
@@ -201,7 +201,7 @@
       ios::FakeChromeIdentityService::GetInstanceFromChromeProvider();
   identity_service->AddManagedIdentities(@[ @"Name" ]);
   ChromeIdentity* identity = account_manager_service_->GetDefaultIdentity();
-  auth_service_->SignIn(identity, nil);
+  auth_service_->SignIn(identity);
 
   ASSERT_TRUE(auth_service_->GetPrimaryIdentity(signin::ConsentLevel::kSignin));
   ASSERT_TRUE(
@@ -290,7 +290,7 @@
       [FakeChromeIdentity identityWithEmail:userEmail
                                      gaiaID:@"gaiaID"
                                        name:@"Test Name"];
-  auth_service_->SignIn(identity, nil);
+  auth_service_->SignIn(identity);
   auth_service_->GrantSyncConsent(identity);
   sync_service_.FireStateChanged();
 
diff --git a/ios/chrome/browser/flags/BUILD.gn b/ios/chrome/browser/flags/BUILD.gn
index ab49820..32a78df 100644
--- a/ios/chrome/browser/flags/BUILD.gn
+++ b/ios/chrome/browser/flags/BUILD.gn
@@ -30,6 +30,7 @@
     "//components/omnibox/browser",
     "//components/omnibox/common",
     "//components/optimization_guide/core",
+    "//components/optimization_guide/core:features",
     "//components/password_manager/core/common:features",
     "//components/payments/core",
     "//components/policy:generated",
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index e8cfa3d..704b6bb 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -43,6 +43,7 @@
 #include "components/omnibox/browser/omnibox_field_trial.h"
 #include "components/omnibox/common/omnibox_features.h"
 #include "components/optimization_guide/core/optimization_guide_features.h"
+#import "components/optimization_guide/core/optimization_guide_switches.h"
 #include "components/password_manager/core/common/password_manager_features.h"
 #include "components/payments/core/features.h"
 #include "components/policy/core/common/features.h"
@@ -1011,6 +1012,11 @@
      flag_descriptions::kTFLiteLanguageDetectionName,
      flag_descriptions::kTFLiteLanguageDetectionDescription, flags_ui::kOsIos,
      FEATURE_VALUE_TYPE(translate::kTFLiteLanguageDetectionEnabled)},
+    {"optimization-guide-debug-logs",
+     flag_descriptions::kOptimizationGuideDebugLogsName,
+     flag_descriptions::kOptimizationGuideDebugLogsDescription,
+     flags_ui::kOsIos,
+     SINGLE_VALUE_TYPE(optimization_guide::switches::kDebugLoggingEnabled)},
     {"optimization-guide-model-downloading",
      flag_descriptions::kOptimizationGuideModelDownloadingName,
      flag_descriptions::kOptimizationGuideModelDownloadingDescription,
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
index 23f41ba..8b51231 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -545,6 +545,12 @@
 const char kIOSOmniboxUpdatedPopupUIDescription[] =
     "Enable the new Popup implementation with Actions";
 
+const char kOptimizationGuideDebugLogsName[] =
+    "Enable optimization guide debug logs";
+const char kOptimizationGuideDebugLogsDescription[] =
+    "Enables the optimization guide to log and save debug messages that can be "
+    "shown in the internals page.";
+
 const char kOptimizationGuideModelDownloadingName[] =
     "Allow optimization guide model downloads";
 const char kOptimizationGuideModelDownloadingDescription[] =
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
index 4862347..fcd0b25 100644
--- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
+++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -501,6 +501,10 @@
 extern const char kIOSOmniboxUpdatedPopupUIName[];
 extern const char kIOSOmniboxUpdatedPopupUIDescription[];
 
+// Title and description for the flag to enable Optimization Guide debug logs.
+extern const char kOptimizationGuideDebugLogsName[];
+extern const char kOptimizationGuideDebugLogsDescription[];
+
 // Title and description for the flag to enable TFLite model downloading.
 extern const char kOptimizationGuideModelDownloadingName[];
 extern const char kOptimizationGuideModelDownloadingDescription[];
diff --git a/ios/chrome/browser/follow/BUILD.gn b/ios/chrome/browser/follow/BUILD.gn
index 2cde0d1..283133c 100644
--- a/ios/chrome/browser/follow/BUILD.gn
+++ b/ios/chrome/browser/follow/BUILD.gn
@@ -101,9 +101,9 @@
     "//base",
     "//components/keyed_service/ios",
     "//components/pref_registry:pref_registry",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/discover_feed:discover_feed_factory",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/public/provider/chrome/browser/follow:follow_api",
   ]
 }
@@ -122,7 +122,6 @@
     "//components/feed/core/shared_prefs:feed_shared_prefs",
     "//components/prefs",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser:utils",
     "//ios/chrome/browser/browser_state:browser_state",
     "//ios/chrome/browser/discover_feed:discover_feed",
@@ -131,6 +130,7 @@
     "//ios/chrome/browser/follow:service_factory",
     "//ios/chrome/browser/main:public",
     "//ios/chrome/browser/net:crurl",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui/commands",
     "//ios/chrome/browser/ui/follow",
     "//ios/chrome/browser/ui/ntp:metrics",
diff --git a/ios/chrome/browser/follow/follow_browser_agent.mm b/ios/chrome/browser/follow/follow_browser_agent.mm
index 1384b23..12e9c27 100644
--- a/ios/chrome/browser/follow/follow_browser_agent.mm
+++ b/ios/chrome/browser/follow/follow_browser_agent.mm
@@ -17,7 +17,7 @@
 #import "ios/chrome/browser/follow/follow_service_factory.h"
 #import "ios/chrome/browser/follow/web_page_urls.h"
 #import "ios/chrome/browser/main/browser.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/system_flags.h"
 #import "ios/chrome/browser/ui/commands/feed_commands.h"
 #import "ios/chrome/browser/ui/commands/new_tab_page_commands.h"
diff --git a/ios/chrome/browser/follow/follow_service_factory.mm b/ios/chrome/browser/follow/follow_service_factory.mm
index 3d748f5..1aea47e 100644
--- a/ios/chrome/browser/follow/follow_service_factory.mm
+++ b/ios/chrome/browser/follow/follow_service_factory.mm
@@ -11,7 +11,7 @@
 #import "ios/chrome/browser/discover_feed/discover_feed_service_factory.h"
 #import "ios/chrome/browser/follow/follow_configuration.h"
 #import "ios/chrome/browser/follow/follow_service.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/public/provider/chrome/browser/follow/follow_api.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/https_upgrades/BUILD.gn b/ios/chrome/browser/https_upgrades/BUILD.gn
index ffb3831f..041191d 100644
--- a/ios/chrome/browser/https_upgrades/BUILD.gn
+++ b/ios/chrome/browser/https_upgrades/BUILD.gn
@@ -20,9 +20,9 @@
     "//components/keyed_service/ios",
     "//components/prefs:prefs",
     "//components/security_interstitials/core",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/content_settings:content_settings",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/prerender",
     "//ios/components/security_interstitials",
     "//ios/components/security_interstitials/https_only_mode",
@@ -44,8 +44,8 @@
     "//components/keyed_service/ios",
     "//components/prefs:test_support",
     "//components/security_interstitials/core",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/prerender",
     "//ios/chrome/browser/prerender:test_support",
     "//ios/components/security_interstitials/https_only_mode",
@@ -122,8 +122,8 @@
     "//components/omnibox/common",
     "//components/security_interstitials/core",
     "//components/strings:components_strings_grit",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/metrics:eg_test_support+eg2",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/test:eg_test_support+eg2",
     "//ios/chrome/test/earl_grey:eg_test_support+eg2",
     "//ios/components/security_interstitials/https_only_mode:feature",
diff --git a/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm b/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm
index 5117c05..cfe77228 100644
--- a/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm
+++ b/ios/chrome/browser/https_upgrades/https_only_mode_egtest.mm
@@ -16,7 +16,7 @@
 #import "ios/chrome/browser/https_upgrades/https_upgrade_app_interface.h"
 #import "ios/chrome/browser/https_upgrades/https_upgrade_test_helper.h"
 #import "ios/chrome/browser/metrics/metrics_app_interface.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_app_interface.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm
index e773e47..134e7e1 100644
--- a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm
+++ b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper.mm
@@ -12,7 +12,7 @@
 #include "components/security_interstitials/core/https_only_mode_metrics.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/https_upgrades/https_upgrade_service_factory.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/prerender/prerender_service.h"
 #import "ios/chrome/browser/prerender/prerender_service_factory.h"
 #import "ios/components/security_interstitials/https_only_mode/https_only_mode_blocking_page.h"
diff --git a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper_unittest.mm b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper_unittest.mm
index 5961ba1..9055a12 100644
--- a/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper_unittest.mm
+++ b/ios/chrome/browser/https_upgrades/https_only_mode_upgrade_tab_helper_unittest.mm
@@ -10,7 +10,7 @@
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #include "ios/chrome/browser/https_upgrades/https_upgrade_service_factory.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/prerender/fake_prerender_service.h"
 #import "ios/chrome/browser/prerender/prerender_service.h"
 #import "ios/chrome/browser/prerender/prerender_service_factory.h"
diff --git a/ios/chrome/browser/https_upgrades/typed_navigation_upgrade_tab_helper_egtest.mm b/ios/chrome/browser/https_upgrades/typed_navigation_upgrade_tab_helper_egtest.mm
index 0a65657..a0822ab4 100644
--- a/ios/chrome/browser/https_upgrades/typed_navigation_upgrade_tab_helper_egtest.mm
+++ b/ios/chrome/browser/https_upgrades/typed_navigation_upgrade_tab_helper_egtest.mm
@@ -15,7 +15,7 @@
 #import "ios/chrome/browser/https_upgrades/https_upgrade_app_interface.h"
 #import "ios/chrome/browser/https_upgrades/https_upgrade_test_helper.h"
 #import "ios/chrome/browser/metrics/metrics_app_interface.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
diff --git a/ios/chrome/browser/ios_chrome_field_trials.mm b/ios/chrome/browser/ios_chrome_field_trials.mm
index e6c85ff..6bef4ab3 100644
--- a/ios/chrome/browser/ios_chrome_field_trials.mm
+++ b/ios/chrome/browser/ios_chrome_field_trials.mm
@@ -7,6 +7,7 @@
 #import "base/check.h"
 #import "base/path_service.h"
 #import "components/metrics/persistent_histograms.h"
+#import "ios/chrome/app/tests_hook.h"
 #import "ios/chrome/browser/application_context/application_context.h"
 #import "ios/chrome/browser/chrome_paths.h"
 #import "ios/chrome/browser/ui/first_run/fre_field_trial.h"
@@ -28,10 +29,18 @@
     bool has_seed,
     const base::FieldTrial::EntropyProvider* low_entropy_provider,
     base::FeatureList* feature_list) {
-  // Add code here to enable field trials that are active at first run.
-  // See http://crrev/c/1128269 for an example.
   // Note: On iOS, the |low_entropy_provider| is guaranteed to be non-null.
   DCHECK(low_entropy_provider);
+
+  // Disable trials when testing to remove sources of nondeterminism.
+  // WARNING: Do not add any field trials until after this check, or
+  // else they will be incorrectly randomized during EG testing.
+  if (tests_hook::DisableClientSideFieldTrials()) {
+    return;
+  }
+
+  // Add code here to enable field trials that are active at first run.
+  // See http://crrev/c/1128269 for an example.
   fre_field_trial::Create(*low_entropy_provider, feature_list,
                           GetApplicationContext()->GetLocalState());
   trending_queries_field_trial::Create(
diff --git a/ios/chrome/browser/ios_chrome_main_parts.mm b/ios/chrome/browser/ios_chrome_main_parts.mm
index 8d73ee6..f32564d8 100644
--- a/ios/chrome/browser/ios_chrome_main_parts.mm
+++ b/ios/chrome/browser/ios_chrome_main_parts.mm
@@ -60,7 +60,7 @@
 #include "ios/chrome/browser/metrics/ios_expired_histograms_array.h"
 #include "ios/chrome/browser/open_from_clipboard/create_clipboard_recent_content.h"
 #include "ios/chrome/browser/policy/browser_policy_connector_ios.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/promos_manager/promos_manager.h"
 #import "ios/chrome/browser/safe_browsing/safe_browsing_metrics_collector_factory.h"
 #import "ios/chrome/browser/signin/signin_util.h"
diff --git a/ios/chrome/browser/memory/memory_debugger_manager.mm b/ios/chrome/browser/memory/memory_debugger_manager.mm
index 7a2d9dc..7af3b18 100644
--- a/ios/chrome/browser/memory/memory_debugger_manager.mm
+++ b/ios/chrome/browser/memory/memory_debugger_manager.mm
@@ -9,7 +9,7 @@
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 #import "ios/chrome/browser/memory/memory_debugger.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.mm b/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.mm
index f22f25e..cde817d 100644
--- a/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.mm
+++ b/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider.mm
@@ -7,7 +7,7 @@
 #import "base/metrics/histogram_functions.h"
 #import "components/feed/core/shared_prefs/pref_names.h"
 #import "components/prefs/pref_service.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/ntp/new_tab_page_feature.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider_unittest.mm b/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider_unittest.mm
index 7e76753..9afcdac2 100644
--- a/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider_unittest.mm
+++ b/ios/chrome/browser/metrics/ios_feed_enabled_metrics_provider_unittest.mm
@@ -9,7 +9,7 @@
 #import "components/metrics/metrics_log_uploader.h"
 #import "components/prefs/pref_registry_simple.h"
 #import "components/prefs/testing_pref_service.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "testing/platform_test.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/net/http_server_properties_factory.cc b/ios/chrome/browser/net/http_server_properties_factory.cc
index f1eb0f3b..ce8ac04 100644
--- a/ios/chrome/browser/net/http_server_properties_factory.cc
+++ b/ios/chrome/browser/net/http_server_properties_factory.cc
@@ -10,7 +10,7 @@
 #include "base/values.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/json_pref_store.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/web/public/thread/web_thread.h"
 #include "net/http/http_server_properties.h"
 
diff --git a/ios/chrome/browser/net/ios_chrome_network_delegate.cc b/ios/chrome/browser/net/ios_chrome_network_delegate.cc
index 13930fa..dcc0dd7a 100644
--- a/ios/chrome/browser/net/ios_chrome_network_delegate.cc
+++ b/ios/chrome/browser/net/ios_chrome_network_delegate.cc
@@ -18,7 +18,7 @@
 #include "components/content_settings/core/common/content_settings.h"
 #include "components/prefs/pref_member.h"
 #include "components/prefs/pref_service.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/web/public/thread/web_task_traits.h"
 #include "ios/web/public/thread/web_thread.h"
 #include "net/base/load_flags.h"
diff --git a/ios/chrome/browser/ntp/browser_policy_new_tab_page_rewriter.mm b/ios/chrome/browser/ntp/browser_policy_new_tab_page_rewriter.mm
index 3614c428..9544a0f3 100644
--- a/ios/chrome/browser/ntp/browser_policy_new_tab_page_rewriter.mm
+++ b/ios/chrome/browser/ntp/browser_policy_new_tab_page_rewriter.mm
@@ -8,7 +8,7 @@
 #include "components/url_formatter/url_fixer.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/system_flags.h"
 #include "ios/components/webui/web_ui_url_constants.h"
 #include "ios/web/public/browser_state.h"
diff --git a/ios/chrome/browser/ntp/browser_policy_new_tab_page_rewriter_unittest.mm b/ios/chrome/browser/ntp/browser_policy_new_tab_page_rewriter_unittest.mm
index 4e122b34..890a15e7 100644
--- a/ios/chrome/browser/ntp/browser_policy_new_tab_page_rewriter_unittest.mm
+++ b/ios/chrome/browser/ntp/browser_policy_new_tab_page_rewriter_unittest.mm
@@ -8,7 +8,7 @@
 #include "components/sync_preferences/testing_pref_service_syncable.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/web/public/test/fakes/fake_browser_state.h"
 #import "ios/web/public/test/web_task_environment.h"
 #include "testing/platform_test.h"
diff --git a/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc b/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc
index 02594d2..adb5b32 100644
--- a/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc
+++ b/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory.cc
@@ -14,7 +14,7 @@
 #include "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h"
 #include "ios/chrome/browser/history/history_service_factory.h"
 #include "ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/reading_list/reading_list_model_factory.h"
 #include "ios/chrome/browser/signin/identity_manager_factory.h"
 
diff --git a/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.mm b/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.mm
index a46eeb2..d90d481 100644
--- a/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.mm
+++ b/ios/chrome/browser/ntp_snippets/ios_chrome_content_suggestions_service_factory_util.mm
@@ -41,7 +41,7 @@
 #include "ios/chrome/browser/favicon/ios_chrome_large_icon_service_factory.h"
 #include "ios/chrome/browser/history/history_service_factory.h"
 #include "ios/chrome/browser/json_parser/in_process_json_parser.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/signin/identity_manager_factory.h"
 #include "ios/chrome/browser/ui/ui_feature_flags.h"
 #include "ios/chrome/common/channel_info.h"
diff --git a/ios/chrome/browser/optimization_guide/optimization_guide_service.h b/ios/chrome/browser/optimization_guide/optimization_guide_service.h
index ecdfc12..234c47b 100644
--- a/ios/chrome/browser/optimization_guide/optimization_guide_service.h
+++ b/ios/chrome/browser/optimization_guide/optimization_guide_service.h
@@ -138,6 +138,11 @@
   // Getter for the prediction manager.
   optimization_guide::PredictionManager* GetPredictionManager();
 
+  // Getter for the optimization guide logger.
+  OptimizationGuideLogger* GetOptimizationGuideLogger() {
+    return optimization_guide_logger_.get();
+  }
+
  private:
   friend class OptimizationGuideServiceTest;
   friend class OptimizationGuideTabHelper;
diff --git a/ios/chrome/browser/optimization_guide/optimization_guide_service.mm b/ios/chrome/browser/optimization_guide/optimization_guide_service.mm
index 1eb96dd..65bb5c7 100644
--- a/ios/chrome/browser/optimization_guide/optimization_guide_service.mm
+++ b/ios/chrome/browser/optimization_guide/optimization_guide_service.mm
@@ -15,10 +15,8 @@
 #import "components/optimization_guide/core/hints_processing_util.h"
 #import "components/optimization_guide/core/optimization_guide_constants.h"
 #import "components/optimization_guide/core/optimization_guide_features.h"
-#include "components/optimization_guide/core/optimization_guide_features.h"
 #import "components/optimization_guide/core/optimization_guide_logger.h"
 #import "components/optimization_guide/core/optimization_guide_navigation_data.h"
-#import "components/optimization_guide/core/optimization_guide_permissions_util.h"
 #import "components/optimization_guide/core/optimization_guide_store.h"
 #import "components/optimization_guide/core/optimization_guide_util.h"
 #include "components/optimization_guide/core/prediction_manager.h"
@@ -151,6 +149,14 @@
   // assumed that all clients that had the previous path have had their previous
   // stores deleted.
   DeleteOldStorePaths(profile_path);
+
+  OPTIMIZATION_GUIDE_LOG(
+      optimization_guide_common::mojom::LogSource::SERVICE_AND_SETTINGS,
+      optimization_guide_logger_,
+      "OptimizationGuide: KeyedService is initalized");
+
+  optimization_guide::LogFeatureFlagsInfo(optimization_guide_logger_.get(),
+                                          off_the_record_, pref_service);
 }
 
 OptimizationGuideService::~OptimizationGuideService() {
diff --git a/ios/chrome/browser/optimization_guide/optimization_guide_test_app_interface.h b/ios/chrome/browser/optimization_guide/optimization_guide_test_app_interface.h
index 06c0065..64d9116 100644
--- a/ios/chrome/browser/optimization_guide/optimization_guide_test_app_interface.h
+++ b/ios/chrome/browser/optimization_guide/optimization_guide_test_app_interface.h
@@ -9,6 +9,10 @@
 
 #include "components/optimization_guide/proto/hints.pb.h"
 
+namespace optimization_guide {
+class OptimizationMetadata;
+}  // namespace optimization_guide
+
 class OptimizationGuideTestAppInterfaceWrapper {
  public:
   static void SetOptimizationGuideServiceUrl(NSString* url);
@@ -27,6 +31,13 @@
 + (void)registerOptimizationType:
     (optimization_guide::proto::OptimizationType)type;
 
+// Invokes `CanApplyOptimization` on the the host for its side effect but does
+// not return anything.
++ (void)canApplyOptimization:(NSString*)url
+                        type:(optimization_guide::proto::OptimizationType)type
+                    metadata:
+                        (optimization_guide::OptimizationMetadata*)metadata;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_TEST_APP_INTERFACE_H_
diff --git a/ios/chrome/browser/optimization_guide/optimization_guide_test_app_interface.mm b/ios/chrome/browser/optimization_guide/optimization_guide_test_app_interface.mm
index e905c6d..1533877 100644
--- a/ios/chrome/browser/optimization_guide/optimization_guide_test_app_interface.mm
+++ b/ios/chrome/browser/optimization_guide/optimization_guide_test_app_interface.mm
@@ -70,4 +70,15 @@
   service->RegisterOptimizationTypes({type});
 }
 
++ (void)canApplyOptimization:(NSString*)url
+                        type:(optimization_guide::proto::OptimizationType)type
+                    metadata:
+                        (optimization_guide::OptimizationMetadata*)metadata {
+  OptimizationGuideService* service =
+      OptimizationGuideServiceFactory::GetForBrowserState(
+          chrome_test_util::GetOriginalBrowserState());
+  service->CanApplyOptimization(GURL(base::SysNSStringToUTF8(url)), type,
+                                metadata);
+}
+
 @end
diff --git a/ios/chrome/browser/policy/BUILD.gn b/ios/chrome/browser/policy/BUILD.gn
index 68608d6..2573dae6 100644
--- a/ios/chrome/browser/policy/BUILD.gn
+++ b/ios/chrome/browser/policy/BUILD.gn
@@ -84,9 +84,9 @@
     "//components/version_info:version_info",
     "//ios/chrome/app/application_delegate:app_state_header",
     "//ios/chrome/browser",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/main:public",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/signin",
     "//ios/chrome/browser/ui/authentication/signin:signin_headers",
     "//ios/chrome/browser/ui/commands",
@@ -111,7 +111,7 @@
   deps = [
     "//base",
     "//components/prefs",
-    "//ios/chrome/browser:pref_names",
+    "//ios/chrome/browser/prefs:pref_names",
   ]
 }
 
@@ -197,12 +197,12 @@
     "//google_apis",
     "//ios/chrome/app/application_delegate:app_state_header",
     "//ios/chrome/browser:chrome_paths",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser:utils",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/main:test_support",
     "//ios/chrome/browser/prefs",
     "//ios/chrome/browser/prefs:browser_prefs",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/signin:signin",
     "//ios/chrome/browser/signin:test_support",
     "//ios/chrome/browser/ui/authentication/enterprise/enterprise_prompt",
@@ -252,9 +252,9 @@
     "//google_apis",
     "//ios/chrome/app/strings:ios_strings_grit",
     "//ios/chrome/browser:chrome_url_constants",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser:utils",
     "//ios/chrome/browser/policy:eg_test_support+eg2",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/translate:eg_test_support+eg2",
     "//ios/chrome/browser/ui/authentication:eg_test_support+eg2",
     "//ios/chrome/browser/ui/content_suggestions:constants",
diff --git a/ios/chrome/browser/policy/browser_signin_policy_handler.cc b/ios/chrome/browser/policy/browser_signin_policy_handler.cc
index 70e5165..31553d4 100644
--- a/ios/chrome/browser/policy/browser_signin_policy_handler.cc
+++ b/ios/chrome/browser/policy/browser_signin_policy_handler.cc
@@ -16,7 +16,7 @@
 #include "components/signin/public/base/signin_pref_names.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 
 namespace policy {
 BrowserSigninPolicyHandler::BrowserSigninPolicyHandler(Schema chrome_schema)
diff --git a/ios/chrome/browser/policy/browser_signin_policy_handler_unittest.mm b/ios/chrome/browser/policy/browser_signin_policy_handler_unittest.mm
index 9d82007..619d1c93 100644
--- a/ios/chrome/browser/policy/browser_signin_policy_handler_unittest.mm
+++ b/ios/chrome/browser/policy/browser_signin_policy_handler_unittest.mm
@@ -15,7 +15,7 @@
 #include "components/signin/public/base/signin_pref_names.h"
 #include "ios/chrome/browser/chrome_switches.h"
 #include "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/test/ios_chrome_scoped_testing_local_state.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
diff --git a/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm b/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm
index 9d069c8..26b9829 100644
--- a/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm
+++ b/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm
@@ -37,7 +37,7 @@
 #include "ios/chrome/browser/policy/browser_signin_policy_handler.h"
 #include "ios/chrome/browser/policy/new_tab_page_location_policy_handler.h"
 #import "ios/chrome/browser/policy/restrict_accounts_policy_handler.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/policy/new_tab_page_location_policy_handler.cc b/ios/chrome/browser/policy/new_tab_page_location_policy_handler.cc
index 09d556e1..4727b363 100644
--- a/ios/chrome/browser/policy/new_tab_page_location_policy_handler.cc
+++ b/ios/chrome/browser/policy/new_tab_page_location_policy_handler.cc
@@ -12,7 +12,7 @@
 #include "components/prefs/pref_service.h"
 #include "components/prefs/pref_value_map.h"
 #include "components/strings/grit/components_strings.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "url/gurl.h"
 
 class GURL;
diff --git a/ios/chrome/browser/policy/new_tab_page_location_policy_handler_unittest.cc b/ios/chrome/browser/policy/new_tab_page_location_policy_handler_unittest.cc
index c902cfe..b6434851 100644
--- a/ios/chrome/browser/policy/new_tab_page_location_policy_handler_unittest.cc
+++ b/ios/chrome/browser/policy/new_tab_page_location_policy_handler_unittest.cc
@@ -8,7 +8,7 @@
 #include "components/policy/core/common/policy_map.h"
 #include "components/policy/policy_constants.h"
 #include "components/prefs/pref_value_map.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
 
diff --git a/ios/chrome/browser/policy/policy_egtest.mm b/ios/chrome/browser/policy/policy_egtest.mm
index d2bbe776..7ae49df 100644
--- a/ios/chrome/browser/policy/policy_egtest.mm
+++ b/ios/chrome/browser/policy/policy_egtest.mm
@@ -22,7 +22,7 @@
 #import "ios/chrome/browser/chrome_url_constants.h"
 #import "ios/chrome/browser/policy/policy_app_interface.h"
 #import "ios/chrome/browser/policy/policy_earl_grey_utils.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/translate/translate_app_interface.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h"
diff --git a/ios/chrome/browser/policy/policy_platform_provider_egtest.mm b/ios/chrome/browser/policy/policy_platform_provider_egtest.mm
index 974ea7f..75408fe8f 100644
--- a/ios/chrome/browser/policy/policy_platform_provider_egtest.mm
+++ b/ios/chrome/browser/policy/policy_platform_provider_egtest.mm
@@ -15,7 +15,7 @@
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
 #import "ios/chrome/browser/policy/policy_app_interface.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #include "ios/chrome/test/earl_grey/chrome_test_case.h"
 #include "ios/testing/earl_grey/app_launch_configuration.h"
diff --git a/ios/chrome/browser/policy/policy_unittest.mm b/ios/chrome/browser/policy/policy_unittest.mm
index 6f437b3..fa5a737d 100644
--- a/ios/chrome/browser/policy/policy_unittest.mm
+++ b/ios/chrome/browser/policy/policy_unittest.mm
@@ -19,7 +19,7 @@
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #include "ios/chrome/browser/chrome_paths.h"
 #include "ios/chrome/browser/policy/enterprise_policy_test_helper.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/gtest_mac.h"
diff --git a/ios/chrome/browser/policy/policy_util.mm b/ios/chrome/browser/policy/policy_util.mm
index cfe1009..7587bb6 100644
--- a/ios/chrome/browser/policy/policy_util.mm
+++ b/ios/chrome/browser/policy/policy_util.mm
@@ -5,7 +5,7 @@
 #import "ios/chrome/browser/policy/policy_util.h"
 
 #include "components/prefs/pref_service.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/policy/policy_watcher_browser_agent.mm b/ios/chrome/browser/policy/policy_watcher_browser_agent.mm
index e9134116..34892c0 100644
--- a/ios/chrome/browser/policy/policy_watcher_browser_agent.mm
+++ b/ios/chrome/browser/policy/policy_watcher_browser_agent.mm
@@ -19,7 +19,7 @@
 #import "ios/chrome/browser/application_context/application_context.h"
 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/policy/policy_watcher_browser_agent_observer.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/ui/authentication/signin/signin_utils.h"
 #import "ios/chrome/browser/ui/commands/policy_change_commands.h"
diff --git a/ios/chrome/browser/policy/policy_watcher_browser_agent_unittest.mm b/ios/chrome/browser/policy/policy_watcher_browser_agent_unittest.mm
index a17ccd7..ff3f14ab 100644
--- a/ios/chrome/browser/policy/policy_watcher_browser_agent_unittest.mm
+++ b/ios/chrome/browser/policy/policy_watcher_browser_agent_unittest.mm
@@ -19,8 +19,8 @@
 #import "ios/chrome/browser/main/test_browser.h"
 #import "ios/chrome/browser/policy/policy_util.h"
 #include "ios/chrome/browser/policy/policy_watcher_browser_agent_observer_bridge.h"
-#import "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/browser/prefs/browser_prefs.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
@@ -95,7 +95,7 @@
                                          name:@"myName"];
     AuthenticationServiceFactory::GetForBrowserState(
         chrome_browser_state_.get())
-        ->SignIn(identity, nil);
+        ->SignIn(identity);
   }
 
   PrefService* GetLocalState() { return scoped_testing_local_state_.Get(); }
@@ -302,7 +302,7 @@
       [FakeChromeIdentity identityWithEmail:@"email@google.com"
                                      gaiaID:@"gaiaID"
                                        name:@"myName"];
-  authentication_service->SignIn(identity, nil);
+  authentication_service->SignIn(identity);
 
   ASSERT_TRUE(authentication_service->HasPrimaryIdentity(
       signin::ConsentLevel::kSignin));
diff --git a/ios/chrome/browser/policy/reporting/profile_report_generator_ios_unittest.mm b/ios/chrome/browser/policy/reporting/profile_report_generator_ios_unittest.mm
index 9b43385..61b61d5 100644
--- a/ios/chrome/browser/policy/reporting/profile_report_generator_ios_unittest.mm
+++ b/ios/chrome/browser/policy/reporting/profile_report_generator_ios_unittest.mm
@@ -100,7 +100,7 @@
         ios::FakeChromeIdentityService::GetInstanceFromChromeProvider();
     identity_service->AddIdentities(@[ base::SysUTF8ToNSString(kAccount) ]);
     ChromeIdentity* identity = account_manager_service_->GetDefaultIdentity();
-    authentication_service_->SignIn(identity, nil);
+    authentication_service_->SignIn(identity);
   }
 
   std::unique_ptr<em::ChromeUserProfileInfo> GenerateReport() {
diff --git a/ios/chrome/browser/pref_names.h b/ios/chrome/browser/pref_names.h
deleted file mode 100644
index ab88bf5..0000000
--- a/ios/chrome/browser/pref_names.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef IOS_CHROME_BROWSER_PREF_NAMES_H_
-#define IOS_CHROME_BROWSER_PREF_NAMES_H_
-
-namespace prefs {
-
-extern const char kApplicationLocale[];
-extern const char kArticlesForYouEnabled[];
-extern const char kBrowserStateInfoCache[];
-extern const char kBrowserStateLastUsed[];
-extern const char kBrowserStatesLastActive[];
-extern const char kBrowserStatesNumCreated[];
-extern const char kBrowsingDataMigrationHasBeenPossible[];
-extern const char kClearBrowsingDataHistoryNoticeShownTimes[];
-extern const char kContextualSearchEnabled[];
-extern const char kDataSaverEnabled[];
-extern const char kDefaultCharset[];
-extern const char kEnableDoNotTrack[];
-extern const char kFirstFollowUIShownCount[];
-extern const char kHttpServerProperties[];
-extern const char kIncognitoModeAvailability[];
-extern const char kIncognitoInterstitialEnabled[];
-extern const char kIosBookmarkCachedFolderId[];
-extern const char kIosBookmarkCachedTopMostRow[];
-extern const char kIosBookmarkFolderDefault[];
-extern const char kIosBookmarkPromoAlreadySeen[];
-extern const char kIosBookmarkSigninPromoDisplayedCount[];
-extern const char kIosShareChromeCount[];
-extern const char kIosShareChromeLastShare[];
-extern const char kIosDiscoverFeedLastRefreshTime[];
-extern const char kIosPromosManagerActivePromos[];
-extern const char kIosPromosManagerImpressions[];
-extern const char kIosSettingsPromoAlreadySeen[];
-extern const char kIosSettingsSigninPromoDisplayedCount[];
-extern const char kIosNtpFeedTopPromoAlreadySeen[];
-extern const char kIosNtpFeedTopSigninPromoDisplayedCount[];
-extern const char kLinkPreviewEnabled[];
-extern const char kNTPContentSuggestionsEnabled[];
-extern const char kNTPFollowingFeedSortType[];
-extern const char kOverflowMenuDestinationUsageHistory[];
-extern const char kPrintingEnabled[];
-extern const char kSearchSuggestEnabled[];
-extern const char kTrackPricesOnTabsEnabled[];
-
-extern const char kNetworkPredictionSetting[];
-
-extern const char kNtpShownBookmarksFolder[];
-extern const char kShowMemoryDebuggingTools[];
-
-extern const char kSigninLastAccounts[];
-extern const char kSigninLastAccountsMigrated[];
-extern const char kSigninShouldPromptForSigninAgain[];
-extern const char kSigninWebSignDismissalCount[];
-
-extern const char kIosUserZoomMultipliers[];
-
-extern const char kIncognitoAuthenticationSetting[];
-
-extern const char kBrowserSigninPolicy[];
-extern const char kAllowChromeDataInBackups[];
-
-extern const char kNewTabPageLocationOverride[];
-
-extern const char kHttpsOnlyModeEnabled[];
-
-}  // namespace prefs
-
-#endif  // IOS_CHROME_BROWSER_PREF_NAMES_H_
diff --git a/ios/chrome/browser/prefs/BUILD.gn b/ios/chrome/browser/prefs/BUILD.gn
index bb92416b..e5bbc98a 100644
--- a/ios/chrome/browser/prefs/BUILD.gn
+++ b/ios/chrome/browser/prefs/BUILD.gn
@@ -25,8 +25,10 @@
 
 source_set("pref_names") {
   configs += [ "//build/config/compiler:enable_arc" ]
-  sources = [ "pref_names.h" ]
-  public_deps = [ "//ios/chrome/browser:pref_names" ]
+  sources = [
+    "pref_names.cc",
+    "pref_names.h",
+  ]
 }
 
 source_set("browser_prefs") {
diff --git a/ios/chrome/browser/prefs/browser_prefs.mm b/ios/chrome/browser/prefs/browser_prefs.mm
index f4b3a464..1c611324 100644
--- a/ios/chrome/browser/prefs/browser_prefs.mm
+++ b/ios/chrome/browser/prefs/browser_prefs.mm
@@ -65,7 +65,7 @@
 #import "ios/chrome/browser/metrics/ios_chrome_metrics_service_client.h"
 #include "ios/chrome/browser/notification_promo.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/prerender/prerender_pref.h"
 #import "ios/chrome/browser/ui/authentication/signin/signin_coordinator.h"
 #import "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h"
diff --git a/ios/chrome/browser/pref_names.cc b/ios/chrome/browser/prefs/pref_names.cc
similarity index 98%
rename from ios/chrome/browser/pref_names.cc
rename to ios/chrome/browser/prefs/pref_names.cc
index d4ee5fd..5f269eb 100644
--- a/ios/chrome/browser/pref_names.cc
+++ b/ios/chrome/browser/prefs/pref_names.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 "ios/chrome/browser/pref_names.h"
+#include "ios/chrome/browser/prefs/pref_names.h"
 
 namespace prefs {
 
@@ -42,8 +42,7 @@
 const char kContextualSearchEnabled[] = "search.contextual_search_enabled";
 
 // Boolean that is true when Data Saver is enabled.
-// TODO(bengr): Migrate the preference string to "data_saver.enabled"
-// (crbug.com/564207).
+// TODO(crbug.com/1356134): Remove this pref
 const char kDataSaverEnabled[] = "spdy_proxy.enabled";
 
 // The default character encoding to assume for a web page in the
diff --git a/ios/chrome/browser/prefs/pref_names.h b/ios/chrome/browser/prefs/pref_names.h
index bdaf9cc5c..982936a 100644
--- a/ios/chrome/browser/prefs/pref_names.h
+++ b/ios/chrome/browser/prefs/pref_names.h
@@ -1,11 +1,71 @@
-// Copyright 2022 The Chromium Authors.
+// Copyright 2014 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 #ifndef IOS_CHROME_BROWSER_PREFS_PREF_NAMES_H_
 #define IOS_CHROME_BROWSER_PREFS_PREF_NAMES_H_
 
-// This is a temporary fix for downstream compatibility.
-#include "ios/chrome/browser/pref_names.h"
+namespace prefs {
+
+extern const char kApplicationLocale[];
+extern const char kArticlesForYouEnabled[];
+extern const char kBrowserStateInfoCache[];
+extern const char kBrowserStateLastUsed[];
+extern const char kBrowserStatesLastActive[];
+extern const char kBrowserStatesNumCreated[];
+extern const char kBrowsingDataMigrationHasBeenPossible[];
+extern const char kClearBrowsingDataHistoryNoticeShownTimes[];
+extern const char kContextualSearchEnabled[];
+extern const char kDataSaverEnabled[];
+extern const char kDefaultCharset[];
+extern const char kEnableDoNotTrack[];
+extern const char kFirstFollowUIShownCount[];
+extern const char kHttpServerProperties[];
+extern const char kIncognitoModeAvailability[];
+extern const char kIncognitoInterstitialEnabled[];
+extern const char kIosBookmarkCachedFolderId[];
+extern const char kIosBookmarkCachedTopMostRow[];
+extern const char kIosBookmarkFolderDefault[];
+extern const char kIosBookmarkPromoAlreadySeen[];
+extern const char kIosBookmarkSigninPromoDisplayedCount[];
+extern const char kIosShareChromeCount[];
+extern const char kIosShareChromeLastShare[];
+extern const char kIosDiscoverFeedLastRefreshTime[];
+extern const char kIosPromosManagerActivePromos[];
+extern const char kIosPromosManagerImpressions[];
+extern const char kIosSettingsPromoAlreadySeen[];
+extern const char kIosSettingsSigninPromoDisplayedCount[];
+extern const char kIosNtpFeedTopPromoAlreadySeen[];
+extern const char kIosNtpFeedTopSigninPromoDisplayedCount[];
+extern const char kLinkPreviewEnabled[];
+extern const char kNTPContentSuggestionsEnabled[];
+extern const char kNTPFollowingFeedSortType[];
+extern const char kOverflowMenuDestinationUsageHistory[];
+extern const char kPrintingEnabled[];
+extern const char kSearchSuggestEnabled[];
+extern const char kTrackPricesOnTabsEnabled[];
+
+extern const char kNetworkPredictionSetting[];
+
+extern const char kNtpShownBookmarksFolder[];
+extern const char kShowMemoryDebuggingTools[];
+
+extern const char kSigninLastAccounts[];
+extern const char kSigninLastAccountsMigrated[];
+extern const char kSigninShouldPromptForSigninAgain[];
+extern const char kSigninWebSignDismissalCount[];
+
+extern const char kIosUserZoomMultipliers[];
+
+extern const char kIncognitoAuthenticationSetting[];
+
+extern const char kBrowserSigninPolicy[];
+extern const char kAllowChromeDataInBackups[];
+
+extern const char kNewTabPageLocationOverride[];
+
+extern const char kHttpsOnlyModeEnabled[];
+
+}  // namespace prefs
 
 #endif  // IOS_CHROME_BROWSER_PREFS_PREF_NAMES_H_
diff --git a/ios/chrome/browser/prerender/BUILD.gn b/ios/chrome/browser/prerender/BUILD.gn
index 4f9d5cf..bad22b3 100644
--- a/ios/chrome/browser/prerender/BUILD.gn
+++ b/ios/chrome/browser/prerender/BUILD.gn
@@ -11,7 +11,7 @@
     "//base",
     "//components/pref_registry",
     "//components/prefs",
-    "//ios/chrome/browser:pref_names",
+    "//ios/chrome/browser/prefs:pref_names",
   ]
 }
 
diff --git a/ios/chrome/browser/prerender/preload_controller.mm b/ios/chrome/browser/prerender/preload_controller.mm
index fe57272..c29c2399 100644
--- a/ios/chrome/browser/prerender/preload_controller.mm
+++ b/ios/chrome/browser/prerender/preload_controller.mm
@@ -21,7 +21,7 @@
 #include "ios/chrome/browser/download/mime_type_util.h"
 #import "ios/chrome/browser/history/history_tab_helper.h"
 #import "ios/chrome/browser/itunes_urls/itunes_urls_handler_tab_helper.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/prerender/preload_controller_delegate.h"
 #import "ios/chrome/browser/prerender/prerender_pref.h"
 #import "ios/chrome/browser/signin/account_consistency_service_factory.h"
diff --git a/ios/chrome/browser/prerender/preload_controller_unittest.mm b/ios/chrome/browser/prerender/preload_controller_unittest.mm
index fe506f1..7949cfe 100644
--- a/ios/chrome/browser/prerender/preload_controller_unittest.mm
+++ b/ios/chrome/browser/prerender/preload_controller_unittest.mm
@@ -9,7 +9,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/prerender/preload_controller.h"
 #import "ios/chrome/browser/prerender/prerender_pref.h"
 #include "ios/web/public/test/web_task_environment.h"
diff --git a/ios/chrome/browser/prerender/prerender_pref.mm b/ios/chrome/browser/prerender/prerender_pref.mm
index d33b301f..202c7db 100644
--- a/ios/chrome/browser/prerender/prerender_pref.mm
+++ b/ios/chrome/browser/prerender/prerender_pref.mm
@@ -6,7 +6,7 @@
 
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/promos_manager/BUILD.gn b/ios/chrome/browser/promos_manager/BUILD.gn
index 50840df..64417aa 100644
--- a/ios/chrome/browser/promos_manager/BUILD.gn
+++ b/ios/chrome/browser/promos_manager/BUILD.gn
@@ -9,14 +9,14 @@
   ]
   frameworks = [ "Foundation.framework" ]
   configs += [ "//build/config/compiler:enable_arc" ]
+  public_deps = [ "//third_party/abseil-cpp:absl" ]
   deps = [
     ":constants",
     ":features",
     ":types",
     "//base",
     "//components/prefs",
-    "//ios/chrome/browser:pref_names",
-    "//third_party/abseil-cpp:absl",
+    "//ios/chrome/browser/prefs:pref_names",
   ]
 }
 
@@ -52,6 +52,7 @@
     "constants.h",
   ]
   configs += [ "//build/config/compiler:enable_arc" ]
+  public_deps = [ "//third_party/abseil-cpp:absl" ]
   deps = [ "//base" ]
 }
 
@@ -81,7 +82,7 @@
     "//base/test:test_support",
     "//components/prefs",
     "//components/prefs:test_support",
-    "//ios/chrome/browser:pref_names",
+    "//ios/chrome/browser/prefs:pref_names",
     "//testing/gmock",
     "//testing/gtest",
     "//third_party/abseil-cpp:absl",
diff --git a/ios/chrome/browser/promos_manager/constants.cc b/ios/chrome/browser/promos_manager/constants.cc
index 4027746..0e658f0 100644
--- a/ios/chrome/browser/promos_manager/constants.cc
+++ b/ios/chrome/browser/promos_manager/constants.cc
@@ -5,6 +5,7 @@
 #include "ios/chrome/browser/promos_manager/constants.h"
 
 #include "base/notreached.h"
+#import "third_party/abseil-cpp/absl/types/optional.h"
 
 namespace promos_manager {
 
@@ -15,22 +16,20 @@
 
 // WARNING - PLEASE READ: Sadly, we cannot switch over strings in C++, so be
 // very careful when updating this method to ensure all enums are accounted for.
-Promo PromoForName(std::string promo) {
-  if (promo == "promos_manager::Promo::Test") {
+absl::optional<Promo> PromoForName(std::string promo) {
+  if (promo == "promos_manager::Promo::Test")
     return promos_manager::Promo::Test;
-  } else if (promo == "promos_manager::Promo::DefaultBrowser") {
-    return promos_manager::Promo::DefaultBrowser;
-  } else if (promo == "promos_manager::Promo::AppStoreRating") {
-    return promos_manager::Promo::AppStoreRating;
-  } else if (promo == "promos_manager::Promo::CredentialProviderExtension") {
-    return promos_manager::Promo::CredentialProviderExtension;
-  } else {
-    NOTREACHED();
 
-    // Returns promos_manager::Promo::Test by default, but this should never be
-    // reached!
-    return promos_manager::Promo::Test;
-  }
+  if (promo == "promos_manager::Promo::DefaultBrowser")
+    return promos_manager::Promo::DefaultBrowser;
+
+  if (promo == "promos_manager::Promo::AppStoreRating")
+    return promos_manager::Promo::AppStoreRating;
+
+  if (promo == "promos_manager::Promo::CredentialProviderExtension")
+    return promos_manager::Promo::CredentialProviderExtension;
+
+  return absl::nullopt;
 }
 
 std::string NameForPromo(Promo promo) {
diff --git a/ios/chrome/browser/promos_manager/constants.h b/ios/chrome/browser/promos_manager/constants.h
index b176dff..e666ec3e 100644
--- a/ios/chrome/browser/promos_manager/constants.h
+++ b/ios/chrome/browser/promos_manager/constants.h
@@ -7,6 +7,8 @@
 
 #include <string>
 
+#import "third_party/abseil-cpp/absl/types/optional.h"
+
 namespace promos_manager {
 
 // Dictionary key for `promo` identifier in stored impression (base::Value).
@@ -42,7 +44,7 @@
 std::string NameForPromo(Promo promo);
 
 // Returns promos_manager::Promo for string `promo`.
-Promo PromoForName(std::string promo);
+absl::optional<Promo> PromoForName(std::string promo);
 
 }  // namespace promos_manager
 
diff --git a/ios/chrome/browser/promos_manager/promos_manager.h b/ios/chrome/browser/promos_manager/promos_manager.h
index 4c73301..5e61468 100644
--- a/ios/chrome/browser/promos_manager/promos_manager.h
+++ b/ios/chrome/browser/promos_manager/promos_manager.h
@@ -6,6 +6,7 @@
 #define IOS_CHROME_BROWSER_PROMOS_MANAGER_PROMOS_MANAGER_H_
 
 #import <Foundation/Foundation.h>
+#import <set>
 #import <vector>
 
 #import "base/values.h"
@@ -32,8 +33,8 @@
   // Weak pointer to the local state prefs store.
   const raw_ptr<PrefService> local_state_;
 
-  // base::Value::List of active promos.
-  base::Value::List active_promos_;
+  // The set of currently active promos.
+  std::set<promos_manager::Promo> active_promos_;
 
   // The impression history sorted by `day` (most recent -> least recent).
   std::vector<promos_manager::Impression> impression_history_;
@@ -68,6 +69,11 @@
   std::vector<promos_manager::Impression> ImpressionHistory(
       const base::Value::List& stored_impression_history);
 
+  // Loops over the stored active promos list (base::Value::List) and returns
+  // a corresponding std::set<promos_manager::Promo>.
+  std::set<promos_manager::Promo> ActivePromos(
+      const base::Value::List& stored_active_promos);
+
   // Returns the most recent day (int) that `promo` was seen by the user.
   //
   // A day (int) is represented as the number of days since the Unix epoch
@@ -174,6 +180,11 @@
                            ReturnsBlankImpressionHistoryForBlankPrefs);
   FRIEND_TEST_ALL_PREFIXES(PromosManagerTest,
                            ReturnsImpressionHistoryBySkippingMalformedEntries);
+  FRIEND_TEST_ALL_PREFIXES(PromosManagerTest, ReturnsActivePromos);
+  FRIEND_TEST_ALL_PREFIXES(PromosManagerTest,
+                           ReturnsBlankActivePromosForBlankPrefs);
+  FRIEND_TEST_ALL_PREFIXES(PromosManagerTest,
+                           ReturnsActivePromosAndSkipsMalformedData);
 };
 
 #endif  // IOS_CHROME_BROWSER_PROMOS_MANAGER_PROMOS_MANAGER_H_
diff --git a/ios/chrome/browser/promos_manager/promos_manager.mm b/ios/chrome/browser/promos_manager/promos_manager.mm
index b3e3ecd..502dee2 100644
--- a/ios/chrome/browser/promos_manager/promos_manager.mm
+++ b/ios/chrome/browser/promos_manager/promos_manager.mm
@@ -16,7 +16,7 @@
 #import "base/time/time.h"
 #import "base/values.h"
 #import "components/prefs/pref_service.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/promos_manager/constants.h"
 #import "ios/chrome/browser/promos_manager/features.h"
 #import "ios/chrome/browser/promos_manager/impression_limit.h"
@@ -60,10 +60,8 @@
 
   DCHECK(local_state_);
 
-  const base::Value::List& stored_active_promos =
-      local_state_->GetValueList(prefs::kIosPromosManagerActivePromos);
-
-  active_promos_ = stored_active_promos.Clone();
+  active_promos_ = ActivePromos(
+      local_state_->GetValueList(prefs::kIosPromosManagerActivePromos));
   impression_history_ = ImpressionHistory(
       local_state_->GetValueList(prefs::kIosPromosManagerImpressions));
 }
@@ -86,13 +84,38 @@
     if (!stored_promo || !stored_day.has_value())
       continue;
 
-    impression_history.push_back(promos_manager::Impression(
-        promos_manager::PromoForName(*stored_promo), stored_day.value()));
+    absl::optional<promos_manager::Promo> promo =
+        promos_manager::PromoForName(*stored_promo);
+
+    // Skip malformed impression history. (This should almost never happen.)
+    if (!promo.has_value())
+      continue;
+
+    impression_history.push_back(
+        promos_manager::Impression(promo.value(), stored_day.value()));
   }
 
   return impression_history;
 }
 
+std::set<promos_manager::Promo> PromosManager::ActivePromos(
+    const base::Value::List& stored_active_promos) {
+  std::set<promos_manager::Promo> active_promos;
+
+  for (size_t i = 0; i < stored_active_promos.size(); ++i) {
+    absl::optional<promos_manager::Promo> promo =
+        promos_manager::PromoForName(stored_active_promos[i].GetString());
+
+    // Skip malformed active promos data. (This should almost never happen.)
+    if (!promo.has_value())
+      continue;
+
+    active_promos.insert(promo.value());
+  }
+
+  return active_promos;
+}
+
 NSArray<ImpressionLimit*>* PromosManager::PromoImpressionLimits(
     promos_manager::Promo promo) const {
   // TODO(crbug.com/1354665): Return `promo`-specific limits.
diff --git a/ios/chrome/browser/promos_manager/promos_manager_unittest.mm b/ios/chrome/browser/promos_manager/promos_manager_unittest.mm
index 516cb61..c587cf6 100644
--- a/ios/chrome/browser/promos_manager/promos_manager_unittest.mm
+++ b/ios/chrome/browser/promos_manager/promos_manager_unittest.mm
@@ -5,12 +5,13 @@
 #import "ios/chrome/browser/promos_manager/promos_manager_unittest.h"
 
 #import <Foundation/Foundation.h>
+#import <set>
 #import <vector>
 
 #import "base/test/scoped_feature_list.h"
 #import "components/prefs/pref_registry_simple.h"
 #import "components/prefs/testing_pref_service.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/promos_manager/constants.h"
 #import "ios/chrome/browser/promos_manager/features.h"
 #import "ios/chrome/browser/promos_manager/impression_limit.h"
@@ -104,6 +105,13 @@
             promos_manager::Promo::Test);
 }
 
+// Tests promos_manager::PromoForName correctly returns absl::nullopt for bad
+// input.
+TEST_F(PromosManagerTest, ReturnsNulloptForBadName) {
+  EXPECT_FALSE(promos_manager::PromoForName("promos_manager::Promo::FOOBAR")
+                   .has_value());
+}
+
 // Tests PromosManagerTest::TestPromo() correctly creates one mock promo.
 TEST_F(PromosManagerTest, CreatesPromo) {
   Promo* promo = TestPromo();
@@ -564,3 +572,55 @@
   EXPECT_EQ(expected[0].promo, result[0].promo);
   EXPECT_EQ(expected[0].day, result[0].day);
 }
+
+// Tests PromosManager::ActivePromos() correctly ingests active promos
+// (base::Value::List) and returns corresponding
+// std::vector<promos_manager::Promo>.
+TEST_F(PromosManagerTest, ReturnsActivePromos) {
+  base::Value::List promos;
+  promos.Append("promos_manager::Promo::DefaultBrowser");
+  promos.Append("promos_manager::Promo::AppStoreRating");
+  promos.Append("promos_manager::Promo::CredentialProviderExtension");
+
+  std::set<promos_manager::Promo> expected = {
+      promos_manager::Promo::DefaultBrowser,
+      promos_manager::Promo::AppStoreRating,
+      promos_manager::Promo::CredentialProviderExtension,
+  };
+
+  std::set<promos_manager::Promo> result =
+      promos_manager_->ActivePromos(promos);
+
+  EXPECT_EQ(expected, promos_manager_->ActivePromos(promos));
+}
+
+// Tests PromosManager::ActivePromos() correctly ingests empty active promos
+// (base::Value::List) and returns empty std::set<promos_manager::Promo>.
+TEST_F(PromosManagerTest, ReturnsBlankActivePromosForBlankPrefs) {
+  base::Value::List promos;
+
+  std::set<promos_manager::Promo> result =
+      promos_manager_->ActivePromos(promos);
+
+  EXPECT_TRUE(result.empty());
+}
+
+// Tests PromosManager::ActivePromos() correctly ingests active promos with
+// malformed data (base::Value::List) and returns corresponding
+// std::vector<promos_manager::Promo> with malformed entries pruned.
+TEST_F(PromosManagerTest, ReturnsActivePromosAndSkipsMalformedData) {
+  base::Value::List promos;
+  promos.Append("promos_manager::Promo::DefaultBrowser");
+  promos.Append("promos_manager::Promo::AppStoreRating");
+  promos.Append("promos_manager::Promo::FOOBAR");
+
+  std::set<promos_manager::Promo> expected = {
+      promos_manager::Promo::DefaultBrowser,
+      promos_manager::Promo::AppStoreRating,
+  };
+
+  std::set<promos_manager::Promo> result =
+      promos_manager_->ActivePromos(promos);
+
+  EXPECT_EQ(expected, promos_manager_->ActivePromos(promos));
+}
diff --git a/ios/chrome/browser/signin/authentication_service.h b/ios/chrome/browser/signin/authentication_service.h
index 671f77e72..eacea78 100644
--- a/ios/chrome/browser/signin/authentication_service.h
+++ b/ios/chrome/browser/signin/authentication_service.h
@@ -129,8 +129,8 @@
 
   // Grants signin::ConsentLevel::kSignin to |identity|.
   // This method does not set up Sync-the-feature for the identity.
-  void SignIn(ChromeIdentity* identity,
-              signin_ui::CompletionCallback completion);
+  // Virtual for testing.
+  virtual void SignIn(ChromeIdentity* identity);
 
   // Grants signin::ConsentLevel::kSync to |identity|.
   // This starts setting up Sync-the-feature, but the setup will only complete
@@ -165,10 +165,6 @@
   friend class AuthenticationServiceFake;
   friend class AuthenticationServiceTest;
 
-  // Grants signin::ConsentLevel::kSignin to |identity|.
-  // Virtual for testing.
-  virtual void SignInInternal(ChromeIdentity* identity);
-
   // Clears local data for users under parental controls and runs |completion|.
   void OnIsSubjectToParentalControlsResult(
       ios::ChromeIdentityCapabilityResult result,
diff --git a/ios/chrome/browser/signin/authentication_service.mm b/ios/chrome/browser/signin/authentication_service.mm
index 5f52db5e..8cb23f1c 100644
--- a/ios/chrome/browser/signin/authentication_service.mm
+++ b/ios/chrome/browser/signin/authentication_service.mm
@@ -25,7 +25,7 @@
 #import "ios/chrome/browser/application_context/application_context.h"
 #include "ios/chrome/browser/crash_report/crash_keys_helper.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service_delegate.h"
 #import "ios/chrome/browser/signin/authentication_service_observer.h"
 #import "ios/chrome/browser/signin/signin_util.h"
@@ -321,17 +321,7 @@
   return account_manager_service_->GetIdentityWithGaiaID(authenticated_gaia_id);
 }
 
-// TODO(crbug.com/1351423): Remove asynchronous callback from SignIn function,
-// since this is no longer used by existing callers.
-void AuthenticationService::SignIn(ChromeIdentity* identity,
-                                   signin_ui::CompletionCallback completion) {
-  SignInInternal(identity);
-  if (completion) {
-    completion(HasPrimaryIdentity(signin::ConsentLevel::kSignin));
-  }
-}
-
-void AuthenticationService::SignInInternal(ChromeIdentity* identity) {
+void AuthenticationService::SignIn(ChromeIdentity* identity) {
   ServiceStatus status = GetServiceStatus();
   CHECK(status == ServiceStatus::SigninAllowed ||
         status == ServiceStatus::SigninForcedByPolicy)
diff --git a/ios/chrome/browser/signin/authentication_service_fake.h b/ios/chrome/browser/signin/authentication_service_fake.h
index ffac948..7aaf97c0 100644
--- a/ios/chrome/browser/signin/authentication_service_fake.h
+++ b/ios/chrome/browser/signin/authentication_service_fake.h
@@ -27,6 +27,8 @@
 
   ~AuthenticationServiceFake() override;
 
+  void SignIn(ChromeIdentity* identity) override;
+
   void GrantSyncConsent(ChromeIdentity* identity) override;
 
   void SignOut(signin_metrics::ProfileSignout signout_source,
@@ -47,9 +49,6 @@
       signin::IdentityManager* identity_manager,
       syncer::SyncService* sync_service);
 
-  // Internal method signing the user in.
-  void SignInInternal(ChromeIdentity* identity) override;
-
   // Internal method effectively signing out the user.
   void SignOutInternal(ProceduralBlock completion);
 
diff --git a/ios/chrome/browser/signin/authentication_service_fake.mm b/ios/chrome/browser/signin/authentication_service_fake.mm
index 8a229c1..7e8ddc7 100644
--- a/ios/chrome/browser/signin/authentication_service_fake.mm
+++ b/ios/chrome/browser/signin/authentication_service_fake.mm
@@ -36,7 +36,7 @@
 
 AuthenticationServiceFake::~AuthenticationServiceFake() {}
 
-void AuthenticationServiceFake::SignInInternal(ChromeIdentity* identity) {
+void AuthenticationServiceFake::SignIn(ChromeIdentity* identity) {
   // Needs to call PrepareForFirstSyncSetup to behave like
   // AuthenticationService.
   DCHECK(identity);
diff --git a/ios/chrome/browser/signin/authentication_service_unittest.mm b/ios/chrome/browser/signin/authentication_service_unittest.mm
index 328402d..204d259 100644
--- a/ios/chrome/browser/signin/authentication_service_unittest.mm
+++ b/ios/chrome/browser/signin/authentication_service_unittest.mm
@@ -29,8 +29,8 @@
 #include "ios/chrome/browser/content_settings/cookie_settings_factory.h"
 #include "ios/chrome/browser/content_settings/host_content_settings_map_factory.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
 #include "ios/chrome/browser/prefs/browser_prefs.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
@@ -218,7 +218,7 @@
 TEST_F(AuthenticationServiceTest, TestSignInAndGetPrimaryIdentity) {
   // Sign in.
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
 
   EXPECT_NSEQ(identity(0), authentication_service()->GetPrimaryIdentity(
                                signin::ConsentLevel::kSignin));
@@ -249,7 +249,7 @@
 TEST_F(AuthenticationServiceTest, TestHandleForgottenIdentityNoPromptSignIn) {
   // Sign in.
   SetExpectationsForSignInAndSync();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
   authentication_service()->GrantSyncConsent(identity(0));
 
   // Set the authentication service as "In Foreground", remove identity and run
@@ -275,7 +275,7 @@
 TEST_F(AuthenticationServiceTest, TestHandleForgottenIdentityPromptSignIn) {
   // Sign in.
   SetExpectationsForSignInAndSync();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
   authentication_service()->GrantSyncConsent(identity(0));
 
   // Set the authentication service as "In Background", remove identity and run
@@ -300,7 +300,7 @@
        TestHandleForgottenIdentityNoPromptSignInAndSync) {
   // Sign in.
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
 
   // Set the authentication service as "In Background", remove identity and run
   // the loop.
@@ -323,7 +323,7 @@
        OnApplicationEnterForegroundReloadCredentials) {
   // Sign in.
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
 
   identity_service()->AddIdentities(@[ @"foo3" ]);
 
@@ -356,7 +356,7 @@
 // Tests the account list is approved after adding an account with in Chrome.
 TEST_F(AuthenticationServiceTest, AccountListApprovedByUser_AddedByUser) {
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
 
   identity_service()->AddIdentities(@[ @"foo3" ]);
   FireIdentityListChanged(/*notify_user=*/false);
@@ -368,7 +368,7 @@
 // app (through the keychain).
 TEST_F(AuthenticationServiceTest, AccountListApprovedByUser_ChangedByKeychain) {
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
 
   identity_service()->AddIdentities(@[ @"foo3" ]);
   FireIdentityListChanged(/*notify_user=*/true);
@@ -381,7 +381,7 @@
 TEST_F(AuthenticationServiceTest,
        AccountListApprovedByUser_ChangedTwiceByKeychain) {
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
 
   identity_service()->AddIdentities(@[ @"foo3" ]);
   FireIdentityListChanged(/*notify_user=*/true);
@@ -400,7 +400,7 @@
 TEST_F(AuthenticationServiceTest,
        AccountListApprovedByUser_ResetOntwoBackgrounds) {
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
 
   identity_service()->AddIdentities(@[ @"foo3" ]);
   FireIdentityListChanged(/*notify_user=*/true);
@@ -426,7 +426,7 @@
 TEST_F(AuthenticationServiceTest, HasPrimaryIdentityBackground) {
   // Sign in.
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
   EXPECT_TRUE(authentication_service()->HasPrimaryIdentity(
       signin::ConsentLevel::kSignin));
 
@@ -443,7 +443,7 @@
 // notifications that the state of error has changed.
 TEST_F(AuthenticationServiceTest, MDMErrorsClearedOnForeground) {
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
   EXPECT_EQ(identity_manager()->GetAccountsWithRefreshTokens().size(), 2UL);
 
   NSDictionary* user_info = [NSDictionary dictionary];
@@ -483,7 +483,7 @@
 // Tests that MDM errors are correctly cleared when signing out.
 TEST_F(AuthenticationServiceTest, MDMErrorsClearedOnSignout) {
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
   EXPECT_EQ(identity_manager()->GetAccountsWithRefreshTokens().size(), 2UL);
 
   NSDictionary* user_info = [NSDictionary dictionary];
@@ -501,7 +501,7 @@
 TEST_F(AuthenticationServiceTest,
        MDMErrorsClearedOnSignoutAndClearBrowsingData) {
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
   EXPECT_EQ(identity_manager()->GetAccountsWithRefreshTokens().size(), 2UL);
 
   NSDictionary* user_info = [NSDictionary dictionary];
@@ -520,7 +520,7 @@
   identity_service()->AddManagedIdentities(@[ @"foo3" ]);
 
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(2), nil);
+  authentication_service()->SignIn(identity(2));
   EXPECT_EQ(identity_manager()->GetAccountsWithRefreshTokens().size(), 3UL);
   EXPECT_TRUE(authentication_service()->HasPrimaryIdentityManaged(
       signin::ConsentLevel::kSignin));
@@ -541,7 +541,7 @@
   identity_service()->AddManagedIdentities(@[ @"foo3" ]);
 
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(2), nil);
+  authentication_service()->SignIn(identity(2));
   EXPECT_EQ(identity_manager()->GetAccountsWithRefreshTokens().size(), 3UL);
   EXPECT_TRUE(authentication_service()->HasPrimaryIdentityManaged(
       signin::ConsentLevel::kSignin));
@@ -564,7 +564,7 @@
   identity_service()->AddManagedIdentities(@[ @"foo3" ]);
 
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(2), nil);
+  authentication_service()->SignIn(identity(2));
   EXPECT_EQ(identity_manager()->GetAccountsWithRefreshTokens().size(), 3UL);
   EXPECT_TRUE(authentication_service()->HasPrimaryIdentityManaged(
       signin::ConsentLevel::kSignin));
@@ -583,7 +583,7 @@
 // to MDM service when necessary.
 TEST_F(AuthenticationServiceTest, HandleMDMNotification) {
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
   GoogleServiceAuthError error(
       GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
   signin::UpdatePersistentErrorOfRefreshTokenForAccount(
@@ -619,7 +619,7 @@
 // the primary account is blocked.
 TEST_F(AuthenticationServiceTest, HandleMDMBlockedNotification) {
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
   GoogleServiceAuthError error(
       GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
   signin::UpdatePersistentErrorOfRefreshTokenForAccount(
@@ -678,7 +678,7 @@
 // Tests that MDM dialog is shown when there is a cached error and a
 // corresponding error for the account.
 TEST_F(AuthenticationServiceTest, ShowMDMErrorDialog) {
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
   GoogleServiceAuthError error(
       GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
   signin::UpdatePersistentErrorOfRefreshTokenForAccount(
@@ -698,7 +698,7 @@
 TEST_F(AuthenticationServiceTest, SigninAndSyncDecoupled) {
   // Sign in.
   SetExpectationsForSignIn();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
 
   EXPECT_NSEQ(identity(0), authentication_service()->GetPrimaryIdentity(
                                signin::ConsentLevel::kSignin));
@@ -730,7 +730,7 @@
   browser_state_->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
 
   // Attempt to sign in, and verify there is a crash.
-  EXPECT_CHECK_DEATH(authentication_service()->SignIn(identity(0), nil));
+  EXPECT_CHECK_DEATH(authentication_service()->SignIn(identity(0)));
 }
 
 // Tests that reauth prompt is not set if the primary identity is restricted and
@@ -740,7 +740,7 @@
   authentication_service()->AddObserver(&observer_test);
   // Sign in.
   SetExpectationsForSignInAndSync();
-  authentication_service()->SignIn(identity(0), nil);
+  authentication_service()->SignIn(identity(0));
   authentication_service()->GrantSyncConsent(identity(0));
 
   // Set the account restriction.
diff --git a/ios/chrome/browser/signin/user_approved_account_list_manager.mm b/ios/chrome/browser/signin/user_approved_account_list_manager.mm
index c18a52f..d1f7cd87 100644
--- a/ios/chrome/browser/signin/user_approved_account_list_manager.mm
+++ b/ios/chrome/browser/signin/user_approved_account_list_manager.mm
@@ -5,7 +5,7 @@
 #import "ios/chrome/browser/signin/user_approved_account_list_manager.h"
 
 #import "components/prefs/pref_service.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/signin/user_approved_account_list_manager_unittest.mm b/ios/chrome/browser/signin/user_approved_account_list_manager_unittest.mm
index 97a6114..7012a6a 100644
--- a/ios/chrome/browser/signin/user_approved_account_list_manager_unittest.mm
+++ b/ios/chrome/browser/signin/user_approved_account_list_manager_unittest.mm
@@ -7,8 +7,8 @@
 #import "components/sync_preferences/pref_service_mock_factory.h"
 #import "components/sync_preferences/pref_service_syncable.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
-#import "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/browser/prefs/browser_prefs.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/web/public/test/web_task_environment.h"
 #import "testing/platform_test.h"
 
diff --git a/ios/chrome/browser/sync/ios_chrome_sync_client.mm b/ios/chrome/browser/sync/ios_chrome_sync_client.mm
index 67be277..b4c68f5 100644
--- a/ios/chrome/browser/sync/ios_chrome_sync_client.mm
+++ b/ios/chrome/browser/sync/ios_chrome_sync_client.mm
@@ -40,7 +40,7 @@
 #include "ios/chrome/browser/history/history_service_factory.h"
 #include "ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.h"
 #include "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/reading_list/reading_list_model_factory.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #include "ios/chrome/browser/signin/identity_manager_factory.h"
diff --git a/ios/chrome/browser/ui/activity_services/BUILD.gn b/ios/chrome/browser/ui/activity_services/BUILD.gn
index 9980d20..a04bce3 100644
--- a/ios/chrome/browser/ui/activity_services/BUILD.gn
+++ b/ios/chrome/browser/ui/activity_services/BUILD.gn
@@ -69,10 +69,10 @@
     "//components/sync/driver:driver",
     "//components/ui_metrics",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/bookmarks",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/download",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/snapshots",
     "//ios/chrome/browser/snapshots:test_utils",
     "//ios/chrome/browser/sync",
diff --git a/ios/chrome/browser/ui/activity_services/activity_service_mediator.mm b/ios/chrome/browser/ui/activity_services/activity_service_mediator.mm
index 0969ad6..fcf9acc 100644
--- a/ios/chrome/browser/ui/activity_services/activity_service_mediator.mm
+++ b/ios/chrome/browser/ui/activity_services/activity_service_mediator.mm
@@ -13,7 +13,7 @@
 #include "base/strings/sys_string_conversions.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/prefs/pref_service.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/sync/send_tab_to_self_sync_service_factory.h"
 #import "ios/chrome/browser/ui/activity_services/activities/bookmark_activity.h"
 #import "ios/chrome/browser/ui/activity_services/activities/copy_activity.h"
diff --git a/ios/chrome/browser/ui/activity_services/activity_service_mediator_unittest.mm b/ios/chrome/browser/ui/activity_services/activity_service_mediator_unittest.mm
index a90de69..dac75f4 100644
--- a/ios/chrome/browser/ui/activity_services/activity_service_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/activity_services/activity_service_mediator_unittest.mm
@@ -9,7 +9,7 @@
 #import "components/prefs/pref_registry_simple.h"
 #import "components/prefs/pref_service.h"
 #import "components/prefs/testing_pref_service.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/activity_services/activities/bookmark_activity.h"
 #import "ios/chrome/browser/ui/activity_services/activities/copy_activity.h"
 #import "ios/chrome/browser/ui/activity_services/activities/find_in_page_activity.h"
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow.mm b/ios/chrome/browser/ui/authentication/authentication_flow.mm
index 7c7ba29..248a553 100644
--- a/ios/chrome/browser/ui/authentication/authentication_flow.mm
+++ b/ios/chrome/browser/ui/authentication/authentication_flow.mm
@@ -73,10 +73,6 @@
 // `_signInCompletion` when finished.
 - (void)continueSignin;
 
-// Handles authentication related errors or continues sign-in if the
-// authentication was successful.
-- (void)handlePostAuthenticationFlow:(BOOL)success;
-
 // Runs `_signInCompletion` asynchronously with `success` argument.
 - (void)completeSignInWithSuccess:(BOOL)success;
 
@@ -417,20 +413,9 @@
       ChromeAccountManagerServiceFactory::GetForBrowserState(browserState);
 
   if (accountManagerService->IsValidIdentity(identity)) {
-    __weak AuthenticationFlow* weakSelf = self;
     [_performer signInIdentity:identity
               withHostedDomain:_identityToSignInHostedDomain
-                toBrowserState:browserState
-                    completion:^(BOOL success) {
-                      [weakSelf handlePostAuthenticationFlow:success];
-                    }];
-  } else {
-    [self handlePostAuthenticationFlow:NO];
-  }
-}
-
-- (void)handlePostAuthenticationFlow:(BOOL)success {
-  if (success) {
+                toBrowserState:browserState];
     _didSignIn = YES;
     [self continueSignin];
   } else {
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow_performer.h b/ios/chrome/browser/ui/authentication/authentication_flow_performer.h
index 7d11b14..1f43b07d 100644
--- a/ios/chrome/browser/ui/authentication/authentication_flow_performer.h
+++ b/ios/chrome/browser/ui/authentication/authentication_flow_performer.h
@@ -36,12 +36,10 @@
 - (void)fetchManagedStatus:(ChromeBrowserState*)browserState
                forIdentity:(ChromeIdentity*)identity;
 
-// Signs `identity` with `hostedDomain` into `browserState` and calls
-// `completion` after sign-in is complete.
+// Signs `identity` with `hostedDomain` into `browserState`.
 - (void)signInIdentity:(ChromeIdentity*)identity
       withHostedDomain:(NSString*)hostedDomain
-        toBrowserState:(ChromeBrowserState*)browserState
-            completion:(signin_ui::CompletionCallback)completion;
+        toBrowserState:(ChromeBrowserState*)browserState;
 
 // Signs out of `browserState` and sends `didSignOut` to the delegate when
 // complete.
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm b/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm
index 741b2a5..fd8d7c50 100644
--- a/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm
+++ b/ios/chrome/browser/ui/authentication/authentication_flow_performer.mm
@@ -124,10 +124,9 @@
 
 - (void)signInIdentity:(ChromeIdentity*)identity
       withHostedDomain:(NSString*)hostedDomain
-        toBrowserState:(ChromeBrowserState*)browserState
-            completion:(signin_ui::CompletionCallback)completion {
+        toBrowserState:(ChromeBrowserState*)browserState {
   AuthenticationServiceFactory::GetForBrowserState(browserState)
-      ->SignIn(identity, completion);
+      ->SignIn(identity);
 }
 
 - (void)signOutBrowserState:(ChromeBrowserState*)browserState {
diff --git a/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm b/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm
index 823f2a0..c89e309f 100644
--- a/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/authentication_flow_unittest.mm
@@ -124,14 +124,9 @@
 
   void SetSigninSuccessExpectations(ChromeIdentity* identity,
                                     NSString* hosted_domain) {
-    [[[performer_ expect] andDo:^(NSInvocation* invocation) {
-      signin_ui::CompletionCallback callback;
-      [invocation getArgument:&callback atIndex:5];
-      callback(YES);
-    }] signInIdentity:identity
-        withHostedDomain:hosted_domain
-          toBrowserState:browser_state_.get()
-              completion:[OCMArg isNotNil]];
+    [[performer_ expect] signInIdentity:identity
+                       withHostedDomain:hosted_domain
+                         toBrowserState:browser_state_.get()];
   }
 
   web::WebTaskEnvironment task_environment_;
@@ -199,7 +194,7 @@
   [[performer_ expect] commitSyncForBrowserState:browser_state_.get()];
 
   AuthenticationServiceFactory::GetForBrowserState(browser_state_.get())
-      ->SignIn(identity1_, nil);
+      ->SignIn(identity1_);
   [authentication_flow_ startSignInWithCompletion:sign_in_completion_];
 
   CheckSignInCompletion(/*expected_signed_in=*/true);
@@ -245,7 +240,7 @@
   [[performer_ expect] commitSyncForBrowserState:browser_state_.get()];
 
   AuthenticationServiceFactory::GetForBrowserState(browser_state_.get())
-      ->SignIn(identity2_, nil);
+      ->SignIn(identity2_);
   [authentication_flow_ startSignInWithCompletion:sign_in_completion_];
 
   CheckSignInCompletion(/*expected_signed_in=*/true);
diff --git a/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.mm b/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.mm
index 80724f6..6c3627dc 100644
--- a/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.mm
+++ b/ios/chrome/browser/ui/authentication/enterprise/enterprise_utils.mm
@@ -12,7 +12,7 @@
 #include "components/sync/driver/sync_service.h"
 #import "ios/chrome/browser/application_context/application_context.h"
 #include "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/sync/sync_service_factory.h"
 
diff --git a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm
index f11a87e..8dc2e08 100644
--- a/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/re_signin_infobar_delegate_unittest.mm
@@ -59,7 +59,7 @@
     AuthenticationService* authentication_service =
         AuthenticationServiceFactory::GetForBrowserState(
             chrome_browser_state_.get());
-    authentication_service->SignIn(chrome_identity, nil);
+    authentication_service->SignIn(chrome_identity);
   }
 
   web::WebTaskEnvironment task_environment_;
diff --git a/ios/chrome/browser/ui/authentication/signed_in_accounts/signed_in_accounts_view_controller_unittest.mm b/ios/chrome/browser/ui/authentication/signed_in_accounts/signed_in_accounts_view_controller_unittest.mm
index f57f1a036..e144dc9 100644
--- a/ios/chrome/browser/ui/authentication/signed_in_accounts/signed_in_accounts_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signed_in_accounts/signed_in_accounts_view_controller_unittest.mm
@@ -56,7 +56,7 @@
             browser_state_.get());
     AuthenticationService* auth_service =
         AuthenticationServiceFactory::GetForBrowserState(browser_state_.get());
-    auth_service->SignIn(account_manager_service->GetDefaultIdentity(), nil);
+    auth_service->SignIn(account_manager_service->GetDefaultIdentity());
   }
 
  protected:
diff --git a/ios/chrome/browser/ui/authentication/signin/BUILD.gn b/ios/chrome/browser/ui/authentication/signin/BUILD.gn
index ba60a8e..2a99eeaf 100644
--- a/ios/chrome/browser/ui/authentication/signin/BUILD.gn
+++ b/ios/chrome/browser/ui/authentication/signin/BUILD.gn
@@ -52,9 +52,9 @@
     "//components/signin/ios/browser",
     "//ios/chrome/app:tests_hook",
     "//ios/chrome/browser",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/main:public",
     "//ios/chrome/browser/policy:policy_util",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/signin",
     "//ios/chrome/browser/sync",
     "//ios/chrome/browser/ui:feature_flags",
@@ -83,11 +83,11 @@
     "//components/sync/base",
     "//components/sync_preferences",
     "//components/sync_preferences:test_support",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/main:test_support",
     "//ios/chrome/browser/policy:policy_util",
     "//ios/chrome/browser/prefs:browser_prefs",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/signin",
     "//ios/chrome/browser/signin:test_support",
     "//ios/chrome/browser/ui/authentication/signin:signin_headers",
@@ -127,10 +127,10 @@
     "//components/signin/public/base",
     "//components/strings:components_strings_grit",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/metrics:eg_test_support+eg2",
     "//ios/chrome/browser/policy:eg_test_support+eg2",
     "//ios/chrome/browser/policy:policy_util",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui/authentication:eg_test_support+eg2",
     "//ios/chrome/browser/ui/authentication/views:views_constants",
     "//ios/chrome/browser/ui/bookmarks:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator_unittest.mm
index 0abd56f3..c48197c 100644
--- a/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/advanced_settings_signin/advanced_settings_signin_mediator_unittest.mm
@@ -121,7 +121,7 @@
 // interrupted.
 TEST_F(AdvancedSettingsSigninMediatorTest,
        saveUserPreferenceSigninInterruptedWithSyncDisabled) {
-  authentication_service_fake_->SignIn(identity_, nil);
+  authentication_service_fake_->SignIn(identity_);
   [mediator_
       saveUserPreferenceForSigninResult:SigninCoordinatorResultInterrupted
                     originalSigninState:
@@ -135,7 +135,7 @@
 // interrupted with IdentitySigninStateSignedOut.
 TEST_F(AdvancedSettingsSigninMediatorTest,
        saveUserPreferenceSigninInterruptedWithSignout) {
-  authentication_service_fake_->SignIn(identity_, nil);
+  authentication_service_fake_->SignIn(identity_);
   [mediator_
       saveUserPreferenceForSigninResult:SigninCoordinatorResultInterrupted
                     originalSigninState:IdentitySigninStateSignedOut];
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/BUILD.gn b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/BUILD.gn
index ea99709..77d3d85b 100644
--- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/BUILD.gn
+++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/BUILD.gn
@@ -17,10 +17,10 @@
     "//components/prefs",
     "//components/signin/public/identity_manager/objc",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/main:public",
     "//ios/chrome/browser/net:crurl",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/signin",
     "//ios/chrome/browser/ui/alert_coordinator",
     "//ios/chrome/browser/ui/authentication",
@@ -57,8 +57,8 @@
     "//components/signin/public/identity_manager",
     "//components/signin/public/identity_manager/objc",
     "//components/sync_preferences:test_support",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state:test_support",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/signin",
     "//ios/chrome/browser/signin:test_support",
     "//ios/chrome/test:test_support",
@@ -81,7 +81,7 @@
     "//base",
     "//base/test:test_support",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui/authentication:eg_test_support+eg2",
     "//ios/chrome/browser/ui/authentication/signin:constants",
     "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.mm b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.mm
index 3af165d..2b410ba 100644
--- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator.mm
@@ -9,7 +9,7 @@
 #import "components/signin/public/base/signin_metrics.h"
 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/chrome/browser/main/browser.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
 #import "ios/chrome/browser/signin/constants.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm
index 3b07d5d..6f919f7 100644
--- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_coordinator_egtest.mm
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #import "base/test/ios/wait_util.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/authentication/signin/signin_constants.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.mm b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.mm
index b844570..af72ebc0 100644
--- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator.mm
@@ -10,7 +10,7 @@
 #import "components/signin/public/base/signin_metrics.h"
 #import "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h"
 #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
 #import "ios/chrome/browser/ui/authentication/signin/signin_completion_info.h"
@@ -141,7 +141,7 @@
       signin_metrics::AccessPoint::ACCESS_POINT_WEB_SIGNIN) {
     self.userPrefService->SetInteger(prefs::kSigninWebSignDismissalCount, 0);
   }
-  self.authenticationService->SignIn(identity, nil);
+  self.authenticationService->SignIn(identity);
   [self.delegate consistencyPromoSigninMediatorSigninStarted:self];
   DCHECK(self.authenticationService->HasPrimaryIdentity(
       signin::ConsentLevel::kSignin));
diff --git a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm
index 4abfaef..cd7cfd9 100644
--- a/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/consistency_promo_signin/consistency_promo_signin_mediator_unittest.mm
@@ -12,7 +12,7 @@
 #import "components/signin/public/identity_manager/objc/identity_manager_observer_bridge.h"
 #import "components/sync_preferences/testing_pref_service_syncable.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
@@ -105,7 +105,7 @@
   // Signs in and simulates cookies being added on the web.
   void SigninAndSimulateCookies(ConsistencyPromoSigninMediator* mediator,
                                 ChromeIdentity* identity) {
-    GetAuthenticationService()->SignIn(identity, nil);
+    GetAuthenticationService()->SignIn(identity);
     OCMExpect([mediator_delegate_mock_
         consistencyPromoSigninMediatorSignInDone:mediator
                                     withIdentity:identity]);
@@ -125,7 +125,7 @@
   // Signs in and simulates a cookie error.
   void SigninAndSimulateError(ConsistencyPromoSigninMediator* mediator,
                               ChromeIdentity* identity) {
-    GetAuthenticationService()->SignIn(identity, nil);
+    GetAuthenticationService()->SignIn(identity);
     OCMExpect([mediator_delegate_mock_
         consistencyPromoSigninMediator:mediator
                         errorDidHappen:
diff --git a/ios/chrome/browser/ui/authentication/signin/forced_signin/BUILD.gn b/ios/chrome/browser/ui/authentication/signin/forced_signin/BUILD.gn
index d3f1476..1b5ac6a 100644
--- a/ios/chrome/browser/ui/authentication/signin/forced_signin/BUILD.gn
+++ b/ios/chrome/browser/ui/authentication/signin/forced_signin/BUILD.gn
@@ -40,9 +40,9 @@
     "//components/signin/ios/browser:features",
     "//ios/chrome/app/strings:ios_chromium_strings_grit",
     "//ios/chrome/app/strings:ios_strings_grit",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/policy:eg_test_support+eg2",
     "//ios/chrome/browser/policy:policy_util",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/authentication:eg_test_support+eg2",
     "//ios/chrome/browser/ui/authentication/signin:constants",
diff --git a/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_egtest.mm b/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_egtest.mm
index e42e264e7..6924024 100644
--- a/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_egtest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/forced_signin/forced_signin_egtest.mm
@@ -10,7 +10,7 @@
 #include "components/signin/ios/browser/features.h"
 #import "ios/chrome/browser/policy/policy_earl_grey_utils.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h"
 #import "ios/chrome/browser/ui/authentication/signin_matchers.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm b/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm
index cca29d3..5901ed8 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_coordinator.mm
@@ -10,7 +10,7 @@
 #import "components/signin/public/base/signin_metrics.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/chrome/browser/main/browser.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm b/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm
index f42f2a7e..fe3bf43 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_coordinator_egtest.mm
@@ -14,7 +14,7 @@
 #import "ios/chrome/browser/metrics/metrics_app_interface.h"
 #import "ios/chrome/browser/policy/policy_earl_grey_utils.h"
 #include "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey_app_interface.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_utils.mm b/ios/chrome/browser/ui/authentication/signin/signin_utils.mm
index b994ce5..c6d3fd1 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_utils.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_utils.mm
@@ -18,7 +18,7 @@
 #import "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
diff --git a/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm b/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm
index de496c0f..e7c2b46 100644
--- a/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/signin_utils_unittest.mm
@@ -18,8 +18,8 @@
 #import "components/sync_preferences/pref_service_syncable.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/browser/prefs/browser_prefs.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
@@ -326,7 +326,7 @@
   AuthenticationService* authentication_service =
       AuthenticationServiceFactory::GetForBrowserState(
           chrome_browser_state_.get());
-  authentication_service->SignIn(identity, nil);
+  authentication_service->SignIn(identity);
 
   IdentitySigninState state =
       signin::GetPrimaryIdentitySigninState(chrome_browser_state_.get());
@@ -346,7 +346,7 @@
   AuthenticationService* authentication_service =
       AuthenticationServiceFactory::GetForBrowserState(
           chrome_browser_state_.get());
-  authentication_service->SignIn(identity, nil);
+  authentication_service->SignIn(identity);
   authentication_service->GrantSyncConsent(identity);
   chrome_browser_state_->GetPrefs()->SetBoolean(
       syncer::prefs::kSyncFirstSetupComplete, true);
@@ -373,7 +373,7 @@
   AuthenticationService* authentication_service =
       AuthenticationServiceFactory::GetForBrowserState(
           chrome_browser_state_.get());
-  authentication_service->SignIn(identity, nil);
+  authentication_service->SignIn(identity);
   authentication_service->GrantSyncConsent(identity);
 
   IdentitySigninState state =
diff --git a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm b/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm
index ce78dee..f9858d3d 100644
--- a/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/trusted_vault_reauthentication/trusted_vault_reauthentication_coordinator_unittest.mm
@@ -54,7 +54,7 @@
     identity_service->AddIdentity(identity);
     AuthenticationService* authentication_service =
         AuthenticationServiceFactory::GetForBrowserState(browser_state_.get());
-    authentication_service->SignIn(identity, nil);
+    authentication_service->SignIn(identity);
 
     browser_ = std::make_unique<TestBrowser>(browser_state_.get());
   }
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.mm b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.mm
index f18f89a6..589f193d 100644
--- a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.mm
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator.mm
@@ -175,7 +175,7 @@
                 // Make sure the mediator is still alive, and the identity is
                 // stil valid (for example the identity can be removed by
                 // another app.
-                authenticationService->SignIn(identity, nil);
+                authenticationService->SignIn(identity);
               }
               if (completion)
                 completion();
diff --git a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator_unittest.mm
index 552d46a..72b3722 100644
--- a/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin/user_signin/user_signin_mediator_unittest.mm
@@ -131,13 +131,10 @@
         });
     OCMExpect([performer_mock_ signInIdentity:identity_
                              withHostedDomain:nil
-                               toBrowserState:browser_state_.get()
-                                   completion:[OCMArg any]])
+                               toBrowserState:browser_state_.get()])
         .andDo(^(NSInvocation* invocation) {
           NSLog(@" signInIdentity ");
-          signin_ui::CompletionCallback callback;
-          [invocation getArgument:&callback atIndex:5];
-          authentication_service()->SignIn(identity_, callback);
+          authentication_service()->SignIn(identity_);
         });
     if (postSignInAction == POST_SIGNIN_ACTION_COMMIT_SYNC) {
       OCMExpect([performer_mock_
@@ -517,7 +514,7 @@
                                      gaiaID:@"foo2ID"
                                        name:@"Fake Foo 2"];
   identity_service()->AddIdentity(identity2);
-  authentication_service()->SignIn(identity2, nil);
+  authentication_service()->SignIn(identity2);
 
   // Opens the settings link with identity 1.
   CreateAuthenticationFlow(POST_SIGNIN_ACTION_NONE);
@@ -569,7 +566,7 @@
                                      gaiaID:@"foo2ID"
                                        name:@"Fake Foo 2"];
   identity_service()->AddIdentity(identity2);
-  authentication_service()->SignIn(identity2, nil);
+  authentication_service()->SignIn(identity2);
 
   // Opens the settings link with identity 1.
   CreateAuthenticationFlow(POST_SIGNIN_ACTION_NONE);
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
index ce2e837..011158a 100644
--- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
+++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
@@ -14,7 +14,7 @@
 #import "components/prefs/pref_service.h"
 #import "components/signin/public/base/signin_metrics.h"
 #import "ios/chrome/browser/discover_feed/feed_constants.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_observer_bridge.h"
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
index 5e20756..b5b44f5 100644
--- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm
@@ -15,8 +15,8 @@
 #import "components/sync_preferences/pref_service_syncable.h"
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/browser/prefs/browser_prefs.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service_fake.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service_factory.h"
@@ -543,7 +543,7 @@
                                        name:@"johndoe2"];
   ios::FakeChromeIdentityService::GetInstanceFromChromeProvider()->AddIdentity(
       expected_default_identity_);
-  GetAuthenticationService()->SignIn(expected_default_identity_, nil);
+  GetAuthenticationService()->SignIn(expected_default_identity_);
   CreateMediator(signin_metrics::AccessPoint::ACCESS_POINT_RECENT_TABS);
   ExpectConfiguratorNotification(NO /* identity changed */);
   [mediator_ signinPromoViewIsVisible];
diff --git a/ios/chrome/browser/ui/authentication/signin_sync/signin_sync_mediator.mm b/ios/chrome/browser/ui/authentication/signin_sync/signin_sync_mediator.mm
index ac6cf55a..45a69c3 100644
--- a/ios/chrome/browser/ui/authentication/signin_sync/signin_sync_mediator.mm
+++ b/ios/chrome/browser/ui/authentication/signin_sync/signin_sync_mediator.mm
@@ -141,7 +141,7 @@
               if (authenticationService && identity &&
                   accountManagerService->IsValidIdentity(identity)) {
                 // Sign back in with a valid identity.
-                authenticationService->SignIn(identity, nil);
+                authenticationService->SignIn(identity);
               }
               [weakSelf onSigninStateRestorationCompleted];
             });
diff --git a/ios/chrome/browser/ui/authentication/signout_action_sheet_coordinator_unittest.mm b/ios/chrome/browser/ui/authentication/signout_action_sheet_coordinator_unittest.mm
index 1659c408..369c4b7 100644
--- a/ios/chrome/browser/ui/authentication/signout_action_sheet_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/signout_action_sheet_coordinator_unittest.mm
@@ -13,7 +13,7 @@
 #import "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/main/test_browser.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service_fake.h"
 #include "ios/chrome/browser/sync/sync_service_factory.h"
@@ -118,7 +118,7 @@
 // Tests that a signed-in user with Sync enabled will have an action sheet with
 // a sign-out title.
 TEST_F(SignoutActionSheetCoordinatorTest, SignedInUserWithSync) {
-  authentication_service()->SignIn(identity_, nil);
+  authentication_service()->SignIn(identity_);
   ON_CALL(*sync_service_mock_->GetMockUserSettings(), IsFirstSetupComplete())
       .WillByDefault(testing::Return(true));
 
@@ -131,7 +131,7 @@
 // Tests that a signed-in user with Sync disabled will have an action sheet with
 // no title.
 TEST_F(SignoutActionSheetCoordinatorTest, SignedInUserWithoutSync) {
-  authentication_service()->SignIn(identity_, nil);
+  authentication_service()->SignIn(identity_);
   ON_CALL(*sync_service_mock_->GetMockUserSettings(), IsFirstSetupComplete())
       .WillByDefault(testing::Return(false));
 
@@ -148,7 +148,7 @@
   GetLocalState()->SetInteger(prefs::kBrowserSigninPolicy,
                               static_cast<int>(BrowserSigninMode::kForced));
 
-  authentication_service()->SignIn(identity_, nil);
+  authentication_service()->SignIn(identity_);
   ON_CALL(*sync_service_mock_->GetMockUserSettings(), IsFirstSetupComplete())
       .WillByDefault(testing::Return(false));
 
@@ -162,7 +162,7 @@
 // Tests that a signed-in managed user with Sync enabled will have an action
 // sheet with a sign-out title.
 TEST_F(SignoutActionSheetCoordinatorTest, SignedInManagedUserWithSync) {
-  authentication_service()->SignIn(identity_, nil);
+  authentication_service()->SignIn(identity_);
   ON_CALL(*sync_service_mock_->GetMockUserSettings(), IsFirstSetupComplete())
       .WillByDefault(testing::Return(true));
 
@@ -175,7 +175,7 @@
 // Tests that a signed-in managed user with Sync disabled will have an action
 // sheet with no title.
 TEST_F(SignoutActionSheetCoordinatorTest, SignedInManagedUserWithoutSync) {
-  authentication_service()->SignIn(identity_, nil);
+  authentication_service()->SignIn(identity_);
   ON_CALL(*sync_service_mock_->GetMockUserSettings(), IsFirstSetupComplete())
       .WillByDefault(testing::Return(false));
 
diff --git a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator_unittest.mm b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator_unittest.mm
index 65cf29f..a73c2a24 100644
--- a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_mediator_unittest.mm
@@ -148,7 +148,7 @@
   AddIdentities();
   CreateMediator();
 
-  GetAuthenticationService()->SignIn(identity2_, nil);
+  GetAuthenticationService()->SignIn(identity2_);
   [mediator_ start];
 
   ASSERT_EQ(identity2_, mediator_.selectedIdentity);
@@ -161,7 +161,7 @@
   AddIdentities();
   CreateMediator();
 
-  GetAuthenticationService()->SignIn(identity3_, nil);
+  GetAuthenticationService()->SignIn(identity3_);
   [mediator_ start];
   ASSERT_EQ(identity3_, mediator_.selectedIdentity);
   GetAuthenticationService()->SignOut(signin_metrics::SIGNOUT_TEST, false, nil);
@@ -188,7 +188,7 @@
   AddIdentities();
   CreateMediator();
 
-  GetAuthenticationService()->SignIn(identity1_, nil);
+  GetAuthenticationService()->SignIn(identity1_);
   mediator_.selectedIdentity = identity2_;
   [mediator_ start];
 
diff --git a/ios/chrome/browser/ui/bookmarks/BUILD.gn b/ios/chrome/browser/ui/bookmarks/BUILD.gn
index 9fb924c..2959df6 100644
--- a/ios/chrome/browser/ui/bookmarks/BUILD.gn
+++ b/ios/chrome/browser/ui/bookmarks/BUILD.gn
@@ -119,11 +119,11 @@
     "//components/strings",
     "//components/undo",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser:utils",
     "//ios/chrome/browser/bookmarks",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/main:public",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui/default_promo:utils",
     "//ios/chrome/browser/ui/util",
     "//ios/chrome/browser/ui/util:url_with_title",
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm b/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm
index 9d6d20f3..675660f 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_earl_grey_app_interface.mm
@@ -13,7 +13,7 @@
 #include "components/query_parser/query_parser.h"
 #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/bookmarks/bookmark_path_cache.h"
 #import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h"
 #import "ios/chrome/test/app/chrome_test_util.h"
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_mediator.mm b/ios/chrome/browser/ui/bookmarks/bookmark_mediator.mm
index 5a35f08..8c9ce6b 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_mediator.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_mediator.mm
@@ -16,7 +16,7 @@
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h"
 #import "ios/chrome/browser/ui/default_promo/default_browser_utils.h"
 #include "ios/chrome/browser/ui/util/uikit_ui_util.h"
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_path_cache.mm b/ios/chrome/browser/ui/bookmarks/bookmark_path_cache.mm
index 2f73ce25..0912fff 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_path_cache.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_path_cache.mm
@@ -8,7 +8,7 @@
 #include "components/bookmarks/browser/bookmark_node.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/browser_view/BUILD.gn b/ios/chrome/browser/ui/browser_view/BUILD.gn
index 0add096..ce7763ab 100644
--- a/ios/chrome/browser/ui/browser_view/BUILD.gn
+++ b/ios/chrome/browser/ui/browser_view/BUILD.gn
@@ -325,8 +325,8 @@
     "//base/test:test_support",
     "//components/strings",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/ntp:features",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/content_suggestions:constants",
     "//ios/chrome/browser/ui/content_suggestions:feature_flags",
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller_egtest.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller_egtest.mm
index 9c06521..893fc0680 100644
--- a/ios/chrome/browser/ui/browser_view/browser_view_controller_egtest.mm
+++ b/ios/chrome/browser/ui/browser_view/browser_view_controller_egtest.mm
@@ -9,7 +9,7 @@
 #import "base/ios/ios_util.h"
 #include "base/strings/sys_string_conversions.h"
 #include "components/strings/grit/components_strings.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_feature.h"
 #import "ios/chrome/browser/ui/start_surface/start_surface_features.h"
diff --git a/ios/chrome/browser/ui/commands/BUILD.gn b/ios/chrome/browser/ui/commands/BUILD.gn
index 327cb9f6..14c6c2b 100644
--- a/ios/chrome/browser/ui/commands/BUILD.gn
+++ b/ios/chrome/browser/ui/commands/BUILD.gn
@@ -56,7 +56,7 @@
   deps = [
     "//ios/chrome/browser/tabs",
     "//ios/chrome/browser/ui/util:url_with_title",
-    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
     "//ios/web",
     "//net",
     "//url",
diff --git a/ios/chrome/browser/ui/content_suggestions/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
index e6bcad6..eba5b36 100644
--- a/ios/chrome/browser/ui/content_suggestions/BUILD.gn
+++ b/ios/chrome/browser/ui/content_suggestions/BUILD.gn
@@ -340,8 +340,8 @@
     "//components/feed/core/v2/public/ios:feed_ios_public",
     "//components/strings",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser:utils",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/authentication:eg_test_support+eg2",
     "//ios/chrome/browser/ui/content_suggestions/cells:constants",
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/query_suggestion_view.mm b/ios/chrome/browser/ui/content_suggestions/cells/query_suggestion_view.mm
index 151c1d2b7..51fb70a 100644
--- a/ios/chrome/browser/ui/content_suggestions/cells/query_suggestion_view.mm
+++ b/ios/chrome/browser/ui/content_suggestions/cells/query_suggestion_view.mm
@@ -17,7 +17,8 @@
 namespace {
 
 // Size constraints for this view.
-const CGFloat kViewWidthAnchor = 149.0f;
+const CGFloat kviewWidthAnchor = 149.0f;
+const CGFloat kviewWidthAnchorLong = 174.0f;
 const CGFloat kViewHeightAnchor = 51.5f;
 
 // Width constraint for the search ImageView.
@@ -41,6 +42,8 @@
 
 @property(nonatomic, strong) UILabel* queryLabel;
 
+@property(nonatomic, strong) NSLayoutConstraint* widthLayoutAnchor;
+
 @end
 
 @implementation QuerySuggestionView
@@ -80,6 +83,12 @@
     [self addSubview:searchImageView];
     [self addSubview:self.queryLabel];
 
+    CGFloat queryViewWidth = self.traitCollection.horizontalSizeClass ==
+                                     UIUserInterfaceSizeClassRegular
+                                 ? kviewWidthAnchorLong
+                                 : kviewWidthAnchor;
+    self.widthLayoutAnchor =
+        [self.widthAnchor constraintEqualToConstant:queryViewWidth];
     [NSLayoutConstraint activateConstraints:@[
       [searchImageView.widthAnchor
           constraintLessThanOrEqualToConstant:kQueryImageMaxWidth],
@@ -95,7 +104,7 @@
       [self.queryLabel.trailingAnchor
           constraintEqualToAnchor:self.trailingAnchor],
       [self.heightAnchor constraintEqualToConstant:kViewHeightAnchor],
-      [self.widthAnchor constraintEqualToConstant:kViewWidthAnchor]
+      self.widthLayoutAnchor
     ]];
     if (config) {
       // Let label take up all vertical space for two-line query text.
@@ -143,6 +152,18 @@
   }
 }
 
+- (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection {
+  [super traitCollectionDidChange:previousTraitCollection];
+  if (previousTraitCollection.horizontalSizeClass !=
+      self.traitCollection.horizontalSizeClass) {
+    self.widthLayoutAnchor.constant =
+        self.traitCollection.horizontalSizeClass ==
+                UIUserInterfaceSizeClassRegular
+            ? kviewWidthAnchorLong
+            : kviewWidthAnchor;
+  }
+}
+
 #pragma mark - UIResponder
 
 - (void)touchesBegan:(NSSet<UITouch*>*)touches withEvent:(UIEvent*)event {
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm
index 622ec0e..a1ff415 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_coordinator.mm
@@ -25,7 +25,7 @@
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
 #include "ios/chrome/browser/ntp_tiles/ios_most_visited_sites_factory.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/reading_list/reading_list_model_factory.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm
index e4162e8c..1f2e810e 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_mediator.mm
@@ -31,7 +31,7 @@
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
 #import "ios/chrome/browser/ntp_tiles/most_visited_sites_observer_bridge.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
index 2ef40b30..669bc98 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
@@ -46,7 +46,7 @@
 namespace {
 // The width of the modules.
 const int kModuleWidthCompact = 343;
-const int kModuleWidthRegular = 382;
+const int kModuleWidthRegular = 432;
 
 // The height of the modules;
 const int kModuleHeight = 139;
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
index d9c391d..8dd8399d 100644
--- a/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
+++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_egtest.mm
@@ -9,7 +9,7 @@
 #include "components/feed/core/v2/public/ios/pref_names.h"
 #include "components/strings/grit/components_strings.h"
 #include "ios/chrome/browser/chrome_switches.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h"
 #import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_cells_constants.h"
diff --git a/ios/chrome/browser/ui/context_menu/BUILD.gn b/ios/chrome/browser/ui/context_menu/BUILD.gn
index c08d5903..9847fd8 100644
--- a/ios/chrome/browser/ui/context_menu/BUILD.gn
+++ b/ios/chrome/browser/ui/context_menu/BUILD.gn
@@ -14,10 +14,10 @@
     "//components/search_engines",
     "//components/url_param_filter/core",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/favicon",
     "//ios/chrome/browser/policy:policy_util",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/search_engines",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/alert_coordinator",
diff --git a/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider.mm b/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider.mm
index c3646f7..6b11ea4 100644
--- a/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider.mm
+++ b/ios/chrome/browser/ui/context_menu/context_menu_configuration_provider.mm
@@ -17,7 +17,7 @@
 #import "ios/chrome/browser/favicon/ios_chrome_favicon_loader_factory.h"
 #import "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/search_engines/search_engines_util.h"
 #include "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #import "ios/chrome/browser/ui/alert_coordinator/action_sheet_coordinator.h"
diff --git a/ios/chrome/browser/ui/first_run/BUILD.gn b/ios/chrome/browser/ui/first_run/BUILD.gn
index b7e5b1c..c70de7d 100644
--- a/ios/chrome/browser/ui/first_run/BUILD.gn
+++ b/ios/chrome/browser/ui/first_run/BUILD.gn
@@ -19,6 +19,7 @@
     "//components/signin/ios/browser:features",
     "//components/variations",
     "//components/version_info",
+    "//ios/chrome/app:tests_hook",
     "//ios/chrome/browser/first_run",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/content_suggestions:feature_flags",
diff --git a/ios/chrome/browser/ui/first_run/ios_first_run_field_trials.cc b/ios/chrome/browser/ui/first_run/ios_first_run_field_trials.cc
index 3d00bc8bc..cc26a42 100644
--- a/ios/chrome/browser/ui/first_run/ios_first_run_field_trials.cc
+++ b/ios/chrome/browser/ui/first_run/ios_first_run_field_trials.cc
@@ -4,6 +4,8 @@
 
 #include "ios/chrome/browser/ui/first_run/ios_first_run_field_trials.h"
 
+#import "ios/chrome/app/tests_hook.h"
+
 // FirstRunFieldTrialGroup
 FirstRunFieldTrialGroup::FirstRunFieldTrialGroup(
     const std::string& name,
@@ -24,6 +26,7 @@
 FirstRunFieldTrialConfig::CreateOneTimeRandomizedTrial(
     const std::string& default_group_name,
     const base::FieldTrial::EntropyProvider& low_entropy_provider) {
+  DCHECK(!tests_hook::DisableClientSideFieldTrials());
   DCHECK_LE(GetTotalProbability(), 100);
   scoped_refptr<base::FieldTrial> trial =
       base::FieldTrialList::FactoryGetFieldTrialWithRandomizationSeed(
diff --git a/ios/chrome/browser/ui/first_run/legacy_signin/legacy_signin_screen_mediator_unittest.mm b/ios/chrome/browser/ui/first_run/legacy_signin/legacy_signin_screen_mediator_unittest.mm
index c8a64e63..785e8174 100644
--- a/ios/chrome/browser/ui/first_run/legacy_signin/legacy_signin_screen_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/first_run/legacy_signin/legacy_signin_screen_mediator_unittest.mm
@@ -286,12 +286,9 @@
       });
   OCMExpect([performer_mock signInIdentity:identity_
                           withHostedDomain:nil
-                            toBrowserState:browser_state_.get()
-                                completion:[OCMArg any]])
+                            toBrowserState:browser_state_.get()])
       .andDo(^(NSInvocation* invocation) {
-        signin_ui::CompletionCallback callback;
-        [invocation getArgument:&callback atIndex:5];
-        auth_service->SignIn(identity_, callback);
+        auth_service->SignIn(identity_);
       });
   OCMExpect([performer_mock
                 shouldHandleMergeCaseForIdentity:identity_
diff --git a/ios/chrome/browser/ui/first_run/sync/sync_screen_coordinator_unittest.mm b/ios/chrome/browser/ui/first_run/sync/sync_screen_coordinator_unittest.mm
index e79074cd..a32ade7 100644
--- a/ios/chrome/browser/ui/first_run/sync/sync_screen_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/first_run/sync/sync_screen_coordinator_unittest.mm
@@ -107,7 +107,7 @@
                                                                 gaiaID:@"gaiaID"
                                                                   name:@"name"];
 
-  auth_service_->SignIn(identity, nil);
+  auth_service_->SignIn(identity);
 
   // The delegate is a strict mock, it will fail if it calls it.
   [coordinator_ start];
@@ -132,7 +132,7 @@
                                                                 gaiaID:@"gaiaID"
                                                                   name:@"name"];
 
-  auth_service_->SignIn(identity, nil);
+  auth_service_->SignIn(identity);
 
   OCMExpect([delegate_ screenWillFinishPresenting]);
   [coordinator_ start];
@@ -151,7 +151,7 @@
                                                                 gaiaID:@"gaiaID"
                                                                   name:@"name"];
 
-  auth_service_->SignIn(identity, nil);
+  auth_service_->SignIn(identity);
 
   OCMExpect([delegate_ screenWillFinishPresenting]);
   [coordinator_ start];
diff --git a/ios/chrome/browser/ui/first_run/sync/sync_screen_mediator_unittest.mm b/ios/chrome/browser/ui/first_run/sync/sync_screen_mediator_unittest.mm
index 5e11b7b..c1404f85 100644
--- a/ios/chrome/browser/ui/first_run/sync/sync_screen_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/first_run/sync/sync_screen_mediator_unittest.mm
@@ -85,7 +85,7 @@
     // Identity services.
     AuthenticationService* authentication_service =
         AuthenticationServiceFactory::GetForBrowserState(browser_state_.get());
-    authentication_service->SignIn(identity_, nil);
+    authentication_service->SignIn(identity_);
     signin::IdentityManager* identity_manager =
         IdentityManagerFactory::GetForBrowserState(browser_state_.get());
     consent_auditor::ConsentAuditor* consent_auditor =
diff --git a/ios/chrome/browser/ui/icons/settings_icon.h b/ios/chrome/browser/ui/icons/settings_icon.h
index d9cee73f..e1ba0ed 100644
--- a/ios/chrome/browser/ui/icons/settings_icon.h
+++ b/ios/chrome/browser/ui/icons/settings_icon.h
@@ -15,6 +15,7 @@
 extern NSString* const kSyncEnabledSymbol;
 extern NSString* const kDefaultBrowserSymbol;
 extern NSString* const kPrivacySecuritySymbol;
+extern NSString* const kDiscoverSymbol;
 
 // The size of the symbol image displayed in the Settings root screen.
 extern const CGFloat kSettingsRootSymbolImagePointSize;
diff --git a/ios/chrome/browser/ui/icons/settings_icon.mm b/ios/chrome/browser/ui/icons/settings_icon.mm
index 41fd0bd..db13abb 100644
--- a/ios/chrome/browser/ui/icons/settings_icon.mm
+++ b/ios/chrome/browser/ui/icons/settings_icon.mm
@@ -21,6 +21,7 @@
 NSString* const kSyncEnabledSymbol = @"arrow.triangle.2.circlepath";
 NSString* const kDefaultBrowserSymbol = @"app.badge.checkmark";
 NSString* const kPrivacySecuritySymbol = @"checkerboard.shield";
+NSString* const kDiscoverSymbol = @"flame";
 
 namespace {
 
diff --git a/ios/chrome/browser/ui/incognito_interstitial/BUILD.gn b/ios/chrome/browser/ui/incognito_interstitial/BUILD.gn
index 4b89df3..4eae72a 100644
--- a/ios/chrome/browser/ui/incognito_interstitial/BUILD.gn
+++ b/ios/chrome/browser/ui/incognito_interstitial/BUILD.gn
@@ -65,9 +65,9 @@
   sources = [ "incognito_interstitial_egtest.mm" ]
   deps = [
     "//components/policy:generated",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/policy:eg_test_support+eg2",
     "//ios/chrome/browser/policy:policy_util",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/test:eg_test_support+eg2",
     "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_egtest.mm b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_egtest.mm
index aeda6b7d..54656b3 100644
--- a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_egtest.mm
+++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_egtest.mm
@@ -7,7 +7,7 @@
 #import "ios/chrome/browser/policy/policy_earl_grey_utils.h"
 #import "ios/chrome/browser/policy/policy_util.h"
 #import "ios/chrome/browser/policy/scoped_policy_list.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_matchers.h"
diff --git a/ios/chrome/browser/ui/incognito_reauth/BUILD.gn b/ios/chrome/browser/ui/incognito_reauth/BUILD.gn
index 38416f1..b1b853d 100644
--- a/ios/chrome/browser/ui/incognito_reauth/BUILD.gn
+++ b/ios/chrome/browser/ui/incognito_reauth/BUILD.gn
@@ -63,7 +63,7 @@
     "//components/prefs",
     "//ios/chrome/app/strings:ios_strings_grit",
     "//ios/chrome/browser",
-    "//ios/chrome/browser:pref_names",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/main:browser_interface_provider",
     "//ios/chrome/browser/ui/main:observing_scene_agent",
@@ -84,9 +84,9 @@
     "//base",
     "//base/test:test_support",
     "//components/prefs:test_support",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/main:test_support",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/browser_view",
     "//ios/chrome/browser/ui/main:browser_interface_provider",
diff --git a/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.mm b/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.mm
index be579476..d374767 100644
--- a/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.mm
+++ b/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.mm
@@ -15,7 +15,7 @@
 #include "components/prefs/pref_service.h"
 #import "ios/chrome/browser/application_context/application_context.h"
 #import "ios/chrome/browser/main/browser.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/incognito_reauth/incognito_reauth_util.h"
 #import "ios/chrome/browser/ui/main/browser_interface_provider.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
diff --git a/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent_unittest.mm b/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent_unittest.mm
index f4e30e6..50646d24 100644
--- a/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent_unittest.mm
+++ b/ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent_unittest.mm
@@ -9,7 +9,7 @@
 #include "components/prefs/testing_pref_service.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/main/test_browser.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/main/browser_interface_provider.h"
 #import "ios/chrome/browser/ui/main/test/stub_browser_interface_provider.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm b/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm
index 468792b4..818801d 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_model_delegate_ios.mm
@@ -13,7 +13,7 @@
 #include "ios/chrome/browser/autocomplete/autocomplete_scheme_classifier_impl.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/reading_list/offline_page_tab_helper.h"
 #include "ios/chrome/browser/web_state_list/web_state_list.h"
 #import "ios/components/security_interstitials/ios_blocking_page_tab_helper.h"
diff --git a/ios/chrome/browser/ui/main/BUILD.gn b/ios/chrome/browser/ui/main/BUILD.gn
index 0e8d287..41d21307 100644
--- a/ios/chrome/browser/ui/main/BUILD.gn
+++ b/ios/chrome/browser/ui/main/BUILD.gn
@@ -210,7 +210,7 @@
     "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/signin",
     "//ios/public/provider/chrome/browser/ui_utils:ui_utils_api",
-    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
     "//ios/third_party/material_components_ios",
     "//ui/base:base",
   ]
diff --git a/ios/chrome/browser/ui/main/scene_controller.mm b/ios/chrome/browser/ui/main/scene_controller.mm
index 3d8161bd..2eeb946f 100644
--- a/ios/chrome/browser/ui/main/scene_controller.mm
+++ b/ios/chrome/browser/ui/main/scene_controller.mm
@@ -67,7 +67,7 @@
 #import "ios/chrome/browser/policy/policy_watcher_browser_agent.h"
 #include "ios/chrome/browser/policy/policy_watcher_browser_agent.h"
 #import "ios/chrome/browser/policy/policy_watcher_browser_agent_observer_bridge.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/promos_manager/features.h"
 #import "ios/chrome/browser/promos_manager/promos_manager_scene_agent.h"
 #include "ios/chrome/browser/screenshot/screenshot_delegate.h"
@@ -139,7 +139,7 @@
 #include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #include "ios/public/provider/chrome/browser/signin/chrome_identity_service.h"
 #import "ios/public/provider/chrome/browser/ui_utils/ui_utils_api.h"
-#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h"
+#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_data.h"
 #include "ios/web/public/thread/web_task_traits.h"
 #include "ios/web/public/thread/web_thread.h"
 #import "ios/web/public/web_state.h"
@@ -203,7 +203,6 @@
                                SceneUIProvider,
                                SceneURLLoadingServiceDelegate,
                                TabGridCoordinatorDelegate,
-                               UserFeedbackDataSource,
                                WebStateListObserving,
                                IncognitoInterstitialCoordinatorDelegate> {
   std::unique_ptr<WebStateListObserverBridge> _webStateListForwardingObserver;
@@ -266,11 +265,6 @@
 // the coordinator.
 @property(nonatomic, strong) SigninCoordinator* signinCoordinator;
 
-// Additional product specific data used by UserFeedbackDataSource.
-// TODO(crbug.com/1117041): Move this into a UserFeedback config object.
-@property(nonatomic, strong)
-    NSDictionary<NSString*, NSString*>* specificProductData;
-
 // YES if the process of dismissing the sign-in prompt is from an external
 // trigger and is currently ongoing. An external trigger isn't done from the
 // signin prompt itself (i.e., tapping a button in the sign-in prompt that
@@ -1514,28 +1508,90 @@
                     specificProductData:(NSDictionary<NSString*, NSString*>*)
                                             specificProductData {
   DCHECK(baseViewController);
-  self.specificProductData = specificProductData;
   // This dispatch is necessary to give enough time for the tools menu to
   // disappear before taking a screenshot.
+  __weak SceneController* weakSelf = self;
   dispatch_async(dispatch_get_main_queue(), ^{
-    DCHECK(!self.signinCoordinator)
-        << "self.signinCoordinator: "
-        << base::SysNSStringToUTF8([self.signinCoordinator description]);
-    if (self.settingsNavigationController)
-      return;
-    Browser* browser = self.mainInterface.browser;
-    self.settingsNavigationController =
-        [SettingsNavigationController userFeedbackControllerForBrowser:browser
-                                                              delegate:self
-                                                    feedbackDataSource:self
-                                                                sender:sender
-                                                               handler:self];
-    [baseViewController presentViewController:self.settingsNavigationController
-                                     animated:YES
-                                   completion:nil];
+    [weakSelf presentReportAnIssueViewController:baseViewController
+                                          sender:sender
+                             specificProductData:specificProductData];
   });
 }
 
+- (void)presentReportAnIssueViewController:(UIViewController*)baseViewController
+                                    sender:(UserFeedbackSender)sender
+                       specificProductData:(NSDictionary<NSString*, NSString*>*)
+                                               specificProductData {
+  DCHECK(!self.signinCoordinator)
+      << "self.signinCoordinator: "
+      << base::SysNSStringToUTF8([self.signinCoordinator description]);
+  if (self.settingsNavigationController)
+    return;
+
+  UserFeedbackData* data =
+      [self createUserFeedbackDataForSender:sender
+                        specificProductData:specificProductData];
+
+  Browser* browser = self.mainInterface.browser;
+  id<ApplicationCommands> handler =
+      HandlerForProtocol(browser->GetCommandDispatcher(), ApplicationCommands);
+  self.settingsNavigationController =
+      [SettingsNavigationController userFeedbackControllerForBrowser:browser
+                                                            delegate:self
+                                                    userFeedbackData:data
+                                                             handler:handler];
+  [baseViewController presentViewController:self.settingsNavigationController
+                                   animated:YES
+                                 completion:nil];
+}
+
+- (UserFeedbackData*)createUserFeedbackDataForSender:(UserFeedbackSender)sender
+                                 specificProductData:
+                                     (NSDictionary<NSString*, NSString*>*)
+                                         specificProductData {
+  UserFeedbackData* data = [[UserFeedbackData alloc] init];
+  data.origin = sender;
+  data.currentPageIsIncognito = self.currentInterface.incognito;
+
+  CGFloat scale = 0.0;
+  if (!self.mainCoordinator.isTabGridActive) {
+    web::WebState* webState =
+        self.currentInterface.browser->GetWebStateList()->GetActiveWebState();
+    if (webState) {
+      // Record URL of browser tab that is currently showing
+      GURL url = webState->GetVisibleURL();
+      std::u16string urlText = url_formatter::FormatUrl(url);
+      data.currentPageDisplayURL = base::SysUTF16ToNSString(urlText);
+    }
+  } else {
+    // For screenshots of the tab switcher we need to use a scale of 1.0 to
+    // avoid spending too much time since the tab switcher can have lots of
+    // subviews.
+    scale = 1.0;
+  }
+
+  UIView* lastView = self.mainCoordinator.activeViewController.view;
+  DCHECK(lastView);
+  data.currentPageScreenshot = CaptureView(lastView, scale);
+
+  ChromeBrowserState* browserState = self.currentInterface.browserState;
+  if (browserState->IsOffTheRecord()) {
+    data.currentPageIsIncognito = YES;
+  } else {
+    data.currentPageIsIncognito = NO;
+    signin::IdentityManager* identity_manager =
+        IdentityManagerFactory::GetForBrowserState(browserState);
+    std::string username =
+        identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSync)
+            .email;
+    if (!username.empty())
+      data.currentPageSyncedUserName = base::SysUTF8ToNSString(username);
+  }
+
+  data.productSpecificData = specificProductData;
+  return data;
+}
+
 - (void)openURLInNewTab:(OpenNewTabCommand*)command {
   if (command.inIncognito) {
     IncognitoReauthSceneAgent* reauthAgent =
@@ -2045,52 +2101,6 @@
                                  completion:nil];
 }
 
-#pragma mark - UserFeedbackDataSource
-
-- (BOOL)currentPageIsIncognito {
-  return self.currentInterface.incognito;
-}
-
-- (NSString*)currentPageDisplayURL {
-  if (self.mainCoordinator.isTabGridActive)
-    return nil;
-  web::WebState* webState =
-      self.currentInterface.browser->GetWebStateList()->GetActiveWebState();
-  if (!webState)
-    return nil;
-  // Returns URL of browser tab that is currently showing.
-  GURL url = webState->GetVisibleURL();
-  std::u16string urlText = url_formatter::FormatUrl(url);
-  return base::SysUTF16ToNSString(urlText);
-}
-
-- (UIImage*)currentPageScreenshot {
-  UIView* lastView = self.mainCoordinator.activeViewController.view;
-  DCHECK(lastView);
-  CGFloat scale = 0.0;
-  // For screenshots of the tab switcher we need to use a scale of 1.0 to avoid
-  // spending too much time since the tab switcher can have lots of subviews.
-  if (self.mainCoordinator.isTabGridActive)
-    scale = 1.0;
-  return CaptureView(lastView, scale);
-}
-
-- (NSString*)currentPageSyncedUserName {
-  ChromeBrowserState* browserState = self.currentInterface.browserState;
-  if (browserState->IsOffTheRecord())
-    return nil;
-  signin::IdentityManager* identity_manager =
-      IdentityManagerFactory::GetForBrowserState(browserState);
-  std::string username =
-      identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSync)
-          .email;
-  return username.empty() ? nil : base::SysUTF8ToNSString(username);
-}
-
-- (NSDictionary<NSString*, NSString*>*)specificProductData {
-  return _specificProductData;
-}
-
 #pragma mark - SettingsNavigationControllerDelegate
 
 - (void)closeSettings {
diff --git a/ios/chrome/browser/ui/menu/BUILD.gn b/ios/chrome/browser/ui/menu/BUILD.gn
index 16f1a77..a0b11c1 100644
--- a/ios/chrome/browser/ui/menu/BUILD.gn
+++ b/ios/chrome/browser/ui/menu/BUILD.gn
@@ -41,9 +41,9 @@
     "//components/search_engines",
     "//components/url_param_filter/core",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/policy:policy_util",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/search_engines",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/commands",
diff --git a/ios/chrome/browser/ui/menu/browser_action_factory.mm b/ios/chrome/browser/ui/menu/browser_action_factory.mm
index 81a4aa8..83d84ca2 100644
--- a/ios/chrome/browser/ui/menu/browser_action_factory.mm
+++ b/ios/chrome/browser/ui/menu/browser_action_factory.mm
@@ -10,7 +10,7 @@
 #include "components/search_engines/template_url_service.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/browser_coordinator_commands.h"
diff --git a/ios/chrome/browser/ui/menu/browser_action_factory_unittest.mm b/ios/chrome/browser/ui/menu/browser_action_factory_unittest.mm
index 303e738..ccaeb26 100644
--- a/ios/chrome/browser/ui/menu/browser_action_factory_unittest.mm
+++ b/ios/chrome/browser/ui/menu/browser_action_factory_unittest.mm
@@ -11,7 +11,7 @@
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/main/test_browser.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/sessions/test_session_service.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/browser_coordinator_commands.h"
diff --git a/ios/chrome/browser/ui/ntp/BUILD.gn b/ios/chrome/browser/ui/ntp/BUILD.gn
index a8421701..b1d0196 100644
--- a/ios/chrome/browser/ui/ntp/BUILD.gn
+++ b/ios/chrome/browser/ui/ntp/BUILD.gn
@@ -63,7 +63,6 @@
     "//ios/chrome/app:tests_hook",
     "//ios/chrome/app/application_delegate:app_state_header",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/discover_feed",
     "//ios/chrome/browser/discover_feed:discover_feed_factory",
@@ -72,6 +71,7 @@
     "//ios/chrome/browser/main:public",
     "//ios/chrome/browser/ntp",
     "//ios/chrome/browser/ntp:features",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/reading_list",
     "//ios/chrome/browser/search_engines",
     "//ios/chrome/browser/signin",
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
index 88634bd0..81abbf0 100644
--- a/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
+++ b/ios/chrome/browser/ui/ntp/new_tab_page_coordinator.mm
@@ -30,7 +30,7 @@
 #import "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/ntp/features.h"
 #import "ios/chrome/browser/ntp/new_tab_page_tab_helper.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/reading_list/reading_list_model_factory.h"
 #import "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
@@ -591,8 +591,7 @@
     return;
   }
   // When the visible feed has been updated, recalculate the minimum NTP height.
-  if (![self isFollowingFeedAvailable] ||
-      ([self isFollowingFeedAvailable] && feedType == self.selectedFeed)) {
+  if (feedType == self.selectedFeed) {
     [self.ntpViewController updateFeedInsetsForMinimumHeight];
   }
 }
diff --git a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm
index 65645830..de049b8e 100644
--- a/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm
+++ b/ios/chrome/browser/ui/ntp/notification_promo_whats_new.mm
@@ -23,7 +23,7 @@
 #include "components/metrics/metrics_pref_names.h"
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/notification_promo.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/system_flags.h"
 #include "ios/chrome/grit/ios_chromium_strings.h"
 #include "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/browser/ui/omnibox/keyboard_assist/omnibox_input_assistant_items.mm b/ios/chrome/browser/ui/omnibox/keyboard_assist/omnibox_input_assistant_items.mm
index 972aeb3..3908a25 100644
--- a/ios/chrome/browser/ui/omnibox/keyboard_assist/omnibox_input_assistant_items.mm
+++ b/ios/chrome/browser/ui/omnibox/keyboard_assist/omnibox_input_assistant_items.mm
@@ -72,6 +72,7 @@
       ]];
       UIBarButtonItem* pasteButtonItem =
           [[UIBarButtonItem alloc] initWithCustomView:pasteControlContainer];
+      [pasteButtonItem setWidth:kPasteButtonSize];
       [items addObject:pasteButtonItem];
     }
 #endif  // defined(__IPHONE_16_0)
diff --git a/ios/chrome/browser/ui/policy/signin_policy_scene_agent.mm b/ios/chrome/browser/ui/policy/signin_policy_scene_agent.mm
index 6f88da9c..0e3ccf7 100644
--- a/ios/chrome/browser/ui/policy/signin_policy_scene_agent.mm
+++ b/ios/chrome/browser/ui/policy/signin_policy_scene_agent.mm
@@ -17,7 +17,7 @@
 #import "ios/chrome/browser/policy/policy_util.h"
 #import "ios/chrome/browser/policy/policy_watcher_browser_agent.h"
 #import "ios/chrome/browser/policy/policy_watcher_browser_agent_observer_bridge.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/identity_manager_factory.h"
diff --git a/ios/chrome/browser/ui/popup_menu/BUILD.gn b/ios/chrome/browser/ui/popup_menu/BUILD.gn
index e878cff..5175ad1 100644
--- a/ios/chrome/browser/ui/popup_menu/BUILD.gn
+++ b/ios/chrome/browser/ui/popup_menu/BUILD.gn
@@ -109,9 +109,8 @@
     "//ios/chrome/browser/window_activities",
     "//ios/chrome/common/ui/colors",
     "//ios/components/webui:url_constants",
-    "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/text_zoom:text_zoom_api",
-    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
     "//ios/web",
     "//ios/web/common",
     "//ios/web/common:user_agent",
@@ -175,10 +174,8 @@
     "//ios/chrome/browser/web_state_list",
     "//ios/chrome/browser/web_state_list:test_support",
     "//ios/chrome/test:test_support",
-    "//ios/public/provider/chrome/browser",
-    "//ios/public/provider/chrome/browser:test_support",
     "//ios/public/provider/chrome/browser/text_zoom:text_zoom_api",
-    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
     "//ios/web",
     "//ios/web/public/test",
     "//ios/web/public/test/fakes",
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn b/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn
index 1c059f9..781d039 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/BUILD.gn
@@ -70,7 +70,6 @@
     "//components/translate/core/browser",
     "//ios/chrome/app/strings:ios_strings_grit",
     "//ios/chrome/browser:chrome_url_constants",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/find_in_page",
     "//ios/chrome/browser/follow:browser_agent",
@@ -81,6 +80,7 @@
     "//ios/chrome/browser/overlays",
     "//ios/chrome/browser/policy",
     "//ios/chrome/browser/policy:policy_util",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/reading_list",
     "//ios/chrome/browser/translate",
     "//ios/chrome/browser/ui/activity_services",
@@ -101,8 +101,7 @@
     "//ios/chrome/browser/web/font_size",
     "//ios/chrome/browser/web_state_list",
     "//ios/chrome/browser/window_activities",
-    "//ios/public/provider/chrome/browser",
-    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
     "//ios/web/common:user_agent",
     "//ios/web/public",
     "//ui/base",
@@ -174,7 +173,6 @@
     "//components/prefs",
     "//components/prefs:test_support",
     "//components/translate/core/browser",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/bookmarks",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/main:test_support",
@@ -183,15 +181,15 @@
     "//ios/chrome/browser/overlays/test",
     "//ios/chrome/browser/passwords:store_factory",
     "//ios/chrome/browser/policy:test_support",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/popup_menu:constants",
     "//ios/chrome/browser/ui/toolbar/test",
     "//ios/chrome/browser/ui/util",
     "//ios/chrome/browser/web/font_size",
     "//ios/chrome/browser/web_state_list",
-    "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/text_zoom:text_zoom_api",
-    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
     "//ios/web/public",
     "//ios/web/public/navigation",
     "//ios/web/public/test",
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/BUILD.gn b/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/BUILD.gn
index 2baaa5f..1aa82a8 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/BUILD.gn
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/BUILD.gn
@@ -8,7 +8,7 @@
   deps = [
     "//base",
     "//components/prefs",
-    "//ios/chrome/browser:pref_names",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui/popup_menu/overflow_menu:overflow_menu_constants",
     "//ios/chrome/browser/ui/popup_menu/overflow_menu:overflow_menu_swift",
   ]
@@ -22,7 +22,7 @@
     "//base",
     "//components/prefs",
     "//components/prefs:test_support",
-    "//ios/chrome/browser:pref_names",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui/popup_menu/overflow_menu:overflow_menu_constants",
     "//testing/gmock",
     "//testing/gtest",
@@ -39,7 +39,7 @@
   sources = [ "destination_usage_history_egtest.mm" ]
   deps = [
     ":destination_usage_history",
-    "//ios/chrome/browser:pref_names",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui/popup_menu:constants",
     "//ios/chrome/test/earl_grey:eg_test_support+eg2",
     "//ios/testing/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history.mm
index f7245c5..e29eac9 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history.mm
@@ -9,7 +9,7 @@
 #include "base/time/time.h"
 #include "components/prefs/pref_service.h"
 #include "components/prefs/scoped_user_pref_update.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_constants.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history_egtest.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history_egtest.mm
index 40c398b8..f4e52813 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history_egtest.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history_egtest.mm
@@ -6,7 +6,7 @@
 #import <XCTest/XCTest.h>
 
 #include "base/ios/ios_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history_unittest.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history_unittest.mm
index b13c77f..6026819 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history_unittest.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/destination_usage_history/destination_usage_history_unittest.mm
@@ -8,7 +8,7 @@
 #include "base/values.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/testing_pref_service.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_constants.h"
 #include "testing/platform_test.h"
 
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
index 6b1aa06d..215b7cb 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator.mm
@@ -67,8 +67,7 @@
 #import "ios/chrome/browser/web_state_list/web_state_list_observer_bridge.h"
 #import "ios/chrome/browser/window_activities/window_activity_helpers.h"
 #import "ios/chrome/grit/ios_strings.h"
-#import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
-#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h"
+#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_api.h"
 #import "ios/web/common/user_agent.h"
 #import "ios/web/public/js_messaging/web_frame.h"
 #import "ios/web/public/js_messaging/web_frame_util.h"
@@ -957,9 +956,7 @@
     [helpActions addObject:self.settingsAction];
   }
 
-  if (ios::GetChromeBrowserProvider()
-          .GetUserFeedbackProvider()
-          ->IsUserFeedbackEnabled()) {
+  if (ios::provider::IsUserFeedbackSupported()) {
     [helpActions addObject:self.reportIssueAction];
   }
 
diff --git a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm
index aea0b04..f06e07a 100644
--- a/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_mediator_unittest.mm
@@ -31,7 +31,7 @@
 #include "ios/chrome/browser/overlays/test/fake_overlay_presentation_context.h"
 #include "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h"
 #include "ios/chrome/browser/policy/enterprise_policy_test_helper.h"
-#import "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/popup_menu/overflow_menu/overflow_menu_swift.h"
 #import "ios/chrome/browser/ui/popup_menu/popup_menu_constants.h"
 #import "ios/chrome/browser/ui/toolbar/test/toolbar_test_navigation_manager.h"
@@ -41,9 +41,8 @@
 #include "ios/chrome/browser/web_state_list/web_state_list.h"
 #import "ios/chrome/browser/web_state_list/web_state_list_observer_bridge.h"
 #import "ios/chrome/browser/web_state_list/web_state_opener.h"
-#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #import "ios/public/provider/chrome/browser/text_zoom/text_zoom_api.h"
-#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h"
+#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_api.h"
 #import "ios/web/public/navigation/navigation_item.h"
 #import "ios/web/public/test/fakes/fake_navigation_context.h"
 #import "ios/web/public/test/fakes/fake_navigation_manager.h"
@@ -280,9 +279,7 @@
 
   NSUInteger number_of_help_items = 1;
 
-  if (ios::GetChromeBrowserProvider()
-          .GetUserFeedbackProvider()
-          ->IsUserFeedbackEnabled()) {
+  if (ios::provider::IsUserFeedbackSupported()) {
     number_of_help_items++;
   }
 
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_mediator.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_mediator.mm
index 5c2e74b..0b7484f 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_mediator.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_mediator.mm
@@ -72,9 +72,8 @@
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
 #import "ios/chrome/grit/ios_strings.h"
 #import "ios/components/webui/web_ui_url_constants.h"
-#import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #import "ios/public/provider/chrome/browser/text_zoom/text_zoom_api.h"
-#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h"
+#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_api.h"
 #import "ios/web/common/features.h"
 #import "ios/web/common/user_agent.h"
 #import "ios/web/public/favicon/favicon_status.h"
@@ -1170,9 +1169,7 @@
   [actionsArray addObject:self.siteInformationItem];
 
   // Report an Issue.
-  if (ios::GetChromeBrowserProvider()
-          .GetUserFeedbackProvider()
-          ->IsUserFeedbackEnabled()) {
+  if (ios::provider::IsUserFeedbackSupported()) {
     TableViewItem* reportIssue = CreateTableViewItem(
         IDS_IOS_OPTIONS_REPORT_AN_ISSUE, PopupMenuActionReportIssue,
         @"popup_menu_report_an_issue", kToolsMenuReportAnIssueId);
diff --git a/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm b/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm
index a520d25..c765b0c 100644
--- a/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/popup_menu/popup_menu_mediator_unittest.mm
@@ -42,9 +42,8 @@
 #include "ios/chrome/browser/web_state_list/web_state_list.h"
 #import "ios/chrome/browser/web_state_list/web_state_list_observer_bridge.h"
 #import "ios/chrome/browser/web_state_list/web_state_opener.h"
-#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
 #import "ios/public/provider/chrome/browser/text_zoom/text_zoom_api.h"
-#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h"
+#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_api.h"
 #import "ios/web/public/navigation/navigation_item.h"
 #import "ios/web/public/test/fakes/fake_navigation_context.h"
 #import "ios/web/public/test/fakes/fake_navigation_manager.h"
@@ -298,9 +297,7 @@
   CreateMediator(PopupMenuTypeToolsMenu, /*is_incognito=*/NO,
                  /*trigger_incognito_hint=*/NO);
   NSUInteger number_of_action_items = 7;
-  if (ios::GetChromeBrowserProvider()
-          .GetUserFeedbackProvider()
-          ->IsUserFeedbackEnabled()) {
+  if (ios::provider::IsUserFeedbackSupported()) {
     number_of_action_items++;
   }
 
diff --git a/ios/chrome/browser/ui/settings/BUILD.gn b/ios/chrome/browser/ui/settings/BUILD.gn
index 2efcaf0..0a30d52 100644
--- a/ios/chrome/browser/ui/settings/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/BUILD.gn
@@ -28,8 +28,7 @@
     "//ios/chrome/browser/ui/table_view/cells",
     "//ios/chrome/common/ui/colors",
     "//ios/chrome/common/ui/util",
-    "//ios/public/provider/chrome/browser",
-    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
     "//ui/base",
   ]
 }
@@ -203,7 +202,7 @@
     "//ios/public/provider/chrome/browser",
     "//ios/public/provider/chrome/browser/signin",
     "//ios/public/provider/chrome/browser/signin:signin_resources_api",
-    "//ios/public/provider/chrome/browser/user_feedback",
+    "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
     "//ios/web/common:features",
     "//net",
     "//ui/base",
diff --git a/ios/chrome/browser/ui/settings/bandwidth/BUILD.gn b/ios/chrome/browser/ui/settings/bandwidth/BUILD.gn
index 8ac314cf..1f280ae 100644
--- a/ios/chrome/browser/ui/settings/bandwidth/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/bandwidth/BUILD.gn
@@ -15,9 +15,9 @@
     "//components/prefs",
     "//components/prefs/ios",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/net:crurl",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/prerender:prerender_pref",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/settings:constants",
@@ -47,9 +47,9 @@
     "//components/sync_preferences",
     "//components/sync_preferences:test_support",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/prefs:browser_prefs",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/prerender:prerender_pref",
     "//ios/chrome/browser/ui/table_view",
     "//ios/chrome/browser/ui/table_view:test_support",
diff --git a/ios/chrome/browser/ui/settings/bandwidth/bandwidth_management_table_view_controller.mm b/ios/chrome/browser/ui/settings/bandwidth/bandwidth_management_table_view_controller.mm
index 1f7e5e2..3963ba6 100644
--- a/ios/chrome/browser/ui/settings/bandwidth/bandwidth_management_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/bandwidth/bandwidth_management_table_view_controller.mm
@@ -12,7 +12,7 @@
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #import "ios/chrome/browser/net/crurl.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/settings/bandwidth/dataplan_usage_table_view_controller.h"
 #import "ios/chrome/browser/ui/settings/settings_table_view_controller_constants.h"
 #import "ios/chrome/browser/ui/table_view/cells/table_view_detail_icon_item.h"
diff --git a/ios/chrome/browser/ui/settings/bandwidth/bandwidth_management_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/bandwidth/bandwidth_management_table_view_controller_unittest.mm
index bd32150..e7bb4a9 100644
--- a/ios/chrome/browser/ui/settings/bandwidth/bandwidth_management_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/bandwidth/bandwidth_management_table_view_controller_unittest.mm
@@ -14,8 +14,8 @@
 #include "components/sync_preferences/pref_service_mock_factory.h"
 #include "components/sync_preferences/pref_service_syncable.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
 #include "ios/chrome/browser/prefs/browser_prefs.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/settings/bandwidth/dataplan_usage_table_view_controller.h"
 #import "ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.h"
 #import "ios/chrome/browser/ui/table_view/table_view_model.h"
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm
index b227dfc..0036af6 100644
--- a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm
+++ b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm
@@ -253,7 +253,7 @@
   }
   const BOOL hasSectionSavedSiteData =
       [model hasSectionForSectionIdentifier:SectionIdentifierSavedSiteData];
-  if (hasSectionSavedSiteData && [self loggedIn]) {
+  if (hasSectionSavedSiteData == [self loggedIn]) {
     // Nothing to do. We have data iff we are logged-in
     return;
   }
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm
index 9211c12..e249573 100644
--- a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm
+++ b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager_unittest.mm
@@ -22,8 +22,8 @@
 #import "ios/chrome/browser/browsing_data/cache_counter.h"
 #import "ios/chrome/browser/browsing_data/fake_browsing_data_remover.h"
 #import "ios/chrome/browser/net/crurl.h"
-#import "ios/chrome/browser/pref_names.h"
 #import "ios/chrome/browser/prefs/browser_prefs.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_delegate_fake.h"
@@ -195,7 +195,7 @@
       syncer::SyncService::DISABLE_REASON_USER_CHOICE);
 
   AuthenticationServiceFactory::GetForBrowserState(browser_state_.get())
-      ->SignIn(fake_identity(), nil);
+      ->SignIn(fake_identity());
 
   [manager_ loadModel:model_];
 
@@ -290,7 +290,7 @@
 
 TEST_F(ClearBrowsingDataManagerTest, TestGoogleDSETextSignedIn) {
   AuthenticationServiceFactory::GetForBrowserState(browser_state_.get())
-      ->SignIn(fake_identity(), nil);
+      ->SignIn(fake_identity());
 
   [manager_ loadModel:model_];
 
@@ -320,7 +320,7 @@
 
 TEST_F(ClearBrowsingDataManagerTest, TestPrepopulatedTextSignedIn) {
   AuthenticationServiceFactory::GetForBrowserState(browser_state_.get())
-      ->SignIn(fake_identity(), nil);
+      ->SignIn(fake_identity());
 
   // Set DSE to one from "prepoulated list".
   const std::string kEngineP1Name = "prepopulated-1";
@@ -386,7 +386,7 @@
 
 TEST_F(ClearBrowsingDataManagerTest, TestCustomTextSignedIn) {
   AuthenticationServiceFactory::GetForBrowserState(browser_state_.get())
-      ->SignIn(fake_identity(), nil);
+      ->SignIn(fake_identity());
 
   // Set DSE to a be fully custom.
   const std::string kEngineC1Name = "custom-1";
diff --git a/ios/chrome/browser/ui/settings/content_settings/BUILD.gn b/ios/chrome/browser/ui/settings/content_settings/BUILD.gn
index 3567d03..27916a4f 100644
--- a/ios/chrome/browser/ui/settings/content_settings/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/content_settings/BUILD.gn
@@ -22,13 +22,13 @@
     "//components/prefs",
     "//components/strings",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/content_settings",
     "//ios/chrome/browser/mailto_handler",
     "//ios/chrome/browser/mailto_handler:mailto_handler_factory",
     "//ios/chrome/browser/main:public",
     "//ios/chrome/browser/net:crurl",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
     "//ios/chrome/browser/ui/ntp:feature_flags",
diff --git a/ios/chrome/browser/ui/settings/content_settings/content_settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/content_settings/content_settings_table_view_controller.mm
index 7d42f26..52bf9b8b 100644
--- a/ios/chrome/browser/ui/settings/content_settings/content_settings_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/content_settings/content_settings_table_view_controller.mm
@@ -18,7 +18,7 @@
 #import "ios/chrome/browser/mailto_handler/mailto_handler_service.h"
 #import "ios/chrome/browser/mailto_handler/mailto_handler_service_factory.h"
 #import "ios/chrome/browser/main/browser.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/ntp/new_tab_page_feature.h"
 #import "ios/chrome/browser/ui/settings/content_settings/block_popups_table_view_controller.h"
 #import "ios/chrome/browser/ui/settings/content_settings/default_page_mode_coordinator.h"
diff --git a/ios/chrome/browser/ui/settings/google_services/BUILD.gn b/ios/chrome/browser/ui/settings/google_services/BUILD.gn
index 0ff1d5f..bac5e1b7 100644
--- a/ios/chrome/browser/ui/settings/google_services/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/google_services/BUILD.gn
@@ -156,8 +156,8 @@
     "//components/signin/public/base",
     "//components/strings",
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/policy:policy_util",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/authentication:eg_test_support+eg2",
     "//ios/chrome/browser/ui/bookmarks:eg_test_support+eg2",
diff --git a/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller_unittest.mm
index d232cf0..04795db 100644
--- a/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/google_services/accounts_table_view_controller_unittest.mm
@@ -97,7 +97,7 @@
   identity_service()->AddIdentity(identity);
 
   // Simulates a credential reload.
-  authentication_service()->SignIn(identity, nil);
+  authentication_service()->SignIn(identity);
   identity_service()->FireChromeIdentityReload();
   base::RunLoop().RunUntilIdle();
 
@@ -122,7 +122,7 @@
   identity_service()->AddIdentity(identity2);
 
   // Simulates a credential reload.
-  authentication_service()->SignIn(identity1, nil);
+  authentication_service()->SignIn(identity1);
   identity_service()->FireChromeIdentityReload();
   base::RunLoop().RunUntilIdle();
 
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_egtest.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_egtest.mm
index 02503f6..01c5265 100644
--- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_egtest.mm
+++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_egtest.mm
@@ -13,7 +13,7 @@
 #include "components/signin/public/base/signin_pref_names.h"
 #include "components/signin/public/base/signin_switches.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey.h"
 #import "ios/chrome/browser/ui/authentication/signin_earl_grey_ui_test_util.h"
 #import "ios/chrome/browser/ui/authentication/signin_matchers.h"
diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
index a32cc8b..b9758de2 100644
--- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
+++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_mediator.mm
@@ -19,7 +19,7 @@
 #import "ios/chrome/browser/application_context/application_context.h"
 #import "ios/chrome/browser/commerce/price_alert_util.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
diff --git a/ios/chrome/browser/ui/settings/passphrase_table_view_controller_test.mm b/ios/chrome/browser/ui/settings/passphrase_table_view_controller_test.mm
index 6b75a30..56c7cd4 100644
--- a/ios/chrome/browser/ui/settings/passphrase_table_view_controller_test.mm
+++ b/ios/chrome/browser/ui/settings/passphrase_table_view_controller_test.mm
@@ -106,7 +106,7 @@
   AuthenticationService* auth_service =
       AuthenticationServiceFactory::GetForBrowserState(
           chrome_browser_state_.get());
-  auth_service->SignIn(account_manager_service->GetDefaultIdentity(), nil);
+  auth_service->SignIn(account_manager_service->GetDefaultIdentity());
 }
 
 void PassphraseTableViewControllerTest::TearDown() {
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm b/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm
index d5167c1b..b9d628b2 100644
--- a/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm
+++ b/ios/chrome/browser/ui/settings/privacy/privacy_safe_browsing_mediator.mm
@@ -13,7 +13,7 @@
 #include "components/safe_browsing/core/common/safe_browsing_prefs.h"
 #import "ios/chrome/browser/application_context/application_context.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/icons/chrome_symbol.h"
 #import "ios/chrome/browser/ui/list_model/list_model.h"
 #import "ios/chrome/browser/ui/settings/cells/settings_image_detail_text_item.h"
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm
index 0262a5c..b11e1a0 100644
--- a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller.mm
@@ -26,7 +26,7 @@
 #import "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/net/crurl.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/sync/sync_service_factory.h"
 #import "ios/chrome/browser/ui/commands/open_new_tab_command.h"
 #import "ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_constants.h"
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm
index 319236db..4f01201 100644
--- a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm
@@ -24,8 +24,8 @@
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
 #import "ios/chrome/browser/main/test_browser.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
 #include "ios/chrome/browser/prefs/browser_prefs.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/sync/sync_service_factory.h"
 #include "ios/chrome/browser/system_flags.h"
 #import "ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.h"
diff --git a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm
index 149d1d7..8944221 100644
--- a/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm
+++ b/ios/chrome/browser/ui/settings/safety_check/safety_check_mediator.mm
@@ -27,7 +27,7 @@
 #include "ios/chrome/browser/passwords/ios_chrome_password_check_manager_factory.h"
 #include "ios/chrome/browser/passwords/password_check_observer_bridge.h"
 #include "ios/chrome/browser/passwords/password_store_observer_bridge.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #include "ios/chrome/browser/sync/sync_setup_service.h"
 #import "ios/chrome/browser/ui/icons/chrome_symbol.h"
diff --git a/ios/chrome/browser/ui/settings/settings_app_interface.mm b/ios/chrome/browser/ui/settings/settings_app_interface.mm
index 785a1f4..d748e7ef 100644
--- a/ios/chrome/browser/ui/settings/settings_app_interface.mm
+++ b/ios/chrome/browser/ui/settings/settings_app_interface.mm
@@ -14,7 +14,7 @@
 #import "ios/chrome/app/main_controller.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/content_settings/host_content_settings_map_factory.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #import "ios/chrome/test/app/chrome_test_util.h"
 #import "ios/chrome/test/app/tab_test_util.h"
diff --git a/ios/chrome/browser/ui/settings/settings_navigation_controller.h b/ios/chrome/browser/ui/settings/settings_navigation_controller.h
index 3c0ff4b..d83ddfb 100644
--- a/ios/chrome/browser/ui/settings/settings_navigation_controller.h
+++ b/ios/chrome/browser/ui/settings/settings_navigation_controller.h
@@ -15,7 +15,7 @@
 @protocol BrowsingDataCommands;
 @protocol ImportDataControllerDelegate;
 @protocol SnackbarCommands;
-@protocol UserFeedbackDataSource;
+@class UserFeedbackData;
 
 // The accessibility identifier for the settings' "Done" button.
 extern NSString* const kSettingsDoneButtonId;
@@ -114,8 +114,7 @@
     userFeedbackControllerForBrowser:(Browser*)browser
                             delegate:(id<SettingsNavigationControllerDelegate>)
                                          delegate
-                  feedbackDataSource:(id<UserFeedbackDataSource>)dataSource
-                              sender:(UserFeedbackSender)sender
+                    userFeedbackData:(UserFeedbackData*)userFeedbackData
                              handler:(id<ApplicationCommands>)handler;
 
 // Creates and displays a new ImportDataTableViewController. `browserState`
diff --git a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
index 2d40254..7b90ce4 100644
--- a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
+++ b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm
@@ -7,6 +7,7 @@
 #include "base/ios/ios_util.h"
 #include "base/mac/foundation_util.h"
 #include "components/strings/grit/components_strings.h"
+#import "ios/chrome/browser/application_context/application_context.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
 #include "ios/chrome/browser/main/browser.h"
 #include "ios/chrome/browser/sync/sync_setup_service.h"
@@ -35,8 +36,7 @@
 #import "ios/chrome/common/ui/colors/semantic_color_names.h"
 #import "ios/chrome/common/ui/util/constraints_ui_util.h"
 #include "ios/chrome/grit/ios_strings.h"
-#import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
-#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_provider.h"
+#import "ios/public/provider/chrome/browser/user_feedback/user_feedback_api.h"
 #include "ui/base/l10n/l10n_util_mac.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -235,17 +235,20 @@
     userFeedbackControllerForBrowser:(Browser*)browser
                             delegate:(id<SettingsNavigationControllerDelegate>)
                                          delegate
-                  feedbackDataSource:(id<UserFeedbackDataSource>)dataSource
-                              sender:(UserFeedbackSender)sender
+                    userFeedbackData:(UserFeedbackData*)userFeedbackData
                              handler:(id<ApplicationCommands>)handler {
   DCHECK(browser);
-  DCHECK(ios::GetChromeBrowserProvider()
-             .GetUserFeedbackProvider()
-             ->IsUserFeedbackEnabled());
+  DCHECK(ios::provider::IsUserFeedbackSupported());
+
+  UserFeedbackConfiguration* configuration =
+      [[UserFeedbackConfiguration alloc] init];
+  configuration.data = userFeedbackData;
+  configuration.handler = handler;
+  configuration.singleSignOnService = GetApplicationContext()->GetSSOService();
+
   UIViewController* controller =
-      ios::GetChromeBrowserProvider()
-          .GetUserFeedbackProvider()
-          ->CreateViewController(dataSource, handler, sender);
+      ios::provider::CreateUserFeedbackViewController(configuration);
+
   DCHECK(controller);
   SettingsNavigationController* nc = [[SettingsNavigationController alloc]
       initWithRootViewController:controller
diff --git a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
index 377e158f..23fdec9 100644
--- a/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/settings_table_view_controller.mm
@@ -38,7 +38,7 @@
 #include "ios/chrome/browser/passwords/ios_chrome_password_check_manager_factory.h"
 #include "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h"
 #include "ios/chrome/browser/passwords/password_check_observer_bridge.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/search_engines/search_engine_observer_bridge.h"
 #include "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
@@ -1107,8 +1107,6 @@
 
     _managedFeedSettingsItem = [[TableViewInfoButtonItem alloc]
         initWithType:SettingsItemTypeManagedArticlesForYou];
-    _managedFeedSettingsItem.image =
-        [UIImage imageNamed:kSettingsArticleSuggestionsImageName];
     _managedFeedSettingsItem.text = settingTitle;
     _managedFeedSettingsItem.statusText =
         l10n_util::GetNSString(IDS_IOS_SETTING_OFF);
@@ -1116,6 +1114,16 @@
         kSettingsArticleSuggestionsCellId;
     _managedFeedSettingsItem.accessibilityHint = l10n_util::GetNSString(
         IDS_IOS_TOGGLE_SETTING_MANAGED_ACCESSIBILITY_HINT);
+
+    if (UseSymbols()) {
+      _managedFeedSettingsItem.symbolView =
+          ElevatedTableViewSymbolWithBackground(
+              DefaultSettingsRootSymbol(kDiscoverSymbol),
+              [UIColor colorNamed:kOrange500Color]);
+    } else {
+      _managedFeedSettingsItem.image =
+          [UIImage imageNamed:kSettingsArticleSuggestionsImageName];
+    }
   }
 
   return _managedFeedSettingsItem;
diff --git a/ios/chrome/browser/ui/settings/settings_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/settings_table_view_controller_unittest.mm
index f26791f..e2f26d8f 100644
--- a/ios/chrome/browser/ui/settings/settings_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/settings_table_view_controller_unittest.mm
@@ -16,7 +16,7 @@
 #import "ios/chrome/browser/main/test_browser.h"
 #include "ios/chrome/browser/passwords/ios_chrome_password_store_factory.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/authentication_service_fake.h"
@@ -207,7 +207,7 @@
   SetupSyncServiceEnabledExpectations();
   ON_CALL(*sync_setup_service_mock_, GetSyncServiceState())
       .WillByDefault(Return(SyncSetupService::kNoSyncServiceError));
-  auth_service_->SignIn(fake_identity_, nil);
+  auth_service_->SignIn(fake_identity_);
 
   CreateController();
   CheckController();
@@ -234,7 +234,7 @@
   // Set missing password error in Sync service.
   ON_CALL(*sync_setup_service_mock_, GetSyncServiceState())
       .WillByDefault(Return(SyncSetupService::kSyncServiceNeedsPassphrase));
-  auth_service_->SignIn(fake_identity_, nil);
+  auth_service_->SignIn(fake_identity_);
 
   CreateController();
   CheckController();
@@ -266,7 +266,7 @@
       .WillByDefault(Return(true));
   ON_CALL(*sync_setup_service_mock_, CanSyncFeatureStart())
       .WillByDefault(Return(false));
-  auth_service_->SignIn(fake_identity_, nil);
+  auth_service_->SignIn(fake_identity_);
 
   CreateController();
   CheckController();
@@ -299,7 +299,7 @@
       .WillByDefault(Return(true));
   ON_CALL(*sync_setup_service_mock_, CanSyncFeatureStart())
       .WillByDefault(Return(true));
-  auth_service_->SignIn(fake_identity_, nil);
+  auth_service_->SignIn(fake_identity_);
 
   CreateController();
   CheckController();
@@ -334,7 +334,7 @@
 TEST_F(SettingsTableViewControllerTest, SyncSetupNotComplete) {
   ON_CALL(*sync_service_mock_->GetMockUserSettings(), IsFirstSetupComplete())
       .WillByDefault(Return(false));
-  auth_service_->SignIn(fake_identity_, nil);
+  auth_service_->SignIn(fake_identity_);
 
   CreateController();
   CheckController();
diff --git a/ios/chrome/browser/ui/settings/signin_settings_app_interface.mm b/ios/chrome/browser/ui/settings/signin_settings_app_interface.mm
index c2cb676..262d4cf3 100644
--- a/ios/chrome/browser/ui/settings/signin_settings_app_interface.mm
+++ b/ios/chrome/browser/ui/settings/signin_settings_app_interface.mm
@@ -6,7 +6,7 @@
 
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/test/app/chrome_test_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm
index 4d80c13..bac93ea 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_coordinator.mm
@@ -20,7 +20,7 @@
 #import "ios/chrome/browser/commerce/price_alert_util.h"
 #include "ios/chrome/browser/main/browser.h"
 #import "ios/chrome/browser/policy/policy_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/search_engines/template_url_service_factory.h"
 #include "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h"
 #import "ios/chrome/browser/ui/activity_services/activity_params.h"
diff --git a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
index 937223b..9cb70f0 100644
--- a/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
+++ b/ios/chrome/browser/ui/tab_switcher/tab_grid/tab_grid_mediator_unittest.mm
@@ -290,7 +290,7 @@
     auth_service_ = static_cast<AuthenticationServiceFake*>(
         AuthenticationServiceFactory::GetInstance()->GetForBrowserState(
             browser_state_.get()));
-    auth_service_->SignIn(fake_identity_, nil);
+    auth_service_->SignIn(fake_identity_);
 
     tab_restore_service_ =
         IOSChromeTabRestoreServiceFactory::GetForBrowserState(
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.h b/ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.h
index 46aa8e6..c4dc104b 100644
--- a/ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.h
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.h
@@ -48,6 +48,10 @@
 // remaining content will expand to fill the full width of the cell.
 - (void)setIconImage:(UIImage*)image withTintColor:(UIColor*)color;
 
+// Sets the leading `symbolImageView` icon. If set to nil, the icon will be
+// hidden and the text labels will expand to fill the full width of the cell.
+- (void)setSymbolView:(UIView*)symbolImageView;
+
 // Updates the padding constraints based on how many vertical text labels are
 // shown. The padding will be updated only if `hasDetailText` is YES.
 - (void)updatePaddingForDetailText:(BOOL)hasDetailText;
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.mm b/ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.mm
index 5832a5097..27f22a9 100644
--- a/ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.mm
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_info_button_cell.mm
@@ -26,10 +26,12 @@
 
 @interface TableViewInfoButtonCell ()
 
-// The image view for the leading icon.
+// Views for the leading icon.
+@property(nonatomic, readonly, strong) UIView* iconContainerView;
+@property(nonatomic, readonly, strong) UIView* symbolView;
 @property(nonatomic, readonly, strong) UIImageView* iconImageView;
 
-// Constraints that are used when the iconImageView is visible and hidden.
+// Constraints that are used when the iconContainerView is visible and hidden.
 @property(nonatomic, strong) NSLayoutConstraint* iconVisibleConstraint;
 @property(nonatomic, strong) NSLayoutConstraint* iconHiddenConstraint;
 
@@ -63,11 +65,18 @@
     self.isAccessibilityElement = YES;
     _isButtonSelectedForVoiceOver = YES;
 
+    _iconContainerView = [[UIView alloc] init];
+    _iconContainerView.hidden = YES;
+    _iconContainerView.translatesAutoresizingMaskIntoConstraints = NO;
+    _iconContainerView.autoresizesSubviews = YES;
+    _iconContainerView.clipsToBounds = YES;
+    [self.contentView addSubview:_iconContainerView];
+
     _iconImageView = [[UIImageView alloc] init];
-    _iconImageView.translatesAutoresizingMaskIntoConstraints = NO;
-    _iconImageView.hidden = YES;
-    _iconImageView.contentMode = UIViewContentModeCenter;
-    [self.contentView addSubview:_iconImageView];
+    _iconImageView.translatesAutoresizingMaskIntoConstraints = YES;
+    _iconImageView.autoresizingMask =
+        UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+    [_iconContainerView addSubview:_iconImageView];
 
     UILayoutGuide* textLayoutGuide = [[UILayoutGuide alloc] init];
     [self.contentView addLayoutGuide:textLayoutGuide];
@@ -121,7 +130,7 @@
 
     // Set up the constraints assuming that the icon image is hidden.
     _iconVisibleConstraint = [textLayoutGuide.leadingAnchor
-        constraintEqualToAnchor:_iconImageView.trailingAnchor
+        constraintEqualToAnchor:_iconContainerView.trailingAnchor
                        constant:kTableViewImagePadding];
     _iconHiddenConstraint = [textLayoutGuide.leadingAnchor
         constraintEqualToAnchor:self.contentView.leadingAnchor
@@ -201,15 +210,15 @@
                                         kTableViewOneLabelCellVerticalSpacing];
 
     [NSLayoutConstraint activateConstraints:@[
-      [_iconImageView.leadingAnchor
+      [_iconContainerView.leadingAnchor
           constraintEqualToAnchor:self.contentView.leadingAnchor
                          constant:kTableViewHorizontalSpacing],
-      [_iconImageView.widthAnchor
+      [_iconContainerView.widthAnchor
           constraintEqualToConstant:kTableViewIconImageSize],
-      [_iconImageView.heightAnchor
-          constraintEqualToAnchor:_iconImageView.widthAnchor],
+      [_iconContainerView.heightAnchor
+          constraintEqualToAnchor:_iconContainerView.widthAnchor],
 
-      [_iconImageView.centerYAnchor
+      [_iconContainerView.centerYAnchor
           constraintEqualToAnchor:textLayoutGuide.centerYAnchor],
 
       _iconHiddenConstraint,
@@ -253,6 +262,27 @@
   }
 }
 
+- (void)setSymbolView:(UIView*)symbolView {
+  [_symbolView removeFromSuperview];
+  _symbolView = nil;
+
+  _symbolView = symbolView;
+  _symbolView.autoresizingMask =
+      UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
+  _symbolView.frame = _iconContainerView.bounds;
+  [_iconContainerView addSubview:_symbolView];
+
+  BOOL hidden = (symbolView == nil);
+  _iconContainerView.hidden = hidden;
+  if (hidden) {
+    _iconVisibleConstraint.active = NO;
+    _iconHiddenConstraint.active = YES;
+  } else {
+    _iconHiddenConstraint.active = NO;
+    _iconVisibleConstraint.active = YES;
+  }
+}
+
 - (void)setIconImage:(UIImage*)image withTintColor:(UIColor*)color {
   if (color) {
     self.iconImageView.tintColor = color;
@@ -262,11 +292,8 @@
     self.iconImageView.image = image;
   }
 
-  BOOL hidden = !image;
-  if (hidden == self.iconImageView.hidden)
-    return;
-
-  self.iconImageView.hidden = hidden;
+  BOOL hidden = (image == nil);
+  self.iconContainerView.hidden = hidden;
   if (hidden) {
     self.iconVisibleConstraint.active = NO;
     self.iconHiddenConstraint.active = YES;
@@ -317,6 +344,7 @@
   self.detailTextLabel.text = nil;
   self.statusTextLabel.text = nil;
   self.trailingButton.tag = 0;
+  [self setSymbolView:nil];
   [self setIconImage:nil withTintColor:nil];
   [_trailingButton removeTarget:nil
                          action:nil
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.h b/ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.h
index 066351c..03cff7e 100644
--- a/ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.h
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.h
@@ -17,6 +17,9 @@
 // The UIImage for the leading image. If nil, no image will be shown.
 @property(nonatomic, strong) UIImage* image;
 
+// The symbol leading icon. If empty, no icon will be shown.
+@property(nonatomic, strong) UIView* symbolView;
+
 // Tint color for the icon.
 @property(nonatomic, strong) UIColor* tintColor;
 
diff --git a/ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.mm b/ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.mm
index a7af19e..abedd0d 100644
--- a/ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.mm
+++ b/ios/chrome/browser/ui/table_view/cells/table_view_info_button_item.mm
@@ -52,8 +52,11 @@
   cell.isButtonSelectedForVoiceOver = self.accessibilityActivationPointOnButton;
   cell.selectionStyle = UITableViewCellSelectionStyleNone;
 
-  // Update the icon image, if one is present.
-  [cell setIconImage:self.image withTintColor:self.tintColor];
+  if (self.symbolView) {
+    [cell setSymbolView:self.symbolView];
+  } else {
+    [cell setIconImage:self.image withTintColor:self.tintColor];
+  }
 
   // Updates if the cells UI button should be hidden.
   [cell hideUIButton:self.infoButtonIsHidden];
diff --git a/ios/chrome/browser/ui/webui/BUILD.gn b/ios/chrome/browser/ui/webui/BUILD.gn
index 85556aaa..1788650 100644
--- a/ios/chrome/browser/ui/webui/BUILD.gn
+++ b/ios/chrome/browser/ui/webui/BUILD.gn
@@ -113,6 +113,7 @@
   ]
   deps = [
     ":webui",
+    "//components/optimization_guide/optimization_guide_internals/webui:url_constants",
     "//components/resources",
     "//components/signin/public/identity_manager",
     "//components/sync/invalidations",
@@ -126,6 +127,7 @@
     "//ios/chrome/browser/ui/webui/interstitials",
     "//ios/chrome/browser/ui/webui/local_state",
     "//ios/chrome/browser/ui/webui/net_export",
+    "//ios/chrome/browser/ui/webui/optimization_guide_internals",
     "//ios/chrome/browser/ui/webui/policy",
     "//ios/chrome/browser/ui/webui/translate_internals",
     "//ios/chrome/common",
@@ -153,6 +155,7 @@
     "web_ui_egtest.mm",
   ]
   deps = [
+    ":eg_test_support+eg2",
     "//base",
     "//base/test:test_support",
     "//components/strings",
@@ -169,3 +172,24 @@
   ]
   frameworks = [ "UIKit.framework" ]
 }
+
+source_set("eg_test_support+eg2") {
+  configs += [
+    "//build/config/compiler:enable_arc",
+    "//build/config/ios:xctest_config",
+  ]
+  testonly = true
+  sources = [
+    "web_ui_test_utils.h",
+    "web_ui_test_utils.mm",
+  ]
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//ios/chrome/test/earl_grey:eg_test_support+eg2",
+    "//ios/components/webui:url_constants",
+    "//ios/testing/earl_grey:eg_test_support+eg2",
+    "//ios/third_party/earl_grey2:test_lib",
+    "//url",
+  ]
+}
diff --git a/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm b/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm
index a6d0162..7aaaf78 100644
--- a/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm
+++ b/ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.mm
@@ -2,40 +2,42 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.h"
+#import "ios/chrome/browser/ui/webui/chrome_web_ui_ios_controller_factory.h"
 
 #import <Foundation/Foundation.h>
 
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/no_destructor.h"
-#include "ios/chrome/browser/chrome_url_constants.h"
-#include "ios/chrome/browser/system_flags.h"
-#include "ios/chrome/browser/ui/webui/about_ui.h"
-#include "ios/chrome/browser/ui/webui/autofill_and_password_manager_internals/autofill_internals_ui_ios.h"
-#include "ios/chrome/browser/ui/webui/autofill_and_password_manager_internals/password_manager_internals_ui_ios.h"
-#include "ios/chrome/browser/ui/webui/crashes_ui.h"
-#include "ios/chrome/browser/ui/webui/download_internals_ui.h"
-#include "ios/chrome/browser/ui/webui/flags_ui.h"
-#include "ios/chrome/browser/ui/webui/gcm/gcm_internals_ui.h"
-#include "ios/chrome/browser/ui/webui/inspect/inspect_ui.h"
-#include "ios/chrome/browser/ui/webui/interstitials/interstitial_ui.h"
-#include "ios/chrome/browser/ui/webui/local_state/local_state_ui.h"
-#include "ios/chrome/browser/ui/webui/management/management_ui.h"
-#include "ios/chrome/browser/ui/webui/net_export/net_export_ui.h"
-#include "ios/chrome/browser/ui/webui/ntp_tiles_internals_ui.h"
-#include "ios/chrome/browser/ui/webui/omaha_ui.h"
-#include "ios/chrome/browser/ui/webui/policy/policy_ui.h"
-#include "ios/chrome/browser/ui/webui/prefs_internals_ui.h"
-#include "ios/chrome/browser/ui/webui/signin_internals_ui_ios.h"
-#include "ios/chrome/browser/ui/webui/terms_ui.h"
-#include "ios/chrome/browser/ui/webui/translate_internals/translate_internals_ui.h"
-#include "ios/chrome/browser/ui/webui/ukm_internals_ui.h"
-#include "ios/chrome/browser/ui/webui/user_actions_ui.h"
-#include "ios/chrome/browser/ui/webui/version_ui.h"
-#include "ios/components/webui/sync_internals/sync_internals_ui.h"
-#include "ios/components/webui/web_ui_url_constants.h"
-#include "url/gurl.h"
+#import "base/bind.h"
+#import "base/location.h"
+#import "base/no_destructor.h"
+#import "components/optimization_guide/optimization_guide_internals/webui/url_constants.h"
+#import "ios/chrome/browser/chrome_url_constants.h"
+#import "ios/chrome/browser/system_flags.h"
+#import "ios/chrome/browser/ui/webui/about_ui.h"
+#import "ios/chrome/browser/ui/webui/autofill_and_password_manager_internals/autofill_internals_ui_ios.h"
+#import "ios/chrome/browser/ui/webui/autofill_and_password_manager_internals/password_manager_internals_ui_ios.h"
+#import "ios/chrome/browser/ui/webui/crashes_ui.h"
+#import "ios/chrome/browser/ui/webui/download_internals_ui.h"
+#import "ios/chrome/browser/ui/webui/flags_ui.h"
+#import "ios/chrome/browser/ui/webui/gcm/gcm_internals_ui.h"
+#import "ios/chrome/browser/ui/webui/inspect/inspect_ui.h"
+#import "ios/chrome/browser/ui/webui/interstitials/interstitial_ui.h"
+#import "ios/chrome/browser/ui/webui/local_state/local_state_ui.h"
+#import "ios/chrome/browser/ui/webui/management/management_ui.h"
+#import "ios/chrome/browser/ui/webui/net_export/net_export_ui.h"
+#import "ios/chrome/browser/ui/webui/ntp_tiles_internals_ui.h"
+#import "ios/chrome/browser/ui/webui/omaha_ui.h"
+#import "ios/chrome/browser/ui/webui/optimization_guide_internals/optimization_guide_internals_ui.h"
+#import "ios/chrome/browser/ui/webui/policy/policy_ui.h"
+#import "ios/chrome/browser/ui/webui/prefs_internals_ui.h"
+#import "ios/chrome/browser/ui/webui/signin_internals_ui_ios.h"
+#import "ios/chrome/browser/ui/webui/terms_ui.h"
+#import "ios/chrome/browser/ui/webui/translate_internals/translate_internals_ui.h"
+#import "ios/chrome/browser/ui/webui/ukm_internals_ui.h"
+#import "ios/chrome/browser/ui/webui/user_actions_ui.h"
+#import "ios/chrome/browser/ui/webui/version_ui.h"
+#import "ios/components/webui/sync_internals/sync_internals_ui.h"
+#import "ios/components/webui/web_ui_url_constants.h"
+#import "url/gurl.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -96,6 +98,10 @@
     return &NewWebUIIOS<NTPTilesInternalsUI>;
   if (url_host == kChromeUIOmahaHost)
     return &NewWebUIIOS<OmahaUI>;
+  if (url_host ==
+      optimization_guide_internals::kChromeUIOptimizationGuideInternalsHost) {
+    return &NewWebUIIOS<OptimizationGuideInternalsUI>;
+  }
   if (url_host == kChromeUIPasswordManagerInternalsHost)
     return &NewWebUIIOS<PasswordManagerInternalsUIIOS>;
   if (url_host == kChromeUIPrefsInternalsHost)
diff --git a/ios/chrome/browser/ui/webui/optimization_guide_internals/BUILD.gn b/ios/chrome/browser/ui/webui/optimization_guide_internals/BUILD.gn
new file mode 100644
index 0000000..95ec378
--- /dev/null
+++ b/ios/chrome/browser/ui/webui/optimization_guide_internals/BUILD.gn
@@ -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.
+
+source_set("optimization_guide_internals") {
+  configs += [ "//build/config/compiler:enable_arc" ]
+  sources = [
+    "optimization_guide_internals_ui.h",
+    "optimization_guide_internals_ui.mm",
+  ]
+  deps = [
+    "//components/optimization_guide/core:prediction",
+    "//components/optimization_guide/optimization_guide_internals/resources",
+    "//components/optimization_guide/optimization_guide_internals/webui",
+    "//components/optimization_guide/optimization_guide_internals/webui:mojo_bindings",
+    "//components/optimization_guide/optimization_guide_internals/webui:url_constants",
+    "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/main:public",
+    "//ios/chrome/browser/optimization_guide",
+    "//ios/web/public",
+    "//ios/web/public/webui",
+  ]
+}
+
+source_set("eg2_tests") {
+  configs += [
+    "//build/config/compiler:enable_arc",
+    "//build/config/ios:xctest_config",
+  ]
+  sources = [ "optimization_guide_internals_page_egtest.mm" ]
+  testonly = true
+  deps = [
+    "//base",
+    "//base/test:test_support",
+    "//components/optimization_guide/core:eg_test_support+eg2",
+    "//components/optimization_guide/optimization_guide_internals/webui:url_constants",
+    "//ios/chrome/browser/optimization_guide:eg_test_support+eg2",
+    "//ios/chrome/browser/ui/webui:eg_test_support+eg2",
+    "//ios/chrome/test/earl_grey:eg_test_support+eg2",
+    "//ios/testing/earl_grey:eg_test_support+eg2",
+    "//ios/third_party/earl_grey2:test_lib",
+  ]
+}
diff --git a/ios/chrome/browser/ui/webui/optimization_guide_internals/optimization_guide_internals_page_egtest.mm b/ios/chrome/browser/ui/webui/optimization_guide_internals/optimization_guide_internals_page_egtest.mm
new file mode 100644
index 0000000..e7c31ed
--- /dev/null
+++ b/ios/chrome/browser/ui/webui/optimization_guide_internals/optimization_guide_internals_page_egtest.mm
@@ -0,0 +1,70 @@
+// Copyright 2022 The Chromium Authors.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import <string>
+
+#import "base/command_line.h"
+#import "base/strings/sys_string_conversions.h"
+#import "base/test/ios/wait_util.h"
+#import "components/optimization_guide/core/optimization_guide_switches.h"
+#import "components/optimization_guide/optimization_guide_internals/webui/url_constants.h"
+#import "ios/chrome/browser/optimization_guide/optimization_guide_test_app_interface.h"
+#import "ios/chrome/browser/ui/webui/web_ui_test_utils.h"
+#import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
+#import "ios/chrome/test/earl_grey/chrome_test_case.h"
+#import "ios/testing/earl_grey/earl_grey_test.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+@interface OptimizationGuideInternalsPageTestCase : ChromeTestCase
+@end
+
+@implementation OptimizationGuideInternalsPageTestCase
+
+- (AppLaunchConfiguration)appConfigurationForTestCase {
+  AppLaunchConfiguration config;
+  config.additional_args.push_back(
+      std::string("--") + optimization_guide::switches::kDebugLoggingEnabled);
+  return config;
+}
+
+// Tests that chrome://optimization-guide-internals loads when debug logs flag
+// is enabled, and that logs get added to #log-message-container on the page.
+- (void)testChromeOptimizationGuideInternalsSite {
+  GURL url = WebUIPageUrlWithHost(
+      optimization_guide_internals::kChromeUIOptimizationGuideInternalsHost);
+  [ChromeEarlGrey loadURL:url];
+
+  GREYAssert(WaitForOmniboxURLString(url.spec(), false),
+             @"Omnibox did not contain URL.");
+
+  // Validates that some of the expected text on the page exists.
+  [ChromeEarlGrey waitForWebStateContainingText:"Optimization Guide Internals"];
+
+  [OptimizationGuideTestAppInterface
+      registerOptimizationType:optimization_guide::proto::OptimizationType::
+                                   NOSCRIPT];
+  [ChromeEarlGrey openNewTab];
+  GURL fooURL = GURL("https://foo");
+  [ChromeEarlGrey loadURL:fooURL];
+  GREYAssert(WaitForOmniboxURLString(fooURL.spec(), false),
+             @"Omnibox did not contain URL.");
+  // Call `-canApplyOptimization:type:metadata:` for its side-effect of logging
+  // to HintsManager. The event logged should then become visible in the WebUI.
+  [OptimizationGuideTestAppInterface
+      canApplyOptimization:@"https://foo"
+                      type:optimization_guide::proto::OptimizationType::NOSCRIPT
+                  metadata:nil];
+
+  [ChromeEarlGrey selectTabAtIndex:0];
+  // Expect Optimization Guide internals page to have more than two entries of
+  // debug log messages.
+  [ChromeEarlGrey waitForJavaScriptCondition:
+                      @"document.getElementById('log-message-container')."
+                      @"children[0].childElementCount > 2"];
+}
+
+@end
diff --git a/ios/chrome/browser/ui/webui/optimization_guide_internals/optimization_guide_internals_ui.h b/ios/chrome/browser/ui/webui/optimization_guide_internals/optimization_guide_internals_ui.h
new file mode 100644
index 0000000..2203499e
--- /dev/null
+++ b/ios/chrome/browser/ui/webui/optimization_guide_internals/optimization_guide_internals_ui.h
@@ -0,0 +1,58 @@
+// 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 IOS_CHROME_BROWSER_UI_WEBUI_OPTIMIZATION_GUIDE_INTERNALS_OPTIMIZATION_GUIDE_INTERNALS_UI_H_
+#define IOS_CHROME_BROWSER_UI_WEBUI_OPTIMIZATION_GUIDE_INTERNALS_OPTIMIZATION_GUIDE_INTERNALS_UI_H_
+
+#import "components/optimization_guide/optimization_guide_internals/webui/optimization_guide_internals.mojom.h"
+#import "ios/web/public/webui/web_ui_ios_controller.h"
+#import "mojo/public/cpp/bindings/pending_receiver.h"
+#import "mojo/public/cpp/bindings/receiver.h"
+
+class OptimizationGuideLogger;
+class OptimizationGuideInternalsPageHandlerImpl;
+
+namespace web {
+class WebUIIOS;
+}
+
+// The WebUI controller for chrome://optimization-guide-internals.
+class OptimizationGuideInternalsUI
+    : public web::WebUIIOSController,
+      public optimization_guide_internals::mojom::PageHandlerFactory {
+ public:
+  explicit OptimizationGuideInternalsUI(web::WebUIIOS* web_ui,
+                                        const std::string& host);
+
+  OptimizationGuideInternalsUI(const OptimizationGuideInternalsUI&) = delete;
+  OptimizationGuideInternalsUI& operator=(const OptimizationGuideInternalsUI&) =
+      delete;
+
+  ~OptimizationGuideInternalsUI() override;
+
+  void BindInterface(
+      mojo::PendingReceiver<
+          optimization_guide_internals::mojom::PageHandlerFactory> receiver);
+
+ private:
+  // optimization_guide_internals::mojom::PageHandlerFactory:
+  void CreatePageHandler(
+      mojo::PendingRemote<optimization_guide_internals::mojom::Page> page)
+      override;
+  void RequestDownloadedModelsInfo(
+      RequestDownloadedModelsInfoCallback callback) override;
+
+  std::unique_ptr<OptimizationGuideInternalsPageHandlerImpl>
+      optimization_guide_internals_page_handler_;
+  mojo::Receiver<optimization_guide_internals::mojom::PageHandlerFactory>
+      optimization_guide_internals_page_factory_receiver_{this};
+
+  // Logger to receive the debug logs from the optimization guide service. Not
+  // owned. Guaranteed to outlive |this|, since the logger is owned by the
+  // optimization guide keyed service, while |this| is part of
+  // RenderFrameHostImpl::WebUIImpl.
+  raw_ptr<OptimizationGuideLogger> optimization_guide_logger_;
+};
+
+#endif  // IOS_CHROME_BROWSER_UI_WEBUI_OPTIMIZATION_GUIDE_INTERNALS_OPTIMIZATION_GUIDE_INTERNALS_UI_H_
diff --git a/ios/chrome/browser/ui/webui/optimization_guide_internals/optimization_guide_internals_ui.mm b/ios/chrome/browser/ui/webui/optimization_guide_internals/optimization_guide_internals_ui.mm
new file mode 100644
index 0000000..e43eca0
--- /dev/null
+++ b/ios/chrome/browser/ui/webui/optimization_guide_internals/optimization_guide_internals_ui.mm
@@ -0,0 +1,99 @@
+// 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 "ios/chrome/browser/ui/webui/optimization_guide_internals/optimization_guide_internals_ui.h"
+
+#import "components/grit/optimization_guide_internals_resources.h"
+#import "components/grit/optimization_guide_internals_resources_map.h"
+#import "components/optimization_guide/core/prediction_manager.h"
+#import "components/optimization_guide/optimization_guide_internals/webui/optimization_guide_internals_page_handler_impl.h"
+#import "components/optimization_guide/optimization_guide_internals/webui/url_constants.h"
+#import "ios/chrome/browser/browser_state/chrome_browser_state.h"
+#import "ios/chrome/browser/optimization_guide/optimization_guide_service.h"
+#import "ios/chrome/browser/optimization_guide/optimization_guide_service_factory.h"
+#import "ios/web/public/web_state.h"
+#import "ios/web/public/webui/web_ui_ios.h"
+#import "ios/web/public/webui/web_ui_ios_data_source.h"
+#import "ui/base/webui/resource_path.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+namespace {
+// Creates a WebUI data source for chrome://optimization-guide-internals page.
+// Changes to this should be in sync with its non-iOS equivalent
+// //components/.../optimization_guide_internals_ui.cc
+web::WebUIIOSDataSource* CreateOptimizationGuideInternalsHTMLSource() {
+  web::WebUIIOSDataSource* source = web::WebUIIOSDataSource::Create(
+      optimization_guide_internals::kChromeUIOptimizationGuideInternalsHost);
+
+  source->SetDefaultResource(
+      IDR_OPTIMIZATION_GUIDE_INTERNALS_OPTIMIZATION_GUIDE_INTERNALS_HTML);
+  source->UseStringsJs();
+  const base::span<const webui::ResourcePath> resources =
+      base::make_span(kOptimizationGuideInternalsResources,
+                      kOptimizationGuideInternalsResourcesSize);
+  for (const auto& resource : resources)
+    source->AddResourcePath(resource.path, resource.id);
+
+  return source;
+}
+}  // namespace
+
+OptimizationGuideInternalsUI::OptimizationGuideInternalsUI(
+    web::WebUIIOS* web_ui,
+    const std::string& host)
+    : web::WebUIIOSController(web_ui, host) {
+  ChromeBrowserState* browser_state = ChromeBrowserState::FromWebUIIOS(web_ui);
+  auto* service =
+      OptimizationGuideServiceFactory::GetForBrowserState(browser_state);
+  if (!service)
+    return;
+  optimization_guide_logger_ = service->GetOptimizationGuideLogger();
+  web::WebUIIOSDataSource::Add(browser_state,
+                               CreateOptimizationGuideInternalsHTMLSource());
+  web_ui->GetWebState()->GetInterfaceBinderForMainFrame()->AddInterface(
+      base::BindRepeating(&OptimizationGuideInternalsUI::BindInterface,
+                          base::Unretained(this)));
+}
+
+OptimizationGuideInternalsUI::~OptimizationGuideInternalsUI() {
+  web_ui()->GetWebState()->GetInterfaceBinderForMainFrame()->RemoveInterface(
+      "optimization_guide_internals.mojom.PageHandlerFactory");
+};
+
+void OptimizationGuideInternalsUI::BindInterface(
+    mojo::PendingReceiver<
+        optimization_guide_internals::mojom::PageHandlerFactory> receiver) {
+  // TODO(crbug.com/1297362): Remove the reset which is needed now since |this|
+  // is reused on internals page reloads.
+  optimization_guide_internals_page_factory_receiver_.reset();
+  optimization_guide_internals_page_factory_receiver_.Bind(std::move(receiver));
+}
+
+void OptimizationGuideInternalsUI::CreatePageHandler(
+    mojo::PendingRemote<optimization_guide_internals::mojom::Page> page) {
+  optimization_guide_internals_page_handler_ =
+      std::make_unique<OptimizationGuideInternalsPageHandlerImpl>(
+          std::move(page), optimization_guide_logger_);
+}
+
+void OptimizationGuideInternalsUI::RequestDownloadedModelsInfo(
+    RequestDownloadedModelsInfoCallback callback) {
+  ChromeBrowserState* browser_state =
+      ChromeBrowserState::FromWebUIIOS(web_ui());
+  auto* service =
+      OptimizationGuideServiceFactory::GetForBrowserState(browser_state);
+  if (!service) {
+    std::move(callback).Run({});
+    return;
+  }
+  optimization_guide::PredictionManager* prediction_manager =
+      service->GetPredictionManager();
+  std::vector<optimization_guide_internals::mojom::DownloadedModelInfoPtr>
+      downloaded_models_info =
+          prediction_manager->GetDownloadedModelsInfoForWebUI();
+  std::move(callback).Run(std::move(downloaded_models_info));
+}
diff --git a/ios/chrome/browser/ui/webui/web_ui_egtest.mm b/ios/chrome/browser/ui/webui/web_ui_egtest.mm
index 2c9b4cda..3501d148 100644
--- a/ios/chrome/browser/ui/webui/web_ui_egtest.mm
+++ b/ios/chrome/browser/ui/webui/web_ui_egtest.mm
@@ -6,13 +6,13 @@
 
 #include "base/mac/foundation_util.h"
 #include "base/metrics/field_trial.h"
-#include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/sys_string_conversions.h"
 #import "base/test/ios/wait_util.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/version_info/version_info.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
+#import "ios/chrome/browser/ui/webui/web_ui_test_utils.h"
 #include "ios/chrome/grit/ios_chromium_strings.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
@@ -28,48 +28,8 @@
 #error "This file requires ARC support."
 #endif
 
-using base::TrimPositions;
 using chrome_test_util::BackButton;
 using chrome_test_util::ForwardButton;
-using chrome_test_util::OmniboxText;
-using chrome_test_util::OmniboxContainingText;
-
-namespace {
-
-// Returns the url to the web ui page `host`. `url::SchemeHostPort` can not be
-// used when this test is run using EarlGrey2 because the chrome scheme is not
-// registered in the test process and `url::SchemeHostPort` will not build an
-// invalid URL.
-GURL WebUIPageUrlWithHost(const std::string& host) {
-  return GURL(base::StringPrintf("%s://%s", kChromeUIScheme, host.c_str()));
-}
-
-// Waits for omnibox text to equal (if `exact_match`) or contain (else) `URL`
-// and returns true if it was found or false on timeout. Strips trailing URL
-// slash if present as the omnibox does not display them.
-bool WaitForOmniboxURLString(std::string URL, bool exact_match = true) {
-  const std::string trimmed_URL(
-      base::TrimString(URL, "/", TrimPositions::TRIM_TRAILING));
-
-  // TODO(crbug.com/642207): Unify with the omniboxText matcher or move to the
-  // same location with the omniboxText matcher.
-  return base::test::ios::WaitUntilConditionOrTimeout(
-      base::test::ios::kWaitForUIElementTimeout, ^{
-        NSError* error = nil;
-        if (exact_match) {
-          [[EarlGrey selectElementWithMatcher:OmniboxText(trimmed_URL)]
-              assertWithMatcher:grey_notNil()
-                          error:&error];
-        } else {
-          [[EarlGrey selectElementWithMatcher:chrome_test_util::Omnibox()]
-              assertWithMatcher:OmniboxContainingText(trimmed_URL)
-                          error:&error];
-        }
-        return error == nil;
-      });
-}
-
-}  // namespace
 
 // Test case for chrome://* WebUI pages.
 @interface WebUITestCase : ChromeTestCase
diff --git a/ios/chrome/browser/ui/webui/web_ui_test_utils.h b/ios/chrome/browser/ui/webui/web_ui_test_utils.h
new file mode 100644
index 0000000..bc86aba
--- /dev/null
+++ b/ios/chrome/browser/ui/webui/web_ui_test_utils.h
@@ -0,0 +1,23 @@
+// Copyright 2022 The Chromium Authors.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef IOS_CHROME_BROWSER_UI_WEBUI_WEB_UI_TEST_UTILS_H_
+#define IOS_CHROME_BROWSER_UI_WEBUI_WEB_UI_TEST_UTILS_H_
+
+#include <string>
+
+class GURL;
+
+// Returns the url to the web ui page `host`. `url::SchemeHostPort` can not be
+// used when this test is run using EarlGrey2 because the chrome scheme is not
+// registered in the test process and `url::SchemeHostPort` will not build an
+// invalid URL.
+GURL WebUIPageUrlWithHost(const std::string& host);
+
+// Waits for omnibox text to equal (if `exact_match`) or contain (else) `URL`
+// and returns true if it was found or false on timeout. Strips trailing URL
+// slash if present as the omnibox does not display them.
+bool WaitForOmniboxURLString(const std::string& url, bool exact_match = true);
+
+#endif  // IOS_CHROME_BROWSER_UI_WEBUI_WEB_UI_TEST_UTILS_H_
diff --git a/ios/chrome/browser/ui/webui/web_ui_test_utils.mm b/ios/chrome/browser/ui/webui/web_ui_test_utils.mm
new file mode 100644
index 0000000..4d0aab4
--- /dev/null
+++ b/ios/chrome/browser/ui/webui/web_ui_test_utils.mm
@@ -0,0 +1,54 @@
+// Copyright 2022 The Chromium Authors.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/chrome/browser/ui/webui/web_ui_test_utils.h"
+
+#import "base/strings/string_util.h"
+#import "base/strings/stringprintf.h"
+#import "base/test/ios/wait_util.h"
+#import "ios/chrome/test/earl_grey/chrome_matchers.h"
+#import "ios/components/webui/web_ui_url_constants.h"
+#import "ios/testing/earl_grey/earl_grey_test.h"
+#import "url/gurl.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+using base::TrimPositions;
+using chrome_test_util::OmniboxContainingText;
+using chrome_test_util::OmniboxText;
+
+// Returns the url to the web ui page `host`. `url::SchemeHostPort` can not be
+// used when this test is run using EarlGrey2 because the chrome scheme is not
+// registered in the test process and `url::SchemeHostPort` will not build an
+// invalid URL.
+GURL WebUIPageUrlWithHost(const std::string& host) {
+  return GURL(base::StringPrintf("%s://%s", kChromeUIScheme, host.c_str()));
+}
+
+// Waits for omnibox text to equal (if `exact_match`) or contain (else) `URL`
+// and returns true if it was found or false on timeout. Strips trailing URL
+// slash if present as the omnibox does not display them.
+bool WaitForOmniboxURLString(const std::string& url, bool exact_match) {
+  const std::string trimmed_URL(
+      base::TrimString(url, "/", TrimPositions::TRIM_TRAILING));
+
+  // TODO(crbug.com/642207): Unify with the omniboxText matcher or move to the
+  // same location with the omniboxText matcher.
+  return base::test::ios::WaitUntilConditionOrTimeout(
+      base::test::ios::kWaitForUIElementTimeout, ^{
+        NSError* error = nil;
+        if (exact_match) {
+          [[EarlGrey selectElementWithMatcher:OmniboxText(trimmed_URL)]
+              assertWithMatcher:grey_notNil()
+                          error:&error];
+        } else {
+          [[EarlGrey selectElementWithMatcher:chrome_test_util::Omnibox()]
+              assertWithMatcher:OmniboxContainingText(trimmed_URL)
+                          error:&error];
+        }
+        return error == nil;
+      });
+}
diff --git a/ios/chrome/browser/unified_consent/unified_consent_service_factory.mm b/ios/chrome/browser/unified_consent/unified_consent_service_factory.mm
index 00c195a..73c8a8b 100644
--- a/ios/chrome/browser/unified_consent/unified_consent_service_factory.mm
+++ b/ios/chrome/browser/unified_consent/unified_consent_service_factory.mm
@@ -15,7 +15,7 @@
 #include "components/unified_consent/unified_consent_service.h"
 #import "ios/chrome/browser/application_context/application_context.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/signin/identity_manager_factory.h"
 #include "ios/chrome/browser/sync/sync_service_factory.h"
 
diff --git a/ios/chrome/browser/web/BUILD.gn b/ios/chrome/browser/web/BUILD.gn
index a418cb4a..ef76bcac 100644
--- a/ios/chrome/browser/web/BUILD.gn
+++ b/ios/chrome/browser/web/BUILD.gn
@@ -428,8 +428,8 @@
     "//components/version_info:version_info",
     "//ios/chrome/app/strings",
     "//ios/chrome/browser:chrome_url_constants",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/metrics:eg_test_support+eg2",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui/infobars/banners:public",
     "//ios/chrome/browser/ui/popup_menu:constants",
     "//ios/chrome/browser/ui/start_surface:feature_flags",
diff --git a/ios/chrome/browser/web/font_size/BUILD.gn b/ios/chrome/browser/web/font_size/BUILD.gn
index deebb25..b6a2e930 100644
--- a/ios/chrome/browser/web/font_size/BUILD.gn
+++ b/ios/chrome/browser/web/font_size/BUILD.gn
@@ -20,8 +20,8 @@
     "//components/prefs",
     "//components/ukm/ios:ukm_url_recorder",
     "//ios/chrome/browser",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/web:feature_flags",
     "//ios/components/ui_util",
     "//ios/public/provider/chrome/browser/text_zoom:text_zoom_api",
@@ -44,9 +44,9 @@
     "//base/test:test_support",
     "//components/sync_preferences",
     "//components/sync_preferences:test_support",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/prefs:browser_prefs",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/web:feature_flags",
     "//ios/chrome/test/fakes",
     "//ios/public/provider/chrome/browser",
diff --git a/ios/chrome/browser/web/font_size/font_size_tab_helper.mm b/ios/chrome/browser/web/font_size/font_size_tab_helper.mm
index 2704e82c..f25646d1 100644
--- a/ios/chrome/browser/web/font_size/font_size_tab_helper.mm
+++ b/ios/chrome/browser/web/font_size/font_size_tab_helper.mm
@@ -19,7 +19,7 @@
 #include "components/ukm/ios/ukm_url_recorder.h"
 #import "ios/chrome/browser/application_context/application_context.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/web/features.h"
 #import "ios/chrome/browser/web/font_size/font_size_java_script_feature.h"
 #include "ios/components/ui_util/dynamic_type_util.h"
diff --git a/ios/chrome/browser/web/font_size/font_size_tab_helper_unittest.mm b/ios/chrome/browser/web/font_size/font_size_tab_helper_unittest.mm
index 13a28109..fe9e894 100644
--- a/ios/chrome/browser/web/font_size/font_size_tab_helper_unittest.mm
+++ b/ios/chrome/browser/web/font_size/font_size_tab_helper_unittest.mm
@@ -14,8 +14,8 @@
 #include "components/sync_preferences/pref_service_mock_factory.h"
 #include "components/sync_preferences/pref_service_syncable.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
 #include "ios/chrome/browser/prefs/browser_prefs.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #include "ios/chrome/browser/web/features.h"
 #import "ios/chrome/browser/web/font_size/font_size_java_script_feature.h"
 #import "ios/web/public/test/fakes/fake_web_client.h"
diff --git a/ios/chrome/browser/web/print/BUILD.gn b/ios/chrome/browser/web/print/BUILD.gn
index bf219a4..57e1b65 100644
--- a/ios/chrome/browser/web/print/BUILD.gn
+++ b/ios/chrome/browser/web/print/BUILD.gn
@@ -17,8 +17,8 @@
     ":print_js",
     "//base",
     "//components/prefs",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/web/public",
     "//ios/web/public/js_messaging",
   ]
@@ -38,9 +38,9 @@
     "//base/test:test_support",
     "//components/sync_preferences",
     "//components/sync_preferences:test_support",
-    "//ios/chrome/browser:pref_names",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/prefs:browser_prefs",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/test/fakes",
     "//ios/web/public/test",
     "//testing/gtest",
diff --git a/ios/chrome/browser/web/print/print_tab_helper.mm b/ios/chrome/browser/web/print/print_tab_helper.mm
index a4dfbba..6b02415 100644
--- a/ios/chrome/browser/web/print/print_tab_helper.mm
+++ b/ios/chrome/browser/web/print/print_tab_helper.mm
@@ -6,7 +6,7 @@
 
 #include "components/prefs/pref_service.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/web/print/web_state_printer.h"
 #import "ios/web/public/browser_state.h"
 
diff --git a/ios/chrome/browser/web/print/print_tab_helper_unittest.mm b/ios/chrome/browser/web/print/print_tab_helper_unittest.mm
index 5a7bc8e..21c80f0e 100644
--- a/ios/chrome/browser/web/print/print_tab_helper_unittest.mm
+++ b/ios/chrome/browser/web/print/print_tab_helper_unittest.mm
@@ -8,8 +8,8 @@
 #include "components/sync_preferences/pref_service_mock_factory.h"
 #include "components/sync_preferences/pref_service_syncable.h"
 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
 #include "ios/chrome/browser/prefs/browser_prefs.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/web/print/web_state_printer.h"
 #import "ios/web/public/test/fakes/fake_web_state.h"
 #import "ios/web/public/web_state.h"
diff --git a/ios/chrome/common/ui/colors/resources/BUILD.gn b/ios/chrome/common/ui/colors/resources/BUILD.gn
index 85a6ab3..e95e7e7 100644
--- a/ios/chrome/common/ui/colors/resources/BUILD.gn
+++ b/ios/chrome/common/ui/colors/resources/BUILD.gn
@@ -33,6 +33,7 @@
     ":grouped_secondary_background_color",
     ":mdc_ink_color",
     ":mdc_secondary_ink_color",
+    ":orange_500_color",
     ":placeholder_image_tint_color",
     ":primary_background_color",
     ":purple_600_color",
@@ -164,6 +165,10 @@
   sources = [ "yellow_500_color.colorset/Contents.json" ]
 }
 
+colorset("orange_500_color") {
+  sources = [ "orange_500_color.colorset/Contents.json" ]
+}
+
 colorset("mdc_ink_color") {
   sources = [ "mdc_ink_color.colorset/Contents.json" ]
 }
diff --git a/ios/chrome/common/ui/colors/resources/orange_500_color.colorset/Contents.json b/ios/chrome/common/ui/colors/resources/orange_500_color.colorset/Contents.json
new file mode 100644
index 0000000..f0d7efb
--- /dev/null
+++ b/ios/chrome/common/ui/colors/resources/orange_500_color.colorset/Contents.json
@@ -0,0 +1,20 @@
+{
+  "info": {
+    "version": 1,
+    "author": "xcode"
+  },
+  "colors": [
+    {
+      "idiom": "universal",
+      "color": {
+        "color-space": "display-p3",
+        "components": {
+          "red": "0xFA",
+          "alpha": "1.000",
+          "blue": "0x17",
+          "green": "0x7B"
+        }
+      }
+    }
+  ]
+}
diff --git a/ios/chrome/common/ui/colors/semantic_color_names.h b/ios/chrome/common/ui/colors/semantic_color_names.h
index 177bd567..3b60899 100644
--- a/ios/chrome/common/ui/colors/semantic_color_names.h
+++ b/ios/chrome/common/ui/colors/semantic_color_names.h
@@ -88,6 +88,9 @@
 // Yellow 500.
 extern NSString* const kYellow500Color;
 
+// Orange 500.
+extern NSString* const kOrange500Color;
+
 // Grey Color Palette.
 extern NSString* const kGrey50Color;
 extern NSString* const kGrey100Color;
diff --git a/ios/chrome/common/ui/colors/semantic_color_names.mm b/ios/chrome/common/ui/colors/semantic_color_names.mm
index db10116..de4cb54 100644
--- a/ios/chrome/common/ui/colors/semantic_color_names.mm
+++ b/ios/chrome/common/ui/colors/semantic_color_names.mm
@@ -57,6 +57,7 @@
 NSString* const kRed500Color = @"red_500_color";
 NSString* const kPurple600Color = @"purple_600_color";
 NSString* const kYellow500Color = @"yellow_500_color";
+NSString* const kOrange500Color = @"orange_500_color";
 
 #pragma mark - Grey Palette
 NSString* const kGrey50Color = @"grey_50_color";
diff --git a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb
index 3aa867c..5e66985 100644
--- a/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb
+++ b/ios/chrome/credential_provider_extension/strings/resources/ios_credential_provider_extension_strings_sq.xtb
@@ -11,27 +11,27 @@
 <translation id="1977167321677356409">Fjalëkalimi</translation>
 <translation id="2211969839027957773">Menaxheri i fjalëkalimeve i Google</translation>
 <translation id="2320166752086256636">Fshih tastierën</translation>
-<translation id="2489483078139081050">Mund t'i përdorësh fjalëkalimet e ruajtura në aplikacione të tjera në pajisjen tënde. Ato janë të ruajtura në "Menaxherin e fjalëkalimeve" të Google vetëm në këtë pajisje.</translation>
+<translation id="2489483078139081050">Mund t'i përdorësh fjalëkalimet e ruajtura në aplikacione të tjera në pajisjen tënde. Ato janë të ruajtura në "Menaxherin e fjalëkalimeve të Google" vetëm në këtë pajisje.</translation>
 <translation id="2677128368066534822">Për t'i marrë më shpejt fjalëkalimet, hiq përzgjedhjen e iCloud Keychain</translation>
 <translation id="2712586044587587728">Fjalëkalimet e tua të Chrome do të ofrohen për përdorim në aplikacione të tjera. Këtë mund ta çaktivizosh në çdo kohë tek aplikacioni "Cilësimet".</translation>
 <translation id="2747003861858887689">Fusha e mëparshme</translation>
 <translation id="3280734926621805458">Përdor</translation>
 <translation id="3580107423202590938">Nuk ka asnjë fjalëkalim të Chrome</translation>
 <translation id="368844171100841558">Zëvendëso</translation>
-<translation id="3739920431472254679">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve" të Google në mënyrë që t'i përdorësh ato në çdo pajisje.</translation>
+<translation id="3739920431472254679">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve të Google" në mënyrë që t'i përdorësh ato në çdo pajisje.</translation>
 <translation id="3753678329684433031">Plotëso automatikisht fjalëkalimin e Chrome</translation>
 <translation id="3789385946721385622">Emri i përdoruesit</translation>
-<translation id="3830647155781949426">Fjalëkalimi yt do të ruhet në "Menaxherin e fjalëkalimeve" të Google për <ph name="EMAIL" /> kur të kthehesh në Chrome.</translation>
+<translation id="3830647155781949426">Fjalëkalimi yt do të ruhet në "Menaxherin e fjalëkalimeve të Google" për <ph name="EMAIL" /> kur të kthehesh në Chrome.</translation>
 <translation id="4241076354893135477">Nuk ka asnjë fjalëkalim të Chrome</translation>
 <translation id="4452240207605337349">Nuk mund të ruhet fjalëkalimi</translation>
 <translation id="4818780572497527258">E kuptova</translation>
 <translation id="5118084770294029567">Të gjitha fjalëkalimet</translation>
 <translation id="5148402015874782921">Anulo</translation>
 <translation id="5824290706342306555">Për të filluar, ruaj disa fjalëkalime në Chrome ose identifikohu me "Llogarinë tënde të Google".</translation>
-<translation id="6002340317268558779">Mund t'i përdorësh fjalëkalimet e ruajtura në aplikacione të tjera në pajisjen tënde. Ato janë të ruajtura në "Menaxherin e fjalëkalimeve" të Google për <ph name="EMAIL" />.</translation>
+<translation id="6002340317268558779">Mund t'i përdorësh fjalëkalimet e ruajtura në aplikacione të tjera në pajisjen tënde. Ato janë të ruajtura në "Menaxherin e fjalëkalimeve të Google" për <ph name="EMAIL" />.</translation>
 <translation id="6159839020698489198">opsionale</translation>
 <translation id="6216401132953873625">Shto fjalëkalim të ri</translation>
-<translation id="6387994324662817823">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve" të Google vetëm në këtë pajisje.</translation>
+<translation id="6387994324662817823">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve të Google" vetëm në këtë pajisje.</translation>
 <translation id="6539092367496845964">Ndodhi një gabim. Provo përsëri më vonë.</translation>
 <translation id="6657585470893396449">Fjalëkalimi</translation>
 <translation id="666236282349601348">"Plotësimi automatik" është aktiv</translation>
@@ -56,5 +56,5 @@
 <translation id="8730621377337864115">U krye</translation>
 <translation id="8877181643142698531">URL</translation>
 <translation id="9069288651897538648">Për <ph name="URL" /></translation>
-<translation id="9168839987494597225">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve" të Google vetëm në këtë pajisje.</translation>
+<translation id="9168839987494597225">Fjalëkalimet ruhen në "Menaxherin e fjalëkalimeve të Google" vetëm në këtë pajisje.</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/test/app/signin_test_util.mm b/ios/chrome/test/app/signin_test_util.mm
index f5419dde..c373dd3 100644
--- a/ios/chrome/test/app/signin_test_util.mm
+++ b/ios/chrome/test/app/signin_test_util.mm
@@ -12,7 +12,7 @@
 #import "components/sync/driver/sync_user_settings.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/signin/authentication_service.h"
 #include "ios/chrome/browser/signin/authentication_service_factory.h"
 #import "ios/chrome/browser/signin/chrome_account_manager_service.h"
diff --git a/ios/chrome/test/earl_grey/eg_tests_hook.mm b/ios/chrome/test/earl_grey/eg_tests_hook.mm
index 3f7487f..5a3ee34 100644
--- a/ios/chrome/test/earl_grey/eg_tests_hook.mm
+++ b/ios/chrome/test/earl_grey/eg_tests_hook.mm
@@ -26,6 +26,10 @@
   return true;
 }
 
+bool DisableClientSideFieldTrials() {
+  return true;
+}
+
 bool DisableContentSuggestions() {
   return true;
 }
diff --git a/ios/chrome/test/earl_grey2/BUILD.gn b/ios/chrome/test/earl_grey2/BUILD.gn
index 04cd075..d7bfe35 100644
--- a/ios/chrome/test/earl_grey2/BUILD.gn
+++ b/ios/chrome/test/earl_grey2/BUILD.gn
@@ -193,6 +193,7 @@
     "//ios/chrome/browser/ui/toolbar:eg2_tests",
     "//ios/chrome/browser/ui/webui:eg2_tests",
     "//ios/chrome/browser/ui/webui/interstitials:eg2_tests",
+    "//ios/chrome/browser/ui/webui/optimization_guide_internals:eg2_tests",
   ]
   data_deps = [ ":ios_chrome_eg2tests" ]
 }
@@ -237,7 +238,7 @@
 
   deps = [
     "//ios/chrome/app/strings",
-    "//ios/chrome/browser:pref_names",
+    "//ios/chrome/browser/prefs:pref_names",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/settings/password:password_constants",
     "//ios/chrome/test/earl_grey:eg_test_support+eg2",
diff --git a/ios/chrome/test/earl_grey2/smoke_egtest.mm b/ios/chrome/test/earl_grey2/smoke_egtest.mm
index 72f5720b..485dbca 100644
--- a/ios/chrome/test/earl_grey2/smoke_egtest.mm
+++ b/ios/chrome/test/earl_grey2/smoke_egtest.mm
@@ -6,7 +6,7 @@
 #import <UIKit/UIKit.h>
 
 #import "base/ios/ios_util.h"
-#include "ios/chrome/browser/pref_names.h"
+#import "ios/chrome/browser/prefs/pref_names.h"
 #import "ios/chrome/browser/ui/settings/password/passwords_table_view_constants.h"
 #import "ios/chrome/browser/ui/ui_feature_flags.h"
 #include "ios/chrome/grit/ios_strings.h"
diff --git a/ios/chrome/test/swift_interop/namespace/namespace_xctest.swift b/ios/chrome/test/swift_interop/namespace/namespace_xctest.swift
index f1d85ed..5644a02 100644
--- a/ios/chrome/test/swift_interop/namespace/namespace_xctest.swift
+++ b/ios/chrome/test/swift_interop/namespace/namespace_xctest.swift
@@ -10,20 +10,12 @@
 
   func testNamespaceClass() throws {
     // Non-namespaced class.
-    #if swift(>=5.6)
-      let goat = Goat()
-    #else
-      var goat = Goat()
-    #endif
+    let goat = Goat()
     XCTAssertEqual(goat.GetValue(), 7, "Values don't match")
 
     // Namespaced class with the same type name, verify the namespaced one
     // is the one created.
-    #if swift(>=5.6)
-      let spaceGoat = space.Goat()
-    #else
-      var spaceGoat = space.Goat()
-    #endif
+    let spaceGoat = space.Goat()
     spaceGoat.DoNothing()
     XCTAssertEqual(spaceGoat.GetValue(), 42, "Values don't match")
   }
@@ -38,19 +30,13 @@
   func testNamespaceClassEnum() throws {
     // Use a namespaced class enum.
     // Compiles ONLY with Swift greater than version 5.6 (Xcode 13.3).
-    #if swift(>=5.6)
-      let animal = space.Animal.goat
-      XCTAssertEqual(animal, space.Animal.goat, "values don't match")
-      XCTAssertNotEqual(animal, space.Animal.dog, "values don't match")
-    #endif
+    let animal = space.Animal.goat
+    XCTAssertEqual(animal, space.Animal.goat, "values don't match")
+    XCTAssertNotEqual(animal, space.Animal.dog, "values don't match")
   }
 
   func testNestedNamespace() throws {
-    #if swift(>=5.6)
-      let goat = outer.inner.NestedGoat()
-    #else
-      var goat = outer.inner.NestedGoat()
-    #endif
+    let goat = outer.inner.NestedGoat()
     XCTAssertEqual(goat.GetValue(), 50, "values don't match")
   }
 
diff --git a/ios/chrome/test/swift_interop/pointer/object_passing_xctest.swift b/ios/chrome/test/swift_interop/pointer/object_passing_xctest.swift
index 2b05e03..46a7d53b 100644
--- a/ios/chrome/test/swift_interop/pointer/object_passing_xctest.swift
+++ b/ios/chrome/test/swift_interop/pointer/object_passing_xctest.swift
@@ -8,34 +8,17 @@
 class ObjectPassingTest: XCTestCase {
 
   func testReferenceParameters() throws {
-    #if swift(>=5.7)
-      let a = Object(10)
-      let b = Object(20)
-    #else
-      var a = Object(10)
-      var b = Object(20)
-    #endif
-    #if swift(>=5.6)
-      let passer = ObjectPassing()
-    #else
-      var passer = ObjectPassing()
-    #endif
+    let a = Object(10)
+    let b = Object(20)
+    let passer = ObjectPassing()
     XCTAssertEqual(a.GetValue(), 10)
-    #if swift(>=5.7)
-      XCTAssertEqual(passer.AddReferences(a, b), 30)
-    #else
-      XCTAssertEqual(passer.AddReferences(&a, &b), 30)
-    #endif
+    XCTAssertEqual(passer.AddReferences(a, b), 30)
   }
 
   func testPointerParameters() throws {
     var a = Object(10)
     var b = Object(20)
-    #if swift(>=5.6)
-      let passer = ObjectPassing()
-    #else
-      var passer = ObjectPassing()
-    #endif
+    let passer = ObjectPassing()
 
     XCTAssertEqual(a.GetValue(), 10)
     XCTAssertEqual(passer.AddPointers(&a, &b), 30)
@@ -58,11 +41,9 @@
   // Note: prior to Swift 5.6, calling GetValue() (which is const) on these objects
   // results in a compiler error about calling immutable methods on a `let` object.
   // Omit this test on earlier Swift versions.
-  #if swift(>=5.6)
-    func addObjects(one: Object, two: Object) -> Int32 {
-      return one.GetValue() + two.GetValue()
-    }
-  #endif
+  func addObjects(one: Object, two: Object) -> Int32 {
+    return one.GetValue() + two.GetValue()
+  }
 
   func addPointerObjects(one: UnsafeMutablePointer<Object>, two: UnsafeMutablePointer<Object>)
     -> Int32
@@ -74,9 +55,7 @@
     var a = Object(10)
     var b = Object(20)
 
-    #if swift(>=5.6)
-      XCTAssertEqual(addObjects(one: a, two: b), 30)
-    #endif
+    XCTAssertEqual(addObjects(one: a, two: b), 30)
     XCTAssertEqual(addPointerObjects(one: &a, two: &b), 30)
   }
 }
diff --git a/ios/chrome/test/wpt/cwt_tests_hook.mm b/ios/chrome/test/wpt/cwt_tests_hook.mm
index 94812730..d9ee040 100644
--- a/ios/chrome/test/wpt/cwt_tests_hook.mm
+++ b/ios/chrome/test/wpt/cwt_tests_hook.mm
@@ -17,6 +17,9 @@
 bool DisableAppGroupAccess() {
   return true;
 }
+bool DisableClientSideFieldTrials() {
+  return true;
+}
 bool DisableContentSuggestions() {
   return true;
 }
diff --git a/ios/chrome/test/xcuitest/xcuitests_hook.mm b/ios/chrome/test/xcuitest/xcuitests_hook.mm
index d49a347..8856a0c 100644
--- a/ios/chrome/test/xcuitest/xcuitests_hook.mm
+++ b/ios/chrome/test/xcuitest/xcuitests_hook.mm
@@ -14,6 +14,10 @@
   return true;
 }
 
+bool DisableClientSideFieldTrials() {
+  return true;
+}
+
 bool DisableContentSuggestions() {
   return true;
 }
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
index ea88f05..9dc810cc 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-3d6357aa82f865a1b81c8c49abd70da252a93fee
\ No newline at end of file
+c8fa523c5be19caedcb30309b37ea96adc673785
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
index 57a211c..7f51aae 100644
--- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-a45adacf5ac4ff077ed7ceaf0aafa23099113196
\ No newline at end of file
+f01a41b543379faf34c271f39cc37b537827103b
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
index c1915db..d3442b7e 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-0d4e34db6094af8ac9187fa25bf57235bc29e476
\ No newline at end of file
+c811c91643039bfc59c98dda3623b267c787facd
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
index 10eddc47..e663c1d 100644
--- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-76af18ff462523339f57f9d813ba6c7b083d2ca5
\ No newline at end of file
+44cc04e450b4325b9cb289337a3990daac31b228
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
index 9794124..c7c2c88 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-4161db04f3473b73907b3a38a73d2b1f894bd42a
\ No newline at end of file
+6472eb12a0bab9b8dc61c6f50f858c2268ed2a90
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
index 65dd22d6..ff7cc4c 100644
--- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-155d384d459c905e3c163ac9c4ab24e24a9f606b
\ No newline at end of file
+83dc14d3e4aed93b3402519b37da62a77c5e04db
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
index ca8a0969..0a7cdd3c 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-ce1ee4aeb2efca61a14c425f11b73e61600ddd1c
\ No newline at end of file
+3f3c45fe7f9c9fd63ea1428e6764f75727488a72
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
index c56de4f..ea448a98 100644
--- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-94dd6014750bfcf60a2416b3e3f563b222f46591
\ No newline at end of file
+a65f1e8b34a0762064210562bfb45218375b3b66
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
index 4326a760..af910e8 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.ios.zip.sha1
@@ -1 +1 @@
-855d0b4e69f2b4ebe4018127b2a328db33718e73
\ No newline at end of file
+59eea02b89b972cdea8476d043ff737120f64c00
\ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
index d92e063..7bdfd4ee 100644
--- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
+++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.iossimulator.zip.sha1
@@ -1 +1 @@
-e358c4caeba91fc48a291d07ada62a2a6ad6795f
\ No newline at end of file
+c1cbfa97520fbc4307559b06256af483ea4ca21e
\ No newline at end of file
diff --git a/media/cast/net/rtcp/rtcp_builder.cc b/media/cast/net/rtcp/rtcp_builder.cc
index 8c39955..b8b8f5b 100644
--- a/media/cast/net/rtcp/rtcp_builder.cc
+++ b/media/cast/net/rtcp/rtcp_builder.cc
@@ -115,7 +115,7 @@
 }  // namespace
 
 RtcpBuilder::RtcpBuilder(uint32_t sending_ssrc)
-    : writer_(nullptr, 0), local_ssrc_(sending_ssrc), ptr_of_length_(nullptr) {}
+    : local_ssrc_(sending_ssrc), ptr_of_length_(nullptr), writer_(nullptr, 0) {}
 
 RtcpBuilder::~RtcpBuilder() = default;
 
diff --git a/media/cast/net/rtcp/rtcp_builder.h b/media/cast/net/rtcp/rtcp_builder.h
index 8c08c8e..877dc86 100644
--- a/media/cast/net/rtcp/rtcp_builder.h
+++ b/media/cast/net/rtcp/rtcp_builder.h
@@ -52,10 +52,10 @@
       RtcpReceiverLogMessage* receiver_log_message,
       size_t* total_number_of_messages_to_send);
 
-  base::BigEndianWriter writer_;
   const uint32_t local_ssrc_;
   raw_ptr<char> ptr_of_length_;
   PacketRef packet_;
+  base::BigEndianWriter writer_;
 };
 
 }  // namespace cast
diff --git a/media/renderers/audio_renderer_impl.cc b/media/renderers/audio_renderer_impl.cc
index 7c47c375..1b427ab5 100644
--- a/media/renderers/audio_renderer_impl.cc
+++ b/media/renderers/audio_renderer_impl.cc
@@ -564,15 +564,21 @@
     //   renderer. Browser-side will down-mix to the hardware config. If the
     //   hardware later changes to equal stream channels, browser-side will stop
     //   down-mixing and use the data from all stream channels.
-    ChannelLayout renderer_channel_layout =
-        hw_channel_count > stream_channel_count
-            ? hw_channel_layout
-            : stream->audio_decoder_config().channel_layout();
 
-    audio_parameters_.Reset(hw_params.format(), renderer_channel_layout,
-                            sample_rate,
-                            AudioLatency::GetHighLatencyBufferSize(
-                                sample_rate, preferred_buffer_size));
+    ChannelLayout stream_channel_layout =
+        stream->audio_decoder_config().channel_layout();
+    bool use_stream_channel_layout = hw_channel_count <= stream_channel_count;
+
+    audio_parameters_.Reset(
+        hw_params.format(),
+        use_stream_channel_layout ? stream_channel_layout : hw_channel_layout,
+        sample_rate,
+        AudioLatency::GetHighLatencyBufferSize(sample_rate,
+                                               preferred_buffer_size));
+    if (use_stream_channel_layout &&
+        stream_channel_layout == CHANNEL_LAYOUT_DISCRETE) {
+      audio_parameters_.set_channels_for_discrete(stream_channel_count);
+    }
   }
 
   audio_parameters_.set_effects(audio_parameters_.effects() |
diff --git a/media/test/data/9ch_44100.wav b/media/test/data/9ch_44100.wav
new file mode 100644
index 0000000..7f3af8a
--- /dev/null
+++ b/media/test/data/9ch_44100.wav
Binary files differ
diff --git a/media/test/data/stereo_48000.wav b/media/test/data/stereo_48000.wav
new file mode 100644
index 0000000..56915e52
--- /dev/null
+++ b/media/test/data/stereo_48000.wav
Binary files differ
diff --git a/media/test/pipeline_integration_test.cc b/media/test/pipeline_integration_test.cc
index bdfd21e..d82c29e1 100644
--- a/media/test/pipeline_integration_test.cc
+++ b/media/test/pipeline_integration_test.cc
@@ -744,8 +744,21 @@
   ASSERT_TRUE(WaitUntilOnEnded());
 }
 
-TEST_F(PipelineIntegrationTest, PlaybackTooManyChannels) {
-  EXPECT_EQ(PIPELINE_ERROR_INITIALIZATION_FAILED, Start("9ch.wav"));
+// TODO(https://crbug.com/1354581): At most one of Playback9Channels48000hz and
+// Playback9Channels44100hz will pass, because for 9+ channel files the hardware
+// sample rate has to match the file's sample rate. They are both disabled
+// because different CI configurations have different hardware sample rates. To
+// run the tests, enable them both and expect at most one of them to pass.
+TEST_F(PipelineIntegrationTest, DISABLED_Playback9Channels48000hz) {
+  EXPECT_EQ(PIPELINE_OK, Start("9ch.wav"));
+}
+
+TEST_F(PipelineIntegrationTest, DISABLED_Playback9Channels44100hz) {
+  EXPECT_EQ(PIPELINE_OK, Start("9ch_44100.wav"));
+}
+
+TEST_F(PipelineIntegrationTest, PlaybackStereo48000hz) {
+  EXPECT_EQ(PIPELINE_OK, Start("stereo_48000.wav"));
 }
 
 TEST_F(PipelineIntegrationTest, PlaybackWithAudioTrackDisabledThenEnabled) {
diff --git a/mojo/public/js/mojo_bindings_resources.grd b/mojo/public/js/mojo_bindings_resources.grd
index 6fea1f7..dd85d151 100644
--- a/mojo/public/js/mojo_bindings_resources.grd
+++ b/mojo/public/js/mojo_bindings_resources.grd
@@ -139,12 +139,12 @@
             use_base_dir="false"
             resource_path="mojo/mojo/public/mojom/base/process_id.mojom-webui.js"
             type="BINDATA" />
-        <include name="IDR_MOJO_TIME_MOJOM_WEBUI_JS"
-            file="${root_gen_dir}/mojom-webui/mojo/public/mojom/base/time.mojom-webui.js"
-            use_base_dir="false"
-            resource_path="mojo/mojo/public/mojom/base/time.mojom-webui.js"
-            type="BINDATA" />
       </if>
+      <include name="IDR_MOJO_TIME_MOJOM_WEBUI_JS"
+          file="${root_gen_dir}/mojom-webui/mojo/public/mojom/base/time.mojom-webui.js"
+          use_base_dir="false"
+          resource_path="mojo/mojo/public/mojom/base/time.mojom-webui.js"
+          type="BINDATA" />
     </includes>
   </release>
 </grit>
diff --git a/net/base/features.cc b/net/base/features.cc
index 9015976..7fa6bd1 100644
--- a/net/base/features.cc
+++ b/net/base/features.cc
@@ -352,4 +352,8 @@
 
 const base::Feature kAlpsClientHintParsing{"AlpsClientHintParsing",
                                            base::FEATURE_ENABLED_BY_DEFAULT};
+
+const base::Feature kShouldKillSessionOnAcceptChMalformed{
+    "ShouldKillSessionOnAcceptChMalformed", base::FEATURE_DISABLED_BY_DEFAULT};
+
 }  // namespace net::features
diff --git a/net/base/features.h b/net/base/features.h
index b73a9aa65..b50c5eeb 100644
--- a/net/base/features.h
+++ b/net/base/features.h
@@ -493,6 +493,9 @@
 // Whether ALPS parsing is on for client hint parsing specifically.
 NET_EXPORT extern const base::Feature kAlpsClientHintParsing;
 
+// Whether to kill the session on Error::kAcceptChMalformed.
+NET_EXPORT extern const base::Feature kShouldKillSessionOnAcceptChMalformed;
+
 }  // namespace net::features
 
 #endif  // NET_BASE_FEATURES_H_
diff --git a/net/data/ssl/chrome_root_store/README.md b/net/data/ssl/chrome_root_store/README.md
index d3cd6eb..42d1902 100644
--- a/net/data/ssl/chrome_root_store/README.md
+++ b/net/data/ssl/chrome_root_store/README.md
@@ -19,21 +19,47 @@
 
 ## Testing
 
-To test the Chrome Root store, do the following:
+To test the Chrome Root Store, do the following:
 
-* On M102 or higher on Windows, run Chrome with the following flag:
+### On Windows (M102 or higher)
+1. Enable the Chrome Root Store by starting Chrome with the following flag: 
+`--enable-features=ChromeRootStoreUsed`
+  
+2. Navigate to https://rootcertificateprograms.edicom.es/ (trusted by Windows, but not the Chrome 
+Root Store)
+     - **Expected outcome with Chrome Root Store enabled:** Page does not load 
+     (NET::ERR_CERT_AUTHORITY_INVALID)
+     - **Expected outcome with Chrome Root Store disabled:** Page loads
 
-  `--enable-features=ChromeRootStoreUsed`
+### On macOS (M105.0.5122.0 or higher)
+1. Enable the Chrome Root Store by starting Chrome with the following flags: 
+`--enable-features=ChromeRootStoreUsed,CertVerifierBuiltin:impl/4`
+2. Navigate to https://valid-ctrca.certificates.certum.pl/ (not trusted by macOS, but trusted by the
+Chrome Root Store)
+     - **Expected outcome with Chrome Root Store enabled:** Page does not load 
+     (NET::ERR_CERTIFICATE_TRANSPARENCY_REQUIRED)
+     - **Expected outcome with Chrome Root Store disabled:** Page does not load 
+     (NET::ERR_CERT_AUTHORITY_INVALID)
 
-  As of 2022-06, an example of a web site that is trusted by Windows Root Store
-  but not by Chrome Root Store is https://rootcertificateprograms.edicom.es/.
-  This can be used to test if Chrome Root Store is turned on or not (for best
-  results use a fresh incognito window to avoid any caching issues).
+## Determine which version of the Chrome Root Store is in use (M104.0.5110.0 or higher)
+1. Collect and export a [NetLog
+dump](https://www.chromium.org/for-testers/providing-network-details/) (open a new tab and connect 
+to at least one website during log generation)
+2. Import the log using [NetLog Viewer](https://netlog-viewer.appspot.com/#import)
+3. Navigate to "Events" (left-hand navigation)
+4. Search for events that include `CERT_VERIFY_PROC_CHROME_ROOT_STORE_VERSION`. The in-use version 
+of the Chrome Root Store is printed after `CERT_VERIFY_PROC_CHROME_ROOT_STORE_VERSION` as it appears
+in a specific event entry.
 
-* On 105.0.5122.0 or higher on Mac, run Chrome with the following flag:
+**Note:** If you do not observe any events that include `CERT_VERIFY_PROC_CHROME_ROOT_STORE_VERSION`
+, the Chrome Root Store is **not** in use.
 
-  `--enable-features=ChromeRootStoreUsed,CertVerifierBuiltin:impl/4`
-
-If you're running 104.0.5110.0 or higher, the currently used Chrome Root Store
-version can be seen in a [NetLog
-dump](https://www.chromium.org/for-testers/providing-network-details/).
+## I've enabled the Chrome Root Store on my platform, how can I tell which certificates are trusted? (M105.0.5122.0 or higher)
+- The current contents of the Chrome Root Store is available
+[here](/net/data/ssl/chrome_root_store/root_store.md)
+- The Chrome Root Store is updated by [Component Updater](/components/component_updater/README.md). 
+To observe the contents of the Chrome Root Store in use by your version of Chrome:
+     1. Navigate to `chrome://system`
+     2. Click the `Expand...` button next to `chrome_root_store`
+     
+  
diff --git a/net/dns/dns_response.cc b/net/dns/dns_response.cc
index 762521d06..8f60528b 100644
--- a/net/dns/dns_response.cc
+++ b/net/dns/dns_response.cc
@@ -313,9 +313,8 @@
       std::accumulate(additional_records.begin(), additional_records.end(),
                       response_size, do_accumulation);
 
-  io_buffer_ = base::MakeRefCounted<IOBuffer>(response_size);
-  io_buffer_size_ = response_size;
-  base::BigEndianWriter writer(io_buffer_->data(), io_buffer_size_);
+  auto io_buffer = base::MakeRefCounted<IOBuffer>(response_size);
+  base::BigEndianWriter writer(io_buffer->data(), response_size);
   success &= WriteHeader(&writer, header);
   DCHECK(success);
   if (has_query) {
@@ -338,10 +337,10 @@
     DCHECK(success);
   }
   if (!success) {
-    io_buffer_.reset();
-    io_buffer_size_ = 0;
     return;
   }
+  io_buffer_ = io_buffer;
+  io_buffer_size_ = response_size;
   // Ensure we don't have any remaining uninitialized bytes in the buffer.
   DCHECK(!writer.remaining());
   memset(writer.ptr(), 0, writer.remaining());
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins
index f4e855ea..76aee6d 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-08-24 12:56 UTC
+# Last updated: 2022-08-25 12:54 UTC
 PinsListTimestamp
-1661345801
+1661432040
 
 TestSPKI
 sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/socket/ssl_server_socket_unittest.cc b/net/socket/ssl_server_socket_unittest.cc
index 71b37bf..453bebe8 100644
--- a/net/socket/ssl_server_socket_unittest.cc
+++ b/net/socket/ssl_server_socket_unittest.cc
@@ -37,9 +37,7 @@
 #include "base/test/task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
-#include "crypto/nss_util.h"
 #include "crypto/rsa_private_key.h"
-#include "crypto/signature_creator.h"
 #include "net/base/address_list.h"
 #include "net/base/completion_once_callback.h"
 #include "net/base/host_port_pair.h"
diff --git a/net/spdy/alps_decoder.cc b/net/spdy/alps_decoder.cc
index f07a6670..fb43d876 100644
--- a/net/spdy/alps_decoder.cc
+++ b/net/spdy/alps_decoder.cc
@@ -5,6 +5,7 @@
 #include "net/spdy/alps_decoder.h"
 
 #include "base/feature_list.h"
+#include "base/metrics/histogram_functions.h"
 #include "net/base/features.h"
 
 namespace net {
@@ -144,8 +145,18 @@
     base::StringPiece value;
     if (!ReadUint16PrefixedStringPiece(&payload, &origin) ||
         !ReadUint16PrefixedStringPiece(&payload, &value)) {
-      error_ = Error::kAcceptChMalformed;
-      return;
+      if (base::FeatureList::IsEnabled(
+              features::kShouldKillSessionOnAcceptChMalformed)) {
+        // This causes a session termination.
+        error_ = Error::kAcceptChMalformed;
+        return;
+      } else {
+        // This logs that a session termination was bypassed.
+        base::UmaHistogramEnumeration(
+            "Net.SpdySession.AlpsDecoderStatus.Bypassed",
+            Error::kAcceptChMalformed);
+        return;
+      }
     }
     accept_ch_.push_back(
         spdy::AcceptChOriginValuePair{std::string(origin), std::string(value)});
diff --git a/net/spdy/alps_decoder_test.cc b/net/spdy/alps_decoder_test.cc
index e2aba3c3..5f155e5 100644
--- a/net/spdy/alps_decoder_test.cc
+++ b/net/spdy/alps_decoder_test.cc
@@ -4,6 +4,7 @@
 
 #include "net/spdy/alps_decoder.h"
 
+#include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_feature_list.h"
 #include "net/base/features.h"
 #include "net/base/hex_utils.h"
@@ -316,7 +317,23 @@
   EXPECT_EQ(0, decoder.settings_frame_count());
 }
 
-TEST(AlpsDecoderTest, MalformedAcceptChFrame) {
+class AlpsDecoderTestWithFeature : public ::testing::TestWithParam<bool> {
+ public:
+  bool ShouldKillSessionOnAcceptChMalformed() { return GetParam(); }
+
+ private:
+  void SetUp() override {
+    feature_list_.InitWithFeatureState(
+        features::kShouldKillSessionOnAcceptChMalformed,
+        ShouldKillSessionOnAcceptChMalformed());
+  }
+
+  base::test::ScopedFeatureList feature_list_;
+};
+
+INSTANTIATE_TEST_SUITE_P(All, AlpsDecoderTestWithFeature, testing::Bool());
+
+TEST_P(AlpsDecoderTestWithFeature, MalformedAcceptChFrame) {
   // Correct, complete payload.
   std::string payload = HexDecode(
       "0017"  // origin length
@@ -327,6 +344,7 @@
 
   for (uint8_t payload_length = 1; payload_length < payload.length();
        payload_length++) {
+    base::HistogramTester histogram_tester;
     // First two bytes of length.
     std::string frame = HexDecode("0000");
     // Last byte of length.
@@ -341,8 +359,16 @@
 
     AlpsDecoder decoder;
     AlpsDecoder::Error error = decoder.Decode(frame);
-
-    EXPECT_EQ(AlpsDecoder::Error::kAcceptChMalformed, error);
+    if (ShouldKillSessionOnAcceptChMalformed()) {
+      EXPECT_EQ(AlpsDecoder::Error::kAcceptChMalformed, error);
+      histogram_tester.ExpectTotalCount(
+          "Net.SpdySession.AlpsDecoderStatus.Bypassed", 0);
+    } else {
+      EXPECT_EQ(AlpsDecoder::Error::kNoError, error);
+      histogram_tester.ExpectUniqueSample(
+          "Net.SpdySession.AlpsDecoderStatus.Bypassed",
+          static_cast<int>(AlpsDecoder::Error::kAcceptChMalformed), 1);
+    }
   }
 }
 
diff --git a/net/test/run_all_unittests.cc b/net/test/run_all_unittests.cc
index 53f83383..c23a312 100644
--- a/net/test/run_all_unittests.cc
+++ b/net/test/run_all_unittests.cc
@@ -8,7 +8,6 @@
 #include "base/build_time.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "build/build_config.h"
-#include "crypto/nss_util.h"
 #include "net/socket/transport_client_socket_pool.h"
 #include "net/test/net_test_suite.h"
 #include "url/buildflags.h"
diff --git a/remoting/host/BUILD.gn b/remoting/host/BUILD.gn
index ab3bbb8..374142e1 100644
--- a/remoting/host/BUILD.gn
+++ b/remoting/host/BUILD.gn
@@ -792,10 +792,11 @@
 
   if (is_linux) {
     sources += [ "pairing_registry_delegate_linux_unittest.cc" ]
+    deps += [ "//remoting/host/linux:unit_tests" ]
   }
 
-  if (is_linux) {
-    deps += [ "//remoting/host/linux:unit_tests" ]
+  if (remoting_use_x11) {
+    sources += [ "x11_crtc_resizer_unittest.cc" ]
   }
 
   if (is_chromeos_ash) {
diff --git a/remoting/host/basic_desktop_environment.cc b/remoting/host/basic_desktop_environment.cc
index e20bb88e9..dcf1668 100644
--- a/remoting/host/basic_desktop_environment.cc
+++ b/remoting/host/basic_desktop_environment.cc
@@ -37,6 +37,9 @@
 #include "remoting/host/linux/x11_util.h"
 #endif
 
+#include "base/task/task_traits.h"
+#include "base/task/thread_pool.h"
+
 namespace remoting {
 
 #if defined(REMOTING_USE_X11)
@@ -189,9 +192,14 @@
 BasicDesktopEnvironment::CreateVideoCapturer() {
   DCHECK(caller_task_runner_->BelongsToCurrentThread());
 
-  auto result = std::make_unique<DesktopCapturerProxy>(
-      video_capture_task_runner_, ui_task_runner_);
-  result->set_desktop_display_info_monitor(GetDisplayInfoMonitor());
+  // Each capturer instance should get its own thread so the capturers don't
+  // compete with each other in multistream mode.
+  auto dedicated_task_runner = base::ThreadPool::CreateSingleThreadTaskRunner(
+      {base::TaskPriority::HIGHEST},
+      base::SingleThreadTaskRunnerThreadMode::DEDICATED);
+
+  auto result =
+      std::make_unique<DesktopCapturerProxy>(std::move(dedicated_task_runner));
   result->CreateCapturer(desktop_capture_options());
   return std::move(result);
 }
diff --git a/remoting/host/client_session.cc b/remoting/host/client_session.cc
index 65ab1b1..3753eac 100644
--- a/remoting/host/client_session.cc
+++ b/remoting/host/client_session.cc
@@ -270,6 +270,10 @@
                             std::move(supported_actions)));
   }
 
+  // TODO(crbug.com/1326339): Remove this code when legacy VideoLayout messages
+  // are fully deprecated and no longer sent. We already start the monitor in
+  // OnConnectionChannelsConnected() so we don't need this block if the legacy
+  // message in multi-stream mode is no longer required.
   if (HasCapability(capabilities_, protocol::kMultiStreamCapability)) {
     if (desktop_display_info_.NumDisplays() != 0) {
       // If display info is already known, create the initial video streams.
@@ -288,8 +292,6 @@
 
     // Re-send the extended layout information so the client has information
     // needed to identify each stream.
-    // TODO(crbug.com/1326339): Remove this code when legacy VideoLayout
-    // messages are fully deprecated and no longer sent.
     if (desktop_display_info_.NumDisplays() != 0) {
       OnDesktopDisplayChanged(desktop_display_info_.GetVideoLayoutProto());
     }
@@ -669,6 +671,14 @@
     pending_video_layout_message_.reset();
   }
 
+  // Query the OS for the display-info on a timer.
+  auto* display_info_monitor = desktop_environment_->GetDisplayInfoMonitor();
+  if (display_info_monitor) {
+    // In the multi-process case, |display_info_monitor| will be null and this
+    // will be handled instead by the DesktopSessionAgent.
+    display_info_monitor->Start();
+  }
+
   // Notify the event handler that all our channels are now connected.
   event_handler_->OnSessionChannelsConnected(this);
 }
diff --git a/remoting/host/desktop_capturer_proxy.cc b/remoting/host/desktop_capturer_proxy.cc
index 5329c0d..b1023105 100644
--- a/remoting/host/desktop_capturer_proxy.cc
+++ b/remoting/host/desktop_capturer_proxy.cc
@@ -17,7 +17,6 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
-#include "remoting/host/desktop_display_info_monitor.h"
 #include "remoting/proto/control.pb.h"
 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h"
 #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
@@ -50,7 +49,7 @@
   }
   void CreateCapturer(const webrtc::DesktopCaptureOptions& options);
 
-  void Start();
+  void Start(scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner);
   void SetSharedMemoryFactory(
       std::unique_ptr<webrtc::SharedMemoryFactory> shared_memory_factory);
   void SelectSource(SourceId id);
@@ -64,25 +63,25 @@
   void OnCaptureResult(webrtc::DesktopCapturer::Result result,
                        std::unique_ptr<webrtc::DesktopFrame> frame) override;
 
-  base::ThreadChecker thread_checker_;
-
   base::WeakPtr<DesktopCapturerProxy> proxy_;
   scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner_;
   std::unique_ptr<webrtc::DesktopCapturer> capturer_;
+
+  THREAD_CHECKER(thread_checker_);
 };
 
 DesktopCapturerProxy::Core::Core(base::WeakPtr<DesktopCapturerProxy> proxy)
-    : proxy_(proxy), caller_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
-  thread_checker_.DetachFromThread();
+    : proxy_(proxy) {
+  DETACH_FROM_THREAD(thread_checker_);
 }
 
 DesktopCapturerProxy::Core::~Core() {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 }
 
 void DesktopCapturerProxy::Core::CreateCapturer(
     const webrtc::DesktopCaptureOptions& options) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(!capturer_);
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -101,29 +100,36 @@
     LOG(ERROR) << "Failed to initialize screen capturer.";
 }
 
-void DesktopCapturerProxy::Core::Start() {
-  DCHECK(thread_checker_.CalledOnValidThread());
+void DesktopCapturerProxy::Core::Start(
+    scoped_refptr<base::SingleThreadTaskRunner> caller_task_runner) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  DCHECK(!caller_task_runner_);
+
+  caller_task_runner_ = caller_task_runner;
   if (capturer_)
     capturer_->Start(this);
 }
 
 void DesktopCapturerProxy::Core::SetSharedMemoryFactory(
     std::unique_ptr<webrtc::SharedMemoryFactory> shared_memory_factory) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
   if (capturer_) {
     capturer_->SetSharedMemoryFactory(std::move(shared_memory_factory));
   }
 }
 
 void DesktopCapturerProxy::Core::SelectSource(SourceId id) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
   if (capturer_) {
     capturer_->SelectSource(id);
   }
 }
 
 void DesktopCapturerProxy::Core::CaptureFrame() {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
   if (capturer_) {
     capturer_->CaptureFrame();
   } else {
@@ -133,7 +139,8 @@
 
 #if defined(WEBRTC_USE_GIO)
 void DesktopCapturerProxy::Core::GetAndSetMetadata() {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
   if (capturer_) {
     webrtc::DesktopCaptureMetadata metadata = capturer_->GetMetadata();
     caller_task_runner_->PostTask(
@@ -146,7 +153,7 @@
 void DesktopCapturerProxy::Core::OnCaptureResult(
     webrtc::DesktopCapturer::Result result,
     std::unique_ptr<webrtc::DesktopFrame> frame) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   caller_task_runner_->PostTask(
       FROM_HERE, base::BindOnce(&DesktopCapturerProxy::OnFrameCaptured, proxy_,
@@ -154,9 +161,9 @@
 }
 
 DesktopCapturerProxy::DesktopCapturerProxy(
-    scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
-    scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner)
+    scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner)
     : capture_task_runner_(capture_task_runner) {
+  DETACH_FROM_THREAD(thread_checker_);
   core_ = std::make_unique<Core>(weak_factory_.GetWeakPtr());
 }
 
@@ -164,15 +171,11 @@
   capture_task_runner_->DeleteSoon(FROM_HERE, core_.release());
 }
 
-void DesktopCapturerProxy::set_desktop_display_info_monitor(
-    DesktopDisplayInfoMonitor* monitor) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  desktop_display_info_monitor_ = monitor;
-}
-
 void DesktopCapturerProxy::CreateCapturer(
     const webrtc::DesktopCaptureOptions& options) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  // CreateCapturer() must be called before Start().
+  DCHECK(!callback_);
+
   capture_task_runner_->PostTask(
       FROM_HERE, base::BindOnce(&Core::CreateCapturer,
                                 base::Unretained(core_.get()), options));
@@ -180,21 +183,25 @@
 
 void DesktopCapturerProxy::set_capturer(
     std::unique_ptr<webrtc::DesktopCapturer> capturer) {
+  // set_capturer() must be called before Start().
+  DCHECK(!callback_);
+
   core_->set_capturer(std::move(capturer));
 }
 
 void DesktopCapturerProxy::Start(Callback* callback) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   callback_ = callback;
 
   capture_task_runner_->PostTask(
-      FROM_HERE, base::BindOnce(&Core::Start, base::Unretained(core_.get())));
+      FROM_HERE, base::BindOnce(&Core::Start, base::Unretained(core_.get()),
+                                base::ThreadTaskRunnerHandle::Get()));
 }
 
 void DesktopCapturerProxy::SetSharedMemoryFactory(
     std::unique_ptr<webrtc::SharedMemoryFactory> shared_memory_factory) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   capture_task_runner_->PostTask(
       FROM_HERE,
@@ -204,9 +211,8 @@
 }
 
 void DesktopCapturerProxy::CaptureFrame() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  // Start() must be called before Capture().
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  // Start() must be called before CaptureFrame().
   DCHECK(callback_);
 
   capture_task_runner_->PostTask(
@@ -220,7 +226,7 @@
 }
 
 bool DesktopCapturerProxy::SelectSource(SourceId id) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   capture_task_runner_->PostTask(
       FROM_HERE,
@@ -231,19 +237,16 @@
 void DesktopCapturerProxy::OnFrameCaptured(
     webrtc::DesktopCapturer::Result result,
     std::unique_ptr<webrtc::DesktopFrame> frame) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   callback_->OnCaptureResult(result, std::move(frame));
-
-  if (desktop_display_info_monitor_) {
-    desktop_display_info_monitor_->QueryDisplayInfo();
-  }
 }
 
 #if defined(WEBRTC_USE_GIO)
 void DesktopCapturerProxy::GetMetadataAsync(
     base::OnceCallback<void(webrtc::DesktopCaptureMetadata)> callback) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
   metadata_callback_ = std::move(callback);
   capture_task_runner_->PostTask(
       FROM_HERE,
@@ -251,7 +254,7 @@
 }
 
 void DesktopCapturerProxy::OnMetadata(webrtc::DesktopCaptureMetadata metadata) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   std::move(metadata_callback_).Run(std::move(metadata));
 }
diff --git a/remoting/host/desktop_capturer_proxy.h b/remoting/host/desktop_capturer_proxy.h
index b5ed411..a12d95f 100644
--- a/remoting/host/desktop_capturer_proxy.h
+++ b/remoting/host/desktop_capturer_proxy.h
@@ -7,12 +7,15 @@
 
 #include <memory>
 
-#include "base/callback.h"
 #include "base/memory/raw_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
 #include "remoting/protocol/desktop_capturer.h"
+
+#if defined(WEBRTC_USE_GIO)
+#include "base/callback.h"
 #include "third_party/webrtc/modules/desktop_capture/desktop_capture_metadata.h"
+#endif
 
 namespace base {
 class SingleThreadTaskRunner;
@@ -24,33 +27,21 @@
 
 namespace remoting {
 
-class ClientSessionControl;
-class DesktopDisplayInfoMonitor;
-
 // DesktopCapturerProxy is responsible for calling webrtc::DesktopCapturer on
 // the capturer thread and then returning results to the caller's thread.
 // GetSourceList() is not implemented by this class, it always returns false.
-// This class optionally loads the list of desktop displays on the UI thread
-// (after each captured frame), which will notify the ClientSessionControl
-// if the displays have changed.
 class DesktopCapturerProxy : public DesktopCapturer {
  public:
   explicit DesktopCapturerProxy(
-      scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner,
-      scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
+      scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner);
 
   DesktopCapturerProxy(const DesktopCapturerProxy&) = delete;
   DesktopCapturerProxy& operator=(const DesktopCapturerProxy&) = delete;
 
   ~DesktopCapturerProxy() override;
 
-  // If |monitor| is non-null, it must outlive |this|, and
-  // monitor->QueryDisplayInfo() will be called after each captured frame.
-  void set_desktop_display_info_monitor(DesktopDisplayInfoMonitor* monitor);
-
   // CreateCapturer() should be used if the capturer needs to be created on the
-  // capturer thread. Alternatively the capturer can be passed to
-  // set_capturer().
+  // capturer thread. Otherwise, the capturer can be passed to set_capturer().
   void CreateCapturer(const webrtc::DesktopCaptureOptions& options);
   void set_capturer(std::unique_ptr<webrtc::DesktopCapturer> capturer);
 
@@ -60,13 +51,12 @@
                                   shared_memory_factory) override;
   void CaptureFrame() override;
   bool GetSourceList(SourceList* sources) override;
+  bool SelectSource(SourceId id) override;
 #if defined(WEBRTC_USE_GIO)
   void GetMetadataAsync(base::OnceCallback<void(webrtc::DesktopCaptureMetadata)>
                             callback) override;
 #endif
 
-  bool SelectSource(SourceId id) override;
-
  private:
   class Core;
 
@@ -77,19 +67,17 @@
   void OnMetadata(webrtc::DesktopCaptureMetadata metadata);
 #endif
 
-  base::ThreadChecker thread_checker_;
-
   std::unique_ptr<Core> core_;
   scoped_refptr<base::SingleThreadTaskRunner> capture_task_runner_;
 
-  raw_ptr<webrtc::DesktopCapturer::Callback> callback_;
-
-  // Monitors and stores info about the desktop displays.
-  raw_ptr<DesktopDisplayInfoMonitor> desktop_display_info_monitor_ = nullptr;
+  raw_ptr<webrtc::DesktopCapturer::Callback> callback_ = nullptr;
 
 #if defined(WEBRTC_USE_GIO)
   base::OnceCallback<void(webrtc::DesktopCaptureMetadata)> metadata_callback_;
 #endif
+
+  THREAD_CHECKER(thread_checker_);
+
   base::WeakPtrFactory<DesktopCapturerProxy> weak_factory_{this};
 };
 
diff --git a/remoting/host/desktop_display_info_monitor.cc b/remoting/host/desktop_display_info_monitor.cc
index e06a1a77..24b45ec 100644
--- a/remoting/host/desktop_display_info_monitor.cc
+++ b/remoting/host/desktop_display_info_monitor.cc
@@ -45,9 +45,12 @@
 
 void DesktopDisplayInfoMonitor::Start() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  timer_running_ = true;
-  timer_.Start(FROM_HERE, kPollingInterval, this,
-               &DesktopDisplayInfoMonitor::QueryDisplayInfoImpl);
+
+  if (!timer_running_) {
+    timer_running_ = true;
+    timer_.Start(FROM_HERE, kPollingInterval, this,
+                 &DesktopDisplayInfoMonitor::QueryDisplayInfoImpl);
+  }
 }
 
 void DesktopDisplayInfoMonitor::QueryDisplayInfo() {
@@ -61,8 +64,7 @@
     DesktopDisplayInfoMonitor::Callback callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  // Adding callbacks is not supported after displays have already been
-  // loaded.
+  // Adding callbacks is not supported after displays have been loaded.
   DCHECK_EQ(desktop_display_info_.NumDisplays(), 0);
 
   callback_list_.AddUnsafe(std::move(callback));
diff --git a/remoting/host/desktop_session_agent.cc b/remoting/host/desktop_session_agent.cc
index d673173..19b3b27 100644
--- a/remoting/host/desktop_session_agent.cc
+++ b/remoting/host/desktop_session_agent.cc
@@ -406,10 +406,6 @@
   }
 
   // Start the video capturer and mouse cursor monitor.
-  // TODO(lambroslambrou): When supporting multiple streams, this class should
-  // call desktop_environment_->GetDisplayInfoMonitor()->Start(), so the
-  // display-info is queried on a timer instead of after each captured frame
-  // from multiple capturers.
   video_capturer_ = std::make_unique<DesktopAndCursorConditionalComposer>(
       desktop_environment_->CreateVideoCapturer());
   video_capturer_->Start(this);
@@ -433,6 +429,12 @@
                           base::Unretained(this)));
   keyboard_layout_monitor_->Start();
 
+  // Begin observing the desktop display(s) for changes. Note that some
+  // desktop environments may not provide a display info monitor.
+  auto* display_info_monitor = desktop_environment_->GetDisplayInfoMonitor();
+  if (display_info_monitor)
+    display_info_monitor->Start();
+
   // Set up the message handler for file transfers.
   session_file_operations_handler_.emplace(
       desktop_environment_->CreateFileOperations());
diff --git a/remoting/host/fake_desktop_environment.cc b/remoting/host/fake_desktop_environment.cc
index 9bac747e..aa50241d4 100644
--- a/remoting/host/fake_desktop_environment.cc
+++ b/remoting/host/fake_desktop_environment.cc
@@ -92,8 +92,7 @@
   if (!frame_generator_.is_null())
     fake_capturer->set_frame_generator(frame_generator_);
 
-  auto result =
-      std::make_unique<DesktopCapturerProxy>(capture_thread_, capture_thread_);
+  auto result = std::make_unique<DesktopCapturerProxy>(capture_thread_);
   result->set_capturer(std::move(fake_capturer));
   return std::move(result);
 }
diff --git a/remoting/host/x11_crtc_resizer.cc b/remoting/host/x11_crtc_resizer.cc
index 9fd6b8e7..487f86d 100644
--- a/remoting/host/x11_crtc_resizer.cc
+++ b/remoting/host/x11_crtc_resizer.cc
@@ -20,14 +20,15 @@
 namespace remoting {
 
 X11CrtcResizer::CrtcInfo::CrtcInfo() = default;
-X11CrtcResizer::CrtcInfo::CrtcInfo(x11::RandR::Crtc crtc,
-                                   int16_t x,
-                                   int16_t y,
-                                   uint16_t width,
-                                   uint16_t height,
-                                   x11::RandR::Mode mode,
-                                   x11::RandR::Rotation rotation,
-                                   std::vector<x11::RandR::Output>&& outputs)
+X11CrtcResizer::CrtcInfo::CrtcInfo(
+    x11::RandR::Crtc crtc,
+    int16_t x,
+    int16_t y,
+    uint16_t width,
+    uint16_t height,
+    x11::RandR::Mode mode,
+    x11::RandR::Rotation rotation,
+    const std::vector<x11::RandR::Output>& outputs)
     : crtc(crtc),
       x(x),
       y(y),
@@ -61,9 +62,7 @@
     if (response->outputs.empty())
       continue;
 
-    active_crtcs_.emplace_back(
-        crtc, response->x, response->y, response->width, response->height,
-        response->mode, response->rotation, std::move(response->outputs));
+    AddCrtcFromReply(crtc, *response.reply);
   }
 }
 
@@ -201,4 +200,29 @@
   }
 }
 
+void X11CrtcResizer::SetCrtcsForTest(
+    std::vector<x11::RandR::GetCrtcInfoReply> crtcs) {
+  int id = 1;
+  for (const auto& crtc : crtcs) {
+    AddCrtcFromReply(static_cast<x11::RandR::Crtc>(id), crtc);
+    id++;
+  }
+}
+
+std::vector<webrtc::DesktopRect> X11CrtcResizer::GetCrtcsForTest() const {
+  std::vector<webrtc::DesktopRect> result;
+  for (const auto& crtc_info : active_crtcs_) {
+    result.push_back(webrtc::DesktopRect::MakeXYWH(
+        crtc_info.x, crtc_info.y, crtc_info.width, crtc_info.height));
+  }
+  return result;
+}
+
+void X11CrtcResizer::AddCrtcFromReply(
+    x11::RandR::Crtc crtc,
+    const x11::RandR::GetCrtcInfoReply& reply) {
+  active_crtcs_.emplace_back(crtc, reply.x, reply.y, reply.width, reply.height,
+                             reply.mode, reply.rotation, reply.outputs);
+}
+
 }  // namespace remoting
diff --git a/remoting/host/x11_crtc_resizer.h b/remoting/host/x11_crtc_resizer.h
index 9e606d5..8378f68 100644
--- a/remoting/host/x11_crtc_resizer.h
+++ b/remoting/host/x11_crtc_resizer.h
@@ -6,6 +6,7 @@
 #define REMOTING_HOST_X11_CRTC_RESIZER_H_
 
 #include <list>
+#include <vector>
 
 #include "base/memory/raw_ptr.h"
 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
@@ -58,6 +59,14 @@
   // outputs/CRTCs that were disabled.
   void ApplyActiveCrtcs();
 
+  // Initializes the active CRTCs from a list of fake X11 replies. As the
+  // replies don't include the CRTC IDs, these will be created sequentially
+  // as 1, 2, ...
+  void SetCrtcsForTest(std::vector<x11::RandR::GetCrtcInfoReply> crtcs);
+
+  // Returns the stored CRTCs as a list of rectangles.
+  std::vector<webrtc::DesktopRect> GetCrtcsForTest() const;
+
  private:
   // Information for an active CRTC, from RRGetCrtcInfo response. When
   // modifying a CRTC, the information here can reconstruct the original
@@ -71,7 +80,7 @@
              uint16_t height,
              x11::RandR::Mode mode,
              x11::RandR::Rotation rotation,
-             std::vector<x11::RandR::Output>&& outputs);
+             const std::vector<x11::RandR::Output>& outputs);
     CrtcInfo(const CrtcInfo&);
     CrtcInfo(CrtcInfo&&);
     CrtcInfo& operator=(const CrtcInfo&);
@@ -91,6 +100,10 @@
     bool changed = false;
   };
 
+  // Adds a new active CRTC from a reply to RRGetCrtcInfo.
+  void AddCrtcFromReply(x11::RandR::Crtc crtc,
+                        const x11::RandR::GetCrtcInfoReply& reply);
+
   raw_ptr<x11::RandR::GetScreenResourcesCurrentReply> resources_;
   raw_ptr<x11::RandR> randr_;
 
diff --git a/remoting/host/x11_crtc_resizer_unittest.cc b/remoting/host/x11_crtc_resizer_unittest.cc
new file mode 100644
index 0000000..ff70067
--- /dev/null
+++ b/remoting/host/x11_crtc_resizer_unittest.cc
@@ -0,0 +1,69 @@
+// Copyright 2022 The Chromium Authors.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "remoting/host/x11_crtc_resizer.h"
+
+#include "inttypes.h"
+
+#include <string>
+
+#include "base/strings/stringprintf.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using webrtc::DesktopRect;
+using Crtc = x11::RandR::Crtc;
+using Mode = x11::RandR::Mode;
+
+namespace {
+
+std::string PrettyPrint(const DesktopRect& rect) {
+  // Example output: 10x20+30-40
+  return base::StringPrintf("%" PRId32 "x%" PRId32 "%+" PRId32 "%+" PRId32,
+                            rect.width(), rect.height(), rect.left(),
+                            rect.top());
+}
+
+void ExpectEqual(const DesktopRect& rect1, const DesktopRect& rect2) {
+  if (!rect1.equals(rect2)) {
+    ADD_FAILURE() << "Expected equality of [" << PrettyPrint(rect1) << "] and ["
+                  << PrettyPrint(rect2) << "]";
+  }
+}
+
+}  // namespace
+
+namespace remoting {
+
+TEST(X11CrtcResizerTest, ResizeInPlace) {
+  X11CrtcResizer resizer(nullptr, nullptr);
+  resizer.SetCrtcsForTest({
+      {.x = 0, .y = 0, .width = 100, .height = 100},
+      {.x = 100, .y = 100, .width = 100, .height = 100},
+  });
+
+  resizer.UpdateActiveCrtcs(Crtc(1), Mode(0), {10, 20});
+  resizer.UpdateActiveCrtcs(Crtc(2), Mode(0), {30, 40});
+
+  auto result = resizer.GetCrtcsForTest();
+  ExpectEqual(result[0], DesktopRect::MakeXYWH(0, 0, 10, 20));
+  ExpectEqual(result[1], DesktopRect::MakeXYWH(100, 100, 30, 40));
+}
+
+TEST(X11CrtcResizerTest, ShiftToMakeRoom) {
+  X11CrtcResizer resizer(nullptr, nullptr);
+  resizer.SetCrtcsForTest({
+      {.x = 0, .y = 0, .width = 100, .height = 100},
+      {.x = 100, .y = 0, .width = 100, .height = 100},
+      {.x = 0, .y = 100, .width = 100, .height = 100},
+  });
+
+  resizer.UpdateActiveCrtcs(Crtc(1), Mode(0), {300, 200});
+
+  auto result = resizer.GetCrtcsForTest();
+  ExpectEqual(result[0], DesktopRect::MakeXYWH(0, 0, 300, 200));
+  ExpectEqual(result[1], DesktopRect::MakeXYWH(300, 0, 100, 100));
+  ExpectEqual(result[2], DesktopRect::MakeXYWH(0, 200, 100, 100));
+}
+
+}  // namespace remoting
diff --git a/remoting/protocol/webrtc_frame_scheduler_constant_rate.cc b/remoting/protocol/webrtc_frame_scheduler_constant_rate.cc
index 1f760a4..28054465 100644
--- a/remoting/protocol/webrtc_frame_scheduler_constant_rate.cc
+++ b/remoting/protocol/webrtc_frame_scheduler_constant_rate.cc
@@ -11,7 +11,9 @@
 
 namespace remoting::protocol {
 
-WebrtcFrameSchedulerConstantRate::WebrtcFrameSchedulerConstantRate() = default;
+WebrtcFrameSchedulerConstantRate::WebrtcFrameSchedulerConstantRate() {
+  DETACH_FROM_SEQUENCE(sequence_checker_);
+}
 
 WebrtcFrameSchedulerConstantRate::~WebrtcFrameSchedulerConstantRate() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
@@ -32,8 +34,8 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
   if (encoded_frame && encoded_frame->stats) {
-    // This scheduler cannot estimate this delay. Set it to 0
-    // so the client can still calculate the derived stats.
+    // This scheduler cannot estimate this delay. Set it to 0 so the client can
+    // still calculate the derived stats.
     encoded_frame->stats->send_pending_delay = base::TimeDelta();
   }
 }
@@ -47,11 +49,13 @@
 void WebrtcFrameSchedulerConstantRate::Start(
     const base::RepeatingClosure& capture_callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   capture_callback_ = capture_callback;
 }
 
 void WebrtcFrameSchedulerConstantRate::Pause(bool pause) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
   paused_ = pause;
   if (paused_) {
     capture_timer_.Stop();
@@ -64,14 +68,15 @@
     const webrtc::DesktopFrame* frame) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(frame_pending_);
+
   frame_pending_ = false;
   ScheduleNextFrame();
 }
 
-void WebrtcFrameSchedulerConstantRate::SetMaxFramerateFps(
-    int max_framerate_fps) {
+void WebrtcFrameSchedulerConstantRate::SetMaxFramerateFps(int max_framerate) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  max_framerate_fps_ = max_framerate_fps;
+
+  max_framerate_fps_ = max_framerate;
   ScheduleNextFrame();
 }
 
@@ -127,6 +132,7 @@
 void WebrtcFrameSchedulerConstantRate::CaptureNextFrame() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   DCHECK(!frame_pending_);
+
   last_capture_started_time_ = base::TimeTicks::Now();
   frame_pending_ = true;
   capture_callback_.Run();
diff --git a/remoting/protocol/webrtc_frame_scheduler_constant_rate.h b/remoting/protocol/webrtc_frame_scheduler_constant_rate.h
index b77756b..b36d5a4f 100644
--- a/remoting/protocol/webrtc_frame_scheduler_constant_rate.h
+++ b/remoting/protocol/webrtc_frame_scheduler_constant_rate.h
@@ -11,8 +11,7 @@
 #include "base/thread_annotations.h"
 #include "base/timer/timer.h"
 
-namespace remoting {
-namespace protocol {
+namespace remoting::protocol {
 
 // WebrtcFrameSchedulerConstantRate is an implementation of WebrtcFrameScheduler
 // that captures frames at a fixed rate. It uses the maximum frame rate provided
@@ -66,7 +65,6 @@
   SEQUENCE_CHECKER(sequence_checker_);
 };
 
-}  // namespace protocol
-}  // namespace remoting
+}  // namespace remoting::protocol
 
 #endif  // REMOTING_PROTOCOL_WEBRTC_FRAME_SCHEDULER_CONSTANT_RATE_H_
diff --git a/remoting/protocol/webrtc_video_stream.cc b/remoting/protocol/webrtc_video_stream.cc
index b960107..b2a73d8 100644
--- a/remoting/protocol/webrtc_video_stream.cc
+++ b/remoting/protocol/webrtc_video_stream.cc
@@ -8,7 +8,11 @@
 #include <utility>
 
 #include "base/bind.h"
+#include "base/location.h"
 #include "base/logging.h"
+#include "base/task/single_thread_task_runner.h"
+#include "base/task/thread_pool.h"
+#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
 #include "remoting/base/constants.h"
 #include "remoting/protocol/frame_stats.h"
@@ -21,9 +25,9 @@
 #include "third_party/webrtc/api/media_stream_interface.h"
 #include "third_party/webrtc/api/notifier.h"
 #include "third_party/webrtc/api/peer_connection_interface.h"
+#include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
 
-namespace remoting {
-namespace protocol {
+namespace remoting::protocol {
 
 struct WebrtcVideoStream::FrameStats : public WebrtcVideoEncoder::FrameStats {
   FrameStats() = default;
@@ -31,8 +35,7 @@
   FrameStats& operator=(const FrameStats&) = default;
   ~FrameStats() override = default;
 
-  // The input-event fields are non-null only for one frame after each
-  // incoming input event.
+  // The input-event fields are only valid for the frame after an input event.
   InputEventTimestamps input_event_timestamps;
 
   base::TimeDelta capture_delay;
@@ -41,15 +44,188 @@
   webrtc::ScreenId screen_id = webrtc::kInvalidScreenId;
 };
 
+class WebrtcVideoStream::Core : public webrtc::DesktopCapturer::Callback {
+ public:
+  Core(std::unique_ptr<webrtc::DesktopCapturer> capturer,
+       base::WeakPtr<WebrtcVideoStream> video_stream);
+
+  Core(const Core&) = delete;
+  Core& operator=(const Core&) = delete;
+
+  ~Core() override;
+
+  // Called by the owning class to begin capturing and encoding the desktop.
+  void Start();
+
+  // webrtc::DesktopCapturer::Callback interface.
+  void OnCaptureResult(webrtc::DesktopCapturer::Result result,
+                       std::unique_ptr<webrtc::DesktopFrame> frame) override;
+
+  // Mimics the remoting::VideoStream interface but only implements the methods
+  // the outer class needs to call.
+  void SetEventTimestampsSource(
+      scoped_refptr<InputEventTimestampsSource> event_timestamps_source);
+  void Pause(bool pause);
+  void SelectSource(webrtc::ScreenId id);
+
+  // Mimics the remoting::VideoChannelStateObserver interface but only
+  // implements the methods the outer class needs to call.
+  void OnKeyFrameRequested();
+  void OnTargetBitrateChanged(int bitrate_kbps);
+
+  // Called by the video track source to set the max frame rate for the stream.
+  void SetMaxFramerateFps(int max_framerate_fps);
+
+ private:
+  // Called by the |scheduler_|.
+  void CaptureNextFrame();
+
+  THREAD_CHECKER(thread_checker_);
+
+  // The current frame size.
+  webrtc::DesktopSize frame_size_;
+
+  // The current frame DPI.
+  webrtc::DesktopVector frame_dpi_;
+
+  // Screen ID of the monitor being captured, from SelectSource().
+  webrtc::ScreenId screen_id_ = webrtc::kInvalidScreenId;
+
+  // Stats of the frame that's being captured.
+  std::unique_ptr<FrameStats> current_frame_stats_;
+
+  // Capturer used to capture the screen.
+  std::unique_ptr<webrtc::DesktopCapturer> capturer_;
+
+  // Schedules the next video frame.
+  WebrtcFrameSchedulerConstantRate scheduler_;
+
+  // Provides event timestamps which are used for |current_frame_stats|.
+  scoped_refptr<InputEventTimestampsSource> event_timestamps_source_;
+
+  // Points back to the WebrtcVideoStream instance which owns |this|.
+  base::WeakPtr<WebrtcVideoStream> video_stream_;
+
+  // Allows Core to post messages to its owner in a thread-safe manner.
+  scoped_refptr<base::SingleThreadTaskRunner> video_stream_task_runner_;
+};
+
+WebrtcVideoStream::Core::Core(std::unique_ptr<webrtc::DesktopCapturer> capturer,
+                              base::WeakPtr<WebrtcVideoStream> video_stream)
+    : capturer_(std::move(capturer)),
+      video_stream_(std::move(video_stream)),
+      video_stream_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
+  DETACH_FROM_THREAD(thread_checker_);
+}
+
+WebrtcVideoStream::Core::~Core() = default;
+
+void WebrtcVideoStream::Core::Start() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  capturer_->Start(this);
+  scheduler_.Start(base::BindRepeating(
+      &WebrtcVideoStream::Core::CaptureNextFrame, base::Unretained(this)));
+}
+
+void WebrtcVideoStream::Core::OnCaptureResult(
+    webrtc::DesktopCapturer::Result result,
+    std::unique_ptr<webrtc::DesktopFrame> frame) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  current_frame_stats_->capture_ended_time = base::TimeTicks::Now();
+  current_frame_stats_->capture_delay =
+      base::Milliseconds(frame ? frame->capture_time_ms() : 0);
+
+  if (!frame || frame->size().is_empty()) {
+    scheduler_.OnFrameCaptured(nullptr);
+    return;
+  }
+
+  // TODO(sergeyu): Handle ERROR_PERMANENT result here.
+  webrtc::DesktopVector dpi =
+      frame->dpi().is_zero() ? webrtc::DesktopVector(kDefaultDpi, kDefaultDpi)
+                             : frame->dpi();
+
+  if (!frame_size_.equals(frame->size()) || !frame_dpi_.equals(dpi)) {
+    frame_size_ = frame->size();
+    frame_dpi_ = dpi;
+    video_stream_task_runner_->PostTask(
+        FROM_HERE, base::BindOnce(&WebrtcVideoStream::OnVideoSizeChanged,
+                                  video_stream_, frame_size_, frame_dpi_));
+  }
+
+  current_frame_stats_->capturer_id = frame->capturer_id();
+
+  scheduler_.OnFrameCaptured(frame.get());
+
+  video_stream_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(&WebrtcVideoStream::SendCapturedFrame, video_stream_,
+                     std::move(frame), std::move(current_frame_stats_)));
+}
+
+void WebrtcVideoStream::Core::SetEventTimestampsSource(
+    scoped_refptr<InputEventTimestampsSource> event_timestamps_source) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  event_timestamps_source_ = event_timestamps_source;
+}
+
+void WebrtcVideoStream::Core::Pause(bool pause) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  scheduler_.Pause(pause);
+}
+
+void WebrtcVideoStream::Core::SelectSource(webrtc::ScreenId id) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  screen_id_ = id;
+  capturer_->SelectSource(id);
+}
+
+void WebrtcVideoStream::Core::OnKeyFrameRequested() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  scheduler_.OnKeyFrameRequested();
+}
+
+void WebrtcVideoStream::Core::OnTargetBitrateChanged(int bitrate_kbps) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  scheduler_.OnTargetBitrateChanged(bitrate_kbps);
+}
+
+void WebrtcVideoStream::Core::SetMaxFramerateFps(int max_framerate_fps) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  scheduler_.SetMaxFramerateFps(max_framerate_fps);
+}
+
+void WebrtcVideoStream::Core::CaptureNextFrame() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  current_frame_stats_ = std::make_unique<FrameStats>();
+  current_frame_stats_->capture_started_time = base::TimeTicks::Now();
+  current_frame_stats_->input_event_timestamps =
+      event_timestamps_source_->TakeLastEventTimestamps();
+  current_frame_stats_->screen_id = screen_id_;
+
+  capturer_->CaptureFrame();
+}
+
 WebrtcVideoStream::WebrtcVideoStream(const std::string& stream_name,
                                      const SessionOptions& session_options)
-    : stream_name_(stream_name), session_options_(session_options) {}
+    : stream_name_(stream_name), session_options_(session_options) {
+  core_task_runner_ = base::ThreadPool::CreateSingleThreadTaskRunner(
+      {base::TaskPriority::HIGHEST},
+      base::SingleThreadTaskRunnerThreadMode::DEDICATED);
+}
 
 WebrtcVideoStream::~WebrtcVideoStream() {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  if (core_) {
+    core_task_runner_->DeleteSoon(FROM_HERE, core_.release());
+  }
 
   if (peer_connection_ && transceiver_) {
-    // Ignore any error here, as this may return an error if the
+    // Ignore any errors here, as this may return an error if the
     // peer-connection has been closed.
     peer_connection_->RemoveTrackOrError(transceiver_->sender());
   }
@@ -59,7 +235,7 @@
     std::unique_ptr<webrtc::DesktopCapturer> desktop_capturer,
     WebrtcTransport* webrtc_transport,
     WebrtcVideoEncoderFactory* video_encoder_factory) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(desktop_capturer);
   DCHECK(webrtc_transport);
   DCHECK(video_encoder_factory);
@@ -70,9 +246,6 @@
   DCHECK(peer_connection_factory);
   DCHECK(peer_connection_);
 
-  capturer_ = std::move(desktop_capturer);
-  capturer_->Start(this);
-
   video_track_source_ = new rtc::RefCountedObject<WebrtcVideoTrackSource>(
       base::BindRepeating(&WebrtcVideoStream::OnSinkAddedOrUpdated,
                           weak_factory_.GetWeakPtr()));
@@ -91,117 +264,102 @@
 
   video_encoder_factory->SetVideoChannelStateObserver(
       weak_factory_.GetWeakPtr());
-  scheduler_ = std::make_unique<WebrtcFrameSchedulerConstantRate>();
-  scheduler_->Start(base::BindRepeating(&WebrtcVideoStream::CaptureNextFrame,
-                                        base::Unretained(this)));
+
+  core_ = std::make_unique<Core>(std::move(desktop_capturer),
+                                 weak_factory_.GetWeakPtr());
+  core_task_runner_->PostTask(FROM_HERE,
+                              base::BindOnce(&WebrtcVideoStream::Core::Start,
+                                             base::Unretained(core_.get())));
 }
 
 void WebrtcVideoStream::SelectSource(webrtc::ScreenId id) {
-  screen_id_ = id;
-  capturer_->SelectSource(id);
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  // Unretained is sound as |core_| is owned by |this| and destroyed on
+  // |core_task_runner_|.
+  core_task_runner_->PostTask(
+      FROM_HERE, base::BindOnce(&WebrtcVideoStream::Core::SelectSource,
+                                base::Unretained(core_.get()), id));
 }
 
 void WebrtcVideoStream::SetEventTimestampsSource(
     scoped_refptr<InputEventTimestampsSource> event_timestamps_source) {
-  event_timestamps_source_ = event_timestamps_source;
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  // Unretained is sound as |core_| is owned by |this| and destroyed on
+  // |core_task_runner_|.
+  core_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(&WebrtcVideoStream::Core::SetEventTimestampsSource,
+                     base::Unretained(core_.get()),
+                     base::RetainedRef(event_timestamps_source)));
 }
 
 void WebrtcVideoStream::Pause(bool pause) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  scheduler_->Pause(pause);
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  // Unretained is sound as |core_| is owned by |this| and destroyed on
+  // |core_task_runner_|.
+  core_task_runner_->PostTask(
+      FROM_HERE, base::BindOnce(&WebrtcVideoStream::Core::Pause,
+                                base::Unretained(core_.get()), pause));
 }
 
-void WebrtcVideoStream::SetLosslessEncode(bool want_lossless) {
+void WebrtcVideoStream::SetLosslessEncode(bool want_lossless_encode) {
   NOTIMPLEMENTED();
 }
 
-void WebrtcVideoStream::SetLosslessColor(bool want_lossless) {
-  NOTIMPLEMENTED() << "Changing lossless-color for VP9 requires SDP "
-                      "offer/answer exchange.";
+void WebrtcVideoStream::SetLosslessColor(bool want_lossless_color) {
+  NOTIMPLEMENTED();
 }
 
 void WebrtcVideoStream::SetObserver(Observer* observer) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   observer_ = observer;
 }
 
 void WebrtcVideoStream::OnKeyFrameRequested() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  scheduler_->OnKeyFrameRequested();
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  // Unretained is sound as |core_| is owned by |this| and destroyed on
+  // |core_task_runner_|.
+  core_task_runner_->PostTask(
+      FROM_HERE, base::BindOnce(&WebrtcVideoStream::Core::OnKeyFrameRequested,
+                                base::Unretained(core_.get())));
 }
 
 void WebrtcVideoStream::OnTargetBitrateChanged(int bitrate_kbps) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-  scheduler_->OnTargetBitrateChanged(bitrate_kbps);
-}
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
-void WebrtcVideoStream::OnCaptureResult(
-    webrtc::DesktopCapturer::Result result,
-    std::unique_ptr<webrtc::DesktopFrame> frame) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  current_frame_stats_->capture_ended_time = base::TimeTicks::Now();
-  current_frame_stats_->capture_delay =
-      base::Milliseconds(frame ? frame->capture_time_ms() : 0);
-
-  if (!frame || frame->size().is_empty()) {
-    scheduler_->OnFrameCaptured(nullptr);
-    return;
-  }
-
-  // TODO(sergeyu): Handle ERROR_PERMANENT result here.
-  webrtc::DesktopVector dpi =
-      frame->dpi().is_zero() ? webrtc::DesktopVector(kDefaultDpi, kDefaultDpi)
-                             : frame->dpi();
-
-  if (!frame_size_.equals(frame->size()) || !frame_dpi_.equals(dpi)) {
-    frame_size_ = frame->size();
-    frame_dpi_ = dpi;
-    if (observer_)
-      observer_->OnVideoSizeChanged(this, frame_size_, frame_dpi_);
-  }
-
-  current_frame_stats_->capturer_id = frame->capturer_id();
-
-  scheduler_->OnFrameCaptured(frame.get());
-
-  // Send the captured frame to the registered sink, if any. WebRTC will route
-  // this to the appropriate encoder.
-  video_track_source_->SendCapturedFrame(std::move(frame),
-                                         std::move(current_frame_stats_));
-}
-
-void WebrtcVideoStream::CaptureNextFrame() {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  current_frame_stats_ = std::make_unique<FrameStats>();
-  current_frame_stats_->capture_started_time = base::TimeTicks::Now();
-  current_frame_stats_->input_event_timestamps =
-      event_timestamps_source_->TakeLastEventTimestamps();
-  current_frame_stats_->screen_id = screen_id_;
-
-  capturer_->CaptureFrame();
-}
-
-void WebrtcVideoStream::OnSinkAddedOrUpdated(const rtc::VideoSinkWants& wants) {
-  DCHECK(thread_checker_.CalledOnValidThread());
-
-  VLOG(0) << "WebRTC requested max framerate: " << wants.max_framerate_fps
-          << " FPS";
-  scheduler_->SetMaxFramerateFps(wants.max_framerate_fps);
+  // Unretained is sound as |core_| is owned by |this| and destroyed on
+  // |core_task_runner_|.
+  core_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(&WebrtcVideoStream::Core::OnTargetBitrateChanged,
+                     base::Unretained(core_.get()), bitrate_kbps));
 }
 
 void WebrtcVideoStream::OnFrameEncoded(
     WebrtcVideoEncoder::EncodeResult encode_result,
     const WebrtcVideoEncoder::EncodedFrame* frame) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
-  scheduler_->OnFrameEncoded(encode_result, frame);
+  // Setting this field here allows us to skip a PostTask roundtrip to the
+  // scheduler. This is what WebrtcFrameSchedulerConstantRate::OnFrameEncoded()
+  // does internally so the time savings and complexity reduction seems like a
+  // reasonable trade-off.
+  if (frame && frame->stats) {
+    // WebrtcFrameSchedulerConstantRate cannot estimate this delay. Set it to 0
+    // so the client can still calculate the derived stats.
+    frame->stats->send_pending_delay = base::TimeDelta();
+  }
 }
 
 void WebrtcVideoStream::OnEncodedFrameSent(
     webrtc::EncodedImageCallback::Result result,
     const WebrtcVideoEncoder::EncodedFrame& frame) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
   if (result.error != webrtc::EncodedImageCallback::Result::OK) {
     // TODO(sergeyu): Stop the stream.
     LOG(ERROR) << "Failed to send video frame.";
@@ -249,8 +407,7 @@
 
     // Convert the frame quantizer to a measure of frame quality between 0 and
     // 100, for a simple visualization of quality over time. The quantizer from
-    // VP8/VP9 encoder lies within 0-63, with 0 representing a lossless
-    // frame.
+    // VP8/VP9 encoder lies within 0-63, with 0 representing a lossless frame.
     // TODO(crbug.com/891571): Remove |quantizer| from the WebrtcVideoEncoder
     // interface, and move this logic to the encoders.
     stats.frame_quality = (63 - frame.quantizer) * 100 / 63;
@@ -261,5 +418,39 @@
   }
 }
 
-}  // namespace protocol
-}  // namespace remoting
+void WebrtcVideoStream::OnSinkAddedOrUpdated(const rtc::VideoSinkWants& wants) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  VLOG(0) << "WebRTC requested max framerate: " << wants.max_framerate_fps
+          << " FPS";
+
+  // Unretained is sound as |core_| is owned by |this| and destroyed on
+  // |core_task_runner_|.
+  core_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(&WebrtcVideoStream::Core::SetMaxFramerateFps,
+                     base::Unretained(core_.get()), wants.max_framerate_fps));
+}
+
+void WebrtcVideoStream::OnVideoSizeChanged(webrtc::DesktopSize frame_size,
+                                           webrtc::DesktopVector frame_dpi) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  if (observer_) {
+    observer_->OnVideoSizeChanged(this, std::move(frame_size),
+                                  std::move(frame_dpi));
+  }
+}
+
+void WebrtcVideoStream::SendCapturedFrame(
+    std::unique_ptr<webrtc::DesktopFrame> desktop_frame,
+    std::unique_ptr<WebrtcVideoEncoder::FrameStats> frame_stats) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+
+  // Send the captured frame to the registered sink, if any. WebRTC will route
+  // this to the appropriate encoder.
+  video_track_source_->SendCapturedFrame(std::move(desktop_frame),
+                                         std::move(frame_stats));
+}
+
+}  // namespace remoting::protocol
diff --git a/remoting/protocol/webrtc_video_stream.h b/remoting/protocol/webrtc_video_stream.h
index e8b99131..ea3404d 100644
--- a/remoting/protocol/webrtc_video_stream.h
+++ b/remoting/protocol/webrtc_video_stream.h
@@ -23,21 +23,21 @@
 #include "third_party/webrtc/api/video_codecs/sdp_video_format.h"
 #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
 
+namespace base {
+class SingleThreadTaskRunner;
+}  // namespace base
+
 namespace webrtc {
 class PeerConnectionInterface;
 }  // namespace webrtc
 
-namespace remoting {
-namespace protocol {
+namespace remoting::protocol {
 
 class HostVideoStatsDispatcher;
 class WebrtcVideoEncoderFactory;
-class WebrtcFrameScheduler;
 class WebrtcTransport;
 
-class WebrtcVideoStream : public VideoStream,
-                          public webrtc::DesktopCapturer::Callback,
-                          public VideoChannelStateObserver {
+class WebrtcVideoStream : public VideoStream, public VideoChannelStateObserver {
  public:
   WebrtcVideoStream(const std::string& stream_name,
                     const SessionOptions& options);
@@ -75,56 +75,44 @@
       const WebrtcVideoEncoder::EncodedFrame& frame) override;
 
  private:
+  class Core;
   struct FrameStats;
 
-  // webrtc::DesktopCapturer::Callback interface.
-  void OnCaptureResult(webrtc::DesktopCapturer::Result result,
-                       std::unique_ptr<webrtc::DesktopFrame> frame) override;
-
-  // Called by the |scheduler_|.
-  void CaptureNextFrame();
-
   // Called by |video_track_source_|.
   void OnSinkAddedOrUpdated(const rtc::VideoSinkWants& wants);
 
-  // Screen ID of the monitor being captured, from SelectSource().
-  webrtc::ScreenId screen_id_ = webrtc::kInvalidScreenId;
+  // Called from |core_|.
+  void OnVideoSizeChanged(webrtc::DesktopSize frame_size,
+                          webrtc::DesktopVector frame_dpi);
+  void SendCapturedFrame(
+      std::unique_ptr<webrtc::DesktopFrame> desktop_frame,
+      std::unique_ptr<WebrtcVideoEncoder::FrameStats> frame_stats);
+
+  THREAD_CHECKER(thread_checker_);
 
   // Label of the associated WebRTC video-stream.
   std::string stream_name_;
 
-  // Capturer used to capture the screen.
-  std::unique_ptr<webrtc::DesktopCapturer> capturer_;
-
   // Used to send captured frames to the encoder.
   rtc::scoped_refptr<WebrtcVideoTrackSource> video_track_source_;
 
   // The transceiver created for this video-stream.
   rtc::scoped_refptr<webrtc::RtpTransceiverInterface> transceiver_;
 
-  scoped_refptr<InputEventTimestampsSource> event_timestamps_source_;
-
   scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_;
 
   base::WeakPtr<HostVideoStatsDispatcher> video_stats_dispatcher_;
 
-  // Stats of the frame that's being captured.
-  std::unique_ptr<FrameStats> current_frame_stats_;
-
-  std::unique_ptr<WebrtcFrameScheduler> scheduler_;
-
-  webrtc::DesktopSize frame_size_;
-  webrtc::DesktopVector frame_dpi_;
   raw_ptr<Observer> observer_ = nullptr;
 
-  base::ThreadChecker thread_checker_;
-
   const SessionOptions session_options_;
 
+  std::unique_ptr<Core> core_;
+  scoped_refptr<base::SingleThreadTaskRunner> core_task_runner_;
+
   base::WeakPtrFactory<WebrtcVideoStream> weak_factory_{this};
 };
 
-}  // namespace protocol
-}  // namespace remoting
+}  // namespace remoting::protocol
 
 #endif  // REMOTING_PROTOCOL_WEBRTC_VIDEO_STREAM_H_
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
index 7dbcc49..38a3afd 100644
--- a/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
+++ b/services/tracing/public/cpp/perfetto/trace_event_data_source_unittest.cc
@@ -1315,13 +1315,7 @@
   EXPECT_EQ(annotations[1].legacy_json_value(), kArgValue2);
 }
 
-#if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
-// TODO(crbug.com/1309080): Re-enable after fix.
-#define MAYBE_NestableAsyncTraceEvent DISABLED_NestableAsyncTraceEvent
-#else
-#define MAYBE_NestableAsyncTraceEvent NestableAsyncTraceEvent
-#endif
-TEST_F(TraceEventDataSourceTest, MAYBE_NestableAsyncTraceEvent) {
+TEST_F(TraceEventDataSourceTest, NestableAsyncTraceEvent) {
   constexpr bool kPrivacyFilteringEnabled = true;
   StartTraceEventDataSource(kPrivacyFilteringEnabled);
 
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json
index 2f85751..aebb93f 100644
--- a/testing/buildbot/chrome.json
+++ b/testing/buildbot/chrome.json
@@ -1932,7 +1932,7 @@
       {
         "args": [],
         "cros_board": "atlas",
-        "cros_img": "atlas-release/R106-15048.0.0",
+        "cros_img": "atlas-release/R106-15054.10.0",
         "name": "lacros_all_tast_tests ATLAS_RELEASE_DEV",
         "resultdb": {
           "enable": true,
@@ -2103,7 +2103,7 @@
       {
         "args": [],
         "cros_board": "jacuzzi",
-        "cros_img": "jacuzzi-release/R106-15048.0.0",
+        "cros_img": "jacuzzi-release/R106-15054.10.0",
         "name": "lacros_all_tast_tests JACUZZI_RELEASE_DEV",
         "resultdb": {
           "enable": true,
diff --git a/testing/buildbot/internal.chromeos.fyi.json b/testing/buildbot/internal.chromeos.fyi.json
index 84a94a35..1e7fa1a 100644
--- a/testing/buildbot/internal.chromeos.fyi.json
+++ b/testing/buildbot/internal.chromeos.fyi.json
@@ -1049,7 +1049,7 @@
       {
         "args": [],
         "cros_board": "octopus",
-        "cros_img": "octopus-release/R106-15048.0.0",
+        "cros_img": "octopus-release/R106-15054.10.0",
         "name": "lacros_fyi_tast_tests OCTOPUS_RELEASE_DEV",
         "swarming": {},
         "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)",
@@ -1096,7 +1096,7 @@
       {
         "args": [],
         "cros_board": "octopus",
-        "cros_img": "octopus-release/R106-15048.0.0",
+        "cros_img": "octopus-release/R106-15054.10.0",
         "name": "ozone_unittests OCTOPUS_RELEASE_DEV",
         "swarming": {},
         "test": "ozone_unittests",
@@ -1148,7 +1148,7 @@
       {
         "args": [],
         "cros_board": "hana",
-        "cros_img": "hana-release/R106-15048.0.0",
+        "cros_img": "hana-release/R106-15054.10.0",
         "name": "lacros_all_tast_tests HANA_RELEASE_DEV",
         "swarming": {},
         "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)",
@@ -1196,7 +1196,7 @@
       {
         "args": [],
         "cros_board": "strongbad",
-        "cros_img": "strongbad-release/R105-14989.11.0",
+        "cros_img": "strongbad-release/R106-15054.10.0",
         "name": "lacros_all_tast_tests strongbad_RELEASE_DEV",
         "swarming": {},
         "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)",
@@ -1243,7 +1243,7 @@
       {
         "args": [],
         "cros_board": "hana",
-        "cros_img": "hana-release/R106-15048.0.0",
+        "cros_img": "hana-release/R106-15054.10.0",
         "name": "ozone_unittests HANA_RELEASE_DEV",
         "swarming": {},
         "test": "ozone_unittests",
@@ -1287,7 +1287,7 @@
       {
         "args": [],
         "cros_board": "strongbad",
-        "cros_img": "strongbad-release/R105-14989.11.0",
+        "cros_img": "strongbad-release/R106-15054.10.0",
         "name": "ozone_unittests strongbad_RELEASE_DEV",
         "swarming": {},
         "test": "ozone_unittests",
@@ -1331,7 +1331,7 @@
       {
         "args": [],
         "cros_board": "hana",
-        "cros_img": "hana-release/R106-15048.0.0",
+        "cros_img": "hana-release/R106-15054.10.0",
         "name": "viz_unittests HANA_RELEASE_DEV",
         "swarming": {},
         "test": "viz_unittests",
@@ -1375,7 +1375,7 @@
       {
         "args": [],
         "cros_board": "strongbad",
-        "cros_img": "strongbad-release/R105-14989.11.0",
+        "cros_img": "strongbad-release/R106-15054.10.0",
         "name": "viz_unittests strongbad_RELEASE_DEV",
         "swarming": {},
         "test": "viz_unittests",
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl
index 7bd2415..c27130f 100644
--- a/testing/buildbot/variants.pyl
+++ b/testing/buildbot/variants.pyl
@@ -846,8 +846,8 @@
   'CROS_ATLAS_RELEASE_DEV': {
     'skylab': {
       'cros_board': 'atlas',
-      'cros_chrome_version': '106.0.5239.0',
-      'cros_img': 'atlas-release/R106-15048.0.0',
+      'cros_chrome_version': '106.0.5249.7',
+      'cros_img': 'atlas-release/R106-15054.10.0',
     },
     'enabled': True,
     'identifier': 'ATLAS_RELEASE_DEV',
@@ -927,8 +927,8 @@
   'CROS_HANA_RELEASE_DEV': {
     'skylab': {
       'cros_board': 'hana',
-      'cros_chrome_version': '106.0.5239.0',
-      'cros_img': 'hana-release/R106-15048.0.0',
+      'cros_chrome_version': '106.0.5249.7',
+      'cros_img': 'hana-release/R106-15054.10.0',
     },
     'enabled': True,
     'identifier': 'HANA_RELEASE_DEV',
@@ -972,8 +972,8 @@
   'CROS_JACUZZI_RELEASE_DEV': {
     'skylab': {
       'cros_board': 'jacuzzi',
-      'cros_chrome_version': '106.0.5239.0',
-      'cros_img': 'jacuzzi-release/R106-15048.0.0',
+      'cros_chrome_version': '106.0.5249.7',
+      'cros_img': 'jacuzzi-release/R106-15054.10.0',
     },
     'enabled': True,
     'identifier': 'JACUZZI_RELEASE_DEV',
@@ -1017,8 +1017,8 @@
   'CROS_OCTOPUS_RELEASE_DEV': {
     'skylab': {
       'cros_board': 'octopus',
-      'cros_chrome_version': '106.0.5239.0',
-      'cros_img': 'octopus-release/R106-15048.0.0',
+      'cros_chrome_version': '106.0.5249.7',
+      'cros_img': 'octopus-release/R106-15054.10.0',
     },
     'enabled': True,
     'identifier': 'OCTOPUS_RELEASE_DEV',
@@ -1053,8 +1053,8 @@
   'CROS_STRONGBAD_RELEASE_DEV': {
     'skylab': {
       'cros_board': 'strongbad',
-      'cros_chrome_version': '105.0.5195.5',
-      'cros_img': 'strongbad-release/R105-14989.11.0',
+      'cros_chrome_version': '106.0.5249.7',
+      'cros_img': 'strongbad-release/R106-15054.10.0',
     },
     'enabled': True,
     'identifier': 'strongbad_RELEASE_DEV',
diff --git a/third_party/android_deps/additional_readme_paths.json b/third_party/android_deps/additional_readme_paths.json
index b4fc000..a19763a 100644
--- a/third_party/android_deps/additional_readme_paths.json
+++ b/third_party/android_deps/additional_readme_paths.json
@@ -114,6 +114,8 @@
     "libs/javax_annotation_javax_annotation_api",
     "libs/javax_annotation_jsr250_api",
     "libs/javax_inject_javax_inject",
+    "libs/net_bytebuddy_byte_buddy",
+    "libs/net_bytebuddy_byte_buddy_agent",
     "libs/net_ltgt_gradle_incap_incap",
     "libs/net_sf_kxml_kxml2",
     "libs/org_bouncycastle_bcprov_jdk15on",
@@ -133,6 +135,8 @@
     "libs/org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm",
     "libs/org_jetbrains_kotlinx_kotlinx_metadata_jvm",
     "libs/org_jsoup_jsoup",
+    "libs/org_mockito_mockito_core",
+    "libs/org_objenesis_objenesis",
     "libs/org_ow2_asm_asm",
     "libs/org_ow2_asm_asm_analysis",
     "libs/org_ow2_asm_asm_commons",
diff --git a/third_party/android_deps/build.gradle b/third_party/android_deps/build.gradle
index cd6c180..d8d0734 100644
--- a/third_party/android_deps/build.gradle
+++ b/third_party/android_deps/build.gradle
@@ -183,6 +183,8 @@
     // Version 1.2 is needed by espresso-web, but we'll newer 1.2.1.
     androidTestCompile 'org.ccil.cowan.tagsoup:tagsoup:1.2.1'
 
+    androidTestCompile "org.mockito:mockito-core:4.7.0"
+
     String robolectricVersion = '4.8.1'
     // Use testCompile to avoid having support_android = true set on
     // robolectric dependencies.
diff --git a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
index 53a2534..4aa8475 100644
--- a/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
+++ b/third_party/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
@@ -151,6 +151,17 @@
             isShipped: false,  // Annotations are stripped by R8.
             licenseName: 'CDDLv1.0',
             licensePath: 'licenses/CDDLv1.0.txt'),
+        org_mockito_mockito_core: new PropertyOverride(
+            licenseUrl: 'https://raw.githubusercontent.com/mockito/mockito/main/LICENSE',
+            licenseName: 'The MIT License'),
+        net_bytebuddy_byte_buddy: new PropertyOverride(
+            url: 'https://github.com/raphw/byte-buddy',
+            licenseUrl: 'https://raw.githubusercontent.com/raphw/byte-buddy/master/LICENSE',
+            licenseName: 'Apache 2.0'),
+        net_bytebuddy_byte_buddy_agent: new PropertyOverride(
+            url: 'https://github.com/raphw/byte-buddy',
+            licenseUrl: 'https://raw.githubusercontent.com/raphw/byte-buddy/master/LICENSE',
+            licenseName: 'Apache 2.0'),
         net_sf_kxml_kxml2: new PropertyOverride(
             licenseUrl: 'https://raw.githubusercontent.com/stefanhaustein/kxml2/master/license.txt',
             licenseName: 'MIT'),
@@ -170,6 +181,13 @@
             cpePrefix: 'cpe:/a:jsoup:jsoup:1.14.3',
             licenseUrl: 'https://raw.githubusercontent.com/jhy/jsoup/master/LICENSE',
             licenseName: 'The MIT License'),
+        org_mockito_mockito_core: new PropertyOverride(
+            licensePath: 'licenses/Codehaus_License-2009.txt',
+            licenseName: 'The MIT License'),
+        org_objenesis_objenesis: new PropertyOverride(
+            url: 'http://objenesis.org/index.html',
+            licenseUrl: 'https://www.apache.org/licenses/LICENSE-2.0.txt',
+            licenseName: 'Apache 2.0'),
         org_ow2_asm_asm: new PropertyOverride(
             licenseUrl: 'https://gitlab.ow2.org/asm/asm/raw/master/LICENSE.txt',
             licenseName: 'BSD'),
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy/3pp/3pp.pb b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/3pp/3pp.pb
new file mode 100644
index 0000000..d8137c1
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/3pp/3pp.pb
@@ -0,0 +1,16 @@
+# Copyright 2021 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
+
+create {
+  source {
+    script { name: "fetch.py" }
+  }
+}
+
+upload {
+  pkg_prefix: "chromium/third_party/android_deps/libs"
+  universal: true
+}
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy/3pp/fetch.py b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/3pp/fetch.py
new file mode 100755
index 0000000..b513ede
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/3pp/fetch.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+# 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.
+
+# This is generated, do not edit. Update BuildConfigGenerator.groovy and
+# 3ppFetch.template instead.
+
+import argparse
+import json
+import os
+import re
+import urllib.request
+
+_REPO_URL = 'https://repo.maven.apache.org/maven2'
+_GROUP_NAME = 'net/bytebuddy'
+_MODULE_NAME = 'byte-buddy'
+_FILE_EXT = 'jar'
+_OVERRIDE_LATEST = None
+_PATCH_VERSION = 'cr1'
+
+
+def do_latest():
+    if _OVERRIDE_LATEST is not None:
+        print(_OVERRIDE_LATEST + f'.{_PATCH_VERSION}')
+        return
+    maven_metadata_url = '{}/{}/{}/maven-metadata.xml'.format(
+        _REPO_URL, _GROUP_NAME, _MODULE_NAME)
+    metadata = urllib.request.urlopen(maven_metadata_url).read().decode(
+        'utf-8')
+    # Do not parse xml with the python included parser since it is susceptible
+    # to maliciously crafted xmls. Only use regular expression parsing to be
+    # safe. RE should be enough to handle what we need to extract.
+    match = re.search('<latest>([^<]+)</latest>', metadata)
+    if match:
+        latest = match.group(1)
+    else:
+        # if no latest info was found just hope the versions are sorted and the
+        # last one is the latest (as is commonly the case).
+        latest = re.findall('<version>([^<]+)</version>', metadata)[-1]
+    print(latest + f'.{_PATCH_VERSION}')
+
+
+def get_download_url(version):
+    # Remove the patch version when getting the download url
+    version_no_patch, patch = version.rsplit('.', 1)
+    if patch.startswith('cr'):
+        version = version_no_patch
+    file_url = '{0}/{1}/{2}/{3}/{2}-{3}.{4}'.format(_REPO_URL, _GROUP_NAME,
+                                                    _MODULE_NAME, version,
+                                                    _FILE_EXT)
+    file_name = file_url.rsplit('/', 1)[-1]
+
+    partial_manifest = {
+        'url': [file_url],
+        'name': [file_name],
+        'ext': '.' + _FILE_EXT,
+    }
+    print(json.dumps(partial_manifest))
+
+
+def main():
+    ap = argparse.ArgumentParser()
+    sub = ap.add_subparsers()
+
+    latest = sub.add_parser('latest')
+    latest.set_defaults(func=lambda _opts: do_latest())
+
+    download = sub.add_parser('get_url')
+    download.set_defaults(
+        func=lambda _opts: get_download_url(os.environ['_3PP_VERSION']))
+
+    opts = ap.parse_args()
+    opts.func(opts)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy/LICENSE b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/LICENSE
new file mode 100644
index 0000000..d0381d6
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/LICENSE
@@ -0,0 +1,176 @@
+Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy/OWNERS b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/OWNERS
new file mode 100644
index 0000000..aea47a05
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/OWNERS
@@ -0,0 +1 @@
+file://third_party/android_deps/OWNERS
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy/README.chromium b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/README.chromium
new file mode 100644
index 0000000..bea5195
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/README.chromium
@@ -0,0 +1,14 @@
+Name: Byte Buddy (without dependencies)
+Short Name: byte-buddy
+URL: https://github.com/raphw/byte-buddy
+Version: 1.12.13
+License: Apache 2.0
+License File: NOT_SHIPPED
+CPEPrefix: unknown
+Security Critical: no
+
+Description:
+Byte Buddy is a Java library for creating Java classes at run time. This artifact is a build of Byte Buddy with all ASM dependencies repackaged into its own name space.
+
+Local Modifications:
+No modifications.
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy/cipd.yaml b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/cipd.yaml
new file mode 100644
index 0000000..8df613b
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy/cipd.yaml
@@ -0,0 +1,10 @@
+# Copyright 2018 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.
+
+# To create CIPD package run the following command.
+# cipd create --pkg-def cipd.yaml -tag version:2@1.12.13.cr1
+package: chromium/third_party/android_deps/libs/net_bytebuddy_byte_buddy
+description: "Byte Buddy (without dependencies)"
+data:
+- file: byte-buddy-1.12.13.jar
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/3pp/3pp.pb b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/3pp/3pp.pb
new file mode 100644
index 0000000..d8137c1
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/3pp/3pp.pb
@@ -0,0 +1,16 @@
+# Copyright 2021 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
+
+create {
+  source {
+    script { name: "fetch.py" }
+  }
+}
+
+upload {
+  pkg_prefix: "chromium/third_party/android_deps/libs"
+  universal: true
+}
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/3pp/fetch.py b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/3pp/fetch.py
new file mode 100755
index 0000000..a913762
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/3pp/fetch.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+# 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.
+
+# This is generated, do not edit. Update BuildConfigGenerator.groovy and
+# 3ppFetch.template instead.
+
+import argparse
+import json
+import os
+import re
+import urllib.request
+
+_REPO_URL = 'https://repo.maven.apache.org/maven2'
+_GROUP_NAME = 'net/bytebuddy'
+_MODULE_NAME = 'byte-buddy-agent'
+_FILE_EXT = 'jar'
+_OVERRIDE_LATEST = None
+_PATCH_VERSION = 'cr1'
+
+
+def do_latest():
+    if _OVERRIDE_LATEST is not None:
+        print(_OVERRIDE_LATEST + f'.{_PATCH_VERSION}')
+        return
+    maven_metadata_url = '{}/{}/{}/maven-metadata.xml'.format(
+        _REPO_URL, _GROUP_NAME, _MODULE_NAME)
+    metadata = urllib.request.urlopen(maven_metadata_url).read().decode(
+        'utf-8')
+    # Do not parse xml with the python included parser since it is susceptible
+    # to maliciously crafted xmls. Only use regular expression parsing to be
+    # safe. RE should be enough to handle what we need to extract.
+    match = re.search('<latest>([^<]+)</latest>', metadata)
+    if match:
+        latest = match.group(1)
+    else:
+        # if no latest info was found just hope the versions are sorted and the
+        # last one is the latest (as is commonly the case).
+        latest = re.findall('<version>([^<]+)</version>', metadata)[-1]
+    print(latest + f'.{_PATCH_VERSION}')
+
+
+def get_download_url(version):
+    # Remove the patch version when getting the download url
+    version_no_patch, patch = version.rsplit('.', 1)
+    if patch.startswith('cr'):
+        version = version_no_patch
+    file_url = '{0}/{1}/{2}/{3}/{2}-{3}.{4}'.format(_REPO_URL, _GROUP_NAME,
+                                                    _MODULE_NAME, version,
+                                                    _FILE_EXT)
+    file_name = file_url.rsplit('/', 1)[-1]
+
+    partial_manifest = {
+        'url': [file_url],
+        'name': [file_name],
+        'ext': '.' + _FILE_EXT,
+    }
+    print(json.dumps(partial_manifest))
+
+
+def main():
+    ap = argparse.ArgumentParser()
+    sub = ap.add_subparsers()
+
+    latest = sub.add_parser('latest')
+    latest.set_defaults(func=lambda _opts: do_latest())
+
+    download = sub.add_parser('get_url')
+    download.set_defaults(
+        func=lambda _opts: get_download_url(os.environ['_3PP_VERSION']))
+
+    opts = ap.parse_args()
+    opts.func(opts)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/LICENSE b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/LICENSE
new file mode 100644
index 0000000..d0381d6
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/LICENSE
@@ -0,0 +1,176 @@
+Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/OWNERS b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/OWNERS
new file mode 100644
index 0000000..aea47a05
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/OWNERS
@@ -0,0 +1 @@
+file://third_party/android_deps/OWNERS
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/README.chromium b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/README.chromium
new file mode 100644
index 0000000..dd0e357
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/README.chromium
@@ -0,0 +1,14 @@
+Name: Byte Buddy agent
+Short Name: byte-buddy-agent
+URL: https://github.com/raphw/byte-buddy
+Version: 1.12.13
+License: Apache 2.0
+License File: NOT_SHIPPED
+CPEPrefix: unknown
+Security Critical: no
+
+Description:
+The Byte Buddy agent offers convenience for attaching an agent to the local or a remote VM.
+
+Local Modifications:
+No modifications.
diff --git a/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/cipd.yaml b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/cipd.yaml
new file mode 100644
index 0000000..c1cf77c
--- /dev/null
+++ b/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent/cipd.yaml
@@ -0,0 +1,10 @@
+# Copyright 2018 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.
+
+# To create CIPD package run the following command.
+# cipd create --pkg-def cipd.yaml -tag version:2@1.12.13.cr1
+package: chromium/third_party/android_deps/libs/net_bytebuddy_byte_buddy_agent
+description: "Byte Buddy agent"
+data:
+- file: byte-buddy-agent-1.12.13.jar
diff --git a/third_party/android_deps/libs/org_mockito_mockito_core/3pp/3pp.pb b/third_party/android_deps/libs/org_mockito_mockito_core/3pp/3pp.pb
new file mode 100644
index 0000000..d8137c1
--- /dev/null
+++ b/third_party/android_deps/libs/org_mockito_mockito_core/3pp/3pp.pb
@@ -0,0 +1,16 @@
+# Copyright 2021 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
+
+create {
+  source {
+    script { name: "fetch.py" }
+  }
+}
+
+upload {
+  pkg_prefix: "chromium/third_party/android_deps/libs"
+  universal: true
+}
diff --git a/third_party/android_deps/libs/org_mockito_mockito_core/3pp/fetch.py b/third_party/android_deps/libs/org_mockito_mockito_core/3pp/fetch.py
new file mode 100755
index 0000000..59e3e20
--- /dev/null
+++ b/third_party/android_deps/libs/org_mockito_mockito_core/3pp/fetch.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+# 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.
+
+# This is generated, do not edit. Update BuildConfigGenerator.groovy and
+# 3ppFetch.template instead.
+
+import argparse
+import json
+import os
+import re
+import urllib.request
+
+_REPO_URL = 'https://repo.maven.apache.org/maven2'
+_GROUP_NAME = 'org/mockito'
+_MODULE_NAME = 'mockito-core'
+_FILE_EXT = 'jar'
+_OVERRIDE_LATEST = None
+_PATCH_VERSION = 'cr1'
+
+
+def do_latest():
+    if _OVERRIDE_LATEST is not None:
+        print(_OVERRIDE_LATEST + f'.{_PATCH_VERSION}')
+        return
+    maven_metadata_url = '{}/{}/{}/maven-metadata.xml'.format(
+        _REPO_URL, _GROUP_NAME, _MODULE_NAME)
+    metadata = urllib.request.urlopen(maven_metadata_url).read().decode(
+        'utf-8')
+    # Do not parse xml with the python included parser since it is susceptible
+    # to maliciously crafted xmls. Only use regular expression parsing to be
+    # safe. RE should be enough to handle what we need to extract.
+    match = re.search('<latest>([^<]+)</latest>', metadata)
+    if match:
+        latest = match.group(1)
+    else:
+        # if no latest info was found just hope the versions are sorted and the
+        # last one is the latest (as is commonly the case).
+        latest = re.findall('<version>([^<]+)</version>', metadata)[-1]
+    print(latest + f'.{_PATCH_VERSION}')
+
+
+def get_download_url(version):
+    # Remove the patch version when getting the download url
+    version_no_patch, patch = version.rsplit('.', 1)
+    if patch.startswith('cr'):
+        version = version_no_patch
+    file_url = '{0}/{1}/{2}/{3}/{2}-{3}.{4}'.format(_REPO_URL, _GROUP_NAME,
+                                                    _MODULE_NAME, version,
+                                                    _FILE_EXT)
+    file_name = file_url.rsplit('/', 1)[-1]
+
+    partial_manifest = {
+        'url': [file_url],
+        'name': [file_name],
+        'ext': '.' + _FILE_EXT,
+    }
+    print(json.dumps(partial_manifest))
+
+
+def main():
+    ap = argparse.ArgumentParser()
+    sub = ap.add_subparsers()
+
+    latest = sub.add_parser('latest')
+    latest.set_defaults(func=lambda _opts: do_latest())
+
+    download = sub.add_parser('get_url')
+    download.set_defaults(
+        func=lambda _opts: get_download_url(os.environ['_3PP_VERSION']))
+
+    opts = ap.parse_args()
+    opts.func(opts)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/third_party/android_deps/libs/org_mockito_mockito_core/LICENSE b/third_party/android_deps/libs/org_mockito_mockito_core/LICENSE
new file mode 100644
index 0000000..370fb55
--- /dev/null
+++ b/third_party/android_deps/libs/org_mockito_mockito_core/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2009 codehaus.org.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/third_party/android_deps/libs/org_mockito_mockito_core/OWNERS b/third_party/android_deps/libs/org_mockito_mockito_core/OWNERS
new file mode 100644
index 0000000..aea47a05
--- /dev/null
+++ b/third_party/android_deps/libs/org_mockito_mockito_core/OWNERS
@@ -0,0 +1 @@
+file://third_party/android_deps/OWNERS
diff --git a/third_party/android_deps/libs/org_mockito_mockito_core/README.chromium b/third_party/android_deps/libs/org_mockito_mockito_core/README.chromium
new file mode 100644
index 0000000..4815074
--- /dev/null
+++ b/third_party/android_deps/libs/org_mockito_mockito_core/README.chromium
@@ -0,0 +1,14 @@
+Name: mockito-core
+Short Name: mockito-core
+URL: https://github.com/mockito/mockito
+Version: 4.7.0
+License: The MIT License
+License File: NOT_SHIPPED
+CPEPrefix: unknown
+Security Critical: no
+
+Description:
+Mockito mock objects library core API and implementation
+
+Local Modifications:
+No modifications.
diff --git a/third_party/android_deps/libs/org_mockito_mockito_core/cipd.yaml b/third_party/android_deps/libs/org_mockito_mockito_core/cipd.yaml
new file mode 100644
index 0000000..7a8623e
--- /dev/null
+++ b/third_party/android_deps/libs/org_mockito_mockito_core/cipd.yaml
@@ -0,0 +1,10 @@
+# Copyright 2018 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.
+
+# To create CIPD package run the following command.
+# cipd create --pkg-def cipd.yaml -tag version:2@4.7.0.cr1
+package: chromium/third_party/android_deps/libs/org_mockito_mockito_core
+description: "mockito-core"
+data:
+- file: mockito-core-4.7.0.jar
diff --git a/third_party/android_deps/libs/org_objenesis_objenesis/3pp/3pp.pb b/third_party/android_deps/libs/org_objenesis_objenesis/3pp/3pp.pb
new file mode 100644
index 0000000..d8137c1
--- /dev/null
+++ b/third_party/android_deps/libs/org_objenesis_objenesis/3pp/3pp.pb
@@ -0,0 +1,16 @@
+# Copyright 2021 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
+
+create {
+  source {
+    script { name: "fetch.py" }
+  }
+}
+
+upload {
+  pkg_prefix: "chromium/third_party/android_deps/libs"
+  universal: true
+}
diff --git a/third_party/android_deps/libs/org_objenesis_objenesis/3pp/fetch.py b/third_party/android_deps/libs/org_objenesis_objenesis/3pp/fetch.py
new file mode 100755
index 0000000..e2eb0866
--- /dev/null
+++ b/third_party/android_deps/libs/org_objenesis_objenesis/3pp/fetch.py
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+# 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.
+
+# This is generated, do not edit. Update BuildConfigGenerator.groovy and
+# 3ppFetch.template instead.
+
+import argparse
+import json
+import os
+import re
+import urllib.request
+
+_REPO_URL = 'https://repo.maven.apache.org/maven2'
+_GROUP_NAME = 'org/objenesis'
+_MODULE_NAME = 'objenesis'
+_FILE_EXT = 'jar'
+_OVERRIDE_LATEST = None
+_PATCH_VERSION = 'cr1'
+
+
+def do_latest():
+    if _OVERRIDE_LATEST is not None:
+        print(_OVERRIDE_LATEST + f'.{_PATCH_VERSION}')
+        return
+    maven_metadata_url = '{}/{}/{}/maven-metadata.xml'.format(
+        _REPO_URL, _GROUP_NAME, _MODULE_NAME)
+    metadata = urllib.request.urlopen(maven_metadata_url).read().decode(
+        'utf-8')
+    # Do not parse xml with the python included parser since it is susceptible
+    # to maliciously crafted xmls. Only use regular expression parsing to be
+    # safe. RE should be enough to handle what we need to extract.
+    match = re.search('<latest>([^<]+)</latest>', metadata)
+    if match:
+        latest = match.group(1)
+    else:
+        # if no latest info was found just hope the versions are sorted and the
+        # last one is the latest (as is commonly the case).
+        latest = re.findall('<version>([^<]+)</version>', metadata)[-1]
+    print(latest + f'.{_PATCH_VERSION}')
+
+
+def get_download_url(version):
+    # Remove the patch version when getting the download url
+    version_no_patch, patch = version.rsplit('.', 1)
+    if patch.startswith('cr'):
+        version = version_no_patch
+    file_url = '{0}/{1}/{2}/{3}/{2}-{3}.{4}'.format(_REPO_URL, _GROUP_NAME,
+                                                    _MODULE_NAME, version,
+                                                    _FILE_EXT)
+    file_name = file_url.rsplit('/', 1)[-1]
+
+    partial_manifest = {
+        'url': [file_url],
+        'name': [file_name],
+        'ext': '.' + _FILE_EXT,
+    }
+    print(json.dumps(partial_manifest))
+
+
+def main():
+    ap = argparse.ArgumentParser()
+    sub = ap.add_subparsers()
+
+    latest = sub.add_parser('latest')
+    latest.set_defaults(func=lambda _opts: do_latest())
+
+    download = sub.add_parser('get_url')
+    download.set_defaults(
+        func=lambda _opts: get_download_url(os.environ['_3PP_VERSION']))
+
+    opts = ap.parse_args()
+    opts.func(opts)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/third_party/android_deps/libs/org_objenesis_objenesis/LICENSE b/third_party/android_deps/libs/org_objenesis_objenesis/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/third_party/android_deps/libs/org_objenesis_objenesis/LICENSE
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/third_party/android_deps/libs/org_objenesis_objenesis/OWNERS b/third_party/android_deps/libs/org_objenesis_objenesis/OWNERS
new file mode 100644
index 0000000..aea47a05
--- /dev/null
+++ b/third_party/android_deps/libs/org_objenesis_objenesis/OWNERS
@@ -0,0 +1 @@
+file://third_party/android_deps/OWNERS
diff --git a/third_party/android_deps/libs/org_objenesis_objenesis/README.chromium b/third_party/android_deps/libs/org_objenesis_objenesis/README.chromium
new file mode 100644
index 0000000..ec14897
--- /dev/null
+++ b/third_party/android_deps/libs/org_objenesis_objenesis/README.chromium
@@ -0,0 +1,14 @@
+Name: Objenesis
+Short Name: objenesis
+URL: http://objenesis.org/index.html
+Version: 3.2
+License: Apache 2.0
+License File: NOT_SHIPPED
+CPEPrefix: unknown
+Security Critical: no
+
+Description:
+A library for instantiating Java objects
+
+Local Modifications:
+No modifications.
diff --git a/third_party/android_deps/libs/org_objenesis_objenesis/cipd.yaml b/third_party/android_deps/libs/org_objenesis_objenesis/cipd.yaml
new file mode 100644
index 0000000..b5871b87
--- /dev/null
+++ b/third_party/android_deps/libs/org_objenesis_objenesis/cipd.yaml
@@ -0,0 +1,10 @@
+# Copyright 2018 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.
+
+# To create CIPD package run the following command.
+# cipd create --pkg-def cipd.yaml -tag version:2@3.2.cr1
+package: chromium/third_party/android_deps/libs/org_objenesis_objenesis
+description: "Objenesis"
+data:
+- file: objenesis-3.2.jar
diff --git a/third_party/android_deps/libs/org_pcollections_pcollections/LICENSE b/third_party/android_deps/libs/org_pcollections_pcollections/LICENSE
index 120e3f6..50519c5 100644
--- a/third_party/android_deps/libs/org_pcollections_pcollections/LICENSE
+++ b/third_party/android_deps/libs/org_pcollections_pcollections/LICENSE
@@ -1,6 +1,9 @@
 MIT License
 
-Copyright 2008 Harold Cooper
+Copyright 2008-2011, 2014-2020, 2022 Harold Cooper, gil cattaneo, Gleb Frank,
+Günther Grill, Ilya Gorbunov, Jirka Kremser, Jochen Theodorou, Johnny Lim,
+Liam Miller, Mark Perry, Matei Dragu, Mike Klein, Oleg Osipenko, Ran Ari-Gur,
+Shantanu Kumar, and Valeriy Vyrva.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/third_party/androidx/build.gradle.template b/third_party/androidx/build.gradle.template
index 4db4d85..7124984 100644
--- a/third_party/androidx/build.gradle.template
+++ b/third_party/androidx/build.gradle.template
@@ -63,6 +63,7 @@
     compile 'androidx.window.extensions:extensions:{{androidx_dependency_version}}'
     compile 'androidx.window:window-java:{{androidx_dependency_version}}'
     compile 'androidx.window.sidecar:sidecar:{{androidx_dependency_version}}'
+    compile 'androidx.work:work-runtime:{{androidx_dependency_version}}'
 
     // Those are for use by doubledown libraries.
     compile 'androidx.arch.core:core-common:{{androidx_dependency_version}}'
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index 8f7fb26..30ce14202 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -197,9 +197,6 @@
 const base::Feature kDisplayLocking{"DisplayLocking",
                                     base::FEATURE_DISABLED_BY_DEFAULT};
 
-const base::Feature kJSONModules{"JSONModules",
-                                 base::FEATURE_ENABLED_BY_DEFAULT};
-
 const base::Feature kDeferredFontShaping{"DeferredShaping",
                                          base::FEATURE_DISABLED_BY_DEFAULT};
 
diff --git a/third_party/blink/common/privacy_budget/identifiability_metric_builder.cc b/third_party/blink/common/privacy_budget/identifiability_metric_builder.cc
index 194f651..7ba7d24 100644
--- a/third_party/blink/common/privacy_budget/identifiability_metric_builder.cc
+++ b/third_party/blink/common/privacy_budget/identifiability_metric_builder.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 "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
-
 #include <iterator>
 
+#include "base/trace_event/trace_event.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 #include "services/metrics/public/mojom/ukm_interface.mojom.h"
+#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
 #include "third_party/blink/public/common/privacy_budget/identifiability_sample_collector.h"
 
 namespace blink {
@@ -21,6 +21,11 @@
 IdentifiabilityMetricBuilder& IdentifiabilityMetricBuilder::Add(
     IdentifiableSurface surface,
     IdentifiableToken value) {
+  // Note: tracing will only work if identifiability study is enabled first
+  TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("identifiability"),
+               "IdentifiableSurface", "key",
+               base::NumberToString(surface.ToUkmMetricHash()));
+
   metrics_.emplace_back(surface, value);
   return *this;
 }
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index 41834ff..6a27e7c 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -66,7 +66,6 @@
 BLINK_COMMON_EXPORT extern const base::Feature
     kFrequencyCappingForLargeStickyAdDetection;
 BLINK_COMMON_EXPORT extern const base::Feature kDisplayLocking;
-BLINK_COMMON_EXPORT extern const base::Feature kJSONModules;
 BLINK_COMMON_EXPORT extern const base::Feature kDeferredFontShaping;
 BLINK_COMMON_EXPORT extern const base::Feature kEditingNG;
 BLINK_COMMON_EXPORT extern const base::Feature kLayoutNG;
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
index 89f9fe3..b9e51146 100644
--- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl
+++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -8464,6 +8464,7 @@
       # recorded when it fails to get the memory usage.
       FailToGetMemoryUsage
       DataSaverEnabled
+      HasEffectiveUrl
 
   # Fired when a prerender attempt is completed.
   experimental event prerenderAttemptCompleted
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_metrics.cc b/third_party/blink/renderer/bindings/core/v8/v8_metrics.cc
index 1adcb0d..b17bb4f 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_metrics.cc
+++ b/third_party/blink/renderer/bindings/core/v8/v8_metrics.cc
@@ -70,20 +70,6 @@
       .Record(ukm->recorder);
 }
 
-void V8MetricsRecorder::AddMainThreadEvent(
-    const v8::metrics::WasmModuleTieredUp& event,
-    v8::metrics::Recorder::ContextId context_id) {
-  auto ukm = GetUkmRecorderAndSourceId(context_id);
-  if (!ukm)
-    return;
-  ukm::builders::V8_Wasm_ModuleTieredUp(ukm->source_id)
-      .SetLazy(event.lazy ? 1 : 0)
-      .SetCodeSize(
-          ukm::GetExponentialBucketMinForBytes(event.code_size_in_bytes))
-      .SetWallClockDuration(event.wall_clock_duration_in_us)
-      .Record(ukm->recorder);
-}
-
 namespace {
 
 // Helper function to convert a byte count to a KB count, capping at
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_metrics.h b/third_party/blink/renderer/bindings/core/v8/v8_metrics.h
index fe74985..f745c55 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_metrics.h
+++ b/third_party/blink/renderer/bindings/core/v8/v8_metrics.h
@@ -28,8 +28,6 @@
                           ContextId context_id) override;
   void AddMainThreadEvent(const v8::metrics::WasmModuleInstantiated& event,
                           ContextId context_id) override;
-  void AddMainThreadEvent(const v8::metrics::WasmModuleTieredUp& event,
-                          ContextId context_id) override;
 
   void AddMainThreadEvent(const v8::metrics::GarbageCollectionFullCycle& event,
                           ContextId context_id) override;
diff --git a/third_party/blink/renderer/bindings/generated_in_core.gni b/third_party/blink/renderer/bindings/generated_in_core.gni
index e8132c7..363cf758b 100644
--- a/third_party/blink/renderer/bindings/generated_in_core.gni
+++ b/third_party/blink/renderer/bindings/generated_in_core.gni
@@ -97,6 +97,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_baselines.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_blob_property_bag.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_blob_property_bag.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_canvas_high_dynamic_range_options.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_canvas_high_dynamic_range_options.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_character_bounds_update_event_init.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_character_bounds_update_event_init.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_check_visibility_options.cc",
@@ -410,6 +412,8 @@
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_beacon_method.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_can_play_type_result.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_can_play_type_result.h",
+  "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_canvas_high_dynamic_range_mode.cc",
+  "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_canvas_high_dynamic_range_mode.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_color_space_conversion.cc",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_color_space_conversion.h",
   "$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_composite_operation.cc",
diff --git a/third_party/blink/renderer/bindings/idl_in_core.gni b/third_party/blink/renderer/bindings/idl_in_core.gni
index 5b6a4727..5c9ea0e 100644
--- a/third_party/blink/renderer/bindings/idl_in_core.gni
+++ b/third_party/blink/renderer/bindings/idl_in_core.gni
@@ -340,6 +340,7 @@
           "//third_party/blink/renderer/core/highlight/highlight_registry.idl",
           "//third_party/blink/renderer/core/html/assigned_nodes_options.idl",
           "//third_party/blink/renderer/core/html/canvas/baselines.idl",
+          "//third_party/blink/renderer/core/html/canvas/high_dynamic_range_options.idl",
           "//third_party/blink/renderer/core/html/canvas/html_canvas_element.idl",
           "//third_party/blink/renderer/core/html/canvas/image_data.idl",
           "//third_party/blink/renderer/core/html/canvas/image_data_settings.idl",
diff --git a/third_party/blink/renderer/core/css/css_selector.cc b/third_party/blink/renderer/core/css/css_selector.cc
index 2c0e249..ab0763348 100644
--- a/third_party/blink/renderer/core/css/css_selector.cc
+++ b/third_party/blink/renderer/core/css/css_selector.cc
@@ -258,106 +258,106 @@
       return kPseudoIdPageTransitionOutgoingImage;
     case kPseudoPageTransitionIncomingImage:
       return kPseudoIdPageTransitionIncomingImage;
-    case kPseudoUnknown:
-    case kPseudoEmpty:
-    case kPseudoFirstChild:
-    case kPseudoFirstOfType:
-    case kPseudoLastChild:
-    case kPseudoLastOfType:
-    case kPseudoOnlyChild:
-    case kPseudoOnlyOfType:
-    case kPseudoNthChild:
-    case kPseudoNthOfType:
-    case kPseudoNthLastChild:
-    case kPseudoNthLastOfType:
-    case kPseudoLink:
-    case kPseudoVisited:
+    case kPseudoActive:
     case kPseudoAny:
-    case kPseudoIs:
-    case kPseudoWhere:
     case kPseudoAnyLink:
-    case kPseudoWebkitAnyLink:
     case kPseudoAutofill:
-    case kPseudoWebKitAutofill:
     case kPseudoAutofillPreviewed:
     case kPseudoAutofillSelected:
-    case kPseudoHover:
+    case kPseudoBlinkInternalElement:
+    case kPseudoChecked:
+    case kPseudoCornerPresent:
+    case kPseudoCue:
+    case kPseudoDecrement:
+    case kPseudoDefault:
+    case kPseudoDefined:
+    case kPseudoDir:
+    case kPseudoDisabled:
+    case kPseudoDoubleButton:
     case kPseudoDrag:
+    case kPseudoEmpty:
+    case kPseudoEnabled:
+    case kPseudoEnd:
+    case kPseudoFileSelectorButton:
+    case kPseudoFirstChild:
+    case kPseudoFirstOfType:
+    case kPseudoFirstPage:
     case kPseudoFocus:
     case kPseudoFocusVisible:
     case kPseudoFocusWithin:
-    case kPseudoActive:
-    case kPseudoChecked:
-    case kPseudoEnabled:
     case kPseudoFullPageMedia:
-    case kPseudoDefault:
-    case kPseudoDisabled:
-    case kPseudoOptional:
-    case kPseudoPlaceholder:
-    case kPseudoPlaceholderShown:
-    case kPseudoFileSelectorButton:
-    case kPseudoRequired:
-    case kPseudoReadOnly:
-    case kPseudoReadWrite:
-    case kPseudoValid:
-    case kPseudoInvalid:
-    case kPseudoIndeterminate:
-    case kPseudoTarget:
-    case kPseudoLang:
-    case kPseudoDir:
-    case kPseudoNot:
-    case kPseudoRoot:
-    case kPseudoScope:
-    case kPseudoWindowInactive:
-    case kPseudoCornerPresent:
-    case kPseudoDecrement:
-    case kPseudoIncrement:
-    case kPseudoHorizontal:
-    case kPseudoVertical:
-    case kPseudoStart:
-    case kPseudoEnd:
-    case kPseudoDoubleButton:
-    case kPseudoSingleButton:
-    case kPseudoNoButton:
-    case kPseudoFirstPage:
-    case kPseudoLeftPage:
-    case kPseudoRightPage:
-    case kPseudoInRange:
-    case kPseudoOutOfRange:
-    case kPseudoToggle:
-    case kPseudoWebKitCustomElement:
-    case kPseudoBlinkInternalElement:
-    case kPseudoCue:
-    case kPseudoFutureCue:
-    case kPseudoPastCue:
-    case kPseudoDefined:
-    case kPseudoHost:
-    case kPseudoHostContext:
-    case kPseudoPart:
-    case kPseudoState:
     case kPseudoFullScreen:
     case kPseudoFullScreenAncestor:
     case kPseudoFullscreen:
+    case kPseudoFutureCue:
+    case kPseudoHas:
+    case kPseudoHasDatalist:
+    case kPseudoHorizontal:
+    case kPseudoHost:
+    case kPseudoHostContext:
+    case kPseudoHostHasAppearance:
+    case kPseudoHover:
+    case kPseudoInRange:
+    case kPseudoIncrement:
+    case kPseudoIndeterminate:
+    case kPseudoInvalid:
+    case kPseudoIs:
+    case kPseudoIsHtml:
+    case kPseudoLang:
+    case kPseudoLastChild:
+    case kPseudoLastOfType:
+    case kPseudoLeftPage:
+    case kPseudoLink:
+    case kPseudoListBox:
+    case kPseudoModal:
+    case kPseudoMultiSelectFocus:
+    case kPseudoNoButton:
+    case kPseudoNot:
+    case kPseudoNthChild:
+    case kPseudoNthLastChild:
+    case kPseudoNthLastOfType:
+    case kPseudoNthOfType:
+    case kPseudoOnlyChild:
+    case kPseudoOnlyOfType:
+    case kPseudoOpen:
+    case kPseudoOptional:
+    case kPseudoOutOfRange:
+    case kPseudoPart:
+    case kPseudoPastCue:
     case kPseudoPaused:
     case kPseudoPictureInPicture:
+    case kPseudoPlaceholder:
+    case kPseudoPlaceholderShown:
     case kPseudoPlaying:
+    case kPseudoPopupHidden:
+    case kPseudoReadOnly:
+    case kPseudoReadWrite:
+    case kPseudoRelativeAnchor:
+    case kPseudoRequired:
+    case kPseudoRightPage:
+    case kPseudoRoot:
+    case kPseudoScope:
+    case kPseudoSelectorFragmentAnchor:
+    case kPseudoSingleButton:
+    case kPseudoSlotted:
     case kPseudoSpatialNavigationFocus:
     case kPseudoSpatialNavigationInterest:
-    case kPseudoHasDatalist:
-    case kPseudoIsHtml:
-    case kPseudoListBox:
-    case kPseudoMultiSelectFocus:
-    case kPseudoHostHasAppearance:
-    case kPseudoSlotted:
-    case kPseudoTopLayer:
-    case kPseudoPopupHidden:
+    case kPseudoStart:
+    case kPseudoState:
+    case kPseudoTarget:
+    case kPseudoToggle:
+    case kPseudoUnknown:
+    case kPseudoValid:
+    case kPseudoVertical:
     case kPseudoVideoPersistent:
     case kPseudoVideoPersistentAncestor:
+    case kPseudoVisited:
+    case kPseudoWebKitAutofill:
+    case kPseudoWebKitCustomElement:
+    case kPseudoWebkitAnyLink:
+    case kPseudoWhere:
+    case kPseudoWindowInactive:
     case kPseudoXrOverlay:
-    case kPseudoModal:
-    case kPseudoSelectorFragmentAnchor:
-    case kPseudoHas:
-    case kPseudoRelativeAnchor:
       return kPseudoIdNone;
   }
 
@@ -454,6 +454,7 @@
     {"no-button", CSSSelector::kPseudoNoButton},
     {"only-child", CSSSelector::kPseudoOnlyChild},
     {"only-of-type", CSSSelector::kPseudoOnlyOfType},
+    {"open", CSSSelector::kPseudoOpen},
     {"optional", CSSSelector::kPseudoOptional},
     {"out-of-range", CSSSelector::kPseudoOutOfRange},
     {"page-transition", CSSSelector::kPseudoPageTransition},
@@ -475,7 +476,6 @@
     {"start", CSSSelector::kPseudoStart},
     {"target", CSSSelector::kPseudoTarget},
     {"target-text", CSSSelector::kPseudoTargetText},
-    {"top-layer", CSSSelector::kPseudoTopLayer},
     {"valid", CSSSelector::kPseudoValid},
     {"vertical", CSSSelector::kPseudoVertical},
     {"visited", CSSSelector::kPseudoVisited},
@@ -573,7 +573,7 @@
   bool popup_attribute_enabled =
       !document || RuntimeEnabledFeatures::HTMLPopupAttributeEnabled(
                        document->GetExecutionContext());
-  if (match->type == CSSSelector::kPseudoTopLayer && !popup_attribute_enabled)
+  if (match->type == CSSSelector::kPseudoOpen && !popup_attribute_enabled)
     return CSSSelector::kPseudoUnknown;
 
   if (match->type == CSSSelector::kPseudoPopupHidden &&
@@ -771,6 +771,7 @@
     case kPseudoNthOfType:
     case kPseudoOnlyChild:
     case kPseudoOnlyOfType:
+    case kPseudoOpen:
     case kPseudoOptional:
     case kPseudoOutOfRange:
     case kPseudoPastCue:
@@ -791,7 +792,6 @@
     case kPseudoState:
     case kPseudoTarget:
     case kPseudoToggle:
-    case kPseudoTopLayer:
     case kPseudoUnknown:
     case kPseudoValid:
     case kPseudoVertical:
diff --git a/third_party/blink/renderer/core/css/css_selector.h b/third_party/blink/renderer/core/css/css_selector.h
index a8a6a7f4..66bdd87 100644
--- a/third_party/blink/renderer/core/css/css_selector.h
+++ b/third_party/blink/renderer/core/css/css_selector.h
@@ -173,64 +173,65 @@
   };
 
   enum PseudoType {
-    kPseudoUnknown,
-    kPseudoEmpty,
-    kPseudoFirstChild,
-    kPseudoFirstOfType,
-    kPseudoLastChild,
-    kPseudoLastOfType,
-    kPseudoOnlyChild,
-    kPseudoOnlyOfType,
-    kPseudoFirstLine,
-    kPseudoFirstLetter,
-    kPseudoNthChild,
-    kPseudoNthOfType,
-    kPseudoNthLastChild,
-    kPseudoNthLastOfType,
-    kPseudoPart,
-    kPseudoState,
-    kPseudoLink,
-    kPseudoVisited,
+    kPseudoActive,
+    kPseudoAfter,
     kPseudoAny,
-    kPseudoIs,
-    kPseudoWhere,
     kPseudoAnyLink,
-    kPseudoWebkitAnyLink,
     kPseudoAutofill,
-    kPseudoWebKitAutofill,
     kPseudoAutofillPreviewed,
     kPseudoAutofillSelected,
-    kPseudoHover,
+    kPseudoBackdrop,
+    kPseudoBefore,
+    kPseudoChecked,
+    kPseudoCornerPresent,
+    kPseudoDecrement,
+    kPseudoDefault,
+    kPseudoDisabled,
+    kPseudoDoubleButton,
     kPseudoDrag,
+    kPseudoEmpty,
+    kPseudoEnabled,
+    kPseudoEnd,
+    kPseudoFileSelectorButton,
+    kPseudoFirstChild,
+    kPseudoFirstLetter,
+    kPseudoFirstLine,
+    kPseudoFirstOfType,
+    kPseudoFirstPage,
     kPseudoFocus,
     kPseudoFocusVisible,
     kPseudoFocusWithin,
-    kPseudoActive,
-    kPseudoChecked,
-    kPseudoEnabled,
     kPseudoFullPageMedia,
-    kPseudoDefault,
-    kPseudoDisabled,
-    kPseudoOptional,
-    kPseudoPlaceholderShown,
-    kPseudoRequired,
-    kPseudoReadOnly,
-    kPseudoReadWrite,
-    kPseudoValid,
-    kPseudoInvalid,
+    kPseudoHorizontal,
+    kPseudoHover,
+    kPseudoIncrement,
     kPseudoIndeterminate,
-    kPseudoTarget,
-    kPseudoBefore,
-    kPseudoAfter,
+    kPseudoInvalid,
+    kPseudoIs,
+    kPseudoLang,
+    kPseudoLastChild,
+    kPseudoLastOfType,
+    kPseudoLeftPage,
+    kPseudoLink,
     kPseudoMarker,
     kPseudoModal,
-    kPseudoSelectorFragmentAnchor,
-    kPseudoBackdrop,
-    kPseudoLang,
+    kPseudoNoButton,
     kPseudoNot,
+    kPseudoNthChild,
+    kPseudoNthLastChild,
+    kPseudoNthLastOfType,
+    kPseudoNthOfType,
+    kPseudoOnlyChild,
+    kPseudoOnlyOfType,
+    kPseudoOptional,
+    kPseudoPart,
     kPseudoPlaceholder,
-    kPseudoFileSelectorButton,
+    kPseudoPlaceholderShown,
+    kPseudoReadOnly,
+    kPseudoReadWrite,
+    kPseudoRequired,
     kPseudoResizer,
+    kPseudoRightPage,
     kPseudoRoot,
     kPseudoScope,
     kPseudoScrollbar,
@@ -239,21 +240,20 @@
     kPseudoScrollbarThumb,
     kPseudoScrollbarTrack,
     kPseudoScrollbarTrackPiece,
-    kPseudoWindowInactive,
-    kPseudoCornerPresent,
-    kPseudoDecrement,
-    kPseudoIncrement,
-    kPseudoHorizontal,
-    kPseudoVertical,
-    kPseudoStart,
-    kPseudoEnd,
-    kPseudoDoubleButton,
-    kPseudoSingleButton,
-    kPseudoNoButton,
     kPseudoSelection,
-    kPseudoLeftPage,
-    kPseudoRightPage,
-    kPseudoFirstPage,
+    kPseudoSelectorFragmentAnchor,
+    kPseudoSingleButton,
+    kPseudoStart,
+    kPseudoState,
+    kPseudoTarget,
+    kPseudoUnknown,
+    kPseudoValid,
+    kPseudoVertical,
+    kPseudoVisited,
+    kPseudoWebKitAutofill,
+    kPseudoWebkitAnyLink,
+    kPseudoWhere,
+    kPseudoWindowInactive,
     // TODO(foolip): When the unprefixed Fullscreen API is enabled, merge
     // kPseudoFullScreen and kPseudoFullscreen into one. (kPseudoFullscreen is
     // controlled by the FullscreenUnprefixed REF, but is otherwise an alias.)
@@ -284,7 +284,7 @@
     kPseudoListBox,
     kPseudoMultiSelectFocus,
     kPseudoHostHasAppearance,
-    kPseudoTopLayer,
+    kPseudoOpen,
     kPseudoPopupHidden,
     kPseudoSlotted,
     kPseudoVideoPersistent,
diff --git a/third_party/blink/renderer/core/css/parser/css_proto_converter.cc b/third_party/blink/renderer/core/css/parser/css_proto_converter.cc
index 64aadd4..b289249 100644
--- a/third_party/blink/renderer/core/css/parser/css_proto_converter.cc
+++ b/third_party/blink/renderer/core/css/parser/css_proto_converter.cc
@@ -100,6 +100,7 @@
     "no-button",
     "only-child",
     "only-of-type",
+    "open",
     "optional",
     "out-of-range",
     "past",
@@ -115,7 +116,6 @@
     "single-button",
     "start",
     "target",
-    "top-layer",
     "valid",
     "vertical",
     "visited",
diff --git a/third_party/blink/renderer/core/css/rule_feature_set.cc b/third_party/blink/renderer/core/css/rule_feature_set.cc
index e8c3e0d..fdc37e6 100644
--- a/third_party/blink/renderer/core/css/rule_feature_set.cc
+++ b/third_party/blink/renderer/core/css/rule_feature_set.cc
@@ -176,7 +176,7 @@
     case CSSSelector::kPseudoListBox:
     case CSSSelector::kPseudoMultiSelectFocus:
     case CSSSelector::kPseudoHostHasAppearance:
-    case CSSSelector::kPseudoTopLayer:
+    case CSSSelector::kPseudoOpen:
     case CSSSelector::kPseudoPopupHidden:
     case CSSSelector::kPseudoSlotted:
     case CSSSelector::kPseudoVideoPersistent:
@@ -652,7 +652,7 @@
       case CSSSelector::kPseudoInRange:
       case CSSSelector::kPseudoOutOfRange:
       case CSSSelector::kPseudoDefined:
-      case CSSSelector::kPseudoTopLayer:
+      case CSSSelector::kPseudoOpen:
       case CSSSelector::kPseudoPopupHidden:
       case CSSSelector::kPseudoVideoPersistent:
       case CSSSelector::kPseudoVideoPersistentAncestor:
diff --git a/third_party/blink/renderer/core/css/selector_checker.cc b/third_party/blink/renderer/core/css/selector_checker.cc
index b113230a..36f8c99 100644
--- a/third_party/blink/renderer/core/css/selector_checker.cc
+++ b/third_party/blink/renderer/core/css/selector_checker.cc
@@ -1498,7 +1498,7 @@
       }
       break;
     }
-    case CSSSelector::kPseudoTopLayer:
+    case CSSSelector::kPseudoOpen:
       if (element.HasValidPopupAttribute()) {
         return element.popupOpen();
       }
diff --git a/third_party/blink/renderer/core/css/style_property_serializer.cc b/third_party/blink/renderer/core/css/style_property_serializer.cc
index da32e61..d0763451 100644
--- a/third_party/blink/renderer/core/css/style_property_serializer.cc
+++ b/third_party/blink/renderer/core/css/style_property_serializer.cc
@@ -1336,6 +1336,15 @@
   const CSSValueList* auto_flow_value_list =
       DynamicTo<CSSValueList>(auto_flow_values);
 
+  // We cannot represent a grid shorthand if we have both template row and
+  // template column values along with auto-flow.
+  if (*template_row_values !=
+          *(To<Longhand>(GetCSSPropertyGridTemplateRows()).InitialValue()) &&
+      *template_column_values !=
+          *(To<Longhand>(GetCSSPropertyGridTemplateColumns()).InitialValue())) {
+    return String();
+  }
+
   StringBuilder auto_flow_text;
   auto_flow_text.Append("auto-flow ");
   if (auto_flow_value_list &&
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 0713ac92..323e07a 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -2486,7 +2486,7 @@
   return GetPopupData() ? GetPopupData()->type() : PopupValueType::kNone;
 }
 
-// This should be true when :top-layer should match.
+// This should be true when `:open` should match.
 bool Element::popupOpen() const {
   DCHECK(RuntimeEnabledFeatures::HTMLPopupAttributeEnabled(
       GetDocument().GetExecutionContext()));
@@ -2501,7 +2501,7 @@
 //     style.
 // 2. Update style. (Transition initial style can be specified in this
 //    state.)
-// 3. Set the :top-layer pseudo class.
+// 3. Set the `:open` pseudo class.
 // 4. Update style. (Animations/transitions happen here.)
 void Element::showPopUp(ExceptionState& exception_state) {
   DCHECK(RuntimeEnabledFeatures::HTMLPopupAttributeEnabled(
@@ -2584,14 +2584,14 @@
   PseudoStateChanged(CSSSelector::kPseudoPopupHidden);
 
   // Force a style update. This ensures that base property values are set prior
-  // to `:top-layer` matching, so that transitions can start on the change to
+  // to `:open` matching, so that transitions can start on the change to
   // top layer.
   document.UpdateStyleAndLayoutTreeForNode(this);
   EnsureComputedStyle();
 
-  // Make the popup match :top-layer:
+  // Make the popup match `:open`:
   GetPopupData()->setVisibilityState(PopupVisibilityState::kShowing);
-  PseudoStateChanged(CSSSelector::kPseudoTopLayer);
+  PseudoStateChanged(CSSSelector::kPseudoOpen);
 
   SetPopupFocusOnShow();
 
@@ -2691,7 +2691,7 @@
 // transitions:
 // 1. Capture any already-running animations via getAnimations(), including
 //    animations on descendant elements.
-// 2. Remove the :top-layer pseudo class.
+// 2. Remove the `:open` pseudo class.
 // 3. Fire the 'hide' event.
 // 4. If the hidePopup() call is *not* the result of the pop-up being "forced
 //    out" of the top layer, e.g. by a modal dialog or fullscreen element:
@@ -2744,9 +2744,9 @@
 
   GetPopupData()->setInvoker(nullptr);
   GetPopupData()->setNeedsRepositioningForSelectMenu(false);
-  // Stop matching :top-layer:
+  // Stop matching `:open`:
   GetPopupData()->setVisibilityState(PopupVisibilityState::kTransitioning);
-  PseudoStateChanged(CSSSelector::kPseudoTopLayer);
+  PseudoStateChanged(CSSSelector::kPseudoOpen);
 
   // Fire the hide event (bubbles, not cancelable).
   Event* event = Event::CreateBubble(event_type_names::kHide);
@@ -2771,7 +2771,7 @@
 
   // Grab all animations, so that we can "finish" the hide operation once
   // they complete. This will *also* force a style update, ensuring property
-  // values are set after `:top-layer` stops matching, so that transitions
+  // values are set after `:open` stops matching, so that transitions
   // can start.
   HeapHashSet<Member<EventTarget>> animations;
   for (const auto& animation : GetAnimationsInternal(
diff --git a/third_party/blink/renderer/core/editing/serializers/serialization.cc b/third_party/blink/renderer/core/editing/serializers/serialization.cc
index f219288..8061ace 100644
--- a/third_party/blink/renderer/core/editing/serializers/serialization.cc
+++ b/third_party/blink/renderer/core/editing/serializers/serialization.cc
@@ -30,6 +30,7 @@
 #include "third_party/blink/renderer/core/editing/serializers/serialization.h"
 
 #include "base/memory/weak_ptr.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/public/platform/web_back_forward_cache_loader_helper.h"
 #include "third_party/blink/public/platform/web_url_loader_client.h"
@@ -923,7 +924,8 @@
   LocalFrameView* frame_view =
       MakeGarbageCollected<LocalFrameView>(*frame, gfx::Size(800, 600));
   frame->SetView(frame_view);
-  frame->Init(/*opener=*/nullptr, /*policy_container=*/nullptr);
+  // TODO(https://crbug.com/1355751) Initialize `storage_key`.
+  frame->Init(/*opener=*/nullptr, /*policy_container=*/nullptr, StorageKey());
 
   Document* document = frame->GetDocument();
   DCHECK(document);
diff --git a/third_party/blink/renderer/core/exported/web_page_popup_impl.cc b/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
index cac78d7c..24cbad7 100644
--- a/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_page_popup_impl.cc
@@ -36,6 +36,7 @@
 #include "cc/base/features.h"
 #include "cc/layers/picture_layer.h"
 #include "cc/trees/ukm_manager.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/public/mojom/input/input_handler.mojom-blink.h"
 #include "third_party/blink/public/web/web_view_client.h"
@@ -398,7 +399,8 @@
         owner_settings->GetAllowUniversalAccessFromFileURLs());
   }
 
-  frame->Init(/*opener=*/nullptr, /*policy_container=*/nullptr);
+  // TODO(https://crbug.com/1355751) Initialize `storage_key`.
+  frame->Init(/*opener=*/nullptr, /*policy_container=*/nullptr, StorageKey());
   frame->View()->SetParentVisible(true);
   frame->View()->SetSelfVisible(true);
 
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
index 72b8c07..f355fb77 100644
--- a/third_party/blink/renderer/core/frame/local_frame.cc
+++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -50,6 +50,7 @@
 #include "third_party/blink/public/common/chrome_debug_urls.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/input/web_input_event_attribution.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/blob/blob_url_store.mojom-blink.h"
 #include "third_party/blink/public/mojom/devtools/inspector_issue.mojom-blink.h"
@@ -304,7 +305,8 @@
 }
 
 void LocalFrame::Init(Frame* opener,
-                      std::unique_ptr<PolicyContainer> policy_container) {
+                      std::unique_ptr<PolicyContainer> policy_container,
+                      const blink::StorageKey& storage_key) {
   if (!policy_container)
     policy_container = PolicyContainer::CreateEmpty();
 
@@ -316,7 +318,7 @@
   mojo_handler_ = MakeGarbageCollected<LocalFrameMojoHandler>(*this);
 
   SetOpenerDoNotNotify(opener);
-  loader_.Init(std::move(policy_container));
+  loader_.Init(std::move(policy_container), storage_key);
 }
 
 void LocalFrame::SetView(LocalFrameView* view) {
diff --git a/third_party/blink/renderer/core/frame/local_frame.h b/third_party/blink/renderer/core/frame/local_frame.h
index 837c09c..fb9240e 100644
--- a/third_party/blink/renderer/core/frame/local_frame.h
+++ b/third_party/blink/renderer/core/frame/local_frame.h
@@ -100,11 +100,15 @@
 namespace blink {
 
 class AdTracker;
-class AttributionSrcLoader;
 class AssociatedInterfaceProvider;
+class AttributionSrcLoader;
+class BackgroundColorPaintImageGenerator;
+class BoxShadowPaintImageGenerator;
 class BrowserInterfaceBrokerProxy;
+class ClipPathPaintImageGenerator;
 class Color;
 class ContentCaptureManager;
+class CoreProbeSink;
 class Document;
 class Editor;
 class Element;
@@ -114,29 +118,26 @@
 class FrameOverlay;
 class FrameSelection;
 class FrameWidget;
+class IdlenessDetector;
 class InputMethodController;
 class InspectorIssueReporter;
-class InspectorTraceEvents;
-class CoreProbeSink;
-class IdlenessDetector;
 class InspectorTaskRunner;
+class InspectorTraceEvents;
 class InterfaceRegistry;
 class LayoutView;
 class LocalDOMWindow;
-class LocalWindowProxy;
 class LocalFrameClient;
 class LocalFrameMojoHandler;
-class BackgroundColorPaintImageGenerator;
-class BoxShadowPaintImageGenerator;
-class ClipPathPaintImageGenerator;
+class LocalWindowProxy;
 class Node;
 class NodeTraversal;
 class PerformanceMonitor;
-class PolicyContainer;
 class PluginData;
-class SystemClipboard;
+class PolicyContainer;
 class SmoothScrollSequencer;
 class SpellChecker;
+class StorageKey;
+class SystemClipboard;
 class TextFragmentHandler;
 class TextSuggestionController;
 class VirtualKeyboardOverlayChangedObserver;
@@ -189,16 +190,24 @@
       InterfaceRegistry*,
       const base::TickClock* clock = base::DefaultTickClock::GetInstance());
 
-  // Initialize the LocalFrame, creating and initializing its LocalDOMWindow.
-  // |policy_container| is used to set the PolicyContainer of the new
-  // LocalDOMWindow. Usually, it is inherited from the parent or the opener: the
-  // inheritance operation is taken care of by the browser (if this LocalFrame
-  // was just created in response to the creation of a RenderFrameHost) or by
-  // blink if this is a synchronously created LocalFrame child. If you pass a
-  // null |policy_container|, it will be initialized to an empty, default one,
-  // which has no PolicyContainerHost counterpart. This is usually safe to do if
-  // this LocalFrame has no corresponding RenderFrameHost.
-  void Init(Frame* opener, std::unique_ptr<PolicyContainer> policy_container);
+  // Initialize the LocalFrame, creating and initializing its LocalDOMWindow. It
+  // starts from the initial empty document.
+  // - |policy_container| is used to set the PolicyContainer of the new
+  //   LocalDOMWindow. If you pass a null |policy_container|, it will be
+  //   initialized to an empty, default one, which has no PolicyContainerHost
+  //   counterpart. This is usually safe to do if this LocalFrame has no
+  //   corresponding RenderFrameHost.
+  // - |storage_key| is the key used to partition access to storage API like DOM
+  //   storage, IndexedDB, BroadcastChannel, etc...
+  //
+  // Note: Usually, the initial empty document inherits its |policy_container|
+  // and |storage_key| from the parent or the opener. The inheritance operation
+  // is taken care of by the browser (if this LocalFrame was just created in
+  // response to the creation of a RenderFrameHost) or by blink if this is a
+  // synchronously created LocalFrame child.
+  void Init(Frame* opener,
+            std::unique_ptr<PolicyContainer> policy_container,
+            const blink::StorageKey& storage_key);
   void SetView(LocalFrameView*);
   void CreateView(const gfx::Size&, const Color&);
 
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
index b846a6b..92b9e87 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
@@ -103,6 +103,7 @@
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/frame/fenced_frame_sandbox_flags.h"
 #include "third_party/blink/public/common/page_state/page_state.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/mojom/devtools/inspector_issue.mojom-blink.h"
 #include "third_party/blink/public/mojom/fenced_frame/fenced_frame.mojom-blink.h"
 #include "third_party/blink/public/mojom/frame/frame_replication_state.mojom-blink.h"
@@ -2012,10 +2013,17 @@
       frame_token);
   Page& page = *To<WebViewImpl>(web_view)->GetPage();
   DCHECK(!page.MainFrame());
+
+  // TODO(https://crbug.com/1355751): From the browser process, plumb the
+  // correct StorageKey for window in main frame. This is not an issue here,
+  // because the FrameLoader is able to recover a correct StorageKey from the
+  // origin of the document only.
+  StorageKey storage_key;
+
   frame->InitializeCoreFrame(
       page, nullptr, nullptr, nullptr, FrameInsertType::kInsertInConstructor,
       name, opener ? &ToCoreFrame(*opener)->window_agent_factory() : nullptr,
-      opener, std::move(policy_container), sandbox_flags);
+      opener, std::move(policy_container), storage_key, sandbox_flags);
   return frame;
 }
 
@@ -2059,7 +2067,7 @@
       *previous_frame->GetPage(), MakeGarbageCollected<DummyFrameOwner>(),
       previous_web_frame->Parent(), nullptr, FrameInsertType::kInsertLater,
       name, &ToCoreFrame(*previous_web_frame)->window_agent_factory(),
-      previous_web_frame->Opener(), /* policy_container */ nullptr,
+      previous_web_frame->Opener(), /*policy_container=*/nullptr, StorageKey(),
       sandbox_flags);
 
   LocalFrame* new_frame = web_frame->GetFrame();
@@ -2148,12 +2156,13 @@
     WindowAgentFactory* window_agent_factory,
     WebFrame* opener,
     std::unique_ptr<blink::WebPolicyContainer> policy_container,
+    const StorageKey& storage_key,
     network::mojom::blink::WebSandboxFlags sandbox_flags) {
   InitializeCoreFrameInternal(page, owner, parent, previous_sibling,
                               insert_type, name, window_agent_factory, opener,
                               PolicyContainer::CreateFromWebPolicyContainer(
                                   std::move(policy_container)),
-                              sandbox_flags);
+                              storage_key, sandbox_flags);
 }
 
 void WebLocalFrameImpl::InitializeCoreFrameInternal(
@@ -2166,6 +2175,7 @@
     WindowAgentFactory* window_agent_factory,
     WebFrame* opener,
     std::unique_ptr<PolicyContainer> policy_container,
+    const StorageKey& storage_key,
     network::mojom::blink::WebSandboxFlags sandbox_flags) {
   Frame* parent_frame = parent ? ToCoreFrame(*parent) : nullptr;
   Frame* previous_sibling_frame =
@@ -2202,7 +2212,7 @@
 
   // We must call init() after frame_ is assigned because it is referenced
   // during init().
-  frame_->Init(opener_frame, std::move(policy_container));
+  frame_->Init(opener_frame, std::move(policy_container), storage_key);
 
   if (!owner) {
     // This trace event is needed to detect the main frame of the
@@ -2277,8 +2287,8 @@
   webframe_child->InitializeCoreFrameInternal(
       *GetFrame()->GetPage(), owner_element, this, LastChild(),
       FrameInsertType::kInsertInConstructor, name,
-      &GetFrame()->window_agent_factory(), nullptr,
-      std::move(policy_container));
+      &GetFrame()->window_agent_factory(), nullptr, std::move(policy_container),
+      GetFrame()->DomWindow()->GetStorageKey());
 
   webframe_child->Client()->InitializeAsChildFrame(/*parent=*/this);
 
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
index 26f4955..23cc9a7 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
@@ -73,30 +73,31 @@
 namespace blink {
 
 class ChromePrintContext;
-struct ContextMenuData;
 class FindInPage;
 class HTMLFencedFrameElement;
 class HTMLPortalElement;
 class LocalFrameClientImpl;
 class ResourceError;
 class ScrollableArea;
+class StorageKey;
 class TextFinder;
 class WebAssociatedURLLoader;
-struct WebAssociatedURLLoaderOptions;
 class WebAutofillClient;
 class WebContentSettingsClient;
 class WebDevToolsAgentImpl;
-class WebLocalFrameClient;
 class WebFrameWidgetImpl;
+class WebLocalFrameClient;
 class WebNode;
 class WebPerformance;
 class WebRemoteFrameImpl;
 class WebSpellCheckPanelHostClient;
 class WebView;
 class WebViewImpl;
-enum class WebFrameLoadType;
-struct WebPrintParams;
 class WindowAgentFactory;
+enum class WebFrameLoadType;
+struct ContextMenuData;
+struct WebAssociatedURLLoaderOptions;
+struct WebPrintParams;
 
 template <typename T>
 class WebVector;
@@ -394,6 +395,7 @@
       WindowAgentFactory*,
       WebFrame* opener,
       std::unique_ptr<blink::WebPolicyContainer> policy_container,
+      const blink::StorageKey& storage_key,
       network::mojom::blink::WebSandboxFlags sandbox_flags =
           network::mojom::blink::WebSandboxFlags::kNone);
   LocalFrame* GetFrame() const { return frame_.Get(); }
@@ -594,6 +596,7 @@
       WindowAgentFactory*,
       WebFrame* opener,
       std::unique_ptr<PolicyContainer> policy_container,
+      const blink::StorageKey& storage_key,
       network::mojom::blink::WebSandboxFlags sandbox_flags =
           network::mojom::blink::WebSandboxFlags::kNone);
 
diff --git a/third_party/blink/renderer/core/frame/web_remote_frame_impl.cc b/third_party/blink/renderer/core/frame/web_remote_frame_impl.cc
index d85c181..421901d 100644
--- a/third_party/blink/renderer/core/frame/web_remote_frame_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_remote_frame_impl.cc
@@ -8,6 +8,7 @@
 
 #include "third_party/blink/public/common/frame/frame_visual_properties.h"
 #include "third_party/blink/public/common/permissions_policy/permissions_policy.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/mojom/frame/frame_replication_state.mojom-blink.h"
 #include "third_party/blink/public/mojom/frame/frame_replication_state.mojom.h"
 #include "third_party/blink/public/mojom/frame/tree_scope_type.mojom-blink.h"
@@ -237,10 +238,17 @@
     window_agent_factory = &GetFrame()->window_agent_factory();
   }
 
+  // TODO(https://crbug.com/1355751): Plumb the StorageKey from a value provided
+  // by the browser process. This was attempted in patchset 6 of:
+  // https://chromium-review.googlesource.com/c/chromium/src/+/3851381/6
+  // A remote frame being asked to create a child only happens in some cases to
+  // recover from a crash.
+  blink::StorageKey storage_key;
+
   child->InitializeCoreFrame(
       *GetFrame()->GetPage(), owner, this, previous_sibling,
       FrameInsertType::kInsertInConstructor, name, window_agent_factory, opener,
-      std::move(policy_container));
+      std::move(policy_container), storage_key);
   DCHECK(child->GetFrame());
   return child;
 }
diff --git a/third_party/blink/renderer/core/html/canvas/high_dynamic_range_options.idl b/third_party/blink/renderer/core/html/canvas/high_dynamic_range_options.idl
new file mode 100644
index 0000000..93ff0efea
--- /dev/null
+++ b/third_party/blink/renderer/core/html/canvas/high_dynamic_range_options.idl
@@ -0,0 +1,12 @@
+// 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.
+
+enum CanvasHighDynamicRangeMode {
+    "default",
+    "extended",
+};
+
+dictionary CanvasHighDynamicRangeOptions {
+  CanvasHighDynamicRangeMode mode = "default";
+};
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
index cb2b900..e1a91d4 100644
--- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
+++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -437,6 +437,13 @@
   return context_.Get();
 }
 
+void HTMLCanvasElement::configureHighDynamicRange(
+    const CanvasHighDynamicRangeOptions* options,
+    ExceptionState& exception_state) {
+  // TODO(https://crbug.com/1274220): Implement this.
+  NOTIMPLEMENTED();
+}
+
 ScriptPromise HTMLCanvasElement::convertToBlob(
     ScriptState* script_state,
     const ImageEncodeOptions* options,
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.h b/third_party/blink/renderer/core/html/canvas/html_canvas_element.h
index 9ade760..cc4fadd2 100644
--- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.h
+++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.h
@@ -60,6 +60,7 @@
 class Canvas2DLayerBridge;
 class CanvasContextCreationAttributesCore;
 class CanvasDrawListener;
+class CanvasHighDynamicRangeOptions;
 class CanvasRenderingContext;
 class CanvasRenderingContextFactory;
 class CanvasResourceProvider;
@@ -131,6 +132,8 @@
               ExceptionState& exception_state) {
     return toBlob(callback, mime_type, ScriptValue(), exception_state);
   }
+  void configureHighDynamicRange(const CanvasHighDynamicRangeOptions*,
+                                 ExceptionState&);
 
   bool IsPresentationAttribute(const QualifiedName&) const final;
   void CollectStyleForPresentationAttribute(const QualifiedName&,
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl b/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl
index 3a6ff316..fb73608 100644
--- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl
+++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.idl
@@ -41,6 +41,8 @@
     [HighEntropy, MeasureAs=CanvasToBlob, RaisesException] void toBlob(BlobCallback _callback, optional DOMString type = "image/png", optional any quality);
 
     [HighEntropy, RuntimeEnabled=CanvasColorManagementV2, MeasureAs=CanvasConvertToBlob, RaisesException, CallWith=ScriptState] Promise<Blob> convertToBlob(optional ImageEncodeOptions options = {});
+
+    [RuntimeEnabled=CanvasHDR, RaisesException] void configureHighDynamicRange(CanvasHighDynamicRangeOptions options);
 };
 
 // https://html.spec.whatwg.org/C/#blobcallback
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_registry.cc b/third_party/blink/renderer/core/html/custom/custom_element_registry.cc
index 96e2b6f9..d1d16b0e 100644
--- a/third_party/blink/renderer/core/html/custom/custom_element_registry.cc
+++ b/third_party/blink/renderer/core/html/custom/custom_element_registry.cc
@@ -74,6 +74,13 @@
 
 }  // namespace
 
+// static
+CustomElementRegistry* CustomElementRegistry::Create(
+    ScriptState* script_state) {
+  return MakeGarbageCollected<CustomElementRegistry>(
+      LocalDOMWindow::From(script_state));
+}
+
 CustomElementRegistry::CustomElementRegistry(const LocalDOMWindow* owner)
     : element_definition_is_running_(false),
       owner_(owner),
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_registry.h b/third_party/blink/renderer/core/html/custom/custom_element_registry.h
index fd028b57..502d11d 100644
--- a/third_party/blink/renderer/core/html/custom/custom_element_registry.h
+++ b/third_party/blink/renderer/core/html/custom/custom_element_registry.h
@@ -34,7 +34,9 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  CustomElementRegistry(const LocalDOMWindow*);
+  static CustomElementRegistry* Create(ScriptState*);
+
+  explicit CustomElementRegistry(const LocalDOMWindow*);
   CustomElementRegistry(const CustomElementRegistry&) = delete;
   CustomElementRegistry& operator=(const CustomElementRegistry&) = delete;
   ~CustomElementRegistry() override = default;
diff --git a/third_party/blink/renderer/core/html/custom/custom_element_registry.idl b/third_party/blink/renderer/core/html/custom/custom_element_registry.idl
index bb79bb06..06069c31 100644
--- a/third_party/blink/renderer/core/html/custom/custom_element_registry.idl
+++ b/third_party/blink/renderer/core/html/custom/custom_element_registry.idl
@@ -6,6 +6,7 @@
 
 [Exposed=Window]
 interface CustomElementRegistry {
+    [CallWith=ScriptState, RuntimeEnabled=ScopedCustomElementRegistry] constructor();
     [CallWith=ScriptState, CEReactions, RaisesException, MeasureAs=CustomElementRegistryDefine] void define(DOMString name, CustomElementConstructor constructor, optional ElementDefinitionOptions options = {});
     any get(DOMString name);
     [CallWith=ScriptState,RaisesException] Promise<void> whenDefined(DOMString name);
diff --git a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
index 0707f16..a3ec3793 100644
--- a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
@@ -35,6 +35,7 @@
 #include "build/build_config.h"
 #include "cc/layers/content_layer_client.h"
 #include "cc/layers/picture_layer.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/task_type.h"
@@ -1233,7 +1234,7 @@
       FrameInsertType::kInsertInConstructor, LocalFrameToken(), nullptr,
       nullptr);
   frame->SetView(MakeGarbageCollected<LocalFrameView>(*frame));
-  frame->Init(/*opener=*/nullptr, /*policy_container=*/nullptr);
+  frame->Init(/*opener=*/nullptr, /*policy_container=*/nullptr, StorageKey());
   frame->View()->SetCanHaveScrollbars(false);
   frame->View()->SetBaseBackgroundColor(Color::kTransparent);
 
diff --git a/third_party/blink/renderer/core/inspector/inspector_trace_events.cc b/third_party/blink/renderer/core/inspector/inspector_trace_events.cc
index 04ebc82..934d02c 100644
--- a/third_party/blink/renderer/core/inspector/inspector_trace_events.cc
+++ b/third_party/blink/renderer/core/inspector/inspector_trace_events.cc
@@ -381,7 +381,7 @@
     DEFINE_STRING_MAPPING(PseudoIsHtml)
     DEFINE_STRING_MAPPING(PseudoListBox)
     DEFINE_STRING_MAPPING(PseudoMultiSelectFocus)
-    DEFINE_STRING_MAPPING(PseudoTopLayer)
+    DEFINE_STRING_MAPPING(PseudoOpen)
     DEFINE_STRING_MAPPING(PseudoPopupHidden)
     DEFINE_STRING_MAPPING(PseudoHostHasAppearance)
     DEFINE_STRING_MAPPING(PseudoVideoPersistent)
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
index f68621e..d859115 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
@@ -603,7 +603,11 @@
 }
 
 NGPhysicalBoxFragment::RareData::RareData(const RareData& other)
-    : mathml_paint_info(other.mathml_paint_info
+    : frame_set_layout_data(
+          other.frame_set_layout_data
+              ? new FrameSetLayoutData(*other.frame_set_layout_data)
+              : nullptr),
+      mathml_paint_info(other.mathml_paint_info
                             ? new NGMathMLPaintInfo(*other.mathml_paint_info)
                             : nullptr),
       table_grid_rect(other.table_grid_rect),
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment_test.cc b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment_test.cc
index c173f65..1a28dcc 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment_test.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment_test.cc
@@ -22,7 +22,7 @@
 
   const NGPhysicalBoxFragment& GetPhysicalBoxFragmentByElementId(
       const char* id) {
-    auto* layout_object = To<LayoutBlockFlow>(GetLayoutObjectByElementId(id));
+    auto* layout_object = GetLayoutBoxByElementId(id);
     DCHECK(layout_object);
     const NGPhysicalBoxFragment* fragment =
         layout_object->GetPhysicalFragment(0);
@@ -375,4 +375,13 @@
       PhysicalRect(zero_offset, PhysicalSize(LayoutUnit(85), LayoutUnit(50))));
 }
 
+TEST_F(NGPhysicalBoxFragmentTest, CloneWithPostLayoutFragments) {
+  SetHtmlInnerHTML(R"HTML(<frameset id="fs"></frameset>)HTML");
+  const auto& fragment = GetPhysicalBoxFragmentByElementId("fs");
+  EXPECT_TRUE(fragment.GetFrameSetLayoutData());
+  const auto* clone =
+      NGPhysicalBoxFragment::CloneWithPostLayoutFragments(fragment);
+  EXPECT_TRUE(clone->GetFrameSetLayoutData());
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/loader/document_loader.cc b/third_party/blink/renderer/core/loader/document_loader.cc
index 2f86a095..16a619d 100644
--- a/third_party/blink/renderer/core/loader/document_loader.cc
+++ b/third_party/blink/renderer/core/loader/document_loader.cc
@@ -2248,8 +2248,6 @@
 
   // TODO(https://crbug.com/888079): Just use the storage key sent by the
   // browser once the browser will be able to compute the origin in all cases.
-  // TODO(https://crbug.com/1271402): Make sure we have the intended behavior
-  // for initial about:blank navigations, where storage_key_ might be unset.
   frame_->DomWindow()->SetStorageKey(
       BlinkStorageKey(security_origin, storage_key_.GetTopLevelSite(),
                       base::OptionalOrNullptr(storage_key_.GetNonce())));
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc
index 9e2dab9..4786257 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -49,6 +49,7 @@
 #include "services/network/public/cpp/web_sandbox_flags.h"
 #include "services/network/public/mojom/web_sandbox_flags.mojom-blink.h"
 #include "third_party/blink/public/common/features.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
 #include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
 #include "third_party/blink/public/mojom/frame/frame.mojom-blink.h"
@@ -240,7 +241,8 @@
   visitor->Trace(document_loader_);
 }
 
-void FrameLoader::Init(std::unique_ptr<PolicyContainer> policy_container) {
+void FrameLoader::Init(std::unique_ptr<PolicyContainer> policy_container,
+                       const blink::StorageKey& storage_key) {
   DCHECK(policy_container);
   ScriptForbiddenScope forbid_scripts;
 
@@ -249,6 +251,7 @@
   navigation_params->url = KURL(g_empty_string);
   navigation_params->frame_policy =
       frame_->Owner() ? frame_->Owner()->GetFramePolicy() : FramePolicy();
+  navigation_params->storage_key = storage_key;
 
   DocumentLoader* new_document_loader = MakeGarbageCollected<DocumentLoader>(
       frame_, kWebNavigationTypeOther, std::move(navigation_params),
diff --git a/third_party/blink/renderer/core/loader/frame_loader.h b/third_party/blink/renderer/core/loader/frame_loader.h
index d65a813..4ca0e91 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.h
+++ b/third_party/blink/renderer/core/loader/frame_loader.h
@@ -66,6 +66,7 @@
 class PolicyContainer;
 class ProgressTracker;
 class ResourceRequest;
+class StorageKey;
 class TracedValue;
 struct FrameLoadRequest;
 struct WebNavigationInfo;
@@ -83,7 +84,8 @@
   FrameLoader& operator=(const FrameLoader&) = delete;
   ~FrameLoader();
 
-  void Init(std::unique_ptr<PolicyContainer> policy_container);
+  void Init(std::unique_ptr<PolicyContainer> policy_container,
+            const blink::StorageKey& storage_key);
 
   ResourceRequest ResourceRequestForReload(
       WebFrameLoadType,
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.cc b/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.cc
index dcbb1c24..3b728060 100644
--- a/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.cc
+++ b/third_party/blink/renderer/core/loader/modulescript/module_script_fetcher.cc
@@ -73,8 +73,7 @@
     return true;
   }
   // <spec step="13">If type is a JSON MIME type, then:</spec>
-  if (base::FeatureList::IsEnabled(blink::features::kJSONModules) &&
-      expected_module_type == ModuleType::kJSON &&
+  if (expected_module_type == ModuleType::kJSON &&
       MIMETypeRegistry::IsJSONMimeType(response.HttpContentType())) {
     return true;
   }
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc
index e380e8e..012c467 100644
--- a/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc
+++ b/third_party/blink/renderer/core/loader/modulescript/module_script_loader.cc
@@ -276,7 +276,6 @@
   // url, and options.</spec>
   switch (params.GetModuleType()) {
     case ModuleType::kJSON:
-      DCHECK(base::FeatureList::IsEnabled(blink::features::kJSONModules));
       module_script_ = ValueWrapperSyntheticModuleScript::
           CreateJSONWrapperSyntheticModuleScript(params, modulator_);
       break;
diff --git a/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc b/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc
index 8c49a5a..05990b83 100644
--- a/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc
+++ b/third_party/blink/renderer/core/loader/modulescript/module_script_loader_test.cc
@@ -148,7 +148,6 @@
   const base::TickClock* GetTickClock() override {
     return platform_->test_task_runner()->GetMockTickClock();
   }
-  base::test::ScopedFeatureList scoped_feature_list_;
 
  protected:
   const KURL url_;
@@ -169,7 +168,6 @@
 ModuleScriptLoaderTest::ModuleScriptLoaderTest()
     : url_("https://example.test"),
       security_origin_(SecurityOrigin::Create(url_)) {
-  scoped_feature_list_.InitAndEnableFeature(blink::features::kJSONModules);
   platform_->AdvanceClockSeconds(1.);  // For non-zero DocumentParserTimings
 }
 
diff --git a/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc b/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc
index 3357576..cd5f11083 100644
--- a/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc
+++ b/third_party/blink/renderer/core/page/validation_message_overlay_delegate.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/memory/ptr_util.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/public/resources/grit/blink_resources.h"
 #include "third_party/blink/renderer/core/dom/dom_token_list.h"
@@ -153,7 +154,7 @@
       nullptr, FrameInsertType::kInsertInConstructor, LocalFrameToken(),
       nullptr, nullptr);
   frame->SetView(MakeGarbageCollected<LocalFrameView>(*frame, view_size));
-  frame->Init(/*opener=*/nullptr, /*policy_container=*/nullptr);
+  frame->Init(/*opener=*/nullptr, /*policy_container=*/nullptr, StorageKey());
   frame->View()->SetCanHaveScrollbars(false);
   frame->View()->SetBaseBackgroundColor(Color::kTransparent);
   page_->GetVisualViewport().SetSize(view_size);
diff --git a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
index 0f3e9c0..d75e4a85 100644
--- a/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
+++ b/third_party/blink/renderer/core/paint/paint_layer_scrollable_area.cc
@@ -1497,6 +1497,7 @@
       !CanHaveOverflowScrollbars(*GetLayoutBox()) ||
       GetLayoutBox()->GetFrame()->GetSettings()->GetHideScrollbars() ||
       GetLayoutBox()->IsLayoutNGFieldset() ||
+      GetLayoutBox()->IsLayoutNGFrameSet() ||
       GetLayoutBox()->StyleRef().ScrollbarWidth() == EScrollbarWidth::kNone) {
     needs_horizontal_scrollbar = false;
     needs_vertical_scrollbar = false;
diff --git a/third_party/blink/renderer/core/script/modulator_impl_base.cc b/third_party/blink/renderer/core/script/modulator_impl_base.cc
index 9a3b0d76..418960c8 100644
--- a/third_party/blink/renderer/core/script/modulator_impl_base.cc
+++ b/third_party/blink/renderer/core/script/modulator_impl_base.cc
@@ -213,8 +213,7 @@
     // step="1">Let module type be "javascript".</spec> If no type assertion is
     // provided, the import is treated as a JavaScript module.
     return ModuleType::kJavaScript;
-  } else if (base::FeatureList::IsEnabled(blink::features::kJSONModules) &&
-             module_type_string == "json") {
+  } else if (module_type_string == "json") {
     // <spec href="https://html.spec.whatwg.org/#fetch-a-single-module-script"
     // step="17"> If...module type is "json", then set module script to the
     // result of creating a JSON module script...</spec>
diff --git a/third_party/blink/renderer/core/svg/graphics/svg_image.cc b/third_party/blink/renderer/core/svg/graphics/svg_image.cc
index 7473478..082a7c71 100644
--- a/third_party/blink/renderer/core/svg/graphics/svg_image.cc
+++ b/third_party/blink/renderer/core/svg/graphics/svg_image.cc
@@ -29,6 +29,7 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/public/platform/resource_load_info_notifier_wrapper.h"
 #include "third_party/blink/public/platform/web_back_forward_cache_loader_helper.h"
@@ -863,7 +864,7 @@
         FrameInsertType::kInsertInConstructor, LocalFrameToken(), nullptr,
         nullptr);
     frame->SetView(MakeGarbageCollected<LocalFrameView>(*frame));
-    frame->Init(/*opener=*/nullptr, /*policy_container=*/nullptr);
+    frame->Init(/*opener=*/nullptr, /*policy_container=*/nullptr, StorageKey());
   }
 
   // SVG Images will always synthesize a viewBox, if it's not available, and
diff --git a/third_party/blink/renderer/core/testing/core_unit_test_helper.cc b/third_party/blink/renderer/core/testing/core_unit_test_helper.cc
index aba817e..8335505 100644
--- a/third_party/blink/renderer/core/testing/core_unit_test_helper.cc
+++ b/third_party/blink/renderer/core/testing/core_unit_test_helper.cc
@@ -8,6 +8,7 @@
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
+#include "third_party/blink/renderer/core/frame/local_dom_window.h"
 #include "third_party/blink/renderer/core/html/html_iframe_element.h"
 #include "third_party/blink/renderer/core/input/event_handler.h"
 #include "third_party/blink/renderer/core/page/page.h"
@@ -55,7 +56,8 @@
   auto policy_container = std::make_unique<PolicyContainer>(
       dummy_host.Unbind(), std::move(policy_container_data));
 
-  child->Init(/*opener=*/nullptr, std::move(policy_container));
+  child->Init(/*opener=*/nullptr, std::move(policy_container),
+              parent_frame->DomWindow()->GetStorageKey());
 
   return child;
 }
diff --git a/third_party/blink/renderer/core/testing/dummy_page_holder.cc b/third_party/blink/renderer/core/testing/dummy_page_holder.cc
index 74db9ae..b90abfd 100644
--- a/third_party/blink/renderer/core/testing/dummy_page_holder.cc
+++ b/third_party/blink/renderer/core/testing/dummy_page_holder.cc
@@ -33,6 +33,7 @@
 #include <memory>
 
 #include "base/memory/ptr_util.h"
+#include "third_party/blink/public/common/storage_key/storage_key.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
 #include "third_party/blink/public/mojom/frame/policy_container.mojom-blink.h"
 #include "third_party/blink/public/platform/scheduler/web_agent_group_scheduler.h"
@@ -103,7 +104,7 @@
   frame_->SetView(
       MakeGarbageCollected<LocalFrameView>(*frame_, initial_view_size));
   frame_->View()->GetPage()->GetVisualViewport().SetSize(initial_view_size);
-  frame_->Init(/*opener=*/nullptr, /*policy_container=*/nullptr);
+  frame_->Init(/*opener=*/nullptr, /*policy_container=*/nullptr, StorageKey());
 
   CoreInitializer::GetInstance().ProvideModulesToPage(GetPage(),
                                                       base::EmptyString());
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index d8608ff0..0af5e60a 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1969,6 +1969,11 @@
       status: "stable",
       implied_by: ["SanitizerAPI"],
     },
+    {
+      // https://wicg.github.io/webcomponents/proposals/Scoped-Custom-Element-Registries
+      name: "ScopedCustomElementRegistry",
+      status: "test",
+    },
 
     // WebSpeech API with both speech recognition and synthesis functionality
     // is not fully enabled on all platforms.
diff --git a/third_party/blink/tools/blinkpy/web_tests/web_tests_history.py b/third_party/blink/tools/blinkpy/web_tests/web_tests_history.py
deleted file mode 100644
index cae136c..0000000
--- a/third_party/blink/tools/blinkpy/web_tests/web_tests_history.py
+++ /dev/null
@@ -1,182 +0,0 @@
-# Copyright 2019 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import argparse
-import logging
-import multiprocessing
-import signal
-import traceback
-from collections import namedtuple
-
-from blinkpy.common.system.log_utils import configure_logging
-from blinkpy.common.host import Host
-
-_log = logging.getLogger('web_tests_history.py')
-
-
-class HistoryChecker(object):
-    # Full hash, committer UNIX timestamp, author email
-    FORMAT = "%H %ct %ae"
-    CommitInfo = namedtuple('CommitInfo', ['hash', 'time', 'author'])
-
-    # d77503fce4933a5b1cf55f375b77d0a20afdf9e3
-    BLINK_FORK_TIME = 1365030973
-
-    def __init__(self, host, argv):
-        self.host = host
-        self.port = host.port_factory.get()
-        self.filesystem = host.filesystem
-        self.executive = host.executive
-
-        self.options = self.parse_args(argv[1:])
-        self._path = argv[0]
-
-        if self.options.verbose >= 2:
-            log_level = logging.DEBUG
-        elif self.options.verbose == 1:
-            log_level = logging.INFO
-        else:
-            log_level = logging.WARNING
-        configure_logging(logging_level=log_level, include_time=False)
-
-    @staticmethod
-    def parse_args(args):
-        parser = argparse.ArgumentParser(
-            prog='web_tests_history.py',
-            description='''Examine the version history of web tests to check
-            if they were created before the Blink fork; and if so, whether all
-            contributions were made by Googlers.''')
-        parser.add_argument(
-            '--verbose',
-            '-v',
-            action='count',
-            default=0,
-            help='show verbose logging (can be repeated, e.g. -vv)')
-        parser.add_argument(
-            'paths',
-            metavar='PATH',
-            type=str,
-            nargs='*',
-            help=
-            'test path relative to web_tests (same as the arguments for run_web_tests.py); '
-            'if no path is provided, the script will check all files.')
-        return parser.parse_args(args)
-
-    def git(self, args):
-        command = ['git'] + args
-        return self.executive.run_command(command)
-
-    def run_git_log(self, path):
-        # Follow rename and copy.
-        output = self.git(
-            ['log', '--follow', '-M', '-C', '--format=' + self.FORMAT, path])
-        commits = []
-        for line in output.splitlines():
-            parts = line.split()
-            assert len(parts) == 3
-            # Make the timestamp an int so that we can compare them easily.
-            commits.append(self.CommitInfo(parts[0], int(parts[1]), parts[2]))
-        return commits
-
-    def analyze(self, path, commits):
-        before_fork = 0
-        before_fork_googlers = 0
-        for commit in commits:
-            if commit.time < self.BLINK_FORK_TIME:
-                before_fork += 1
-                if ('google.com' in commit.author) or \
-                        ('chromium.org' in commit.author):
-                    before_fork_googlers += 1
-        if before_fork == 0:
-            return "%s\t[OK] created after fork" % path
-        elif before_fork == before_fork_googlers:
-            return "%s\t[OK] created before fork, but all pre-fork commits from Googlers" % path
-        else:
-            return "%s\t[NO]" % path
-
-    def _process_single(self, path):
-        _init(self)
-        print(_run(path))
-        return 0
-
-    def _process_many(self, paths):
-        files = self.port.real_tests(paths)
-        if len(files) == 0:
-            _log.error("No tests found.")
-            return 1
-        _log.info("Total test files discovered: %d", len(files))
-
-        pool = multiprocessing.Pool(processes=self.executive.cpu_count(),
-                                    initializer=_init,
-                                    initargs=(self, ))
-
-        # Capture SIGTERM/INT to exit gracefully without leaving workers behind.
-        def _handler(signum, _):
-            _log.error('Received signal %d, exiting...', signum)
-            raise SystemExit
-
-        signal.signal(signal.SIGINT, _handler)
-        signal.signal(signal.SIGTERM, _handler)
-
-        try:
-            for res in pool.imap_unordered(_run, files):
-                # BaseException includes Exception as well as KeyboardInterrupt.
-                if isinstance(res, BaseException):
-                    # Traceback is already printed in the worker; exit directly.
-                    raise SystemExit
-                print(res)
-            pool.close()
-        except Exception:
-            # A user exception was raised from the manager (main) process.
-            traceback.print_exc()
-            pool.terminate()
-            return 1
-        except SystemExit:
-            # Either a worker process has exited unexpectedly, or the manager
-            # process has received SIGTERM/INT.
-            pool.terminate()
-            return 1
-        finally:
-            pool.join()
-        return 0
-
-    def _is_test(self, path):
-        return self.port.is_non_wpt_test_file(
-            self.filesystem.dirname(path), self.filesystem.basename(path))
-
-    def process(self):
-        if len(self.options.paths) == 1 and self._is_test(
-                self.options.paths[0]):
-            return self._process_single(self.options.paths[0])
-        return self._process_many(self.options.paths)
-
-
-# The following protected variable and functions are used inside worker
-# processes. Functions have to be Picklable to work with multiprocessing.Pool,
-# so they are defined at the module level, and thus the variable is global, too.
-_checker = None
-
-
-def _init(checker):
-    global _checker
-    _checker = checker
-
-
-def _run(path):
-    try:
-        abs_path = _checker.filesystem.join(_checker.port.web_tests_dir(),
-                                            path)
-        commits = _checker.run_git_log(abs_path)
-        return _checker.analyze(path, commits)
-    except Exception as e:
-        traceback.print_exc()
-        return e
-    except KeyboardInterrupt as e:
-        return e
-
-
-def main(argv):
-    host = Host()
-    checker = HistoryChecker(host, argv)
-    return checker.process()
diff --git a/third_party/blink/tools/web_tests_history.py b/third_party/blink/tools/web_tests_history.py
deleted file mode 100755
index 78d85109..0000000
--- a/third_party/blink/tools/web_tests_history.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env vpython3
-# Copyright 2019 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import sys
-
-from blinkpy.web_tests.web_tests_history import main
-
-if __name__ == '__main__':
-    sys.exit(main(sys.argv))
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index f455be0..bc6f33d 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1623,7 +1623,6 @@
 crbug.com/660611 fast/multicol/flexbox/doubly-nested-with-zero-width-flexbox-and-forced-break-crash.html [ Skip ]
 
 ### Tests failing with LayoutNGFrameSet enabled:
-crbug.com/1346221 external/wpt/css/css-overflow/overflow-no-frameset-propagation.html [ Failure ]
 crbug.com/1346221 printing/frameset.html [ Failure ]
 
 ### Tests failing with LayoutNGTableFragmentation enabled:
@@ -3713,9 +3712,6 @@
 crbug.com/958104 external/wpt/presentation-api/controlling-ua/getAvailability.https.html [ Failure ]
 crbug.com/626703 external/wpt/screen-orientation/onchange-event-subframe.html [ Timeout ]
 
-# Synthetic modules report the wrong location in errors
-crbug.com/994315 virtual/import-assertions/external/wpt/html/semantics/scripting-1/the-script-element/json-module/parse-error.html [ Skip ]
-
 # These tests pass on the blink_rel bots but fail on the other builders
 crbug.com/1051773 external/wpt/css/CSS2/floats/float-nowrap-3-ref.html [ Crash ]
 crbug.com/1051773 external/wpt/css/CSS2/floats/float-nowrap-4.html [ Crash Timeout ]
@@ -6904,9 +6900,3 @@
 # Sheriff 2022-08-24
 crbug.com/1356118 [ Mac ] virtual/fenced-frame-shadow-dom/external/wpt/html/anonymous-iframe/local-storage-initial-empty-document.tentative.https.window.html [ Failure Pass ]
 crbug.com/1356118 [ Mac ] virtual/async-script-scheduling-finished-parsing/wpt_internal/async-script-scheduling/execution-order.sub.html [ Failure Pass ]
-
-# Temporarily disable tests to land IndexedDB frontend CLs
-crbug.com/1296584 http/tests/devtools/indexeddb/database-data.js [ Skip ]
-crbug.com/1296584 http/tests/devtools/indexeddb/database-structure.js [ Skip ]
-crbug.com/1296584 http/tests/devtools/indexeddb/database-version-number.js [ Skip ]
-crbug.com/1296584 http/tests/devtools/indexeddb/upgrade-events.js [ Skip ]
diff --git a/third_party/blink/web_tests/VirtualTestSuites b/third_party/blink/web_tests/VirtualTestSuites
index cdd34c1..e788832 100644
--- a/third_party/blink/web_tests/VirtualTestSuites
+++ b/third_party/blink/web_tests/VirtualTestSuites
@@ -602,15 +602,6 @@
     "args": ["--disable-blink-features=CSSTrigonometricFunctions"]
   },
   {
-    "prefix": "import-assertions",
-    "platforms": ["Linux", "Mac", "Win"],
-    "bases": [
-      "external/wpt/html/semantics/scripting-1/the-script-element/import-assertions", 
-      "external/wpt/html/semantics/scripting-1/the-script-element/css-module",
-      "external/wpt/html/semantics/scripting-1/the-script-element/json-module"],
-    "args": ["--js-flags=--harmony-import-assertions"]
-  },
-  {
     "prefix": "import-maps-disabled",
     "platforms": ["Linux", "Mac", "Win"],
     "bases": ["external/wpt/import-maps/not-as-classic-script.html"],
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-shorthand-serialization.html b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-shorthand-serialization.html
index 7f8ebdb9..5114a3e 100644
--- a/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-shorthand-serialization.html
+++ b/third_party/blink/web_tests/external/wpt/css/css-grid/parsing/grid-shorthand-serialization.html
@@ -37,6 +37,36 @@
     assert_equals(element.style.grid, "", "grid shorthand must not be serialized when it doesn't roundtrip");
     assert_equals(element.style.gridTemplate, template);
     assert_equals(element.style.gridAutoFlow, "column");
-    assert_equals(element.style.cssText, "grid-template: 30px 40px / 50px 60px; grid-auto-rows: auto; grid-auto-columns: auto; grid-auto-flow: column;", "cssText should round-trip");
+    let expected_declarations = [
+      "grid-template: 30px 40px / 50px 60px;",
+      "grid-auto-rows: auto;",
+      "grid-auto-columns: auto;",
+      "grid-auto-flow: column;"
+    ];
+    let cssText = element.style.cssText;
+    expected_declarations.forEach(decl => {
+      assert_true(cssText.indexOf(decl) !== -1, `cssText ('${cssText}') must contain '${decl}'`);
+    });
   }, "Serialization with grid-auto-flow");
+
+  test(() => {
+    let element = document.createElement('div');
+    const shorthand = "auto-flow / 10px";
+    element.style.grid = shorthand;
+    element.style.gridTemplateRows = "20px";
+
+    assert_equals(element.style.grid, "", "grid shorthand must not be serialized when it doesn't roundtrip");
+    assert_equals(element.style.gridTemplate, "20px / 10px");
+
+    let expected_declarations = [
+      "grid-template: 20px / 10px;",
+      "grid-auto-flow: row;",
+      "grid-auto-columns: auto;",
+      "grid-auto-rows: auto;",
+    ];
+    let cssText = element.style.cssText;
+    expected_declarations.forEach(decl => {
+      assert_true(cssText.indexOf(decl) !== -1, `cssText ('${cssText}') must contain '${decl}'`);
+    });
+  }, "Serialization with grid-auto-flow and template rows/columns");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-cache.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-cache.https.html
index e56e1d5..6568ac3 100644
--- a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-cache.https.html
+++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/popup-redirect-cache.https.html
@@ -19,20 +19,18 @@
 
 function url_test_cache(t, url, responseToken, iframeToken, hasOpener) {
   return new Promise(async (resolve, reject) => {
-    const w = window.open(url, responseToken);
-    // The popup is closed by dispatcher_url_test.
     try {
-      var payload = await receive(responseToken);
-      payload = JSON.parse(payload);
-      assert_equals('error' in payload, false, 'Unexpected error response received');
-      validate_results(resolve, t, w, responseToken, hasOpener, undefined /* OpenerDomAccess */, payload)
+      await dispatcher_url_test(t, url, responseToken, iframeToken, hasOpener, undefined /* OpenerDomAccess */, resolve);
     } catch(e) {
       reject(e);
     }
   }).then(() => {
-    // test the same url for cache.
     return new Promise(async (resolve, reject) => {
       try {
+        // Test the same url for cache.
+        // Note that at this point the popup from the first
+        // `dispatcher_url_test()` call hasn't been closed yet, but once this
+        // test has finished both will be cleaned up.
         await dispatcher_url_test(t, url, responseToken, iframeToken, hasOpener, undefined /* OpenerDomAccess */, resolve);
       } catch(e) {
         reject(e);
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-parts-structure.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-parts-structure.tentative.html
index 2f907c4..e7b0bf7 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-parts-structure.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/forms/the-selectmenu-element/selectmenu-parts-structure.tentative.html
@@ -208,13 +208,13 @@
     const selectMenu1Popup = document.getElementById("selectMenu1-popup");
     const selectMenu1Button = document.getElementById("selectMenu1-button");
     const selectMenu1Child2 = document.getElementById("selectMenu1-child2");
-    assert_false(selectMenu1Popup.matches(':top-layer'));
+    assert_false(selectMenu1Popup.matches(':open'));
     selectMenu1Button.click();
-    assert_false(selectMenu1Popup.matches(':top-layer'), "Clicking a button part that is a descendant of the listbox part should have no effect");
+    assert_false(selectMenu1Popup.matches(':open'), "Clicking a button part that is a descendant of the listbox part should have no effect");
 
     assert_equals(selectMenu1.value, "one");
     await clickOn(selectMenu1);
-    assert_true(selectMenu1Popup.matches(':top-layer'));
+    assert_true(selectMenu1Popup.matches(':open'));
     await clickOn(selectMenu1Child2);
     assert_equals(selectMenu1.value, "two", "Clicking an <option> should change the value");
   }, "To receive button part controller code, an element labeled as a button must not be a descendant of the listbox part in a flat tree traversal");
@@ -226,9 +226,9 @@
     const selectMenu2Child2 = document.getElementById("selectMenu2-child2");
     const selectMenu2Child4 = document.getElementById("selectMenu2-child4");
 
-    assert_false(selectMenu2Popup.matches(':top-layer'));
+    assert_false(selectMenu2Popup.matches(':open'));
     await clickOn(selectMenu2Button);
-    assert_false(selectMenu2Popup.matches(':top-layer'), "Clicking a button part should not show an invalid listbox part");
+    assert_false(selectMenu2Popup.matches(':open'), "Clicking a button part should not show an invalid listbox part");
 
     assert_equals(selectMenu2.value, "three");
     await clickOn(selectMenu2Button);
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-anchor-nesting.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-anchor-nesting.tentative.html
index aa43dd9..d4982949 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-anchor-nesting.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-anchor-nesting.tentative.html
@@ -46,15 +46,15 @@
     setup({ explicit_done: true });
 
     popup2.showPopUp();
-    assert_false(popup1.matches(':top-layer'));
-    assert_true(popup2.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
+    assert_true(popup2.matches(':open'));
     await clickOn(button1);
     test(t => {
       // Button1 is the anchor for popup1, and an ancestor of popup2.
       // Since popup2 is open, but not popup1, button1 should not be
       // the anchor of any open popup. So popup2 should be closed.
-      assert_false(popup2.matches(':top-layer'));
-      assert_true(popup1.matches(':top-layer'));
+      assert_false(popup2.matches(':open'));
+      assert_true(popup1.matches(':open'));
     },'Nested popups (inside anchor elements) do not affect light dismiss');
 
     done();
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-cleanup.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-cleanup.tentative.html
index 00ff0db..778b384 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-cleanup.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-cleanup.tentative.html
@@ -17,7 +17,7 @@
 [popup].animation {
   left: 0px;
 }
-[popup].animation:top-layer {
+[popup].animation:open {
   animation: move 1000s;
 }
 @keyframes move {
@@ -29,7 +29,7 @@
   opacity: 0;
   transition: opacity 5s;
 }
-[popup].transition:top-layer {
+[popup].transition:open {
   opacity: 1;
 }
 
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-display.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-display.tentative.html
index 0d9ff4a..0bbc6b2 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-display.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-display.tentative.html
@@ -16,7 +16,7 @@
     left: 0;
     transition: left 20s steps(2, jump-end) -10s;
   }
-  [popup]:top-layer {
+  [popup]:open {
     left: 200px;
   }
   .topmost {
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-finishes.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-finishes.tentative.html
index 1213f4f..a594ecad 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-finishes.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-hide-finishes.tentative.html
@@ -17,7 +17,7 @@
     /* Immediate transition: */
     transition: left 1s -1s;
   }
-  [popup]:top-layer {
+  [popup]:open {
     left: 200px;
   }
   [popup]::backdrop {
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-show-display.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-show-display.tentative.html
index 9bcc130..f11529c 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-show-display.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animated-show-display.tentative.html
@@ -16,7 +16,7 @@
     left: 0;
     transition: left 20s steps(2, jump-end) -10s;
   }
-  [popup]:top-layer {
+  [popup]:open {
     left: 200px;
   }
   .topmost {
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animation-corner-cases.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animation-corner-cases.tentative.html
index e85d1f7..e2298fc 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animation-corner-cases.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-animation-corner-cases.tentative.html
@@ -10,15 +10,15 @@
 <body>
 <style>
 .animation { opacity: 0; }
-.animation:top-layer { opacity: 1; }
-.animation:not(:top-layer) { animation: fade-out 1000s; }
+.animation:open { opacity: 1; }
+.animation:not(:open) { animation: fade-out 1000s; }
 @keyframes fade-out {
   from { opacity: 1; }
   to { opacity: 0; }
 }
 
 .animation>div>div { left: 0; }
-.animation:not(:top-layer)>div>div { animation: rotate 1000s; color:red;}
+.animation:not(:open)>div>div { animation: rotate 1000s; color:red;}
 @keyframes rotate {
   from { transform: rotate(0); }
   to { transform: rotate(360deg); }
@@ -46,13 +46,13 @@
   assert_false(isElementVisible(popUp));
   assert_equals(descendent.parentElement.parentElement,popUp);
   popUp.showPopUp();
-  assert_true(popUp.matches(':top-layer'));
+  assert_true(popUp.matches(':open'));
   assert_true(isElementVisible(popUp));
   assert_equals(popUp.getAnimations({subtree: true}).length,0);
   popUp.hidePopUp();
   const animations = popUp.getAnimations({subtree: true});
   assert_equals(animations.length,2,'There should be two animations running');
-  assert_false(popUp.matches(':top-layer'),'popUp should not match :top-layer as soon as hidden');
+  assert_false(popUp.matches(':open'),'popUp should not match :open as soon as hidden');
   assert_true(isElementVisible(popUp),'but animations should keep the popUp visible');
   assert_true(isElementVisible(descendent),'The descendent should also be visible');
   await waitForRender();
@@ -61,7 +61,7 @@
   assert_true(isElementVisible(popUp),'PopUp should still be visible due to animation');
   animations.forEach(animation => animation.finish()); // Force the animations to finish
   await waitForRender(); // Wait one frame
-  assert_false(popUp.matches(':top-layer'),'The pop up still shouldn\'t match :top-layer');
+  assert_false(popUp.matches(':open'),'The pop up still shouldn\'t match :open');
   assert_false(isElementVisible(popUp),'The pop up should now be invisible');
   assert_false(isElementVisible(descendent),'The descendent should also be invisible');
   assert_equals(popUp.getAnimations({subtree: true}).length,0);
@@ -72,7 +72,7 @@
   assert_equals(popUp.classList.length, 0);
   assert_false(isElementVisible(popUp));
   popUp.showPopUp();
-  assert_true(popUp.matches(':top-layer'));
+  assert_true(popUp.matches(':open'));
   assert_true(isElementVisible(popUp));
   assert_equals(popUp.getAnimations({subtree: true}).length,0);
   // Start an animation on the popUp and its descendent.
@@ -81,7 +81,7 @@
   assert_equals(popUp.getAnimations({subtree: true}).length,2);
   // Then hide the popUp.
   popUp.hidePopUp();
-  assert_false(popUp.matches(':top-layer'),'pop up should not match :top-layer as soon as hidden');
+  assert_false(popUp.matches(':open'),'pop up should not match :open as soon as hidden');
   assert_equals(popUp.getAnimations({subtree: true}).length,2,'animations should still be running');
   await waitForRender();
   assert_equals(popUp.getAnimations({subtree: true}).length,2,'animations should still be running');
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-attribute-basic.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-attribute-basic.tentative.html
index 1ff7f13c..4554162c 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-attribute-basic.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-attribute-basic.tentative.html
@@ -26,7 +26,7 @@
   opacity: 0;
   transition: opacity 10s;
 }
-[popup].animated:top-layer {
+[popup].animated:open {
   opacity: 1;
 }
 </style>
@@ -36,10 +36,10 @@
     const isVisible = isElementVisible(popUp);
     if (isVisible) {
       assert_not_equals(window.getComputedStyle(popUp).display,'none');
-      assert_equals(popUp.matches(':top-layer'),isPopUp);
+      assert_equals(popUp.matches(':open'),isPopUp);
     } else {
       assert_equals(window.getComputedStyle(popUp).display,'none');
-      assert_false(popUp.matches(':top-layer'));
+      assert_false(popUp.matches(':open'));
     }
     return isVisible;
   }
@@ -166,17 +166,17 @@
   test((t) => {
     const popUp = createPopUp(t);
     popUp.showPopUp();
-    assert_true(popUp.matches(':top-layer'));
+    assert_true(popUp.matches(':open'));
     popUp.setAttribute('popup','hint'); // Change pop-up type
-    assert_false(popUp.matches(':top-layer'));
+    assert_false(popUp.matches(':open'));
     popUp.showPopUp();
-    assert_true(popUp.matches(':top-layer'));
+    assert_true(popUp.matches(':open'));
     popUp.setAttribute('popup','manual');
-    assert_false(popUp.matches(':top-layer'));
+    assert_false(popUp.matches(':open'));
     popUp.showPopUp();
-    assert_true(popUp.matches(':top-layer'));
+    assert_true(popUp.matches(':open'));
     popUp.setAttribute('popup','invalid');
-    assert_false(popUp.matches(':top-layer'));
+    assert_false(popUp.matches(':open'));
   },'Changing attribute values should close open pop-ups');
 
   function modalPseudoSupported() {
@@ -193,11 +193,11 @@
       const popUp = createPopUp(t);
       popUp.setAttribute('popup',type);
       popUp.showPopUp();
-      assert_true(popUp.matches(':top-layer'));
+      assert_true(popUp.matches(':open'));
       popUp.remove();
-      assert_false(popUp.matches(':top-layer'));
+      assert_false(popUp.matches(':open'));
       document.body.appendChild(popUp);
-      assert_false(popUp.matches(':top-layer'));
+      assert_false(popUp.matches(':open'));
     },`Removing a visible popup=${type} element from the document should close the pop-up`);
 
     if (modalPseudoSupported()) {
@@ -205,7 +205,7 @@
         const popUp = createPopUp(t);
         popUp.setAttribute('popup',type);
         popUp.showPopUp();
-        assert_true(popUp.matches(':top-layer'));
+        assert_true(popUp.matches(':open'));
         assert_false(popUp.matches(':modal'));
         popUp.hidePopUp();
       },`A showing popup=${type} does not match :modal`);
@@ -217,14 +217,14 @@
     assert_true(!!popUp);
     assert_false(isElementVisible(popUp));
     popUp.showPopUp();
-    assert_true(popUp.matches(':top-layer'));
+    assert_true(popUp.matches(':open'));
     assert_true(getComputedStyle(popUp).opacity < 0.1,'Animations should start on show');
     assert_throws_dom("InvalidStateError",() => popUp.showPopUp(),'Calling showPopUp on a popup that is in the process of animating show should throw InvalidStateError');
     await finishAnimations(popUp);
     assert_true(getComputedStyle(popUp).opacity > 0.9);
     assert_true(isElementVisible(popUp));
     popUp.hidePopUp();
-    assert_false(popUp.matches(':top-layer'));
+    assert_false(popUp.matches(':open'));
     assert_true(getComputedStyle(popUp).opacity > 0.9,'Animations should start on hide');
     assert_throws_dom("InvalidStateError",() => popUp.hidePopUp(),'Calling hidePopUp on a popup that is in the process of animating hide should throw InvalidStateError');
     popUp.showPopUp(); // But showPopUp should still be ok.
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen-2.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen-2.tentative.html
index 36b621f..83cc160 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen-2.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen-2.tentative.html
@@ -16,8 +16,8 @@
   requestAnimationFrame(() => {
     requestAnimationFrame(() => {
       test(function(){
-        assert_true(p1.matches(':top-layer'),'The first (outermost) popup should be the one that opens in this case');
-        assert_false(p2.matches(':top-layer'),'The inner popup should not be open');
+        assert_true(p1.matches(':open'),'The first (outermost) popup should be the one that opens in this case');
+        assert_false(p2.matches(':open'),'The inner popup should not be open');
       }, "The defaultopen attribute should cause only the first popup to open");
     });
   });
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen-hints.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen-hints.tentative.html
index 9bc841e..a7535fa 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen-hints.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen-hints.tentative.html
@@ -13,7 +13,7 @@
     await waitForRender();
     await waitForRender();
     const popUp = document.querySelector('[popup]');
-    assert_false(popUp.matches(':top-layer'),'defaultopen does not apply to hint pop-ups');
+    assert_false(popUp.matches(':open'),'defaultopen does not apply to hint pop-ups');
     assert_true(popUp.hasAttribute('defaultopen'),'attribute should still be present');
     assert_true(popUp.defaultOpen,'defaultopen should be present/true, even if not opened');
   }, "The defaultopen attribute should not apply to popup=hint");
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen.tentative.html
index f673d1d..beb8c74 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-defaultopen.tentative.html
@@ -17,24 +17,24 @@
   requestAnimationFrame(() => {
     requestAnimationFrame(() => {
       test(function(){
-        assert_true(p1.matches(':top-layer'),'defaultopen should open the popup');
+        assert_true(p1.matches(':open'),'defaultopen should open the popup');
         assert_true(p1.hasAttribute('defaultopen'));
         assert_true(p1.defaultOpen,'defaultopen should be reflected in the IDL attribute');
-        assert_false(p2.matches(':top-layer'), 'Only the first popup with defaultopen should be open on load');
+        assert_false(p2.matches(':open'), 'Only the first popup with defaultopen should be open on load');
         assert_true(p2.hasAttribute('defaultopen'),'defaultopen should be present/true, even if not opened');
         assert_true(p2.defaultOpen,'defaultopen should be present/true, even if not opened');
 
-        assert_true(p4.matches(':top-layer'),'defaultopen should open all manual popups');
-        assert_true(p5.matches(':top-layer'),'defaultopen should open all manual popups');
+        assert_true(p4.matches(':open'),'defaultopen should open all manual popups');
+        assert_true(p5.matches(':open'),'defaultopen should open all manual popups');
 
-        assert_false(p3.matches(':top-layer'));
+        assert_false(p3.matches(':open'));
         p3.setAttribute('defaultopen','');
-        assert_false(p3.matches(':top-layer'), 'Changing defaultopen should not affect open status');
+        assert_false(p3.matches(':open'), 'Changing defaultopen should not affect open status');
         assert_true(p3.hasAttribute('defaultopen'));
         assert_true(p3.defaultOpen,'defaultopen should still reflect to IDL');
 
         p1.removeAttribute('defaultopen');
-        assert_true(p1.matches(':top-layer'),'removing defaultopen should not close the popup');
+        assert_true(p1.matches(':open'),'removing defaultopen should not close the popup');
         assert_false(p1.hasAttribute('defaultopen'),'...but it should reflect to IDL');
 
         p1.hidePopUp();
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-events.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-events.tentative.html
index 4e2051f..4419801 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-events.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-events.tentative.html
@@ -15,7 +15,7 @@
     const popup = document.querySelector('[popup]');
     let showCount = 0;
     let hideCount = 0;
-    assert_false(popup.matches(':top-layer'));
+    assert_false(popup.matches(':open'));
     const controller = new AbortController();
     const signal = controller.signal;
     t.add_cleanup(() => controller.abort());
@@ -24,18 +24,18 @@
     assert_equals(0,showCount);
     assert_equals(0,hideCount);
     popup.showPopUp();
-    assert_true(popup.matches(':top-layer'));
+    assert_true(popup.matches(':open'));
     assert_equals(1,showCount);
     assert_equals(0,hideCount);
     await waitForRender();
-    assert_true(popup.matches(':top-layer'));
+    assert_true(popup.matches(':open'));
     popup.hidePopUp();
-    assert_false(popup.matches(':top-layer'));
+    assert_false(popup.matches(':open'));
     assert_equals(1,showCount);
     assert_equals(1,hideCount);
     await waitForRender();
     // No additional events after animation frame
-    assert_false(popup.matches(':top-layer'));
+    assert_false(popup.matches(':open'));
     assert_equals(1,showCount);
     assert_equals(1,hideCount);
   }, 'Show and hide events get properly dispatched for popups');
@@ -50,14 +50,14 @@
       if (cancel)
         e.preventDefault();
     }, {signal});
-    assert_false(popUp.matches(':top-layer'));
+    assert_false(popUp.matches(':open'));
     popUp.showPopUp();
-    assert_false(popUp.matches(':top-layer'),'The "show" event should be cancelable');
+    assert_false(popUp.matches(':open'),'The "show" event should be cancelable');
     cancel = false;
     popUp.showPopUp();
-    assert_true(popUp.matches(':top-layer'));
+    assert_true(popUp.matches(':open'));
     popUp.hidePopUp();
-    assert_false(popUp.matches(':top-layer'));
+    assert_false(popUp.matches(':open'));
   }, 'Show event is cancelable');
 };
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-focus.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-focus.tentative.html
index 4290b7d..f88f4c2a 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-focus.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-focus.tentative.html
@@ -56,12 +56,12 @@
     left:150px;
     opacity: 0;
   }
-  [popup]:not(:top-layer) {
+  [popup]:not(:open) {
     /* Add a *hide* transition to all popups, to make sure animations don't
        affect focus management */
     transition: opacity 10s;
   }
-  [popup]:top-layer {
+  [popup]:open {
     opacity: 1;
   }
   :focus-within { border: 5px dashed red; }
@@ -104,7 +104,7 @@
         expectedFocusedElement = priorFocus;
       }
       assert_true(!!expectedFocusedElement);
-      assert_false(popUp.matches(':top-layer'));
+      assert_false(popUp.matches(':open'));
 
       // Directly show and hide the pop-up:
       priorFocus.focus();
@@ -130,7 +130,7 @@
       assert_equals(document.activeElement, expectedFocusedElement, `${testName} activated by popUp.showPopUp()`);
       assert_equals(popUp.popUp, 'auto', 'All pop-ups in this test should start as popup=auto');
       popUp.popUp = 'hint';
-      assert_false(popUp.matches(':top-layer'), 'Changing the pop-up type should hide the pop-up');
+      assert_false(popUp.matches(':open'), 'Changing the pop-up type should hide the pop-up');
       assert_equals(document.activeElement, priorFocus, 'prior element should get focus when the type is changed');
       await finishAnimationsAndVerifyHide(popUp);
       popUp.popUp = 'auto';
@@ -161,14 +161,14 @@
       const button = addInvoker(t, popUp);
       priorFocus.focus();
       button.click();
-      assert_true(popUp.matches(':top-layer'));
+      assert_true(popUp.matches(':open'));
       assert_equals(document.activeElement, expectedFocusedElement, `${testName} activated by button.click()`);
 
       // Make sure we can directly focus the (already open) pop-up:
       popUp.focus();
       assert_equals(document.activeElement, popUp.hasAttribute('tabindex') ? popUp : expectedFocusedElement, `${testName} directly focus with popUp.focus()`);
       button.click(); // Button is set to toggle the pop-up
-      assert_false(popUp.matches(':top-layer'));
+      assert_false(popUp.matches(':open'));
       assert_equals(document.activeElement, priorFocus, 'prior element should get focus on button-toggled hide');
       await finishAnimationsAndVerifyHide(popUp);
 
@@ -179,14 +179,14 @@
       popUp.showPopUp();
       assert_equals(document.activeElement, expectedFocusedElement, `${testName} activated by popUp.showPopUp()`);
       anotherFocus.focus();
-      assert_false(popUp.matches(':top-layer'),'focusing another element should hide the pop-up');
+      assert_false(popUp.matches(':open'),'focusing another element should hide the pop-up');
       assert_equals(document.activeElement, anotherFocus, 'prior element should *not* get focus in this case');
       await finishAnimationsAndVerifyHide(popUp);
     }, "Popup focus test: " + testName);
 
     promise_test(async t => {
       const priorFocus = addPriorFocus(t);
-      assert_false(popUp.matches(':top-layer'), 'pop-up should start out hidden');
+      assert_false(popUp.matches(':open'), 'pop-up should start out hidden');
       let button = addInvoker(t, popUp);
       assert_equals(button.getAttribute('popuptoggletarget'), popUp.id, 'This test assumes the button uses `popuptoggletarget`.');
       assert_not_equals(button, priorFocus, 'Stranger things have happened');
@@ -194,9 +194,9 @@
       priorFocus.focus();
       assert_equals(document.activeElement, priorFocus);
       popUp.showPopUp();
-      assert_true(popUp.matches(':top-layer'));
+      assert_true(popUp.matches(':open'));
       await clickOn(button); // This will *not* light dismiss, but will "toggle" the popUp.
-      assert_false(popUp.matches(':top-layer'));
+      assert_false(popUp.matches(':open'));
       const changesFocus = !popUp.hasAttribute('data-no-focus');
       if (changesFocus)
         assert_equals(document.activeElement, priorFocus, 'focus should return to the prior focus, if focus moved on show');
@@ -211,12 +211,12 @@
       t.add_cleanup(() => button.remove());
       priorFocus.focus();
       popUp.showPopUp();
-      assert_true(popUp.matches(':top-layer'));
+      assert_true(popUp.matches(':open'));
       if (changesFocus) {
         assert_not_equals(document.activeElement, priorFocus, 'focus should shift for this element');
       }
       await clickOn(button);
-      assert_false(popUp.matches(':top-layer'), 'clicking button should hide the pop-up');
+      assert_false(popUp.matches(':open'), 'clicking button should hide the pop-up');
       if (changesFocus) {
         assert_equals(document.activeElement, priorFocus, 'Contained button should return focus to the previously focused element, if focus moved on show');
       }
@@ -227,9 +227,9 @@
       document.body.appendChild(button);
       priorFocus.focus();
       popUp.showPopUp();
-      assert_true(popUp.matches(':top-layer'));
+      assert_true(popUp.matches(':open'));
       await clickOn(button); // This will light dismiss the pop-up, focus the prior focus, then focus this button.
-      assert_false(popUp.matches(':top-layer'), 'clicking button should hide the pop-up (via light dismiss)');
+      assert_false(popUp.matches(':open'), 'clicking button should hide the pop-up (via light dismiss)');
       assert_equals(document.activeElement, button, 'Focus should go to unrelated button on light dismiss');
       await finishAnimationsAndVerifyHide(popUp);
     }, "Popup button click focus test: " + testName);
@@ -240,12 +240,12 @@
         return;
       }
       const priorFocus = addPriorFocus(t);
-      assert_false(popUp.matches(':top-layer'), 'pop-up should start out hidden');
+      assert_false(popUp.matches(':open'), 'pop-up should start out hidden');
 
       // Move the prior focus out of the document
       priorFocus.focus();
       popUp.showPopUp();
-      assert_true(popUp.matches(':top-layer'));
+      assert_true(popUp.matches(':open'));
       const newFocus = document.activeElement;
       assert_not_equals(newFocus, priorFocus, 'focus should shift for this element');
       priorFocus.remove();
@@ -258,11 +258,11 @@
       // Move the prior focus inside the (already open) pop-up
       priorFocus.focus();
       popUp.showPopUp();
-      assert_true(popUp.matches(':top-layer'));
+      assert_true(popUp.matches(':open'));
       assert_false(popUp.contains(priorFocus), 'Start with a non-contained prior focus');
       popUp.appendChild(priorFocus); // Move inside the pop-up
       assert_true(popUp.contains(priorFocus));
-      assert_true(popUp.matches(':top-layer'), 'pop-up should stay open');
+      assert_true(popUp.matches(':open'), 'pop-up should stay open');
       popUp.hidePopUp();
       await waitForRender();
       assert_true(isElementVisible(popUp),'Animations should keep the pop-up visible');
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-hidden-display.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-hidden-display.tentative.html
index b3845f8..d66611a0 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-hidden-display.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-hidden-display.tentative.html
@@ -22,10 +22,10 @@
   [popup].toplayer {
     background: red;
   }
-  [popup].toplayer:top-layer {
+  [popup].toplayer:open {
     background: green;
   }
-  [popup].nottoplayer:top-layer {
+  [popup].nottoplayer:open {
     background: red;
   }
 </style>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-inside-display-none.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-inside-display-none.tentative.html
index d60b0df..189ffdd 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-inside-display-none.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-inside-display-none.tentative.html
@@ -13,6 +13,6 @@
 <script>
   const popup = document.querySelector('[popup]');
   popup.showPopUp();
-  if (!popup.matches(':top-layer'))
+  if (!popup.matches(':open'))
     document.body.appendChild(document.createTextNode('FAIL'));
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-invoking-attribute.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-invoking-attribute.tentative.html
index bdfa0fe..b676eed 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-invoking-attribute.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-invoking-attribute.tentative.html
@@ -105,7 +105,7 @@
                 const otherId = expectedId !== 1 ? 1 : 2;
                 function assertPopUpShowing(num,state,message) {
                   assert_true(num>0,`Invalid expectedId ${num}`);
-                  assert_equals((num===1 ? popUp1 : popUp2).matches(':top-layer'),state,message || "");
+                  assert_equals((num===1 ? popUp1 : popUp2).matches(':open'),state,message || "");
                 }
                 assertPopUpShowing(expectedId,false);
                 assertPopUpShowing(otherId,false);
@@ -179,7 +179,7 @@
 popUp.addEventListener('hide',() => ++hideCount);
 
 async function assertState(expectOpen,expectShow,expectHide) {
-  assert_equals(popUp.matches(':top-layer'),expectOpen,'Popup open state is incorrect');
+  assert_equals(popUp.matches(':open'),expectOpen,'Popup open state is incorrect');
   await new Promise(resolve => requestAnimationFrame(resolve));
   assert_equals(showCount,expectShow,'Show count is incorrect');
   assert_equals(hideCount,expectHide,'Hide count is incorrect');
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-light-dismiss-on-scroll.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-light-dismiss-on-scroll.tentative.html
index 3c32a6d..d48f1b4b 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-light-dismiss-on-scroll.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-light-dismiss-on-scroll.tentative.html
@@ -39,7 +39,7 @@
   const popups = document.querySelectorAll('[popup]');
   function assertAll(showing) {
     for(let popup of popups) {
-      assert_equals(popup.matches(':top-layer'),showing);
+      assert_equals(popup.matches(':open'),showing);
     }
   }
   async_test(t => {
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-light-dismiss.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-light-dismiss.tentative.html
index 7f8f32b..7cd95d8d 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-light-dismiss.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-light-dismiss.tentative.html
@@ -56,47 +56,47 @@
     e.preventDefault(); // 'hide' should not be cancellable.
   });
   promise_test(async () => {
-    assert_false(popup1.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
     popup1.showPopUp();
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     let p1HideCount = popup1HideCount;
     await clickOn(outside);
-    assert_false(popup1.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
     assert_equals(popup1HideCount,p1HideCount+1);
   },'Clicking outside a popup will dismiss the popup');
 
   promise_test(async () => {
-    assert_false(popup1.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
     popup1.showPopUp();
     await waitForRender();
     p1HideCount = popup1HideCount;
     await clickOn(inside1);
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     assert_equals(popup1HideCount,p1HideCount);
     popup1.hidePopUp();
   },'Clicking inside a popup does not close that popup');
 
   promise_test(async () => {
-    assert_false(popup1.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
     popup1.showPopUp();
     await waitForRender();
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     outside.dispatchEvent(new Event('mousedown'));
     await waitForRender();
-    assert_true(popup1.matches(':top-layer'),'mousedown (outside the pop-up) should not hide the pop-up');
+    assert_true(popup1.matches(':open'),'mousedown (outside the pop-up) should not hide the pop-up');
     outside.dispatchEvent(new Event('mouseup'));
     await waitForRender();
-    assert_false(popup1.matches(':top-layer'),'mouseup (outside the pop-up) should trigger light dismiss');
+    assert_false(popup1.matches(':open'),'mouseup (outside the pop-up) should trigger light dismiss');
   },'Pop-ups close on mouseup, not mousedown');
 
   promise_test(async () => {
-    assert_false(popup1.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
     popup1.showPopUp();
     await clickOn(inside1After);
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     await sendTab();
     assert_equals(document.activeElement,afterp1,'Focus should move to a button outside the popup');
-    assert_false(popup1.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
   },'Moving focus outside the popup will dismiss the popup');
 
   promise_test(async () => {
@@ -106,13 +106,13 @@
     p1HideCount = popup1HideCount;
     let p2HideCount = popup2HideCount;
     await clickOn(inside2);
-    assert_true(popup1.matches(':top-layer'),'popup1 should be open');
-    assert_true(popup2.matches(':top-layer'),'popup2 should be open');
+    assert_true(popup1.matches(':open'),'popup1 should be open');
+    assert_true(popup2.matches(':open'),'popup2 should be open');
     assert_equals(popup1HideCount,p1HideCount,'popup1');
     assert_equals(popup2HideCount,p2HideCount,'popup2');
     popup1.hidePopUp();
-    assert_false(popup1.matches(':top-layer'));
-    assert_false(popup2.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
+    assert_false(popup2.matches(':open'));
   },'Clicking inside a child popup shouldn\'t close either popup');
 
   promise_test(async () => {
@@ -122,93 +122,93 @@
     p1HideCount = popup1HideCount;
     p2HideCount = popup2HideCount;
     await clickOn(inside1);
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     assert_equals(popup1HideCount,p1HideCount);
-    assert_false(popup2.matches(':top-layer'));
+    assert_false(popup2.matches(':open'));
     assert_equals(popup2HideCount,p2HideCount+1);
     popup1.hidePopUp();
   },'Clicking inside a parent popup should close child popup');
 
   promise_test(async () => {
     await clickOn(button1show);
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     await waitForRender();
     p1HideCount = popup1HideCount;
     await clickOn(button1show);
-    assert_true(popup1.matches(':top-layer'),'popup1 should stay open');
+    assert_true(popup1.matches(':open'),'popup1 should stay open');
     assert_equals(popup1HideCount,p1HideCount,'popup1 should not get hidden and reshown');
     popup1.hidePopUp(); // Cleanup
-    assert_false(popup1.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
   },'Clicking on invoking element, after using it for activation, shouldn\'t close its popup');
 
   promise_test(async () => {
     popup1.showPopUp();
-    assert_true(popup1.matches(':top-layer'));
-    assert_false(popup2.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
+    assert_false(popup2.matches(':open'));
     await clickOn(button2);
-    assert_true(popup2.matches(':top-layer'),'button2 should activate popup2');
+    assert_true(popup2.matches(':open'),'button2 should activate popup2');
     p2HideCount = popup2HideCount;
     await clickOn(button2);
-    assert_true(popup2.matches(':top-layer'),'popup2 should stay open');
+    assert_true(popup2.matches(':open'),'popup2 should stay open');
     assert_equals(popup2HideCount,p2HideCount,'popup2 should not get hidden and reshown');
     popup1.hidePopUp(); // Cleanup
-    assert_false(popup1.matches(':top-layer'));
-    assert_false(popup2.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
+    assert_false(popup2.matches(':open'));
   },'Clicking on invoking element, after using it for activation, shouldn\'t close its popup (nested case)');
 
   promise_test(async () => {
     popup1.showPopUp();
     popup2.showPopUp();
-    assert_true(popup1.matches(':top-layer'));
-    assert_true(popup2.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
+    assert_true(popup2.matches(':open'));
     p2HideCount = popup2HideCount;
     await clickOn(button2);
-    assert_true(popup2.matches(':top-layer'),'popup2 should stay open');
+    assert_true(popup2.matches(':open'),'popup2 should stay open');
     assert_equals(popup2HideCount,p2HideCount,'popup2 should not get hidden and reshown');
     popup1.hidePopUp(); // Cleanup
-    assert_false(popup1.matches(':top-layer'));
-    assert_false(popup2.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
+    assert_false(popup2.matches(':open'));
   },'Clicking on invoking element, after using it for activation, shouldn\'t close its popup (nested case, not used for invocation)');
 
   promise_test(async () => {
     popup1.showPopUp(); // Directly show the popup
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     await waitForRender();
     p1HideCount = popup1HideCount;
     await clickOn(button1show);
-    assert_true(popup1.matches(':top-layer'),'popup1 should stay open');
+    assert_true(popup1.matches(':open'),'popup1 should stay open');
     assert_equals(popup1HideCount,p1HideCount,'popup1 should not get hidden and reshown');
     popup1.hidePopUp(); // Cleanup
-    assert_false(popup1.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
   },'Clicking on invoking element, even if it wasn\'t used for activation, shouldn\'t close its popup');
 
   promise_test(async () => {
     popup1.showPopUp(); // Directly show the popup
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     await waitForRender();
     p1HideCount = popup1HideCount;
     await clickOn(button1toggle);
-    assert_false(popup1.matches(':top-layer'),'popup1 should be hidden by popuptoggletarget');
+    assert_false(popup1.matches(':open'),'popup1 should be hidden by popuptoggletarget');
     assert_equals(popup1HideCount,p1HideCount+1,'popup1 should get hidden only once by popuptoggletarget');
   },'Clicking on popuptoggletarget element, even if it wasn\'t used for activation, should hide it exactly once');
 
   promise_test(async () => {
     popup1.showPopUp();
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     await waitForRender();
     p1HideCount = popup1HideCount;
     await clickOn(popup1anchor);
-    assert_true(popup1.matches(':top-layer'),'popup1 not open');
+    assert_true(popup1.matches(':open'),'popup1 not open');
     assert_equals(popup1HideCount,p1HideCount);
     popup1.hidePopUp(); // Cleanup
-    assert_false(popup1.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
   },'Clicking on anchor element (that isn\'t an invoking element) shouldn\'t close its popup');
 
   promise_test(async () => {
     popup1.showPopUp();
     popup2.showPopUp(); // Popup1 is an ancestral element for popup2.
-    assert_true(popup1.matches(':top-layer'));
-    assert_true(popup2.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
+    assert_true(popup2.matches(':open'));
     const drag_actions = new test_driver.Actions();
     // Drag *from* popup2 *to* popup1 (its ancestor).
     await drag_actions.pointerMove(0,0,{origin: popup2})
@@ -216,10 +216,10 @@
       .pointerMove(0,0,{origin: popup1})
       .pointerUp({button: drag_actions.ButtonType.LEFT})
       .send();
-    assert_true(popup1.matches(':top-layer'),'popup1 should be open');
-    assert_true(popup2.matches(':top-layer'),'popup1 should be open');
+    assert_true(popup1.matches(':open'),'popup1 should be open');
+    assert_true(popup2.matches(':open'),'popup1 should be open');
     popup1.hidePopUp();
-    assert_false(popup2.matches(':top-layer'));
+    assert_false(popup2.matches(':open'));
   },'Dragging from an open popup outside an open popup should leave the popup open');
 </script>
 
@@ -242,28 +242,28 @@
   const button3 = document.querySelector('#b3');
   promise_test(async () => {
     await clickOn(button3);
-    assert_true(popup3.matches(':top-layer'),'invoking element should open popup');
+    assert_true(popup3.matches(':open'),'invoking element should open popup');
     popup4.showPopUp();
-    assert_true(popup4.matches(':top-layer'));
-    assert_true(popup3.matches(':top-layer'));
+    assert_true(popup4.matches(':open'));
+    assert_true(popup3.matches(':open'));
     popup3.hidePopUp(); // Cleanup
-    assert_false(popup3.matches(':top-layer'));
-    assert_false(popup4.matches(':top-layer'));
+    assert_false(popup3.matches(':open'));
+    assert_false(popup4.matches(':open'));
   },'An invoking element should be part of the ancestor chain');
 
   promise_test(async () => {
     await clickOn(button3);
-    assert_true(popup3.matches(':top-layer'));
-    assert_false(popup4.matches(':top-layer'));
-    assert_false(popup5.matches(':top-layer'));
+    assert_true(popup3.matches(':open'));
+    assert_false(popup4.matches(':open'));
+    assert_false(popup5.matches(':open'));
     popup5.showPopUp();
-    assert_true(popup3.matches(':top-layer'));
-    assert_false(popup4.matches(':top-layer'));
-    assert_true(popup5.matches(':top-layer'));
+    assert_true(popup3.matches(':open'));
+    assert_false(popup4.matches(':open'));
+    assert_true(popup5.matches(':open'));
     popup3.hidePopUp();
-    assert_false(popup3.matches(':top-layer'));
-    assert_false(popup4.matches(':top-layer'));
-    assert_false(popup5.matches(':top-layer'));
+    assert_false(popup3.matches(':open'));
+    assert_false(popup4.matches(':open'));
+    assert_false(popup5.matches(':open'));
   },'An invoking element that was not used to invoke the popup can still be part of the ancestor chain');
 </script>
 
@@ -287,7 +287,7 @@
     await new test_driver.Actions()
        .scroll(0, 0, 0, 50, {origin: popup6})
        .send();
-    assert_true(popup6.matches(':top-layer'),'popup6 should stay open');
+    assert_true(popup6.matches(':open'),'popup6 should stay open');
     assert_equals(popup6.scrollTop,50,'popup6 should be scrolled');
     popup6.hidePopUp();
   },'Scrolling within a popup should not close the popup');
@@ -311,18 +311,18 @@
   }
   promise_test(async () => {
     button7.click();
-    assert_true(popup7.matches(':top-layer'),'invoking element should open popup');
+    assert_true(popup7.matches(':open'),'invoking element should open popup');
     inside7.click();
-    assert_true(popup7.matches(':top-layer'));
+    assert_true(popup7.matches(':open'));
     popup7.hidePopUp();
   },'Clicking inside a shadow DOM popup does not close that popup');
 
   promise_test(async () => {
     button7.click();
     inside7.click();
-    assert_true(popup7.matches(':top-layer'));
+    assert_true(popup7.matches(':open'));
     await clickOn(outside);
-    assert_false(popup7.matches(':top-layer'));
+    assert_false(popup7.matches(':open'));
   },'Clicking outside a shadow DOM popup should close that popup');
 </script>
 
@@ -336,13 +336,13 @@
     const popup8 = document.querySelector('#p8');
     const inside8After = document.querySelector('#inside8after');
     const popup8Anchor = document.querySelector('#p8anchor');
-    assert_false(popup8.matches(':top-layer'));
+    assert_false(popup8.matches(':open'));
     popup8.showPopUp();
     await clickOn(inside8After);
-    assert_true(popup8.matches(':top-layer'));
+    assert_true(popup8.matches(':open'));
     await sendTab();
     assert_equals(document.activeElement,popup8Anchor,'Focus should move to the anchor element');
-    assert_true(popup8.matches(':top-layer'),'popup should stay open');
+    assert_true(popup8.matches(':open'),'popup should stay open');
     popup8.hidePopUp();
   },'Moving focus back to the anchor element should not dismiss the popup');
 </script>
@@ -357,13 +357,13 @@
     const popup9 = document.querySelector('#p9');
     const inside9After = document.querySelector('#inside9after');
     const popup9Invoker = document.querySelector('#b9after');
-    assert_false(popup9.matches(':top-layer'));
+    assert_false(popup9.matches(':open'));
     popup9Invoker.click(); // Trigger via the button
     await clickOn(inside9After);
-    assert_true(popup9.matches(':top-layer'));
+    assert_true(popup9.matches(':open'));
     await sendTab();
     assert_equals(document.activeElement,popup9Invoker,'Focus should move to the invoking element');
-    assert_true(popup9.matches(':top-layer'),'popup should stay open');
+    assert_true(popup9.matches(':open'),'popup should stay open');
     popup9.hidePopUp();
   },'Moving focus back to the active trigger element should not dismiss the popup');
 
@@ -371,13 +371,13 @@
     const popup9 = document.querySelector('#p9');
     const inside9After = document.querySelector('#inside9after');
     const popup9Invoker = document.querySelector('#b9after');
-    assert_false(popup9.matches(':top-layer'));
+    assert_false(popup9.matches(':open'));
     popup9.showPopUp(); // Trigger directly
     await clickOn(inside9After);
-    assert_true(popup9.matches(':top-layer'));
+    assert_true(popup9.matches(':open'));
     await sendTab();
     assert_equals(document.activeElement,popup9Invoker,'Focus should move to the invoking element');
-    assert_true(popup9.matches(':top-layer'),'popup should stay open - even though the trigger wasn\'t used, it points to this popup');
+    assert_true(popup9.matches(':open'),'popup should stay open - even though the trigger wasn\'t used, it points to this popup');
   },'Moving focus back to an inactive trigger element should also *not* dismiss the popup');
 </script>
 
@@ -409,51 +409,51 @@
 const convPopup4 = document.querySelector('#convoluted_p4');
 promise_test(async () => {
   convPopup1.showPopUp(); // Programmatically open p1
-  assert_true(convPopup1.matches(':top-layer'));
+  assert_true(convPopup1.matches(':open'));
   convPopup1.querySelector('button').click(); // Click to invoke p2
-  assert_true(convPopup1.matches(':top-layer'));
-  assert_true(convPopup2.matches(':top-layer'));
+  assert_true(convPopup1.matches(':open'));
+  assert_true(convPopup2.matches(':open'));
   convPopup2.querySelector('button').click(); // Click to invoke p3
-  assert_true(convPopup1.matches(':top-layer'));
-  assert_true(convPopup2.matches(':top-layer'));
-  assert_true(convPopup3.matches(':top-layer'));
+  assert_true(convPopup1.matches(':open'));
+  assert_true(convPopup2.matches(':open'));
+  assert_true(convPopup3.matches(':open'));
   convPopup3.querySelector('button').click(); // Click to invoke p4
-  assert_true(convPopup1.matches(':top-layer'));
-  assert_true(convPopup2.matches(':top-layer'));
-  assert_true(convPopup3.matches(':top-layer'));
-  assert_true(convPopup4.matches(':top-layer'));
+  assert_true(convPopup1.matches(':open'));
+  assert_true(convPopup2.matches(':open'));
+  assert_true(convPopup3.matches(':open'));
+  assert_true(convPopup4.matches(':open'));
   convPopup4.firstElementChild.click(); // Click within p4
-  assert_true(convPopup1.matches(':top-layer'));
-  assert_true(convPopup2.matches(':top-layer'));
-  assert_true(convPopup3.matches(':top-layer'));
-  assert_true(convPopup4.matches(':top-layer'));
+  assert_true(convPopup1.matches(':open'));
+  assert_true(convPopup2.matches(':open'));
+  assert_true(convPopup3.matches(':open'));
+  assert_true(convPopup4.matches(':open'));
   convPopup1.hidePopUp();
-  assert_false(convPopup1.matches(':top-layer'));
-  assert_false(convPopup2.matches(':top-layer'));
-  assert_false(convPopup3.matches(':top-layer'));
-  assert_false(convPopup4.matches(':top-layer'));
+  assert_false(convPopup1.matches(':open'));
+  assert_false(convPopup2.matches(':open'));
+  assert_false(convPopup3.matches(':open'));
+  assert_false(convPopup4.matches(':open'));
 },'Ensure circular/convoluted ancestral relationships are functional');
 
 promise_test(async () => {
   convPopup1.showPopUp(); // Programmatically open p1
   convPopup1.querySelector('button').click(); // Click to invoke p2
-  assert_true(convPopup1.matches(':top-layer'));
-  assert_true(convPopup2.matches(':top-layer'));
-  assert_false(convPopup3.matches(':top-layer'));
-  assert_false(convPopup4.matches(':top-layer'));
+  assert_true(convPopup1.matches(':open'));
+  assert_true(convPopup2.matches(':open'));
+  assert_false(convPopup3.matches(':open'));
+  assert_false(convPopup4.matches(':open'));
   convPopup4.showPopUp(); // Programmatically open p4
-  assert_true(convPopup1.matches(':top-layer'),'popup1 stays open because it is a DOM ancestor of popup4');
-  assert_false(convPopup2.matches(':top-layer'),'popup2 closes because it isn\'t connected to popup4 via active invokers');
-  assert_true(convPopup4.matches(':top-layer'));
+  assert_true(convPopup1.matches(':open'),'popup1 stays open because it is a DOM ancestor of popup4');
+  assert_false(convPopup2.matches(':open'),'popup2 closes because it isn\'t connected to popup4 via active invokers');
+  assert_true(convPopup4.matches(':open'));
   convPopup4.firstElementChild.click(); // Click within p4
-  assert_true(convPopup1.matches(':top-layer'),'nothing changes');
-  assert_false(convPopup2.matches(':top-layer'));
-  assert_true(convPopup4.matches(':top-layer'));
+  assert_true(convPopup1.matches(':open'),'nothing changes');
+  assert_false(convPopup2.matches(':open'));
+  assert_true(convPopup4.matches(':open'));
   convPopup1.hidePopUp();
-  assert_false(convPopup1.matches(':top-layer'));
-  assert_false(convPopup2.matches(':top-layer'));
-  assert_false(convPopup3.matches(':top-layer'));
-  assert_false(convPopup4.matches(':top-layer'));
+  assert_false(convPopup1.matches(':open'));
+  assert_false(convPopup2.matches(':open'));
+  assert_false(convPopup3.matches(':open'));
+  assert_false(convPopup4.matches(':open'));
 },'Ensure circular/convoluted ancestral relationships are functional, with a direct showPopUp()');
 </script>
 
@@ -475,30 +475,30 @@
   auto.showPopUp();
   hint.showPopUp();
   manual.showPopUp();
-  assert_true(auto.matches(':top-layer'));
-  assert_true(hint.matches(':top-layer'));
-  assert_true(manual.matches(':top-layer'));
+  assert_true(auto.matches(':open'));
+  assert_true(hint.matches(':open'));
+  assert_true(manual.matches(':open'));
   // Clicking the hint will close the auto, but not the manual.
   await clickOn(hint);
-  assert_false(auto.matches(':top-layer'),'auto should be hidden');
-  assert_true(hint.matches(':top-layer'),'hint should stay open');
-  assert_true(manual.matches(':top-layer'),'manual does not light dismiss');
+  assert_false(auto.matches(':open'),'auto should be hidden');
+  assert_true(hint.matches(':open'),'hint should stay open');
+  assert_true(manual.matches(':open'),'manual does not light dismiss');
   // Clicking outside should close the hint, but not the manual:
   await clickOn(outside);
-  assert_false(auto.matches(':top-layer'));
-  assert_false(hint.matches(':top-layer'),'hint should close');
-  assert_true(manual.matches(':top-layer'),'manual does not light dismiss');
+  assert_false(auto.matches(':open'));
+  assert_false(hint.matches(':open'),'hint should close');
+  assert_true(manual.matches(':open'),'manual does not light dismiss');
   manual.hidePopUp();
-  assert_false(manual.matches(':top-layer'));
+  assert_false(manual.matches(':open'));
   auto.showPopUp();
   hint.showPopUp();
-  assert_true(auto.matches(':top-layer'));
-  assert_true(hint.matches(':top-layer'));
+  assert_true(auto.matches(':open'));
+  assert_true(hint.matches(':open'));
   // Clicking on the auto should close the hint:
   await clickOn(auto);
-  assert_true(auto.matches(':top-layer'),'auto should stay open');
-  assert_false(hint.matches(':top-layer'),'hint should light dismiss');
+  assert_true(auto.matches(':open'),'auto should stay open');
+  assert_false(hint.matches(':open'),'hint should light dismiss');
   auto.hidePopUp();
-  assert_false(auto.matches(':top-layer'));
+  assert_false(auto.matches(':open'));
 },'Light dismiss of mixed popup types');
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-not-keyboard-focusable.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-not-keyboard-focusable.tentative.html
index 3cc545f..393873f 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-not-keyboard-focusable.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-not-keyboard-focusable.tentative.html
@@ -23,12 +23,12 @@
   b1.focus();
   assert_equals(document.activeElement,b1);
   popup.showPopUp();
-  assert_true(popup.matches(':top-layer'));
+  assert_true(popup.matches(':open'));
   assert_equals(document.activeElement,b1);
   // Tab once
   await new test_driver.send_keys(document.body,'\uE004'); // Tab
   assert_equals(document.activeElement, b2, 'Keyboard focus should skip the open popup');
-  assert_false(popup.matches(':top-layer'),'changing focus should close the popup');
+  assert_false(popup.matches(':open'),'changing focus should close the popup');
 
   // Add a focusable button to the popup and make sure we can focus that
   const button = document.createElement('button');
@@ -39,8 +39,8 @@
   // Tab once
   await new test_driver.send_keys(document.body,'\uE004'); // Tab
   assert_equals(document.activeElement, button, 'Keyboard focus should go to the contained button');
-  assert_true(popup.matches(':top-layer'),'changing focus to the popup should leave it showing');
+  assert_true(popup.matches(':open'),'changing focus to the popup should leave it showing');
   popup.hidePopUp();
-  assert_false(popup.matches(':top-layer'));
+  assert_false(popup.matches(':open'));
 }, "Popup should not be keyboard focusable");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-removal-2.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-removal-2.tentative.html
index 7cf0951e..807e625 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-removal-2.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-removal-2.tentative.html
@@ -16,13 +16,13 @@
       const frame2Doc = document.getElementById('frame2').contentDocument;
       const popup = frame1Doc.querySelector('[popup]');
       assert_true(!!popup);
-      assert_false(popup.matches(':top-layer'));
+      assert_false(popup.matches(':open'));
       popup.showPopUp();
-      assert_true(popup.matches(':top-layer'));
+      assert_true(popup.matches(':open'));
       frame2Doc.body.appendChild(popup);
-      assert_false(popup.matches(':top-layer'));
+      assert_false(popup.matches(':open'));
       popup.showPopUp();
-      assert_true(popup.matches(':top-layer'));
+      assert_true(popup.matches(':open'));
     }, 'Moving popup between documents shouldn\'t cause issues');
   };
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-removal.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-removal.tentative.html
index f4df862..f43da58e4 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-removal.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-removal.tentative.html
@@ -16,9 +16,9 @@
     });
   }
   const popup = document.querySelector('[popup]');
-  assert_false(popup.matches(':top-layer'));
+  assert_false(popup.matches(':open'));
   popup.showPopUp();
-  assert_true(popup.matches(':top-layer'));
+  assert_true(popup.matches(':open'));
   popup.remove(); // Shouldn't cause any issues
   document.body.click(); // Shouldn't cause light dismiss problems
   await loadCompleted(); // The document should finish loading
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-shadow-dom.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-shadow-dom.tentative.html
index f2cb31a..cbec8a2 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-shadow-dom.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-shadow-dom.tentative.html
@@ -56,7 +56,7 @@
   test(function() {
     const popup = getPopupReferences('test1')[0];
     popup.showPopUp();
-    assert_true(popup.matches(':top-layer'));
+    assert_true(popup.matches(':open'));
     assert_true(isElementVisible(popup));
     popup.hidePopUp(); // Cleanup
   }, "Popups located inside shadow DOM can still be shown");
@@ -83,12 +83,12 @@
   test(function() {
     const [popup1,popup2] = getPopupReferences('test2');
     popup1.showPopUp();
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     assert_true(isElementVisible(popup1));
     popup2.showPopUp();
-    assert_false(popup1.matches(':top-layer'), 'popup1 open'); // P1 was closed by P2
+    assert_false(popup1.matches(':open'), 'popup1 open'); // P1 was closed by P2
     assert_false(isElementVisible(popup1), 'popup1 visible');
-    assert_true(popup2.matches(':top-layer'), 'popup2 open'); // P2 is open
+    assert_true(popup2.matches(':open'), 'popup2 open'); // P2 is open
     assert_true(isElementVisible(popup2), 'popup2 visible');
     popup2.hidePopUp(); // Cleanup
   }, "anchor references do not cross shadow boundaries");
@@ -113,20 +113,20 @@
   promise_test(async function() {
     const [popup1,popup2] = getPopupReferences('test3');
     popup1.showPopUp();
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     assert_true(isElementVisible(popup1));
     // Showing popup2 should not close popup1, since it is a flat
     // tree ancestor of popup2's anchor button.
     popup2.showPopUp();
-    assert_true(popup2.matches(':top-layer'));
+    assert_true(popup2.matches(':open'));
     assert_true(isElementVisible(popup2));
-    assert_true(popup1.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
     assert_true(isElementVisible(popup1));
     popup1.hidePopUp();
     await waitForRender();
-    assert_false(popup1.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
     assert_false(isElementVisible(popup1));
-    assert_false(popup2.matches(':top-layer'));
+    assert_false(popup2.matches(':open'));
     assert_false(isElementVisible(popup2));
   }, "anchor references use the flat tree not the DOM tree");
 </script>
@@ -153,16 +153,16 @@
     popup1.showPopUp();
     popup2.showPopUp();
     // Both 1 and 2 should be open at this point.
-    assert_true(popup1.matches(':top-layer'), 'popup1 not open');
+    assert_true(popup1.matches(':open'), 'popup1 not open');
     assert_true(isElementVisible(popup1));
-    assert_true(popup2.matches(':top-layer'), 'popup2 not open');
+    assert_true(popup2.matches(':open'), 'popup2 not open');
     assert_true(isElementVisible(popup2));
     // This should hide both of them.
     popup1.hidePopUp();
     await waitForRender();
-    assert_false(popup1.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
     assert_false(isElementVisible(popup1));
-    assert_false(popup2.matches(':top-layer'));
+    assert_false(popup2.matches(':open'));
     assert_false(isElementVisible(popup2));
   }, "The popup stack is preserved across shadow-inclusive ancestors");
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-stacking.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-stacking.tentative.html
index abe3f619..1bf3a10 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-stacking.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-stacking.tentative.html
@@ -89,18 +89,18 @@
     const clickToActivate = example.querySelector('.clickme');
     test(function() {
       assert_true(!!descr && !!ancestor && !!child);
-      assert_false(ancestor.matches(':top-layer'));
-      assert_false(child.matches(':top-layer'));
+      assert_false(ancestor.matches(':open'));
+      assert_false(child.matches(':open'));
       ancestor.showPopUp();
       if (clickToActivate)
         clickToActivate.click();
       else
         child.showPopUp();
-      assert_true(child.matches(':top-layer'));
-      assert_true(ancestor.matches(':top-layer'));
+      assert_true(child.matches(':open'));
+      assert_true(ancestor.matches(':open'));
       ancestor.hidePopUp();
-      assert_false(ancestor.matches(':top-layer'));
-      assert_false(child.matches(':top-layer'));
+      assert_false(ancestor.matches(':open'));
+      assert_false(child.matches(':open'));
     },descr);
   }
 
@@ -109,7 +109,7 @@
   function assertState(...states) {
     assert_equals(popups.length,states.length);
     for(let i=0;i<popups.length;++i) {
-      assert_equals(popups[i].matches(':top-layer'),states[i],`Popup #${i+1} incorrect state`);
+      assert_equals(popups[i].matches(':open'),states[i],`Popup #${i+1} incorrect state`);
     }
   }
   test(function() {
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-top-layer-interactions.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-top-layer-interactions.tentative.html
index e12645a..b973a57f 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-top-layer-interactions.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-top-layer-interactions.tentative.html
@@ -22,7 +22,7 @@
     createElement: () => Object.assign(document.createElement('div'), {popUp: 'auto'}),
     trigger: function() {this.element.showPopUp()},
     close: function() {this.element.hidePopUp()},
-    isTopLayer: function() {return this.element.matches(':top-layer')},
+    isTopLayer: function() {return this.element.matches(':open')},
   },
   {
     type: types.modalDialog,
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-types.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-types.tentative.html
index b34df5f7..f9479cb 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-types.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/popups/popup-types.tentative.html
@@ -17,10 +17,10 @@
     const manual = document.currentScript.parentElement.querySelectorAll('[popup=manual]')[0];
     const manual2 = document.currentScript.parentElement.querySelectorAll('[popup=manual]')[1];
     function assert_state_1(autoOpen,hintOpen,manualOpen,manual2Open) {
-      assert_equals(auto.matches(':top-layer'),autoOpen,'auto open state is incorrect');
-      assert_equals(hint.matches(':top-layer'),hintOpen,'hint open state is incorrect');
-      assert_equals(manual.matches(':top-layer'),manualOpen,'manual open state is incorrect');
-      assert_equals(manual2.matches(':top-layer'),manual2Open,'manual2 open state is incorrect');
+      assert_equals(auto.matches(':open'),autoOpen,'auto open state is incorrect');
+      assert_equals(hint.matches(':open'),hintOpen,'hint open state is incorrect');
+      assert_equals(manual.matches(':open'),manualOpen,'manual open state is incorrect');
+      assert_equals(manual2.matches(':open'),manual2Open,'manual2 open state is incorrect');
     }
     test(() => {
       assert_state_1(false,false,false,false);
@@ -81,10 +81,10 @@
     const popUp3 = document.currentScript.parentElement.querySelectorAll('[popup=""]')[2];
     const hint = document.currentScript.parentElement.querySelector('[popup=hint]');
     function assert_state_2(popUp1Open,popUp2Open,popUp3Open,hintOpen) {
-      assert_equals(popUp1.matches(':top-layer'),popUp1Open,'popUp1 open state is incorrect');
-      assert_equals(popUp2.matches(':top-layer'),popUp2Open,'popup2 open state is incorrect');
-      assert_equals(popUp3.matches(':top-layer'),popUp3Open,'popup3 open state is incorrect');
-      assert_equals(hint.matches(':top-layer'),hintOpen,'hint open state is incorrect');
+      assert_equals(popUp1.matches(':open'),popUp1Open,'popUp1 open state is incorrect');
+      assert_equals(popUp2.matches(':open'),popUp2Open,'popup2 open state is incorrect');
+      assert_equals(popUp3.matches(':open'),popUp3Open,'popup3 open state is incorrect');
+      assert_equals(hint.matches(':open'),hintOpen,'hint open state is incorrect');
     }
     test(() => {
       assert_state_2(false,false,false,false);
@@ -110,11 +110,11 @@
     const hint1 = document.currentScript.parentElement.querySelectorAll('[popup=hint]')[0];
     const hint2 = document.currentScript.parentElement.querySelectorAll('[popup=hint]')[1];
     hint1.showPopUp();
-    assert_true(hint1.matches(':top-layer'));
-    assert_false(hint2.matches(':top-layer'));
+    assert_true(hint1.matches(':open'));
+    assert_false(hint2.matches(':open'));
     hint2.showPopUp();
-    assert_false(hint1.matches(':top-layer'));
-    assert_true(hint2.matches(':top-layer'));
+    assert_false(hint1.matches(':open'));
+    assert_true(hint2.matches(':open'));
     hint2.hidePopUp();
   },'If a popup=hint is shown, it should hide any other open popup=hint pop-ups, including ancestral pop-ups. (You can\'t nest popup=hint)');
   </script>
@@ -129,11 +129,11 @@
     const hint = document.currentScript.parentElement.querySelector('[popup=hint]');
     const auto = document.currentScript.parentElement.querySelector('[popup=""]');
     hint.showPopUp();
-    assert_true(hint.matches(':top-layer'));
-    assert_false(auto.matches(':top-layer'));
+    assert_true(hint.matches(':open'));
+    assert_false(auto.matches(':open'));
     auto.showPopUp();
-    assert_false(hint.matches(':top-layer'));
-    assert_true(auto.matches(':top-layer'));
+    assert_false(hint.matches(':open'));
+    assert_true(auto.matches(':open'));
     auto.hidePopUp();
   },'If a popup=auto is shown, it should hide any open popup=hint, including if the popup=hint is an ancestral pop-up of the popup=auto. (You can\'t nest a popup=auto inside a popup=hint)');
   </script>
@@ -151,15 +151,15 @@
     const hint = document.currentScript.parentElement.querySelector('[popup=hint]');
     auto.showPopUp();
     auto2.showPopUp();
-    assert_true(auto.matches(':top-layer'));
-    assert_true(auto2.matches(':top-layer'));
+    assert_true(auto.matches(':open'));
+    assert_true(auto2.matches(':open'));
     hint.showPopUp(); // This should hide auto2, since it is nested in auto1.
-    assert_true(auto.matches(':top-layer'));
-    assert_false(auto2.matches(':top-layer'));
-    assert_true(hint.matches(':top-layer'));
+    assert_true(auto.matches(':open'));
+    assert_false(auto2.matches(':open'));
+    assert_true(hint.matches(':open'));
     auto.hidePopUp(); // Should hide both auto and hint.
-    assert_false(auto.matches(':top-layer'));
-    assert_false(hint.matches(':top-layer'));
+    assert_false(auto.matches(':open'));
+    assert_false(hint.matches(':open'));
   },'If you: a) show a popup=auto (call it D), then b) show a descendent popup=hint of D (call it T), then c) hide D, then T should be hidden. (A popup=hint can be nested inside a popup=auto)');
   </script>
 </div>
@@ -173,11 +173,11 @@
     const hint = document.currentScript.parentElement.querySelector('[popup=hint]');
     auto.showPopUp();
     hint.showPopUp();
-    assert_true(auto.matches(':top-layer'));
-    assert_true(hint.matches(':top-layer'));
+    assert_true(auto.matches(':open'));
+    assert_true(hint.matches(':open'));
     auto.hidePopUp();
-    assert_false(auto.matches(':top-layer'));
-    assert_true(hint.matches(':top-layer'));
+    assert_false(auto.matches(':open'));
+    assert_true(hint.matches(':open'));
     hint.hidePopUp();
   },'If you: a) show a popup=auto (call it D), then b) show a non-descendent popup=hint of D (call it T), then c) hide D, then T should be left showing. (Non-nested popup=hint can stay open when unrelated popup=autos are hidden)');
   </script>
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/resources/bluetooth-access.https.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/resources/bluetooth-access.https.html
similarity index 80%
rename from third_party/blink/web_tests/wpt_internal/prerender/resources/bluetooth-access.https.html
rename to third_party/blink/web_tests/external/wpt/speculation-rules/prerender/resources/bluetooth-access.https.html
index a4438f470..b14b46c 100644
--- a/third_party/blink/web_tests/wpt_internal/prerender/resources/bluetooth-access.https.html
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/resources/bluetooth-access.https.html
@@ -15,6 +15,9 @@
   loadInitiatorPage();
 } else {
   const prerenderEventCollector = new PrerenderEventCollector();
+  // The spec, https://wicg.github.io/nav-speculation/prerendering.html#web-bluetooth-patch,
+  // mentions getDevices() and requestDevice() but this test uses
+  // getAvailability() instead of them.
   prerenderEventCollector.start(navigator.bluetooth.getAvailability(),
                                 'navigator.bluetooth.getAvailability');
 }
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/resources/screen-capture.https.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/resources/screen-capture.https.html
similarity index 100%
rename from third_party/blink/web_tests/wpt_internal/prerender/resources/screen-capture.https.html
rename to third_party/blink/web_tests/external/wpt/speculation-rules/prerender/resources/screen-capture.https.html
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/resources/screen-orientation-lock.https.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/resources/screen-orientation-lock.https.html
similarity index 100%
rename from third_party/blink/web_tests/wpt_internal/prerender/resources/screen-orientation-lock.https.html
rename to third_party/blink/web_tests/external/wpt/speculation-rules/prerender/resources/screen-orientation-lock.https.html
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/restriction-bluetooth.https.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-bluetooth.tentative.https.html
similarity index 85%
rename from third_party/blink/web_tests/wpt_internal/prerender/restriction-bluetooth.https.html
rename to third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-bluetooth.tentative.https.html
index 68fbb9d2..243a5d5 100644
--- a/third_party/blink/web_tests/wpt_internal/prerender/restriction-bluetooth.https.html
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-bluetooth.tentative.https.html
@@ -8,6 +8,8 @@
 <body>
 <script>
 
+setup(() => assertSpeculationRulesIsSupported());
+
 promise_test(async t => {
   const uid = token();
   const bc = new PrerenderChannel('test-channel', uid);
@@ -37,6 +39,9 @@
       prerendering: false
     },
   ];
+  // The spec, https://wicg.github.io/nav-speculation/prerendering.html#web-bluetooth-patch,
+  // mentions getDevices() and requestDevice() but this test uses
+  // getAvailability() instead of them.
   assert_equals(result.length, expected.length);
   for (let i = 0; i < result.length; i++) {
     assert_equals(result[i].event, expected[i].event, `event[${i}]`);
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/restriction-screen-capture.https.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-screen-capture.https.html
similarity index 96%
rename from third_party/blink/web_tests/wpt_internal/prerender/restriction-screen-capture.https.html
rename to third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-screen-capture.https.html
index 59e18a6..e4b958d 100644
--- a/third_party/blink/web_tests/wpt_internal/prerender/restriction-screen-capture.https.html
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-screen-capture.https.html
@@ -8,6 +8,8 @@
 <body>
 <script>
 
+setup(() => assertSpeculationRulesIsSupported());
+
 promise_test(async t => {
   const uid = token();
   const bc = new PrerenderChannel('test-channel', uid);
diff --git a/third_party/blink/web_tests/wpt_internal/prerender/restriction-screen-orientation-lock.https.html b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-screen-orientation-lock.https.html
similarity index 96%
rename from third_party/blink/web_tests/wpt_internal/prerender/restriction-screen-orientation-lock.https.html
rename to third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-screen-orientation-lock.https.html
index f61af84..7c2be6ac 100644
--- a/third_party/blink/web_tests/wpt_internal/prerender/restriction-screen-orientation-lock.https.html
+++ b/third_party/blink/web_tests/external/wpt/speculation-rules/prerender/restriction-screen-orientation-lock.https.html
@@ -8,6 +8,8 @@
 <body>
 <script>
 
+setup(() => assertSpeculationRulesIsSupported());
+
 promise_test(async t => {
   const uid = token();
   const bc = new PrerenderChannel('test-channel', uid);
diff --git a/third_party/blink/web_tests/html/popup/popup-light-dismiss-keyboard.html b/third_party/blink/web_tests/html/popup/popup-light-dismiss-keyboard.html
index 6a40880..637e4d9 100644
--- a/third_party/blink/web_tests/html/popup/popup-light-dismiss-keyboard.html
+++ b/third_party/blink/web_tests/html/popup/popup-light-dismiss-keyboard.html
@@ -36,10 +36,10 @@
     popup1.showPopUp();
     popup2.showPopUp();
     eventSender.keyDown("Escape");
-    assert_true(popup1.matches(':top-layer'));
-    assert_false(popup2.matches(':top-layer'));
+    assert_true(popup1.matches(':open'));
+    assert_false(popup2.matches(':open'));
     eventSender.keyDown("Escape");
-    assert_false(popup1.matches(':top-layer'));
-    assert_false(popup2.matches(':top-layer'));
+    assert_false(popup1.matches(':open'));
+    assert_false(popup2.matches(':open'));
   },'Escape key should close top level popup');
 </script>
diff --git a/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-data.js b/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-data.js
index 134ed7d5..71dc1f0 100644
--- a/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-data.js
+++ b/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-data.js
@@ -16,7 +16,7 @@
   var objectStoreName1 = 'testObjectStore1';
   var objectStoreName2 = 'testObjectStore2';
   var indexName = 'testIndexName';
-  var databaseId = new Resources.IndexedDBModel.DatabaseId(securityOrigin, databaseName);
+  var databaseId = new Resources.IndexedDBModel.DatabaseId(securityOrigin, /* storageKey */ undefined, databaseName);
 
   /**
    * @param {number} count
diff --git a/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-structure.js b/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-structure.js
index ffc4ed72..1bda578 100644
--- a/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-structure.js
+++ b/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-structure.js
@@ -12,7 +12,7 @@
   var mainFrameId = TestRunner.resourceTreeModel.mainFrame.id;
   var databaseName = 'testDatabase1';
   var securityOrigin = 'http://127.0.0.1:8000';
-  var databaseId = new Resources.IndexedDBModel.DatabaseId(securityOrigin, databaseName);
+  var databaseId = new Resources.IndexedDBModel.DatabaseId(securityOrigin, /* storageKey */ undefined, databaseName);
 
   function dumpDatabase() {
     TestRunner.addResult('Dumping database:');
diff --git a/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-version-number.js b/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-version-number.js
index 74d92ee..3a776ce 100644
--- a/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-version-number.js
+++ b/third_party/blink/web_tests/http/tests/devtools/indexeddb/database-version-number.js
@@ -12,7 +12,7 @@
   var mainFrameId = TestRunner.resourceTreeModel.mainFrame.id;
   var databaseName = 'testDatabase1';
   var securityOrigin = 'http://127.0.0.1:8000';
-  var databaseId = new Resources.IndexedDBModel.DatabaseId(securityOrigin, databaseName);
+  var databaseId = new Resources.IndexedDBModel.DatabaseId(securityOrigin, /* storageKey */ undefined, databaseName);
 
   function dumpDatabase() {
     TestRunner.addResult('Dumping database:');
diff --git a/third_party/blink/web_tests/http/tests/devtools/indexeddb/upgrade-events.js b/third_party/blink/web_tests/http/tests/devtools/indexeddb/upgrade-events.js
index 7b0f65ed..15336cb 100644
--- a/third_party/blink/web_tests/http/tests/devtools/indexeddb/upgrade-events.js
+++ b/third_party/blink/web_tests/http/tests/devtools/indexeddb/upgrade-events.js
@@ -13,7 +13,7 @@
   var securityOrigin = 'http://127.0.0.1:8000';
   var databaseName = 'testDatabase - ' + self.location;
   var objectStoreName = 'testObjectStore';
-  var databaseId = new Resources.IndexedDBModel.DatabaseId(securityOrigin, databaseName);
+  var databaseId = new Resources.IndexedDBModel.DatabaseId(securityOrigin, /* storageKey */ undefined, databaseName);
 
   function onConsoleError(callback) {
     var old = console.error;
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-attributionsrc-eligible.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-attributionsrc-eligible.js
index 8d18cd7..4034ca0d 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-attributionsrc-eligible.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-attributionsrc-eligible.js
@@ -3,23 +3,23 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that clicking an anchor with valueless attributionsrc triggers an issue when the attribution-reporting Permissions Policy is disabled.`);
+  const {dp} = await testRunner.startURL(
+      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/permissions-policy-no-conversion-measurement.php',
+      'Test that clicking an anchor with valueless attributionsrc triggers an issue when the attribution-reporting Permissions Policy is disabled.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/permissions-policy-no-conversion-measurement.php');
 
-  await page.loadHTML(`
-  <a id="adlink" href="https://a.com"
-  attributionsrc target="_blank">Impression</a>`);
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<a id="adlink" href="https://a.com" attributionsrc target="_blank">Link</a>';
+  `});
 
-  const issuePromise = dp.Audits.onceIssueAdded();
+  const issue = dp.Audits.onceIssueAdded();
+
   await dp.Runtime.evaluate({
     expression: `document.getElementById('adlink').click()`,
-    userGesture: true
+    userGesture: true,
   });
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['violatingNodeId']);
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['violatingNodeId']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-attributionsrc.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-attributionsrc.js
index 0ee6e98..33bbaa0d 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-attributionsrc.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-attributionsrc.js
@@ -3,24 +3,23 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that clicking an anchor with attributionsrc triggers an issue when the attribution-reporting Permissions Policy is disabled.`);
+  const {dp} = await testRunner.startURL(
+      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/permissions-policy-no-conversion-measurement.php',
+      'Test that clicking an anchor with attributionsrc triggers an issue when the attribution-reporting Permissions Policy is disabled.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/permissions-policy-no-conversion-measurement.php');
 
-  await page.loadHTML(`
-  <a id="adlink" href="https://a.com"
-  attributionsrc="https://b.com"
-  target="_blank">Impression</a>`);
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<a id="adlink" href="https://a.com" attributionsrc="https://b.com" target="_blank">Link</a>';
+  `});
 
-  const issuePromise = dp.Audits.onceIssueAdded();
+  const issue = dp.Audits.onceIssueAdded();
+
   await dp.Runtime.evaluate({
     expression: `document.getElementById('adlink').click()`,
-    userGesture: true
+    userGesture: true,
   });
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['violatingNodeId']);
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['violatingNodeId']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-subresource.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-subresource.js
index 85d8bbd..2b1bb11b 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-subresource.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/disabled-permission-policy-subresource.js
@@ -3,18 +3,18 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that registering a trigger using a subresource request triggers an issue when the attribution-reporting Permissions Policy is disabled.`);
+  const {dp} = await testRunner.startURL(
+      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/permissions-policy-no-conversion-measurement.php',
+      'Test that registering a trigger using a subresource request triggers an issue when the attribution-reporting Permissions Policy is disabled.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/permissions-policy-no-conversion-measurement.php');
 
-  await page.loadHTML(
-      `<img src="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/register-trigger.php">`);
+  const issue = dp.Audits.onceIssueAdded();
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<img src="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/register-trigger.php">';
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-anchor-attributionsrc.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-anchor-attributionsrc.js
index dab13d2..09ed9a00 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-anchor-attributionsrc.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-anchor-attributionsrc.js
@@ -3,22 +3,22 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that clicking an anchor with an insecure attributionsrc triggers an issue.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that clicking an anchor with an insecure attributionsrc triggers an issue.');
 
   await dp.Audits.enable();
 
-  await page.loadHTML(`
-  <a id="adlink" href="https://a.com"
-  attributionsrc="http://insecure.com"
-  target="_blank">Impression</a>`);
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<a id="adlink" href="https://a.com" attributionsrc="http://insecure.com" target="_blank">Link</a>';
+  `});
 
-  const issuePromise = dp.Audits.onceIssueAdded();
+  const issue = dp.Audits.onceIssueAdded();
+
   await dp.Runtime.evaluate({
     expression: `document.getElementById('adlink').click()`,
-    userGesture: true
+    userGesture: true,
   });
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['violatingNodeId']);
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['violatingNodeId']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-source.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-source.js
index e10a9d82..1ada3cc4 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-source.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-source.js
@@ -3,16 +3,17 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that an attributionsrc that redirects to an insecure origin and tries to register a source triggers an issue.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that an attributionsrc that redirects to an insecure origin and tries to register a source triggers an issue.');
 
   await dp.Audits.enable();
 
-  await page.loadHTML(
-      `<img attributionsrc="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-source.php">`);
+  const issue = dp.Audits.onceIssueAdded();
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<img attributionsrc="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-source.php">';
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-trigger.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-trigger.js
index c9e6051a..4b52daf2 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-trigger.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-attributionsrc-redirect-trigger.js
@@ -3,16 +3,17 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that an attributionsrc that redirects to an insecure origin and tries to register a trigger triggers an issue.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that an attributionsrc that redirects to an insecure origin and tries to register a trigger triggers an issue.');
 
   await dp.Audits.enable();
 
-  await page.loadHTML(
-      `<img attributionsrc="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-trigger.php">`);
+  const issue = dp.Audits.onceIssueAdded();
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<img attributionsrc="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/redirect-to-insecure-origin-and-register-trigger.php">';
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-context-attributionsrc.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-context-attributionsrc.js
index 58bc875e..45f9041 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-context-attributionsrc.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-context-attributionsrc.js
@@ -3,24 +3,23 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that clicking an anchor with attributionsrc in an insecure context triggers an issue.`);
+  const {dp} = await testRunner.startURL(
+      'http://devtools.test:8000/inspector-protocol/resources/empty.html',
+      'Test that clicking an anchor with attributionsrc in an insecure context triggers an issue.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'http://devtools.test:8000/inspector-protocol/attribution-reporting/resources/impression.html');
 
-  await page.loadHTML(`
-  <a id="adlink" href="https://a.com"
-  attributionsrc="https://b.com"
-  target="_blank">Impression</a>`);
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<a id="adlink" href="https://a.com" attributionsrc="https://b.com" target="_blank">Link</a>';
+  `});
 
-  const issuePromise = dp.Audits.onceIssueAdded();
+  const issue = dp.Audits.onceIssueAdded();
+
   await dp.Runtime.evaluate({
     expression: `document.getElementById('adlink').click()`,
-    userGesture: true
+    userGesture: true,
   });
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['violatingNodeId']);
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['violatingNodeId']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-context-subresource.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-context-subresource.js
index 70c404b..1ba93d18 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-context-subresource.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-context-subresource.js
@@ -3,18 +3,18 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that registering a trigger using a subresource request in an insecure context triggers an issue.`);
+  const {dp} = await testRunner.startURL(
+      'http://devtools.test:8000/inspector-protocol/resources/empty.html',
+      'Test that registering a trigger using a subresource request in an insecure context triggers an issue.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'http://devtools.test:8000/inspector-protocol/attribution-reporting/resources/impression.html');
 
-  await page.loadHTML(
-      `<img src="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/register-trigger.php">`);
+  const issue = dp.Audits.onceIssueAdded();
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<img src="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/register-trigger.php">';
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-subresource-preload.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-subresource-preload.js
index 1902cb8..0c68e7a 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-subresource-preload.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-subresource-preload.js
@@ -4,16 +4,15 @@
 
 (async function(testRunner) {
   const {page, dp} = await testRunner.startBlank(
-      `Test that an untrustworthy attributionsrc triggers an issue when the img is preloaded.`);
+      'Test that an untrustworthy attributionsrc triggers an issue when the img is preloaded.');
 
   await dp.Audits.enable();
 
-  const issuePromise = dp.Audits.onceIssueAdded();
+  const issue = dp.Audits.onceIssueAdded();
 
   await page.navigate(
       'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/preload.html');
 
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['violatingNodeId']);
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['violatingNodeId']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-subresource.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-subresource.js
index 933256e9..521c1f6 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-subresource.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/insecure-subresource.js
@@ -3,16 +3,17 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that registering a trigger using a subbresource request to an insecure reporting origin triggers an issue.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that registering a trigger using a subresource request to an insecure reporting origin triggers an issue.');
 
   await dp.Audits.enable();
 
-  await page.loadHTML(
-      `<img src="http://devtools.test:8000/inspector-protocol/attribution-reporting/resources/register-trigger.php">`);
+  const issue = dp.Audits.onceIssueAdded();
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<img src="http://devtools.test:8000/inspector-protocol/attribution-reporting/resources/register-trigger.php">';
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-eligible-header-navigation-source.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-eligible-header-navigation-source.js
index de82ff6..25f89aa 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-eligible-header-navigation-source.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-eligible-header-navigation-source.js
@@ -3,20 +3,17 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that an attributionsrc request whose Attribution-Reporting-Eligible header contains navigation-source triggers an issue.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that an attributionsrc request whose Attribution-Reporting-Eligible header contains navigation-source triggers an issue.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/impression.html');
-  await page.loadHTML(`<body>`);
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  await dp.Runtime.evaluate({
-    expression:
-        `fetch('/inspector-protocol/attribution-reporting/resources/register-trigger.php',{headers:{'Attribution-Reporting-Eligible':'navigation-source'}})`,
-  });
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  const issue = dp.Audits.onceIssueAdded();
+
+  await dp.Runtime.evaluate({expression: `
+    fetch('/inspector-protocol/attribution-reporting/resources/register-trigger.php',{headers:{'Attribution-Reporting-Eligible':'navigation-source'}});
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-eligible-header.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-eligible-header.js
index 5112270a..060873b 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-eligible-header.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-eligible-header.js
@@ -3,20 +3,17 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that an attributionsrc request with an invalid Attribution-Reporting-Eligible header triggers an issue.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that an attributionsrc request with an invalid Attribution-Reporting-Eligible header triggers an issue.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/impression.html');
-  await page.loadHTML(`<body>`);
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  await dp.Runtime.evaluate({
-    expression:
-        `fetch('/inspector-protocol/attribution-reporting/resources/register-trigger.php',{headers:{'Attribution-Reporting-Eligible':'!'}})`,
-  });
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  const issue = dp.Audits.onceIssueAdded();
+
+  await dp.Runtime.evaluate({expression: `
+    fetch('/inspector-protocol/attribution-reporting/resources/register-trigger.php',{headers:{'Attribution-Reporting-Eligible':'!'}});
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-source-header.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-source-header.js
index 20714aa..5cf67aa 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-source-header.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-source-header.js
@@ -3,18 +3,17 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that an attributionsrc response with an invalid Attribution-Reporting-Register-Source header triggers an issue.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that an attributionsrc response with an invalid Attribution-Reporting-Register-Source header triggers an issue.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/impression.html');
 
-  await page.loadHTML(
-      `<img attributionsrc="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/register-invalid-source.php">`);
+  const issue = dp.Audits.onceIssueAdded();
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<img attributionsrc="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/register-invalid-source.php">';
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-trigger-header.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-trigger-header.js
index c438d01..cf75806 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-trigger-header.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/invalid-trigger-header.js
@@ -3,18 +3,17 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that an attributionsrc response with an invalid Attribution-Reporting-Register-Trigger header triggers an issue.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that an attributionsrc response with an invalid Attribution-Reporting-Register-Trigger header triggers an issue.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/impression.html');
 
-  await page.loadHTML(
-      `<img attributionsrc="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/register-invalid-trigger.php">`);
+  const issue = dp.Audits.onceIssueAdded();
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<img attributionsrc="https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/register-invalid-trigger.php">';
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/non-http-attributionsrc.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/non-http-attributionsrc.js
index ab203c07..f0350110 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/non-http-attributionsrc.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/non-http-attributionsrc.js
@@ -3,14 +3,17 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that using a non-HTTP-family URL as an attributionsrc triggers an issue.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that using a non-HTTP-family URL as an attributionsrc triggers an issue.');
 
   await dp.Audits.enable();
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  await page.loadHTML(`<img attributionsrc="wss://example.com/">`);
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['violatingNodeId']);
+  const issue = dp.Audits.onceIssueAdded();
+
+  await dp.Runtime.evaluate({expression: `
+    document.body.innerHTML = '<img attributionsrc="wss://example.com/">';
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['violatingNodeId']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-and-trigger-headers.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-and-trigger-headers.js
index 060414f..9f03978 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-and-trigger-headers.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-and-trigger-headers.js
@@ -3,20 +3,17 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that an attributionsrc request that is eligible for sources and triggers triggers an issue when it tries to register a source and trigger together.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that an attributionsrc request that is eligible for sources and triggers triggers an issue when it tries to register a source and trigger together.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/impression.html');
-  await page.loadHTML(`<body>`);
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  await dp.Runtime.evaluate({
-    expression:
-        `fetch('/inspector-protocol/attribution-reporting/resources/register-source-and-trigger.php',{headers:{'Attribution-Reporting-Eligible':'event-source,trigger'}})`,
-  });
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  const issue = dp.Audits.onceIssueAdded();
+
+  await dp.Runtime.evaluate({expression: `
+    fetch('/inspector-protocol/attribution-reporting/resources/register-source-and-trigger.php',{headers:{'Attribution-Reporting-Eligible':'event-source,trigger'}});
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-and-trigger-ignored.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-and-trigger-ignored.js
index 25db7c8f..9f0a4609 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-and-trigger-ignored.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-and-trigger-ignored.js
@@ -3,20 +3,18 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that an attributionsrc request that is not eligible for sources or triggers triggers issues when it tries to register them.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that an attributionsrc request that is not eligible for sources or triggers triggers issues when it tries to register them.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/impression.html');
-  await page.loadHTML(`<body>`);
 
   const issue1 = dp.Audits.onceIssueAdded();
   const issue2 = dp.Audits.onceIssueAdded();
-  await dp.Runtime.evaluate({
-    expression:
-        `fetch('/inspector-protocol/attribution-reporting/resources/register-source-and-trigger.php',{headers:{'Attribution-Reporting-Eligible':''}})`,
-  });
+
+  await dp.Runtime.evaluate({expression: `
+    fetch('/inspector-protocol/attribution-reporting/resources/register-source-and-trigger.php',{headers:{'Attribution-Reporting-Eligible':''}});
+  `});
+
   testRunner.log((await issue1).params.issue, 'Issue 1 reported: ', ['request']);
   testRunner.log((await issue2).params.issue, 'Issue 2 reported: ', ['request']);
   testRunner.completeTest();
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-ignored.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-ignored.js
index ee79eef..87c82545 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-ignored.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/source-ignored.js
@@ -3,20 +3,17 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that an attributionsrc request that is only eligible for triggers triggers an issue when it tries to register a source.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that an attributionsrc request that is only eligible for triggers triggers an issue when it tries to register a source.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/impression.html');
-  await page.loadHTML(`<body>`);
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  await dp.Runtime.evaluate({
-    expression:
-        `fetch('/inspector-protocol/attribution-reporting/resources/register-source-and-trigger.php',{headers:{'Attribution-Reporting-Eligible':'trigger'}})`,
-  });
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  const issue = dp.Audits.onceIssueAdded();
+
+  await dp.Runtime.evaluate({expression: `
+    fetch('/inspector-protocol/attribution-reporting/resources/register-source-and-trigger.php',{headers:{'Attribution-Reporting-Eligible':'trigger'}});
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/too-many-concurrent-requests.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/too-many-concurrent-requests.js
index b676273..72f220d 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/too-many-concurrent-requests.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/too-many-concurrent-requests.js
@@ -3,24 +3,20 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that initiating too many concurrent attributionsrc requests triggers an issue.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that initiating too many concurrent attributionsrc requests triggers an issue.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/impression.html');
-  await page.loadHTML(`<body>`);
 
-  const issuePromise = dp.Audits.onceIssueAdded();
+  const issue = dp.Audits.onceIssueAdded();
 
   const maxConcurrentRequests = 30;
   for (let i = 0; i < maxConcurrentRequests + 1; i++) {
-    await dp.Runtime.evaluate({
-      expression:
-          `document.createElement('img').attributionSrc='/inspector-protocol/attribution-reporting/resources/sleep.php'`,
-    });
+    await dp.Runtime.evaluate({expression: `
+      document.createElement('img').attributionSrc='/inspector-protocol/attribution-reporting/resources/sleep.php';
+    `});
   }
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['violatingNodeId']);
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['violatingNodeId']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/trigger-ignored.js b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/trigger-ignored.js
index 92d7f8f..5eac4b3 100644
--- a/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/trigger-ignored.js
+++ b/third_party/blink/web_tests/http/tests/inspector-protocol/attribution-reporting/trigger-ignored.js
@@ -3,20 +3,17 @@
 // found in the LICENSE file.
 
 (async function(testRunner) {
-  const {page, dp} = await testRunner.startBlank(
-      `Test that an attributionsrc request that is only eligible for sources triggers an issue when it tries to register a trigger.`);
+  const {dp} = await testRunner.startBlank(
+      'Test that an attributionsrc request that is only eligible for sources triggers an issue when it tries to register a trigger.');
 
   await dp.Audits.enable();
-  await page.navigate(
-      'https://devtools.test:8443/inspector-protocol/attribution-reporting/resources/impression.html');
-  await page.loadHTML(`<body>`);
 
-  const issuePromise = dp.Audits.onceIssueAdded();
-  await dp.Runtime.evaluate({
-    expression:
-        `fetch('/inspector-protocol/attribution-reporting/resources/register-source-and-trigger.php',{headers:{'Attribution-Reporting-Eligible':'event-source'}})`,
-  });
-  const issue = await issuePromise;
-  testRunner.log(issue.params.issue, 'Issue reported: ', ['request']);
+  const issue = dp.Audits.onceIssueAdded();
+
+  await dp.Runtime.evaluate({expression: `
+    fetch('/inspector-protocol/attribution-reporting/resources/register-source-and-trigger.php',{headers:{'Attribution-Reporting-Eligible':'event-source'}});
+  `});
+
+  testRunner.log((await issue).params.issue, 'Issue reported: ', ['request']);
   testRunner.completeTest();
 })
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/css/css-grid/parsing/grid-shorthand-serialization-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/css/css-grid/parsing/grid-shorthand-serialization-expected.txt
deleted file mode 100644
index 1ae59bdf..0000000
--- a/third_party/blink/web_tests/platform/generic/external/wpt/css/css-grid/parsing/grid-shorthand-serialization-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-This is a testharness.js-based test.
-PASS Serialization without grid-template-areas
-PASS Serialization with grid-template-areas
-FAIL Serialization with grid-auto-flow assert_equals: grid shorthand must not be serialized when it doesn't roundtrip expected "" but got "30px 40px / auto-flow auto"
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/html/anonymous-iframe/local-storage-initial-empty-document.tentative.https.window-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/html/anonymous-iframe/local-storage-initial-empty-document.tentative.https.window-expected.txt
deleted file mode 100644
index 96952b5..0000000
--- a/third_party/blink/web_tests/platform/generic/external/wpt/html/anonymous-iframe/local-storage-initial-empty-document.tentative.https.window-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Local storage is correctly partitioned with regards to anonymous iframe in initial empty documents. assert_equals: expected "" but got "value_E"
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/insecure-subresource-expected.txt b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/insecure-subresource-expected.txt
index 8a498b5..8f10f92d 100644
--- a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/insecure-subresource-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/attribution-reporting/insecure-subresource-expected.txt
@@ -1,4 +1,4 @@
-Test that registering a trigger using a subbresource request to an insecure reporting origin triggers an issue.
+Test that registering a trigger using a subresource request to an insecure reporting origin triggers an issue.
 Issue reported: {
     code : AttributionReportingIssue
     details : {
diff --git a/third_party/blink/web_tests/platform/generic/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/platform/generic/webexposed/element-instance-property-listing-expected.txt
index 0dd4cb6..a13ea92 100644
--- a/third_party/blink/web_tests/platform/generic/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/webexposed/element-instance-property-listing-expected.txt
@@ -511,6 +511,7 @@
     property willValidate
 html element canvas
     property captureStream
+    property configureHighDynamicRange
     property convertToBlob
     property getContext
     property height
diff --git a/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt
index de1d0855c..c84ac87 100644
--- a/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/platform/generic/webexposed/global-interface-listing-expected.txt
@@ -3133,6 +3133,7 @@
     getter height
     getter width
     method captureStream
+    method configureHighDynamicRange
     method constructor
     method convertToBlob
     method getContext
diff --git a/third_party/blink/web_tests/virtual/import-assertions/README.md b/third_party/blink/web_tests/virtual/import-assertions/README.md
deleted file mode 100644
index 1412037..0000000
--- a/third_party/blink/web_tests/virtual/import-assertions/README.md
+++ /dev/null
@@ -1,4 +0,0 @@
-This suite runs the tests with
---js-flags=--harmony-import-assertions
-
-See https://tc39.es/proposal-import-assertions/
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/json-modules/README.md b/third_party/blink/web_tests/virtual/json-modules/README.md
deleted file mode 100644
index 6376b73..0000000
--- a/third_party/blink/web_tests/virtual/json-modules/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-This suite runs the tests with
---enable-features=JSONModules --js-flags=--harmony-import-assertions
-
-See design doc for more details:
-https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/master/SyntheticModules/designDoc.md
\ No newline at end of file
diff --git a/third_party/blink/web_tests/virtual/popup-disabled/popup-disabled.html b/third_party/blink/web_tests/virtual/popup-disabled/popup-disabled.html
index f4e01231..c7681184 100644
--- a/third_party/blink/web_tests/virtual/popup-disabled/popup-disabled.html
+++ b/third_party/blink/web_tests/virtual/popup-disabled/popup-disabled.html
@@ -21,7 +21,7 @@
 
   const elements = document.getElementById('elements').children;
   test(() => {
-    assert_throws_dom("SyntaxError",() => {elements[0].matches(':top-layer')},"The :popup-open pseudo class shouldn't be available");
+    assert_throws_dom("SyntaxError",() => {elements[0].matches(':open')},"The :popup-open pseudo class shouldn't be available");
   },'Basic tests');
 
   for(let el of elements) {
diff --git a/third_party/blink/web_tests/wpt_internal/custom-elements/CustomElementRegistry-constructor.html b/third_party/blink/web_tests/wpt_internal/custom-elements/CustomElementRegistry-constructor.html
new file mode 100644
index 0000000..d80a1fb
--- /dev/null
+++ b/third_party/blink/web_tests/wpt_internal/custom-elements/CustomElementRegistry-constructor.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<meta name="author" title="Xiaocheng Hu" href="mailto:xiaochengh@chromium.org">
+<meta name="assert" content="User code can create non-global CustomElementRegistry instances and add definitions">
+<link rel="help" href="https://wicg.github.io/webcomponents/proposals/Scoped-Custom-Element-Registries">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+test(() => {
+  let registry = new CustomElementRegistry();
+  assert_not_equals(registry, window.customElements);
+
+  // Define an autonomous element with the new registry. It should not become a
+  // global definition.
+  class MyAutonomous extends HTMLElement {};
+  registry.define('my-autonomous', MyAutonomous);
+  assert_equals(registry.get('my-autonomous'), MyAutonomous);
+  assert_equals(window.customElements.get('my-autonomous'), undefined);
+  assert_false(document.createElement('my-autonomous') instanceof MyAutonomous);
+
+  // Do the same for a customized built-in element.
+  class MyCustomizedBuiltIn extends HTMLParagraphElement {};
+  registry.define('my-customized-builtin', MyCustomizedBuiltIn, {extends: 'p'});
+  assert_equals(registry.get('my-customized-builtin'), MyCustomizedBuiltIn);
+  assert_equals(window.customElements.get('my-customized-builtin'), undefined);
+  assert_false(document.createElement('p', {is: 'my-customized-builtin'}) instanceof MyCustomizedBuiltIn);
+}, 'Create non-global CustomElementRegistry and add definitions');
+</script>
diff --git a/third_party/distributed_point_functions/DIR_METADATA b/third_party/distributed_point_functions/DIR_METADATA
index 8d7ede52..01c2feb 100644
--- a/third_party/distributed_point_functions/DIR_METADATA
+++ b/third_party/distributed_point_functions/DIR_METADATA
@@ -1,3 +1,3 @@
 monorail: {
-  component: "Internals>ConversionMeasurement"
+  component: "Internals>AttributionReporting"
 }
diff --git a/third_party/r8/3pp/patches/0001-Add-disassemble-command-to-keeps.patch b/third_party/r8/3pp/patches/0001-Add-disassemble-command-to-keeps.patch
index 870599e4..ae8c8b86 100644
--- a/third_party/r8/3pp/patches/0001-Add-disassemble-command-to-keeps.patch
+++ b/third_party/r8/3pp/patches/0001-Add-disassemble-command-to-keeps.patch
@@ -1,4 +1,4 @@
-From 643a7c3443b38c3b643a325408d991bb0fdfe55a Mon Sep 17 00:00:00 2001
+From 3d7aa2e8323044ef797b0225b58a945179cb82a1 Mon Sep 17 00:00:00 2001
 From: Andrew Grieve <agrieve@chromium.org>
 Date: Mon, 13 Jun 2022 09:27:22 -0400
 Subject: [PATCH 1/3] Add disassemble command to keeps
diff --git a/third_party/r8/3pp/patches/0002-Disable-line-number-optimization-b-215672108.patch b/third_party/r8/3pp/patches/0002-Disable-line-number-optimization-b-215672108.patch
new file mode 100644
index 0000000..6f26e51d
--- /dev/null
+++ b/third_party/r8/3pp/patches/0002-Disable-line-number-optimization-b-215672108.patch
@@ -0,0 +1,25 @@
+From b2e6fa77e175b2ce955f2ac40cf3fe79497a0f8c Mon Sep 17 00:00:00 2001
+From: Andrew Grieve <agrieve@google.com>
+Date: Wed, 24 Aug 2022 22:02:34 -0400
+Subject: [PATCH 2/3] Disable line number optimization (b/215672108)
+
+---
+ src/main/java/com/android/tools/r8/utils/InternalOptions.java | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+index 78c17ec248..85b6eb2199 100644
+--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
++++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+@@ -2226,7 +2226,7 @@ public class InternalOptions implements GlobalKeepInfoConfiguration {
+   }
+ 
+   public boolean canUseDexPc2PcAsDebugInformation() {
+-    return isGeneratingDex() && lineNumberOptimization == LineNumberOptimization.ON;
++    return false;
+   }
+ 
+   public boolean canUseNativeDexPcInsteadOfDebugInfo() {
+-- 
+2.37.1.595.g718a3a8f04-goog
+
diff --git a/third_party/r8/3pp/patches/0002-Disable-line-number-optimization.patch b/third_party/r8/3pp/patches/0002-Disable-line-number-optimization.patch
deleted file mode 100644
index b81d17d4..0000000
--- a/third_party/r8/3pp/patches/0002-Disable-line-number-optimization.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From 9f333c462dfa4f32deed8a825aa404b35426db76 Mon Sep 17 00:00:00 2001
-From: Andrew Grieve <agrieve@chromium.org>
-Date: Thu, 20 Jan 2022 16:29:40 -0500
-Subject: [PATCH 2/3] Disable line number optimization
-
----
- src/main/java/com/android/tools/r8/D8Command.java | 3 +++
- src/main/java/com/android/tools/r8/R8Command.java | 2 ++
- 2 files changed, 5 insertions(+)
-
-diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
-index 76c2966450..f05d307ff3 100644
---- a/src/main/java/com/android/tools/r8/D8Command.java
-+++ b/src/main/java/com/android/tools/r8/D8Command.java
-@@ -657,6 +657,9 @@ public final class D8Command extends BaseCompilerCommand {
-     internal.setDumpInputFlags(getDumpInputFlags());
-     internal.dumpOptions = dumpOptions();
- 
-+    // Added where it hopefully won't have merge conflicts.
-+    internal.lineNumberOptimization = LineNumberOptimization.OFF;
-+
-     return internal;
-   }
- 
-diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
-index 98184405af..245a7d8d6b 100644
---- a/src/main/java/com/android/tools/r8/R8Command.java
-+++ b/src/main/java/com/android/tools/r8/R8Command.java
-@@ -971,6 +971,8 @@ public final class R8Command extends BaseCompilerCommand {
-     internal.mainDexKeptGraphConsumer = mainDexKeptGraphConsumer;
- 
-     internal.dataResourceConsumer = internal.programConsumer.getDataResourceConsumer();
-+    // Added where it hopefully won't have merge conflicts.
-+    internal.lineNumberOptimization = LineNumberOptimization.OFF;
- 
-     internal.featureSplitConfiguration = featureSplitConfiguration;
- 
--- 
-2.37.1.595.g718a3a8f04-goog
-
diff --git a/third_party/r8/3pp/patches/0003-Enable-SameFilePolicy-for-Horizontal-class-merging.patch b/third_party/r8/3pp/patches/0003-Enable-SameFilePolicy-for-Horizontal-class-merging.patch
index 98bb361..1b6d8a9 100644
--- a/third_party/r8/3pp/patches/0003-Enable-SameFilePolicy-for-Horizontal-class-merging.patch
+++ b/third_party/r8/3pp/patches/0003-Enable-SameFilePolicy-for-Horizontal-class-merging.patch
@@ -1,4 +1,4 @@
-From abe1ffec9ea27f10cf7ca3db14cd3e5e130e50bf Mon Sep 17 00:00:00 2001
+From 63a2bb9118f7abc06888d97e7861d73ab1c270a6 Mon Sep 17 00:00:00 2001
 From: Andrew Grieve <agrieve@google.com>
 Date: Wed, 17 Aug 2022 13:00:30 -0400
 Subject: [PATCH 3/3] Enable SameFilePolicy for Horizontal class merging
@@ -8,7 +8,7 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
-index f02405ce74..d8c324a6af 100644
+index 85b6eb2199..d119745099 100644
 --- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
 +++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
 @@ -1511,7 +1511,7 @@ public class InternalOptions implements GlobalKeepInfoConfiguration {
diff --git a/third_party/swift-toolchain/3pp/3pp.pb b/third_party/swift-toolchain/3pp/3pp.pb
index b7d0a17d..8c3b5d0 100644
--- a/third_party/swift-toolchain/3pp/3pp.pb
+++ b/third_party/swift-toolchain/3pp/3pp.pb
@@ -2,24 +2,28 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-# TODO(crbug.com/1340013): Have a linux section for the toolchain for 
-# goma/reclient. It likely just needs to download the .tgz on swift.org and 
+# TODO(crbug.com/1340013): Have a linux section for the toolchain for
+# goma/reclient. It likely just needs to download the .tgz on swift.org and
 # unpack it.
 
 # IMPORTANT: When changing the download URL, also be sure to update the install
 # directory in the `build` section. Otherwise the packaging bot will fail.
 
+# IMPORTANT: When updating the version, you need to also update he version
+# in //build/toolchain/apple/toolchain.gni so that all .swift modules are
+# correctly considered dirty and built with the new version of the compiler.
+
 create {
   platform_re: "mac-.*"
   source {
     url {
-      download_url: "https://download.swift.org/swift-5.7-branch/xcode/swift-5.7-DEVELOPMENT-SNAPSHOT-2022-07-17-a/swift-5.7-DEVELOPMENT-SNAPSHOT-2022-07-17-a-osx.pkg"
-      version: "5.7-20220717"
+      download_url: "https://download.swift.org/swift-5.7-branch/xcode/swift-5.7-DEVELOPMENT-SNAPSHOT-2022-08-02-a/swift-5.7-DEVELOPMENT-SNAPSHOT-2022-08-02-a-osx.pkg"
+      version: "5.7-20220818"
     }
   }
   build {
     install: "install-mac.sh"
-    install: "swift-5.7-DEVELOPMENT-SNAPSHOT-2022-07-17-a-osx"
+    install: "swift-5.7-DEVELOPMENT-SNAPSHOT-2022-08-02-a-osx"
   }
 }
 
diff --git a/third_party/swift-toolchain/README.chromium b/third_party/swift-toolchain/README.chromium
index 9e8b3692..485d5f8 100644
--- a/third_party/swift-toolchain/README.chromium
+++ b/third_party/swift-toolchain/README.chromium
@@ -1,8 +1,8 @@
 Name: Swift toolchain
 Short Name: swift-toolchain
 URL: https://www.swift.org/download/
-Version: 5.7.2022.7.17
-Date: 2022 July 17
+Version: 5.7.2022818
+Date: 2022 August 18
 License: Apache 2.0
 License File: LICENSE
 Security Critical: no
diff --git a/third_party/tflite/README.chromium b/third_party/tflite/README.chromium
index f0ad5ff..27c9aa1 100644
--- a/third_party/tflite/README.chromium
+++ b/third_party/tflite/README.chromium
@@ -1,8 +1,8 @@
 Name: TensorFlow Lite
 Short Name: tflite
 URL: https://github.com/tensorflow/tensorflow
-Version: 6848b213e0cbfbc216dd8a87e27d37c6efbdcfbe
-Date: 2022/08/17
+Version: b6b10f9f529189ab903782ca308f44a35d3d427d
+Date: 2022/08/23
 License: Apache 2.0
 License File: LICENSE
 Security Critical: Yes
diff --git a/tools/clang/scripts/build.py b/tools/clang/scripts/build.py
index 9211297..54038d4 100755
--- a/tools/clang/scripts/build.py
+++ b/tools/clang/scripts/build.py
@@ -794,14 +794,14 @@
     os.chdir(LLVM_BOOTSTRAP_DIR)
 
     projects = 'clang'
-    runtimes = ''
+    runtimes = []
     if args.pgo or sys.platform == 'darwin':
       # Need libclang_rt.profile for PGO.
       # On macOS, the bootstrap toolchain needs to have compiler-rt because
       # dsymutil's link needs libclang_rt.osx.a. Only the x86_64 osx
       # libraries are needed though, and only libclang_rt (i.e.
       # COMPILER_RT_BUILD_BUILTINS).
-      runtimes += ';compiler-rt'
+      runtimes.append('compiler-rt')
     if sys.platform != 'darwin':
       projects += ';lld'
 
@@ -812,7 +812,7 @@
     bootstrap_args = base_cmake_args + [
         '-DLLVM_TARGETS_TO_BUILD=' + bootstrap_targets,
         '-DLLVM_ENABLE_PROJECTS=' + projects,
-        '-DLLVM_ENABLE_RUNTIMES=' + runtimes,
+        '-DLLVM_ENABLE_RUNTIMES=' + ';'.join(runtimes),
         '-DCMAKE_INSTALL_PREFIX=' + LLVM_BOOTSTRAP_INSTALL_DIR,
         '-DCMAKE_C_FLAGS=' + ' '.join(cflags),
         '-DCMAKE_CXX_FLAGS=' + ' '.join(cxxflags),
diff --git a/tools/clang/scripts/package.py b/tools/clang/scripts/package.py
index 380d14c..d30f85dc 100755
--- a/tools/clang/scripts/package.py
+++ b/tools/clang/scripts/package.py
@@ -19,7 +19,7 @@
 import tarfile
 import time
 
-from update import RELEASE_VERSION, STAMP_FILE
+from update import PACKAGE_VERSION, RELEASE_VERSION, STAMP_FILE
 
 # Path constants.
 THIS_DIR = os.path.dirname(__file__)
@@ -66,12 +66,6 @@
   return tarinfo
 
 
-def GetExpectedStamp():
-  rev_cmd = [sys.executable, os.path.join(THIS_DIR, 'update.py'),
-             '--print-revision']
-  return str(subprocess.check_output(rev_cmd).decode()).rstrip()
-
-
 def GetGsutilPath():
   if not 'find_depot_tools' in sys.modules:
     sys.path.insert(0, os.path.join(CHROMIUM_DIR, 'build'))
@@ -196,7 +190,7 @@
     print('--build-mac-arm only valid on intel to cross-build arm')
     return 1
 
-  expected_stamp = GetExpectedStamp()
+  expected_stamp = PACKAGE_VERSION
   pdir = 'clang-' + expected_stamp
   print(pdir)
 
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index 3114812d..e6b1fdc 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -340,6 +340,11 @@
     print(RELEASE_VERSION)
     return 0
 
+  if args.output_dir:
+    global LLVM_BUILD_DIR, STAMP_FILE
+    LLVM_BUILD_DIR = os.path.abspath(args.output_dir)
+    STAMP_FILE = os.path.join(LLVM_BUILD_DIR, 'cr_build_revision')
+
   if args.print_revision:
     if args.llvm_force_head_revision:
       force_head_revision = ReadStampFile(FORCE_HEAD_REVISION_FILE)
@@ -349,6 +354,13 @@
       print(force_head_revision)
       return 0
 
+    stamp_version = ReadStampFile(STAMP_FILE).partition(',')[0]
+    if PACKAGE_VERSION != stamp_version:
+      print('The expected clang version is %s but the actual version is %s' %
+            (PACKAGE_VERSION, stamp_version))
+      print('Did you run "gclient sync"?')
+      return 1
+
     print(PACKAGE_VERSION)
     return 0
 
@@ -356,11 +368,6 @@
     print('--llvm-force-head-revision can only be used for --print-revision')
     return 1
 
-  if args.output_dir:
-    global LLVM_BUILD_DIR, STAMP_FILE
-    LLVM_BUILD_DIR = os.path.abspath(args.output_dir)
-    STAMP_FILE = os.path.join(LLVM_BUILD_DIR, 'cr_build_revision')
-
   return UpdatePackage(args.package, args.host_os)
 
 
diff --git a/tools/fuchsia/size_tests/fyi_sizes_warning.json b/tools/fuchsia/size_tests/fyi_sizes_warning.json
index f6e814c5..9393bd7 100644
--- a/tools/fuchsia/size_tests/fyi_sizes_warning.json
+++ b/tools/fuchsia/size_tests/fyi_sizes_warning.json
@@ -5,6 +5,6 @@
   ],
   "far_total_name" : "chrome_fuchsia",
   "size_limits" : {
-    "chrome_fuchsia_compressed": 42162064
+    "chrome_fuchsia_compressed": 42462064
   }
 }
diff --git a/tools/gritsettings/resource_ids.spec b/tools/gritsettings/resource_ids.spec
index 80f8c8c4..845ce12 100644
--- a/tools/gritsettings/resource_ids.spec
+++ b/tools/gritsettings/resource_ids.spec
@@ -168,7 +168,7 @@
     "META": {"sizes": {"includes": [5]}},
     "includes": [1490],
   },
-  "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/commander/commander_resources.grd": {
+  "<(SHARED_INTERMEDIATE_DIR)/chrome/browser/resources/commander/resources.grd": {
     "META": {"sizes": {"includes": [15]}},
     "includes": [1500],
   },
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index 9b4611f..771b968 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -1175,7 +1175,7 @@
       'linux_chromium_chromeos_msan_rel_ng': 'chromeos_msan_release_bot',
       'linux_chromium_clobber_deterministic': 'release_trybot',
       'linux_chromium_clobber_rel_ng': 'release_trybot',
-      'linux_chromium_compile_dbg_ng': 'debug_bot',
+      'linux_chromium_compile_dbg_ng': 'debug_bot_reclient',
       'linux_chromium_compile_rel_ng': 'release_trybot',
       'linux_chromium_dbg_ng': 'gpu_tests_debug_bot',
 
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
index f2a8369..4f89871fa 100644
--- a/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
+++ b/tools/mb/mb_config_expectations/tryserver.chromium.linux.json
@@ -684,7 +684,7 @@
       "is_component_build": true,
       "is_debug": true,
       "symbol_level": 1,
-      "use_goma": true
+      "use_remoteexec": true
     }
   },
   "linux_chromium_compile_rel_ng": {
diff --git a/tools/metrics/actions/extract_actions.py b/tools/metrics/actions/extract_actions.py
index e05cb2c..0d94604e 100755
--- a/tools/metrics/actions/extract_actions.py
+++ b/tools/metrics/actions/extract_actions.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #
 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 9c14ce18..cf5a157 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -28830,6 +28830,11 @@
   <int value="1" label="Unknown error"/>
 </enum>
 
+<enum name="DTOrigin">
+  <int value="0" label="In session"/>
+  <int value="1" label="On login screen"/>
+</enum>
+
 <enum name="DumpOutcome">
   <int value="0" label="Success"/>
   <int value="1" label="Failure"/>
@@ -32279,6 +32284,7 @@
   <int value="1006" label="HighEfficiencyModeEnabled"/>
   <int value="1007" label="DevicePrintingClientNameTemplate"/>
   <int value="1008" label="ReportDeviceSignalStrengthEventDrivenTelemetry"/>
+  <int value="1009" label="BatterySaverModeAvailability"/>
 </enum>
 
 <enum name="EnterprisePoliciesSources">
@@ -67435,6 +67441,11 @@
   <int value="3" label="Behind a Non-Symmetric NAT."/>
 </enum>
 
+<enum name="NavigationBrowserMappedUrnUuidInIframeOrFencedFrame">
+  <int value="0" label="Browser mapped urn::uuid is rendered in fenced frame"/>
+  <int value="1" label="Browser mapped urn::uuid is rendered in iframe"/>
+</enum>
+
 <enum name="NavigationCacheEnum">
   <int value="0" label="Validate cache"/>
   <int value="1" label="Bypass cache"/>
@@ -79411,6 +79422,7 @@
   <int value="36" label="kMemoryLimitExceeded"/>
   <int value="37" label="kFailToGetMemoryUsage"/>
   <int value="38" label="kDataSaverEnabled"/>
+  <int value="39" label="kHasEffectiveUrl"/>
 </enum>
 
 <enum name="PrerenderHoverEvent">
@@ -90051,6 +90063,12 @@
   <int value="1" label="Sync account switcher"/>
 </enum>
 
+<enum name="SigninSyncConsentDataRow">
+  <int value="0" label="BookmarksRowClicked"/>
+  <int value="1" label="AutofillRowClicked"/>
+  <int value="2" label="HistoryRowClicked"/>
+</enum>
+
 <enum name="SigninTokenStateTransition">
   <obsolete>
     Deprecated as of 09/2019.
@@ -101316,7 +101334,8 @@
   <int value="13" label="Placeholder app management for preinstalled apps"/>
   <int value="14" label="Externally managed Arc apps"/>
   <int value="15" label="SubApps API"/>
-  <int value="16" label="Incomplete unisntall cleanup on startup."/>
+  <int value="16" label="Incomplete uninstall cleanup on startup."/>
+  <int value="17" label="Sub apps uninstall kicked off by parent app"/>
 </enum>
 
 <enum name="WebAppUrlHandlingDialogState">
diff --git a/tools/metrics/histograms/metadata/blink/histograms.xml b/tools/metrics/histograms/metadata/blink/histograms.xml
index 637e1a9..af2a425 100644
--- a/tools/metrics/histograms/metadata/blink/histograms.xml
+++ b/tools/metrics/histograms/metadata/blink/histograms.xml
@@ -2920,7 +2920,7 @@
 </histogram>
 
 <histogram name="Blink.UseCounter.PermissionsPolicy.Header2"
-    enum="FeaturePolicyFeature" expires_after="2022-10-04">
+    enum="FeaturePolicyFeature" expires_after="2023-08-25">
   <owner>iclelland@chromium.org</owner>
   <owner>feature-control@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/metadata/enterprise/histograms.xml b/tools/metrics/histograms/metadata/enterprise/histograms.xml
index 5354b29..da1ed841 100644
--- a/tools/metrics/histograms/metadata/enterprise/histograms.xml
+++ b/tools/metrics/histograms/metadata/enterprise/histograms.xml
@@ -769,6 +769,18 @@
   </token>
 </histogram>
 
+<histogram name="Enterprise.DeviceTrust.Origin" enum="DTOrigin"
+    expires_after="2023-08-01">
+  <owner>lmasopust@google.com</owner>
+  <owner>rodmartin@google.com</owner>
+  <owner>cbe-device-trust-eng@google.com</owner>
+  <summary>
+    Recorded when a device starts the device trust attestation flow with a
+    partner website. This captures if the attestation flow was triggered inside
+    of a session or on the login screen.
+  </summary>
+</histogram>
+
 <histogram name="Enterprise.DeviceTrust.RotateSigningKey.Tries" units="tries"
     expires_after="2023-07-01">
   <owner>hmare@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/media/histograms.xml b/tools/metrics/histograms/metadata/media/histograms.xml
index dce2dec9..d46806c 100644
--- a/tools/metrics/histograms/metadata/media/histograms.xml
+++ b/tools/metrics/histograms/metadata/media/histograms.xml
@@ -719,7 +719,7 @@
 </histogram>
 
 <histogram name="Media.Audio.OutputDeviceListener.Duration{Device}" units="ms"
-    expires_after="2022-10-04">
+    expires_after="2023-10-05">
   <owner>olka@chromium.org</owner>
   <owner>tguilbert@chromium.org</owner>
   <summary>
@@ -734,7 +734,7 @@
 </histogram>
 
 <histogram name="Media.Audio.OutputDeviceMixer.MaxListenerCount{Device}"
-    units="listeners" expires_after="2022-10-04">
+    units="listeners" expires_after="2023-10-05">
   <owner>olka@chromium.org</owner>
   <owner>tguilbert@chromium.org</owner>
   <summary>
@@ -750,7 +750,7 @@
 </histogram>
 
 <histogram name="Media.Audio.OutputDeviceMixer.MaxMixedStreamCount{Device}"
-    units="streams" expires_after="2022-10-04">
+    units="streams" expires_after="2023-10-05">
   <owner>olka@chromium.org</owner>
   <owner>tguilbert@chromium.org</owner>
   <summary>
@@ -775,7 +775,7 @@
 </histogram>
 
 <histogram name="Media.Audio.OutputDeviceMixer.MixingDuration{Device}"
-    units="ms" expires_after="2022-10-04">
+    units="ms" expires_after="2023-10-05">
   <owner>olka@chromium.org</owner>
   <owner>tguilbert@chromium.org</owner>
   <summary>
@@ -794,7 +794,7 @@
 </histogram>
 
 <histogram name="Media.Audio.OutputDeviceMixer.NoopMixingDuration" units="ms"
-    expires_after="2022-10-04">
+    expires_after="2023-10-05">
   <owner>olka@chromium.org</owner>
   <owner>tguilbert@chromium.org</owner>
   <summary>
@@ -822,7 +822,7 @@
 
 <histogram
     name="Media.Audio.OutputDeviceMixer.StreamDuration.{MixingStatus}.{LatencyTag}"
-    units="ms" expires_after="2022-10-04">
+    units="ms" expires_after="2023-10-05">
   <owner>olka@chromium.org</owner>
   <owner>tguilbert@chromium.org</owner>
   <summary>
@@ -846,7 +846,7 @@
 </histogram>
 
 <histogram name="Media.Audio.OutputDeviceMixer.StreamStatus"
-    enum="AudioOutputDeviceMixerStreamStatus" expires_after="2022-10-04">
+    enum="AudioOutputDeviceMixerStreamStatus" expires_after="2023-10-05">
   <owner>olka@chromium.org</owner>
   <owner>tguilbert@chromium.org</owner>
   <summary>
@@ -857,7 +857,7 @@
 
 <histogram name="Media.Audio.OutputDeviceMixerManager.StreamCreation"
     enum="AudioOutputDeviceMixerManagerStreamCreation"
-    expires_after="2022-10-04">
+    expires_after="2023-10-05">
   <owner>olka@chromium.org</owner>
   <owner>tguilbert@chromium.org</owner>
   <summary>
@@ -1343,7 +1343,7 @@
 </histogram>
 
 <histogram name="Media.AudioCapturerDroppedData2.{Duration}" units="permille"
-    expires_after="2022-10-04">
+    expires_after="2023-10-05">
   <owner>olka@chromium.org</owner>
   <owner>gustaf@chromium.org</owner>
   <summary>
@@ -1371,7 +1371,7 @@
 </histogram>
 
 <histogram name="Media.AudioCapturerMissedReadDeadline2.{Duration}"
-    units="permille" expires_after="2022-10-04">
+    units="permille" expires_after="2023-10-05">
   <owner>olka@chromium.org</owner>
   <owner>gustaf@chromium.org</owner>
   <summary>
@@ -1680,8 +1680,8 @@
 </histogram>
 
 <histogram name="Media.AudioService.AudioManagerStartupTime" units="ms"
-    expires_after="2022-10-05">
-  <owner>guidou@chromium.org</owner>
+    expires_after="2023-10-05">
+  <owner>fhernqvist@google.com</owner>
   <owner>olka@chromium.org</owner>
   <summary>
     How long it take for the audio manager instance to be created by the audio
diff --git a/tools/metrics/histograms/metadata/navigation/histograms.xml b/tools/metrics/histograms/metadata/navigation/histograms.xml
index 55222166..4be45e28 100644
--- a/tools/metrics/histograms/metadata/navigation/histograms.xml
+++ b/tools/metrics/histograms/metadata/navigation/histograms.xml
@@ -496,6 +496,19 @@
   <summary>Whether the back-forward navigation was served from cache.</summary>
 </histogram>
 
+<histogram name="Navigation.BrowserMappedUrnUuidInIframeOrFencedFrame"
+    enum="NavigationBrowserMappedUrnUuidInIframeOrFencedFrame"
+    expires_after="2023-03-01">
+  <owner>xiaochenzh@chromium.org</owner>
+  <owner>shivanisha@chromium.org</owner>
+  <summary>
+    For navigation requests with FLEDGE or SharedStorage generated urn:uuid,
+    record whether it is rendered in a fenced frame or iframe. Recorded when
+    navigation requests begin (i.e. during
+    NavigationRequest::BeginNavigation()).
+  </summary>
+</histogram>
+
 <histogram name="Navigation.ClearSiteData.Duration" units="ms"
     expires_after="M77">
   <owner>msramek@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/net/histograms.xml b/tools/metrics/histograms/metadata/net/histograms.xml
index 0d324fb2..b5bf1c5 100644
--- a/tools/metrics/histograms/metadata/net/histograms.xml
+++ b/tools/metrics/histograms/metadata/net/histograms.xml
@@ -4407,6 +4407,18 @@
   </summary>
 </histogram>
 
+<histogram name="Net.SpdySession.AlpsDecoderStatus.Bypassed"
+    enum="AlpsDecoderError" expires_after="2023-09-11">
+  <owner>arichiv@chromium.org</owner>
+  <owner>src/net/OWNERS</owner>
+  <summary>
+    Net.SpdySession.AlpsDecoderStatus records errors returned by the AlpsDecoder
+    class in HTTP/2 responses. Errors logged to that histogram cause a session
+    termination, which isn't always desired. This histogram records errors that
+    we want to note, but that shouldn't stop the connection.
+  </summary>
+</histogram>
+
 <histogram name="Net.SpdySession.AlpsSettingParameterCount" units="parameters"
     expires_after="2023-05-11">
   <owner>bnc@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/power/histograms.xml b/tools/metrics/histograms/metadata/power/histograms.xml
index 9364ad12..778b9466 100644
--- a/tools/metrics/histograms/metadata/power/histograms.xml
+++ b/tools/metrics/histograms/metadata/power/histograms.xml
@@ -646,7 +646,7 @@
 </histogram>
 
 <histogram name="Power.AvgCpuLoad.{ProcessType}" units="%"
-    expires_after="2022-10-04">
+    expires_after="2023-07-31">
   <owner>eseckler@chromium.org</owner>
   <owner>khokhlov@chromium.org</owner>
   <owner>woa-performance@google.com</owner>
@@ -941,7 +941,7 @@
 </histogram>
 
 <histogram name="Power.CpuTimeSecondsPerPowerMode.{ProcessType}"
-    enum="PowerMode" expires_after="2022-12-31">
+    enum="PowerMode" expires_after="2023-03-31">
   <owner>eseckler@chromium.org</owner>
   <owner>oksamyt@chromium.org</owner>
   <owner>woa-performance@google.com</owner>
@@ -966,7 +966,7 @@
 </histogram>
 
 <histogram name="Power.CpuTimeSecondsPerProcessType" enum="ProcessType2"
-    expires_after="2023-01-29">
+    expires_after="2023-07-31">
   <owner>eseckler@chromium.org</owner>
   <owner>skyostil@chromium.org</owner>
   <owner>woa-performance@google.com</owner>
@@ -984,7 +984,7 @@
 </histogram>
 
 <histogram name="Power.CpuTimeSecondsPerProcessType.{Visibility}"
-    enum="ProcessType2" expires_after="2023-06-07">
+    enum="ProcessType2" expires_after="2023-07-31">
   <owner>eseckler@chromium.org</owner>
   <owner>skyostil@chromium.org</owner>
   <owner>woa-performance@google.com</owner>
@@ -1008,7 +1008,7 @@
 </histogram>
 
 <histogram name="Power.CpuTimeSecondsPerThreadType.{ProcessType}"
-    enum="CpuTimeMetricsThreadType" expires_after="2022-10-04">
+    enum="CpuTimeMetricsThreadType" expires_after="2023-07-31">
   <owner>eseckler@chromium.org</owner>
   <owner>skyostil@chromium.org</owner>
   <owner>woa-performance@google.com</owner>
@@ -1491,7 +1491,7 @@
 </histogram>
 
 <histogram name="Power.IdleCpuLoad.{ProcessType}" units="%"
-    expires_after="2022-10-04">
+    expires_after="2023-07-31">
   <owner>eseckler@chromium.org</owner>
   <owner>khokhlov@chromium.org</owner>
   <owner>woa-performance@google.com</owner>
@@ -1849,7 +1849,7 @@
 </histogram>
 
 <histogram name="Power.PowerScheduler.ProcessPowerModeChange.{ProcessType}"
-    enum="PowerMode" expires_after="2022-10-04">
+    enum="PowerMode" expires_after="2023-03-31">
   <owner>eseckler@chromium.org</owner>
   <owner>skyostil@chromium.org</owner>
   <owner>woa-performance@google.com</owner>
diff --git a/tools/metrics/histograms/metadata/service/histograms.xml b/tools/metrics/histograms/metadata/service/histograms.xml
index af1f0127..215216f 100644
--- a/tools/metrics/histograms/metadata/service/histograms.xml
+++ b/tools/metrics/histograms/metadata/service/histograms.xml
@@ -517,6 +517,8 @@
 
     The records are breakdown by FetchEventResult.
   </summary>
+  <token key="ServiceWorkerFetchEventResult"
+      variants="ServiceWorkerFetchEventResult"/>
 </histogram>
 
 <histogram
diff --git a/tools/metrics/histograms/metadata/session/histograms.xml b/tools/metrics/histograms/metadata/session/histograms.xml
index 0ff440a..9daf2639 100644
--- a/tools/metrics/histograms/metadata/session/histograms.xml
+++ b/tools/metrics/histograms/metadata/session/histograms.xml
@@ -216,6 +216,10 @@
   <owner>chrome-signin-team@google.com</owner>
   <owner>chrome-analysis-team@google.com</owner>
   <summary>
+    This histogram is in the process of being replaced with the equivalent
+    histogram Session.TotalDurationMax1Day.NotOptedInToSyncWithAccount; the only
+    difference is the histogram bucket ranges.
+
     The amount of active browsing time that was spent with sync disabled while
     having a valid refresh token for the primary account. This corresponds to
     the case when the user did not opt in to sync, or sync is disabled due to
@@ -259,6 +263,10 @@
   <owner>chrome-signin-team@google.com</owner>
   <owner>chrome-analysis-team@google.com</owner>
   <summary>
+    This histogram is in the process of being replaced with the equivalent
+    histogram Session.TotalDurationMax1Day.NotOptedInToSyncWithoutAccount; the
+    only difference is the histogram bucket ranges.
+
     The amount of active browsing time that was spent with sync disabled and
     signed out of Chrome (no primary account or invalid token for the primary
     account).
@@ -310,6 +318,10 @@
   <owner>chrome-signin-team@google.com</owner>
   <owner>chrome-analysis-team@google.com</owner>
   <summary>
+    This histogram is in the process of being replaced with the equivalent
+    histogram Session.TotalDurationMax1Day.OptedInToSyncWithAccount; the only
+    difference is the histogram bucket ranges.
+
     The total session duration (see Session.TotalDuration) that was spent with
     sync enabled and signed in to Chrome (valid token for the primary account).
 
@@ -349,6 +361,10 @@
   <owner>chrome-signin-team@google.com</owner>
   <owner>chrome-analysis-team@google.com</owner>
   <summary>
+    This histogram is in the process of being replaced with the equivalent
+    histogram Session.TotalDurationMax1Day.OptedInToSyncWithoutAccount; the only
+    difference is the histogram bucket ranges.
+
     The total session duration (see Session.TotalDuration) that was being spent
     with sync inactive due to an invalid refresh token for the primary account
     (a.k.a. sync in an auth error state). Note that in this state, the user has
@@ -416,6 +432,10 @@
   <owner>tschumann@chromium.org</owner>
   <owner>chrome-signin-team@google.com</owner>
   <summary>
+    This histogram is in the process of being replaced with the equivalent
+    histogram Session.TotalDurationMax1Day.WithAccount; the only difference is
+    the histogram bucket ranges.
+
     The total session duration (see Session.TotalDuration) that was spent with a
     Google account signed into the content area.
 
@@ -457,6 +477,10 @@
   <owner>tschumann@chromium.org</owner>
   <owner>chrome-signin-team@google.com</owner>
   <summary>
+    This histogram is in the process of being replaced with the equivalent
+    histogram Session.TotalDurationMax1Day.WithoutAccount; the only difference
+    is the histogram bucket ranges.
+
     The total session duration (see Session.TotalDuration) that was spent
     without a Google account signed into the content area.
 
@@ -509,6 +533,278 @@
   </summary>
 </histogram>
 
+<histogram name="Session.TotalDurationMax1Day.NotOptedInToSyncWithAccount"
+    units="ms" expires_after="never">
+<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
+
+  <owner>bsazonov@chromium.org</owner>
+  <owner>droger@chromium.org</owner>
+  <owner>msarda@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
+  <owner>tschumann@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <owner>chrome-analysis-team@google.com</owner>
+  <summary>
+    The amount of active browsing time that was spent with sync disabled while
+    having a valid refresh token for the primary account. This corresponds to
+    the case when the user did not opt in to sync, or sync is disabled due to
+    another reason, e.g. enterprise policy. Note that auth errors are not
+    counted here, but rather in
+    Session.TotalDurationMax1Day.OptedInToSyncWithoutAccount.
+
+    This time is measured from when the user starts interacting with the browser
+    until either they stopped interacting with the browser or their signin or
+    sync status changes. These end-points are when the metric is emitted. For
+    details on how &quot;stopped interacting with the browser&quot; is decided,
+    see the description of Session.TotalDuration.
+
+    Because a duration can end either because the user became inactive or
+    because their status changed, the distribution of individual durations
+    measured are unlikely to be helpful. Instead, please compare total
+    durations.
+
+    This metric is recorded on Win/Mac/Linux/iOS/Android.
+
+    One caveat with this metric is that if the user has multiple profiles open
+    at the same time, their session activity will be logged from all the
+    profiles, instead of only from the profile that the user is using at that
+    moment.
+
+    This histogram is of special interest to the chrome-analysis-team@ and
+    chrome-signin-team@. Do not change its semantics or retire it without
+    talking to them first.
+  </summary>
+</histogram>
+
+<histogram name="Session.TotalDurationMax1Day.NotOptedInToSyncWithoutAccount"
+    units="ms" expires_after="never">
+<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
+
+  <owner>bsazonov@chromium.org</owner>
+  <owner>droger@chromium.org</owner>
+  <owner>msarda@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
+  <owner>tschumann@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <owner>chrome-analysis-team@google.com</owner>
+  <summary>
+    The amount of active browsing time that was spent with sync disabled and
+    signed out of Chrome (no primary account or invalid token for the primary
+    account).
+
+    This time is measured from when the user starts interacting with the browser
+    until either they stopped interacting with the browser or their signin or
+    sync status changes. These end-points are when the metric is emitted. For
+    details on how &quot;stopped interacting with the browser&quot; is decided,
+    see the description of Session.TotalDuration.
+
+    Because a duration can end either because the user became inactive or
+    because their status changed, the distribution of individual durations
+    measured are unlikely to be helpful. Instead, please compare total
+    durations.
+
+    This metric is recorded on Win/Mac/Linux/iOS/Android.
+
+    One caveat with this metric is that if the user has multiple profiles open
+    at the same time, their session activity will be logged from all the
+    profiles, instead of only from the profile that the user is using at that
+    moment.
+
+    Note: As part of crbug/1223007, we discovered this histogram was recorded
+    for Guest and System profiles which wasn't intentional. This was fixed in
+    M93.
+
+    After launching background logging in the late February 2021 on Android,
+    this metric started recording for instances that were running in the
+    background, even if Chrome had never come to foreground. The bug was fixed
+    in M92, and after that the metric is recorded only after an instance becomes
+    foregrounded at least once. Hence a glitch is visible in the Feb-Aug 2021
+    data for Android.
+
+    This histogram is of special interest to the chrome-analysis-team@ and
+    chrome-signin-team@. Do not change its semantics or retire it without
+    talking to them first.
+  </summary>
+</histogram>
+
+<histogram name="Session.TotalDurationMax1Day.OptedInToSyncWithAccount"
+    units="ms" expires_after="never">
+<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
+
+  <owner>bsazonov@chromium.org</owner>
+  <owner>droger@chromium.org</owner>
+  <owner>msarda@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
+  <owner>tschumann@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <owner>chrome-analysis-team@google.com</owner>
+  <summary>
+    The total session duration (see Session.TotalDuration) that was spent with
+    sync enabled and signed in to Chrome (valid token for the primary account).
+
+    This time is measured from when the user starts interacting with the browser
+    until either they stopped interacting with the browser or their signin or
+    sync status changes. These end-points are when the metric is emitted. For
+    details on how &quot;stopped interacting with the browser&quot; is decided,
+    see the description of Session.TotalDuration.
+
+    Because a duration can end either because the user became inactive or
+    because their status changed, the distribution of individual durations
+    measured are unlikely to be helpful. Instead, please compare total
+    durations.
+
+    This metric is recorded on Win/Mac/Linux/iOS/Android.
+
+    One caveat with this metric is that if the user has multiple profiles open
+    at the same time, their session activity will be logged from all the
+    profiles, instead of only from the profile that the user is using at that
+    moment.
+
+    This histogram is of special interest to the chrome-analysis-team@ and
+    chrome-signin-team@. Do not change its semantics or retire it without
+    talking to them first.
+  </summary>
+</histogram>
+
+<histogram name="Session.TotalDurationMax1Day.OptedInToSyncWithoutAccount"
+    units="ms" expires_after="never">
+<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
+
+  <owner>bsazonov@chromium.org</owner>
+  <owner>droger@chromium.org</owner>
+  <owner>msarda@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
+  <owner>tschumann@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <owner>chrome-analysis-team@google.com</owner>
+  <summary>
+    The total session duration (see Session.TotalDuration) that was being spent
+    with sync inactive due to an invalid refresh token for the primary account
+    (a.k.a. sync in an auth error state). Note that in this state, the user has
+    already opted in to sync previously. This corresponds to the so-called
+    &quot;Sync paused&quot; state.
+
+    This can for example be the case when a user, that previously opted in to
+    sync, signed out of the web on desktop, changed their password, or otherwise
+    invalidated their signin.
+
+    This time is measured from when the user starts interacting with the browser
+    until either they stopped interacting with the browser or their signin or
+    sync status changes. These end-points are when the metric is emitted. For
+    details on how &quot;stopped interacting with the browser&quot; is decided,
+    see the description of Session.TotalDuration.
+
+    Because a duration can end either because the user became inactive or
+    because their status changed, the distribution of individual durations
+    measured are unlikely to be helpful. Instead, please compare total
+    durations.
+
+    This metric is recorded on Win/Mac/Linux/iOS/Android.
+
+    One caveat with this metric is that if the user has multiple profiles open
+    at the same time, their session activity will be logged from all the
+    profiles, instead of only from the profile that the user is using at that
+    moment.
+
+    After launching background logging in the late February 2021 on Android,
+    this metric started recording for instances that were running in the
+    background, even if Chrome had never come to foreground. The bug was fixed
+    in M92, and after that the metric is recorded only after an instance becomes
+    foregrounded at least once. Hence a glitch is visible in the Feb-Aug 2021
+    data for Android.
+
+    This histogram is of special interest to the chrome-analysis-team@ and
+    chrome-signin-team@. Do not change its semantics or retire it without
+    talking to them first.
+  </summary>
+</histogram>
+
+<histogram name="Session.TotalDurationMax1Day.WithAccount" units="ms"
+    expires_after="never">
+<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
+
+  <owner>bsazonov@chromium.org</owner>
+  <owner>droger@chromium.org</owner>
+  <owner>msarda@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
+  <owner>tschumann@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <summary>
+    The total session duration (see Session.TotalDuration) that was spent with a
+    Google account signed into the content area.
+
+    The difference between the With(out)Account measurements and the
+    Opted(In/Out)ToSyncWith(out)Account measurements is that these metrics are
+    derived from the user's cookies, not their refresh tokens.
+
+    This time is measured from when the user starts interacting with the browser
+    until either they stopped interacting with the browser or their signin
+    status changes. These end-points are when the metric is emitted. For details
+    on how &quot;stopped interacting with the browser&quot; is decided, see the
+    description of Session.TotalDuration.
+
+    Because a duration can end either because the user became inactive or
+    because their status changed, the distribution of individual durations
+    measured are unlikely to be helpful. Instead, please compare total
+    durations.
+
+    This metric is recorded on Win/Mac/Linux/iOS/Android.
+
+    One caveat with this metric is that if the user has multiple profiles open
+    at the same time, their session activity will be logged from all the
+    profiles, instead of only from the profile that the user is using at that
+    moment.
+
+    This histogram is of special interest to the chrome-signin-team@. Do not
+    change its semantics or retire it without talking to them first.
+  </summary>
+</histogram>
+
+<histogram name="Session.TotalDurationMax1Day.WithoutAccount" units="ms"
+    expires_after="never">
+<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->
+
+  <owner>bsazonov@chromium.org</owner>
+  <owner>droger@chromium.org</owner>
+  <owner>msarda@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
+  <owner>tschumann@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <summary>
+    The total session duration (see Session.TotalDuration) that was spent
+    without a Google account signed into the content area.
+
+    The difference between the With(out)Account measurements and the
+    Opted(In/Out)ToSyncWith(out)Account measurements is that these metrics are
+    derived from the user's cookies, not their refresh tokens.
+
+    This time is measured from when the user starts interacting with the browser
+    until either they stopped interacting with the browser or their signin
+    status changes. These end-points are when the metric is emitted. For details
+    on how &quot;stopped interacting with the browser&quot; is decided, see the
+    description of Session.TotalDuration.
+
+    Because a duration can end either because the user became inactive or
+    because their status changed, the distribution of individual durations
+    measured are unlikely to be helpful. Instead, please compare total
+    durations.
+
+    This metric is recorded on Win/Mac/Linux/iOS/Android.
+
+    One caveat with this metric is that if the user has multiple profiles open
+    at the same time, their session activity will be logged from all the
+    profiles, instead of only from the profile that the user is using at that
+    moment.
+
+    Note: As part of crbug/1223007, we discovered this histogram was recorded
+    for Guest and System profiles which wasn't intentional. This was fixed in
+    M93.
+
+    This histogram is of special interest to the chrome-signin-team@. Do not
+    change its semantics or retire it without talking to them first.
+  </summary>
+</histogram>
+
 <histogram name="Session.WebState.CustomWebViewSerializedSize" units="KB"
     expires_after="2022-11-20">
   <owner>justincohen@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/signin/histograms.xml b/tools/metrics/histograms/metadata/signin/histograms.xml
index 7a8979ce2..bc82d75 100644
--- a/tools/metrics/histograms/metadata/signin/histograms.xml
+++ b/tools/metrics/histograms/metadata/signin/histograms.xml
@@ -1107,6 +1107,16 @@
   </summary>
 </histogram>
 
+<histogram name="Signin.SyncConsentScreen.DataRowClicked"
+    enum="SigninSyncConsentDataRow" expires_after="2023-08-18">
+  <owner>triploblastic@chromium.org</owner>
+  <owner>chrome-signin-team@google.com</owner>
+  <summary>
+    This histogram records which sync data row was clicked by the user on the
+    tangible sync consent page on Android.
+  </summary>
+</histogram>
+
 <histogram name="Signin.SyncError{PromptUI}{SyncErrorReason}"
     enum="SyncErrorPromptUIAction" expires_after="2022-09-12">
   <owner>triploblastic@chromium.org</owner>
diff --git a/tools/metrics/histograms/metadata/windows/histograms.xml b/tools/metrics/histograms/metadata/windows/histograms.xml
index 6a2afa5..94b870d 100644
--- a/tools/metrics/histograms/metadata/windows/histograms.xml
+++ b/tools/metrics/histograms/metadata/windows/histograms.xml
@@ -177,6 +177,18 @@
   </summary>
 </histogram>
 
+<histogram name="Windows.Launch.TaskbarInstallerPinned" enum="Boolean"
+    expires_after="2023-08-23">
+  <owner>davidbienvenu@chromium.org</owner>
+  <owner>jessemckenna@google.com</owner>
+  <summary>
+    Whether or not the taskbar shortcut Chrome was launched from was pinned by
+    the installer. Recorded when Chrome is launched from the taskbar, and the
+    install was done after the installer started pinning Chrome to the taskbar
+    for Windows 10+.
+  </summary>
+</histogram>
+
 <histogram name="Windows.MakeChromeDefaultDirectly.Result"
     enum="DefaultDirectAttemptResult" expires_after="M109">
   <owner>robliao@chromium.org</owner>
diff --git a/tools/perf/benchmarks/benchmark_smoke_unittest.py b/tools/perf/benchmarks/benchmark_smoke_unittest.py
index fbb148d..e6a6e89 100644
--- a/tools/perf/benchmarks/benchmark_smoke_unittest.py
+++ b/tools/perf/benchmarks/benchmark_smoke_unittest.py
@@ -99,7 +99,7 @@
 
 
 # The list of benchmark modules to be excluded from our smoke tests.
-_BLACK_LIST_TEST_MODULES = {
+_BLOCK_LIST_TEST_MODULES = {
     octane,  # Often fails & take long time to timeout on cq bot.
     rasterize_and_record_micro,  # Always fails on cq bot.
     speedometer,  # Takes 101 seconds.
@@ -110,7 +110,7 @@
 }
 
 # The list of benchmark names to be excluded from our smoke tests.
-_BLACK_LIST_TEST_NAMES = [
+_BLOCK_LIST_TEST_NAMES = [
     'memory.long_running_idle_gmail_background_tbmv2',
     'tab_switching.typical_25',
     'tracing.tracing_with_background_memory_infra',  # crbug.com/1301865
@@ -147,9 +147,9 @@
       benchmarks_dir, top_level_dir, benchmark_module.Benchmark,
       index_by_class_name=False).values()
   for benchmark in all_benchmarks:
-    if sys.modules[benchmark.__module__] in _BLACK_LIST_TEST_MODULES:
+    if sys.modules[benchmark.__module__] in _BLOCK_LIST_TEST_MODULES:
       continue
-    if benchmark.Name() in _BLACK_LIST_TEST_NAMES:
+    if benchmark.Name() in _BLOCK_LIST_TEST_NAMES:
       continue
 
     # tab_switching needs more than one page to test correctly.
diff --git a/tools/perf/core/perfetto_binary_roller/binary_deps.json b/tools/perf/core/perfetto_binary_roller/binary_deps.json
index de553be..5983be1 100644
--- a/tools/perf/core/perfetto_binary_roller/binary_deps.json
+++ b/tools/perf/core/perfetto_binary_roller/binary_deps.json
@@ -5,24 +5,24 @@
             "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux_arm64/49b4b5dcbc312d8d2c3751cf29238b8efeb4e494/trace_processor_shell"
         },
         "win": {
-            "hash": "87327c1da573e3146b882b577bc9116995d32644",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/ee7e55c548972cb286c595a89e308768cff1f379/trace_processor_shell.exe"
+            "hash": "d01e393574b4932ca7fdf4b4aea0c59ed2ed76c0",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/win/61a33b333e779199f05ba622a90da293654351c1/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": "580b5cb2a39277bd4eba98f8d199a2940510ed92",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/ee7e55c548972cb286c595a89e308768cff1f379/trace_processor_shell"
+            "hash": "70c67bc92a5d8b81431b10ed8e485fc4063e3935",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/mac/bbf010a14fb0fc4f6f422449fe531672944e0055/trace_processor_shell"
         },
         "mac_arm64": {
             "hash": "e1ad4861384b06d911a65f035317914b8cc975c6",
             "full_remote_path": "perfetto-luci-artifacts/v25.0/mac-arm64/trace_processor_shell"
         },
         "linux": {
-            "hash": "f691d2e3d4bad34388f5ad4cca91a40ea4152f4f",
-            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/ee7e55c548972cb286c595a89e308768cff1f379/trace_processor_shell"
+            "hash": "3b64eb0819b6715ff25d33900626659ff3158f2e",
+            "full_remote_path": "chromium-telemetry/perfetto_binaries/trace_processor_shell/linux/61a33b333e779199f05ba622a90da293654351c1/trace_processor_shell"
         }
     },
     "power_profile.sql": {
diff --git a/ui/accessibility/accessibility_features.cc b/ui/accessibility/accessibility_features.cc
index f1e009d..18cbe1c 100644
--- a/ui/accessibility/accessibility_features.cc
+++ b/ui/accessibility/accessibility_features.cc
@@ -233,6 +233,13 @@
   return base::FeatureList::IsEnabled(::features::kScreenAIDebugMode);
 }
 
+const base::Feature kScreenAIUseLayoutExtraction{
+    "ScreenAIUseLayoutExtraction", base::FEATURE_DISABLED_BY_DEFAULT};
+
+bool IsScreenAIUseLayoutExtractionEnabled() {
+  return base::FeatureList::IsEnabled(::features::kScreenAIUseLayoutExtraction);
+}
+
 const base::Feature kPdfOcr{"PdfOcr", base::FEATURE_DISABLED_BY_DEFAULT};
 
 bool IsPdfOcrEnabled() {
diff --git a/ui/accessibility/accessibility_features.h b/ui/accessibility/accessibility_features.h
index 1ae4497..1c6f3d5 100644
--- a/ui/accessibility/accessibility_features.h
+++ b/ui/accessibility/accessibility_features.h
@@ -200,6 +200,14 @@
 // If enabled, ScreenAI library writes some debug data in /tmp.
 AX_BASE_EXPORT bool IsScreenAIDebugModeEnabled();
 
+// If enabled, ScreenAI library uses Layout Extraction output, and if disabled,
+// uses OCR output.
+// TODO(https://crbug.com/1278249): Remove this flag after the two outputs are
+// merged in the library.
+AX_BASE_EXPORT extern const base::Feature kScreenAIUseLayoutExtraction;
+
+AX_BASE_EXPORT bool IsScreenAIUseLayoutExtractionEnabled();
+
 // Enables a feature whereby inaccessible (i.e. untagged) PDFs are made
 // accessible using an optical character recognition service. Due to the size of
 // the OCR component, this feature targets desktop versions of Chrome for now.
diff --git a/ui/accessibility/ax_node_position_fuzzer.cc b/ui/accessibility/ax_node_position_fuzzer.cc
index 6c58f82..38ed017 100644
--- a/ui/accessibility/ax_node_position_fuzzer.cc
+++ b/ui/accessibility/ax_node_position_fuzzer.cc
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/at_exit.h"
+#include "base/i18n/icu_util.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_node.h"
 #include "ui/accessibility/ax_node_data.h"
@@ -30,7 +32,7 @@
     kMinNodeCount * AXTreeFuzzerGenerator::kMinTextFuzzDataSize +
     2 * kNextNodePositionMaxDataSize;
 // Cap fuzz data to avoid slowness.
-const size_t kMaxFuzzDataSize = 20000;
+const size_t kMaxFuzzDataSize = 3500;
 
 using TestPositionType =
     std::unique_ptr<ui::AXPosition<ui::AXNodePosition, ui::AXNode>>;
@@ -367,10 +369,17 @@
   std::ignore = position->GetRole();
 }
 
+struct Environment {
+  Environment() { CHECK(base::i18n::InitializeICU()); }
+  base::AtExitManager at_exit_manager;
+};
+
 // Entry point for LibFuzzer.
 extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, size_t size) {
+  size = kMaxFuzzDataSize;
   if (size < kMinFuzzDataSize || size > kMaxFuzzDataSize)
     return 0;
+  static Environment env;
   AXTreeFuzzerGenerator generator;
   FuzzerData fuzz_data(data, size);
   const size_t node_count =
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_fuzzer.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_fuzzer.cc
index 0ebe974..0d3bb59 100644
--- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_fuzzer.cc
+++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_fuzzer.cc
@@ -59,7 +59,7 @@
     2 * kBytesNeededToGenerateTextRange + 2 * kBytesNeededToMutateTextRange;
 
 // Cap fuzz data to avoid slowness.
-constexpr size_t kMaxFuzzDataSize = 20000;
+constexpr size_t kMaxFuzzDataSize = 3500;
 
 ui::AXPlatformNode* AXPlatformNodeFromNode(ui::AXTree* tree, ui::AXNode* node) {
   const ui::TestAXNodeWrapper* wrapper =
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
index a4d5eef..dafdfc9e 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
@@ -312,6 +312,7 @@
 <translation id="3689865792480713551"><ph name="ACTIVITY_DESCRIPTION" /> বাতিল করুন।</translation>
 <translation id="3690128548376345212"><ph name="NETWORK_COUNT" />টির মধ্যে <ph name="NETWORK_INDEX" /> নম্বর নেটওয়ার্ক, <ph name="NETWORK_NAME" />, চালু করা হয়নি, <ph name="CONNECTION_STATUS" />, সিগন্যাল ক্ষমতা <ph name="SIGNAL_STRENGTH" />%, বিবরণ</translation>
 <translation id="3691184985318546178">সিংহলি</translation>
+<translation id="3722341589402358578">কোনও সমস্যা হয়েছে। কিছু আইটেম ট্র্যাশে নাও থাকতে পারে।</translation>
 <translation id="3726463242007121105">এই ডিভাইসটি ফাইল সিস্টেমটি সমর্থিত না হওয়ার কারণে খুলতে পারা যায়না৷</translation>
 <translation id="3727148787322499904">এই সেটিং পরিবর্তন করা হলে শেয়ার করা সব নেটওয়ার্ক প্রভাবিত হবে</translation>
 <translation id="3737576078404241332">সাইডবার থেকে সরিয়ে দিন</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
index 452b1a5..12103503 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -374,6 +374,7 @@
 <translation id="4336032328163998280">Fehler beim Kopieren. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="4340491671558548972">Zur Seitenleiste hinzufügen</translation>
 <translation id="4348495354623233847">Sorani-Tastatur nach arabischem Layout</translation>
+<translation id="434941167647142660">Ursprünglicher Speicherort</translation>
 <translation id="4363958938297989186">Russisch mit phonetischer Tastatur</translation>
 <translation id="4364327530094270451">Melone</translation>
 <translation id="4378551569595875038">Verbindung...</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
index 25281190..dac00fe 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -312,6 +312,7 @@
 <translation id="3689865792480713551">Cancel <ph name="ACTIVITY_DESCRIPTION" />.</translation>
 <translation id="3690128548376345212">Network <ph name="NETWORK_INDEX" /> of <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, unactivated, <ph name="CONNECTION_STATUS" />, signal strength <ph name="SIGNAL_STRENGTH" />%, details</translation>
 <translation id="3691184985318546178">Sinhala</translation>
+<translation id="3722341589402358578">An error occurred. Some items may not have been deleted.</translation>
 <translation id="3726463242007121105">This device cannot be opened because its file system is not supported.</translation>
 <translation id="3727148787322499904">Changing this setting will affect all shared networks</translation>
 <translation id="3737576078404241332">Remove from sidebar</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
index 90f5217..df11dec 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -308,6 +308,7 @@
 <translation id="3689865792480713551"><ph name="ACTIVITY_DESCRIPTION" /> ಅನ್ನು ರದ್ದುಮಾಡಿ.</translation>
 <translation id="3690128548376345212">ನೆಟ್‌ವರ್ಕ್ <ph name="NETWORK_COUNT" /> ರಲ್ಲಿ <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿಲ್ಲ, <ph name="CONNECTION_STATUS" />, ಸಿಗ್ನಲ್ ಸಾಮರ್ಥ್ಯ <ph name="SIGNAL_STRENGTH" />%, ವಿವರಗಳು</translation>
 <translation id="3691184985318546178">ಸಿಂಹಳ</translation>
+<translation id="3722341589402358578">ದೋಷ ಎದುರಾಗಿದೆ. ಕೆಲವು ಐಟಂಗಳನ್ನು ಅನುಪಯುಕ್ತಕ್ಕೆ ಸರಿಸದೇ ಇರಬಹುದು.</translation>
 <translation id="3726463242007121105">ಇದರ ಫೈಲ್‌ಸಿಸ್ಟಂ ಅನ್ನು ಬೆಂಬಲಿಸದ ಕಾರಣ ಈ ಸಾಧನವನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="3727148787322499904">ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸುವುದರಿಂದ ಎಲ್ಲಾ ಹಂಚಿತ ನೆಟ್‌ವರ್ಕ್‌ಗಳಿಗೆ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ</translation>
 <translation id="3737576078404241332">ಸೈಡ್‌ಬಾರ್‌ನಿಂದ ತೆಗೆದುಹಾಕಿ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
index ffe779aa..0ac2489 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
@@ -312,6 +312,7 @@
 <translation id="3689865792480713551">Откажете <ph name="ACTIVITY_DESCRIPTION" />.</translation>
 <translation id="3690128548376345212">Мрежа <ph name="NETWORK_INDEX" /> од <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, Деактивирана, <ph name="CONNECTION_STATUS" />, Јачина на сигналот <ph name="SIGNAL_STRENGTH" /> %, Детали</translation>
 <translation id="3691184985318546178">синхалски</translation>
+<translation id="3722341589402358578">Се појави грешка. Некои ставки можеби се во корпата.</translation>
 <translation id="3726463242007121105">Уредот не може да се отвори затоа што не го поддржува системот со датотеки.</translation>
 <translation id="3727148787322499904">Менувањето на оваа поставка ќе влијае на сите споделени мрежи</translation>
 <translation id="3737576078404241332">Отстрани од странична лента</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
index 78b7158..961e2c8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -312,6 +312,7 @@
 <translation id="3689865792480713551"><ph name="ACTIVITY_DESCRIPTION" /> रद्द करा.</translation>
 <translation id="3690128548376345212"><ph name="NETWORK_NAME" /> चे <ph name="NETWORK_INDEX" /> पैकी <ph name="NETWORK_COUNT" /> नेटवर्क, ॲक्टिव्हेट केलेले नाही, <ph name="CONNECTION_STATUS" /> सिग्नलची क्षमता <ph name="SIGNAL_STRENGTH" />%, तपशील</translation>
 <translation id="3691184985318546178">सिंहली</translation>
+<translation id="3722341589402358578">एरर आली. काही आयटम कदाचित ट्रॅश केले नसतील.</translation>
 <translation id="3726463242007121105">हे डिव्हाइस उघडले जाऊ शकत नाही, कारण त्याच्या फाइलसिस्टीमला सपोर्ट नाही.</translation>
 <translation id="3727148787322499904">हे सेटिंग बदलल्याने सर्व शेअर केलेले नेटवर्क प्रभावित होतील</translation>
 <translation id="3737576078404241332">साइडबारमधून काढून टाका</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
index 4537faa..12894900 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
@@ -312,6 +312,7 @@
 <translation id="3689865792480713551">Cancele <ph name="ACTIVITY_DESCRIPTION" />.</translation>
 <translation id="3690128548376345212">Rede <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, Desativada, <ph name="CONNECTION_STATUS" />, Intensidade do sinal: <ph name="SIGNAL_STRENGTH" />%, Detalhes</translation>
 <translation id="3691184985318546178">Cingalês</translation>
+<translation id="3722341589402358578">Ocorreu um erro. Alguns itens podem não ter sido movidos para o lixo.</translation>
 <translation id="3726463242007121105">Não é possível abrir este aparelho porque o sistema de ficheiros não é suportado.</translation>
 <translation id="3727148787322499904">Alterar esta definição afetará todas as redes partilhadas</translation>
 <translation id="3737576078404241332">Remover da barra lateral</translation>
diff --git a/ui/compositor/BUILD.gn b/ui/compositor/BUILD.gn
index 71cf8ff..2c4453a 100644
--- a/ui/compositor/BUILD.gn
+++ b/ui/compositor/BUILD.gn
@@ -98,6 +98,7 @@
     "//cc/paint",
     "//components/viz/host",
     "//gpu/command_buffer/common",
+    "//services/viz/privileged/mojom/compositing",
     "//skia",
     "//ui/base",
     "//ui/display",
diff --git a/ui/compositor/DEPS b/ui/compositor/DEPS
index c426f5e8..ab83408 100644
--- a/ui/compositor/DEPS
+++ b/ui/compositor/DEPS
@@ -19,6 +19,9 @@
   "compositor.cc": [
     "+mojo/public/cpp/bindings",
   ],
+  "compositor.h": [
+    "+mojo/public/cpp/bindings",
+  ],
   "run_all_unittests\.cc": [
     "+mojo/core/embedder",
   ],
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index 9bb69f7..b3ffdf3 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -334,9 +334,9 @@
 
 void Compositor::SetLayerTreeFrameSink(
     std::unique_ptr<cc::LayerTreeFrameSink> layer_tree_frame_sink,
-    viz::mojom::DisplayPrivate* display_private) {
+    mojo::AssociatedRemote<viz::mojom::DisplayPrivate> display_private) {
   layer_tree_frame_sink_requested_ = false;
-  display_private_ = display_private;
+  display_private_ = std::move(display_private);
   host_->SetLayerTreeFrameSink(std::move(layer_tree_frame_sink));
   // Display properties are reset when the output surface is lost, so update it
   // to match the Compositor's.
@@ -355,9 +355,10 @@
 }
 
 void Compositor::SetExternalBeginFrameController(
-    viz::mojom::ExternalBeginFrameController* external_begin_frame_controller) {
+    mojo::AssociatedRemote<viz::mojom::ExternalBeginFrameController>
+        external_begin_frame_controller) {
   DCHECK(use_external_begin_frame_control());
-  external_begin_frame_controller_ = external_begin_frame_controller;
+  external_begin_frame_controller_ = std::move(external_begin_frame_controller);
   if (pending_begin_frame_args_) {
     external_begin_frame_controller_->IssueExternalBeginFrame(
         pending_begin_frame_args_->args, pending_begin_frame_args_->force,
@@ -580,8 +581,8 @@
 gfx::AcceleratedWidget Compositor::ReleaseAcceleratedWidget() {
   DCHECK(!IsVisible());
   host_->ReleaseLayerTreeFrameSink();
-  display_private_ = nullptr;
-  external_begin_frame_controller_ = nullptr;
+  display_private_.reset();
+  external_begin_frame_controller_.reset();
   context_factory_->RemoveCompositor(this);
   context_creation_weak_ptr_factory_.InvalidateWeakPtrs();
   widget_valid_ = false;
@@ -686,8 +687,7 @@
     host_->SetNeedsAnimate();
 }
 
-void Compositor::BeginMainFrameNotExpectedSoon() {
-}
+void Compositor::BeginMainFrameNotExpectedSoon() {}
 
 void Compositor::BeginMainFrameNotExpectedUntil(base::TimeTicks time) {}
 
diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
index 5dee593..631b8921 100644
--- a/ui/compositor/compositor.h
+++ b/ui/compositor/compositor.h
@@ -32,7 +32,10 @@
 #include "components/viz/common/surfaces/frame_sink_id.h"
 #include "components/viz/common/surfaces/subtree_capture_id.h"
 #include "components/viz/host/host_frame_sink_client.h"
+#include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
+#include "services/viz/privileged/mojom/compositing/display_private.mojom.h"
+#include "services/viz/privileged/mojom/compositing/external_begin_frame_controller.mojom.h"
 #include "services/viz/privileged/mojom/compositing/vsync_parameter_observer.mojom-forward.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "third_party/skia/include/core/SkM44.h"
@@ -169,10 +172,12 @@
   void AddChildFrameSink(const viz::FrameSinkId& frame_sink_id);
   void RemoveChildFrameSink(const viz::FrameSinkId& frame_sink_id);
 
-  void SetLayerTreeFrameSink(std::unique_ptr<cc::LayerTreeFrameSink> surface,
-                             viz::mojom::DisplayPrivate* display_private);
-  void SetExternalBeginFrameController(viz::mojom::ExternalBeginFrameController*
-                                           external_begin_frame_controller);
+  void SetLayerTreeFrameSink(
+      std::unique_ptr<cc::LayerTreeFrameSink> surface,
+      mojo::AssociatedRemote<viz::mojom::DisplayPrivate> display_private);
+  void SetExternalBeginFrameController(
+      mojo::AssociatedRemote<viz::mojom::ExternalBeginFrameController>
+          external_begin_frame_controller);
 
   // Called when a child surface is about to resize.
   void OnChildResizing();
@@ -466,19 +471,15 @@
 
   raw_ptr<ui::ContextFactory> context_factory_;
 
-  // |display_private_| can be null for:
+  // |display_private_| can be unbound for:
   // 1. Tests that don't set |display_private_|.
   // 2. Intermittently on creation or if there is some kind of error (GPU crash,
   //    GL context loss, etc.) that triggers reinitializing message pipes to the
   //    GPU process RootCompositorFrameSinkImpl.
-  // Therefore, it should always be null checked for safety before use.
-  //
-  // These pointers are owned by |context_factory_|, and must be reset before
-  // calling RemoveCompositor();
-  raw_ptr<viz::mojom::DisplayPrivate, DanglingUntriaged> display_private_ =
-      nullptr;
-  raw_ptr<viz::mojom::ExternalBeginFrameController>
-      external_begin_frame_controller_ = nullptr;
+  // Therefore, it should always be checked for safety before use.
+  mojo::AssociatedRemote<viz::mojom::DisplayPrivate> display_private_;
+  mojo::AssociatedRemote<viz::mojom::ExternalBeginFrameController>
+      external_begin_frame_controller_;
 
   std::unique_ptr<PendingBeginFrameArgs> pending_begin_frame_args_;
 
diff --git a/ui/compositor/test/fake_context_factory.cc b/ui/compositor/test/fake_context_factory.cc
index 6da24f46f..10fd919 100644
--- a/ui/compositor/test/fake_context_factory.cc
+++ b/ui/compositor/test/fake_context_factory.cc
@@ -41,7 +41,9 @@
     base::WeakPtr<ui::Compositor> compositor) {
   auto frame_sink = cc::FakeLayerTreeFrameSink::Create3d();
   frame_sink_ = frame_sink.get();
-  compositor->SetLayerTreeFrameSink(std::move(frame_sink), nullptr);
+  compositor->SetLayerTreeFrameSink(
+      std::move(frame_sink),
+      mojo::AssociatedRemote<viz::mojom::DisplayPrivate>());
 }
 
 scoped_refptr<viz::ContextProvider>
diff --git a/ui/compositor/test/in_process_context_factory.cc b/ui/compositor/test/in_process_context_factory.cc
index 4531db5..9d632f4 100644
--- a/ui/compositor/test/in_process_context_factory.cc
+++ b/ui/compositor/test/in_process_context_factory.cc
@@ -134,6 +134,12 @@
     vsync_interval_ = base::TimeDelta();
   }
 
+  void Bind(
+      mojo::PendingAssociatedReceiver<viz::mojom::DisplayPrivate> remote) {
+    receiver_.reset();
+    receiver_.Bind(std::move(remote));
+  }
+
   gpu::SurfaceHandle surface_handle() { return surface_handle_; }
   viz::BeginFrameSource* begin_frame_source() {
     return begin_frame_source_.get();
@@ -156,6 +162,8 @@
   gfx::DisplayColorSpaces display_color_spaces_;
   base::TimeTicks vsync_timebase_;
   base::TimeDelta vsync_interval_;
+
+  mojo::AssociatedReceiver<viz::mojom::DisplayPrivate> receiver_{this};
 };
 
 InProcessContextFactory::InProcessContextFactory(
@@ -208,8 +216,10 @@
   }
 
   PerCompositorData* data = per_compositor_data_[compositor.get()].get();
+  mojo::AssociatedRemote<viz::mojom::DisplayPrivate> display_private;
   if (!data)
     data = CreatePerCompositorData(compositor.get());
+  data->Bind(display_private.BindNewEndpointAndPassDedicatedReceiver());
 
   auto skia_deps = std::make_unique<viz::SkiaOutputSurfaceDependencyImpl>(
       viz::TestGpuServiceHolder::GetInstance()->gpu_service(),
@@ -257,7 +267,8 @@
       compositor->frame_sink_id(), frame_sink_manager_, data->display(),
       SharedMainThreadContextProvider(), shared_worker_context_provider_,
       compositor->task_runner(), &gpu_memory_buffer_manager_);
-  compositor->SetLayerTreeFrameSink(std::move(layer_tree_frame_sink), data);
+  compositor->SetLayerTreeFrameSink(std::move(layer_tree_frame_sink),
+                                    std::move(display_private));
 
   data->Resize(compositor->size());
 }
diff --git a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.cc b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.cc
index bf7de570..18d0647 100644
--- a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.cc
+++ b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.cc
@@ -181,7 +181,7 @@
     PalmFilterStroke& stroke = stroke_it->second;
     if (end_of_stroke) {
       // This is a stroke that hasn't had a decision yet, so we force decide.
-      if (stroke.samples().size() < config.max_sample_count) {
+      if (stroke.samples_seen() < config.max_sample_count) {
         slots_to_decide.insert(slot);
       }
 
@@ -258,14 +258,8 @@
 bool NeuralStylusPalmDetectionFilter::ShouldDecideStroke(
     const PalmFilterStroke& stroke) const {
   const NeuralStylusPalmDetectionFilterModelConfig& config = model_->config();
-  // Perform inference at most every |max_sample_count| samples.
-  if (stroke.samples_seen() % config.max_sample_count != 0)
-    return false;
-
-  // Only inference at start.
-  if (stroke.samples_seen() > config.max_sample_count)
-    return false;
-  return true;
+  // Inference only executed once per stroke
+  return stroke.samples_seen() == config.max_sample_count;
 }
 
 bool NeuralStylusPalmDetectionFilter::IsHeuristicPalmStroke(
diff --git a/ui/views/bubble/bubble_frame_view.cc b/ui/views/bubble/bubble_frame_view.cc
index 9c33e06e..ab8bac7e 100644
--- a/ui/views/bubble/bubble_frame_view.cc
+++ b/ui/views/bubble/bubble_frame_view.cc
@@ -40,6 +40,7 @@
 #include "ui/views/layout/layout_provider.h"
 #include "ui/views/paint_info.h"
 #include "ui/views/resources/grit/views_resources.h"
+#include "ui/views/style/typography.h"
 #include "ui/views/view_class_properties.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/widget/widget_delegate.h"
@@ -108,7 +109,9 @@
       main_image_(AddChildView(std::make_unique<ImageView>())),
       default_title_(AddChildView(CreateDefaultTitleLabel(std::u16string()))),
       subtitle_(AddChildView(
-          CreateLabelWithContext(std::u16string(), style::CONTEXT_LABEL))) {
+          CreateLabelWithContextAndStyle(std::u16string(),
+                                         style::CONTEXT_LABEL,
+                                         style::STYLE_SECONDARY))) {
   default_title_->SetVisible(false);
   main_image_->SetVisible(false);
   subtitle_->SetVisible(false);
@@ -159,7 +162,8 @@
 // static
 std::unique_ptr<Label> BubbleFrameView::CreateDefaultTitleLabel(
     const std::u16string& title_text) {
-  return CreateLabelWithContext(title_text, style::CONTEXT_DIALOG_TITLE);
+  return CreateLabelWithContextAndStyle(title_text, style::CONTEXT_DIALOG_TITLE,
+                                        style::STYLE_PRIMARY);
 }
 
 // static
@@ -1062,10 +1066,11 @@
 }
 
 // static
-std::unique_ptr<Label> BubbleFrameView::CreateLabelWithContext(
+std::unique_ptr<Label> BubbleFrameView::CreateLabelWithContextAndStyle(
     const std::u16string& label_text,
-    style::TextContext text_context) {
-  auto label = std::make_unique<Label>(label_text, text_context);
+    style::TextContext text_context,
+    style::TextStyle text_style) {
+  auto label = std::make_unique<Label>(label_text, text_context, text_style);
   label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
   label->SetCollapseWhenHidden(true);
   label->SetMultiLine(true);
diff --git a/ui/views/bubble/bubble_frame_view.h b/ui/views/bubble/bubble_frame_view.h
index 2f9504e..d4fa97e 100644
--- a/ui/views/bubble/bubble_frame_view.h
+++ b/ui/views/bubble/bubble_frame_view.h
@@ -17,6 +17,7 @@
 #include "ui/views/controls/label.h"
 #include "ui/views/controls/progress_bar.h"
 #include "ui/views/input_event_activation_protector.h"
+#include "ui/views/style/typography.h"
 #include "ui/views/window/non_client_view.h"
 
 namespace gfx {
@@ -259,9 +260,10 @@
   int GetMainImageLeftInsets() const;
 
   // Helper method to create a label with text style
-  static std::unique_ptr<Label> CreateLabelWithContext(
+  static std::unique_ptr<Label> CreateLabelWithContextAndStyle(
       const std::u16string& label_text,
-      style::TextContext text_context);
+      style::TextContext text_context,
+      style::TextStyle text_style);
 
   // The bubble border.
   raw_ptr<BubbleBorder> bubble_border_ = nullptr;
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
index b46a42d9..e1b3c012 100644
--- a/ui/views/controls/menu/menu_controller.cc
+++ b/ui/views/controls/menu/menu_controller.cc
@@ -2808,7 +2808,7 @@
   SubmenuView* const submenu = parent->GetSubmenu();
 
   for (MenuItemView* item : submenu->GetMenuItems()) {
-    if (!item->GetVisible() || !item->GetEnabled())
+    if (!item->IsTraversableByKeyboard())
       continue;
 
     bool found_focusable = false;
diff --git a/ui/views/controls/menu/menu_controller_unittest.cc b/ui/views/controls/menu/menu_controller_unittest.cc
index 298f2fe..71d34333 100644
--- a/ui/views/controls/menu/menu_controller_unittest.cc
+++ b/ui/views/controls/menu/menu_controller_unittest.cc
@@ -19,7 +19,9 @@
 #include "build/build_config.h"
 #include "build/chromeos_buildflags.h"
 #include "ui/accessibility/ax_action_data.h"
+#include "ui/accessibility/ax_mode.h"
 #include "ui/accessibility/ax_node_data.h"
+#include "ui/accessibility/platform/ax_platform_node.h"
 #include "ui/base/dragdrop/mojom/drag_drop_types.mojom.h"
 #include "ui/base/ui_base_types.h"
 #include "ui/events/event.h"
@@ -3216,6 +3218,45 @@
   EXPECT_EQ(ax_counter.GetCount(ax::mojom::Event::kSelectedChildrenChanged), 2);
 }
 
+// Test that in accessibility mode disabled menu items are taken into account
+// during items indices assignment.
+TEST_F(MenuControllerTest, AccessibilityDisabledItemsIndices) {
+  ui::testing::ScopedAxModeSetter ax_mode_setter_{ui::AXMode::kNativeAPIs};
+
+#if BUILDFLAG(IS_WIN)
+  // TODO(crbug.com/1286137): This test is consistently failing on Win11.
+  if (base::win::OSInfo::GetInstance()->version() >=
+      base::win::Version::WIN11) {
+    GTEST_SKIP() << "Skipping test for WIN11_21H2 and greater";
+  }
+#endif
+  MenuItemView* const item1 = menu_item()->GetSubmenu()->GetMenuItemAt(0);
+  MenuItemView* const item2 = menu_item()->GetSubmenu()->GetMenuItemAt(1);
+  MenuItemView* const item3 = menu_item()->GetSubmenu()->GetMenuItemAt(2);
+  MenuItemView* const item4 = menu_item()->GetSubmenu()->GetMenuItemAt(3);
+
+  item2->SetEnabled(false);
+
+  OpenMenu(menu_item());
+
+  ui::AXNodeData data;
+  item1->GetViewAccessibility().GetAccessibleNodeData(&data);
+  EXPECT_EQ(1, data.GetIntAttribute(ax::mojom::IntAttribute::kPosInSet));
+  EXPECT_EQ(4, data.GetIntAttribute(ax::mojom::IntAttribute::kSetSize));
+
+  item2->GetViewAccessibility().GetAccessibleNodeData(&data);
+  EXPECT_EQ(2, data.GetIntAttribute(ax::mojom::IntAttribute::kPosInSet));
+  EXPECT_EQ(4, data.GetIntAttribute(ax::mojom::IntAttribute::kSetSize));
+
+  item3->GetViewAccessibility().GetAccessibleNodeData(&data);
+  EXPECT_EQ(3, data.GetIntAttribute(ax::mojom::IntAttribute::kPosInSet));
+  EXPECT_EQ(4, data.GetIntAttribute(ax::mojom::IntAttribute::kSetSize));
+
+  item4->GetViewAccessibility().GetAccessibleNodeData(&data);
+  EXPECT_EQ(4, data.GetIntAttribute(ax::mojom::IntAttribute::kPosInSet));
+  EXPECT_EQ(4, data.GetIntAttribute(ax::mojom::IntAttribute::kSetSize));
+}
+
 #if BUILDFLAG(IS_MAC)
 // This test exercises a Mac-specific behavior, by which hotkeys using modifiers
 // cause menus to close and the hotkeys to be handled by the browser window.
diff --git a/ui/views/controls/menu/menu_item_view.cc b/ui/views/controls/menu/menu_item_view.cc
index 8543989..c9c331a7 100644
--- a/ui/views/controls/menu/menu_item_view.cc
+++ b/ui/views/controls/menu/menu_item_view.cc
@@ -574,7 +574,7 @@
   SchedulePaint();
 }
 
-void MenuItemView::OnDropStatusChanged() {
+void MenuItemView::OnDropOrSelectionStatusMayHaveChanged() {
   UpdateSelectionBasedStateIfChanged(PaintMode::kNormal);
 }
 
diff --git a/ui/views/controls/menu/menu_item_view.h b/ui/views/controls/menu/menu_item_view.h
index d5317175..fb617a4 100644
--- a/ui/views/controls/menu/menu_item_view.h
+++ b/ui/views/controls/menu/menu_item_view.h
@@ -287,8 +287,9 @@
   }
   const std::u16string& accessible_name() const { return accessible_name_; }
 
-  // Called when the drop status of this item changes.
-  void OnDropStatusChanged();
+  // Called when the drop or selection status (as determined by SubmenuView) may
+  // have changed.
+  void OnDropOrSelectionStatusMayHaveChanged();
 
   // Paints the menu item.
   void OnPaint(gfx::Canvas* canvas) override;
diff --git a/ui/views/controls/menu/menu_item_view_unittest.cc b/ui/views/controls/menu/menu_item_view_unittest.cc
index 419ff6d0..7f8a407 100644
--- a/ui/views/controls/menu/menu_item_view_unittest.cc
+++ b/ui/views/controls/menu/menu_item_view_unittest.cc
@@ -559,6 +559,42 @@
   EXPECT_TRUE(child_menu_item->last_paint_as_selected_for_testing());
 }
 
+TEST_F(MenuItemViewPaintUnitTest, SelectionBasedStateUpdatedDuringDragAndDrop) {
+  MenuItemView* submenu_item =
+      menu_item_view()->AppendSubMenu(1, u"submenu_item");
+  MenuItemView* submenu_child1 =
+      submenu_item->AppendMenuItem(1, u"submenu_child");
+  MenuItemView* submenu_child2 =
+      submenu_item->AppendMenuItem(1, u"submenu_child");
+
+  menu_runner()->RunMenuAt(widget(), nullptr, gfx::Rect(),
+                           MenuAnchorPosition::kTopLeft,
+                           ui::MENU_SOURCE_KEYBOARD);
+
+  // Show both the root and nested menus.
+  SubmenuView* submenu = submenu_item->GetSubmenu();
+  MenuHost::InitParams params;
+  params.parent = widget();
+  params.bounds = submenu_item->bounds();
+  submenu->ShowAt(params);
+
+  EXPECT_FALSE(submenu_child1->last_paint_as_selected_for_testing());
+  submenu_child1->SetSelected(true);
+  EXPECT_TRUE(submenu_child1->IsSelected());
+  EXPECT_TRUE(submenu_child1->last_paint_as_selected_for_testing());
+
+  // Setting the drop item to `submenu_child2` should force `submenu_child1` to
+  // no longer draw as selected.
+  submenu->SetDropMenuItem(submenu_child2, MenuDelegate::DropPosition::kOn);
+  EXPECT_FALSE(submenu_child1->last_paint_as_selected_for_testing());
+  EXPECT_FALSE(submenu_child2->last_paint_as_selected_for_testing());
+
+  // Clearing the drop item returns `submenu_child1` to drawing as selected.
+  submenu->SetDropMenuItem(nullptr, MenuDelegate::DropPosition::kOn);
+  EXPECT_TRUE(submenu_child1->last_paint_as_selected_for_testing());
+  EXPECT_FALSE(submenu_child2->last_paint_as_selected_for_testing());
+}
+
 // Sets up a custom MenuDelegate that expects functions aren't called. See
 // DontAskForFontsWhenAddingSubmenu.
 class MenuItemViewAccessTest : public MenuItemViewPaintUnitTest {
diff --git a/ui/views/controls/menu/submenu_view.cc b/ui/views/controls/menu/submenu_view.cc
index ccff3c17..23230a8f 100644
--- a/ui/views/controls/menu/submenu_view.cc
+++ b/ui/views/controls/menu/submenu_view.cc
@@ -481,10 +481,30 @@
   MenuItemView* old_drop_item = drop_item_;
   drop_item_ = item;
   drop_position_ = position;
-  if (old_drop_item && old_drop_item != drop_item_)
-    old_drop_item->OnDropStatusChanged();
-  if (drop_item_)
-    drop_item_->OnDropStatusChanged();
+  if (!old_drop_item || !item) {
+    // Whether the selection is actually drawn
+    // (`MenuItemView:last_paint_as_selected_`) depends upon whether there is a
+    // drop item. Find the selected item and have it updates its paint as
+    // selected state.
+    for (View* child : children()) {
+      if (!child->GetVisible() ||
+          child->GetID() != MenuItemView::kMenuItemViewID) {
+        continue;
+      }
+      MenuItemView* child_menu_item = static_cast<MenuItemView*>(child);
+      if (child_menu_item->IsSelected()) {
+        child_menu_item->OnDropOrSelectionStatusMayHaveChanged();
+        // Only one menu item is selected, so no need to continue iterating once
+        // the selected item is found.
+        break;
+      }
+    }
+  } else {
+    if (old_drop_item && old_drop_item != drop_item_)
+      old_drop_item->OnDropOrSelectionStatusMayHaveChanged();
+    if (drop_item_)
+      drop_item_->OnDropOrSelectionStatusMayHaveChanged();
+  }
   SchedulePaintForDropIndicator(drop_item_, drop_position_);
 }
 
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
index ccca4625..4722bbe 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
@@ -311,6 +311,11 @@
 
 DesktopNativeWidgetAura::~DesktopNativeWidgetAura() {
   if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) {
+    // `drop_helper_` and `window_reorderer_` hold a pointer to
+    // `native_widget_delegate_`'s root view. Reset them before deleting
+    // `native_widget_delegate_` to avoid holding a briefly dangling ptr.
+    drop_helper_.reset();
+    window_reorderer_.reset();
     //  Use `ClearAndDelete` here to stop referencing the underlying pointer and
     //  free its memory. Compared to raw delete calls, this avoids the raw_ptr
     //  to be temporarily dangling.
diff --git a/ui/views/widget/drop_helper.h b/ui/views/widget/drop_helper.h
index 92b3b62..cb7aba3a 100644
--- a/ui/views/widget/drop_helper.h
+++ b/ui/views/widget/drop_helper.h
@@ -117,7 +117,7 @@
   void NotifyDragExit();
 
   // RootView we were created for.
-  raw_ptr<View, DanglingUntriaged> root_view_;
+  raw_ptr<View> root_view_;
 
   // View we're targeting events at.
   raw_ptr<View> target_view_;
diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc
index 3f8b42f..11553766d 100644
--- a/ui/views/widget/native_widget_aura.cc
+++ b/ui/views/widget/native_widget_aura.cc
@@ -1132,6 +1132,11 @@
 NativeWidgetAura::~NativeWidgetAura() {
   destroying_ = true;
   if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) {
+    // `drop_helper_` and `window_reorderer_` hold a pointer to `delegate_`'s
+    // root view. Reset them before deleting `delegate_` to avoid holding a
+    // briefly dangling ptr.
+    drop_helper_.reset();
+    window_reorderer_.reset();
     //  Use `ClearAndDelete` here to stop referencing the underlying pointer and
     //  free its memory. Compared to raw delete calls, this avoids the raw_ptr
     //  to be temporarily dangling.
diff --git a/ui/views/widget/window_reorderer.h b/ui/views/widget/window_reorderer.h
index d0d2d88..2c7f234 100644
--- a/ui/views/widget/window_reorderer.h
+++ b/ui/views/widget/window_reorderer.h
@@ -49,7 +49,7 @@
   // The window and the root view of the native widget which owns the
   // WindowReorderer.
   raw_ptr<aura::Window> parent_window_;
-  raw_ptr<View, DanglingUntriaged> root_view_;
+  raw_ptr<View> root_view_;
 
   // Reorders windows as a result of the kHostViewKey being set on a child of
   // |parent_window_|.
diff --git a/ui/webui/resources/BUILD.gn b/ui/webui/resources/BUILD.gn
index 12753fb..cc05a0c2 100644
--- a/ui/webui/resources/BUILD.gn
+++ b/ui/webui/resources/BUILD.gn
@@ -170,10 +170,10 @@
   "cr_elements/cr_lottie/cr_lottie.d.ts",
   "cr_elements/cr_scrollable_behavior.m.d.ts",
   "cr_elements/find_shortcut_behavior.d.ts",
-  "cr_elements/policy/cr_policy_indicator_behavior.m.d.ts",
-  "cr_elements/policy/cr_policy_indicator.m.d.ts",
-  "cr_elements/policy/cr_policy_pref_indicator.m.d.ts",
-  "cr_elements/policy/cr_tooltip_icon.m.d.ts",
+  "cr_elements/policy/cr_policy_indicator_behavior.d.ts",
+  "cr_elements/policy/cr_policy_indicator.d.ts",
+  "cr_elements/policy/cr_policy_pref_indicator.d.ts",
+  "cr_elements/policy/cr_tooltip_icon.d.ts",
   "js/cr/ui/focus_row_behavior.m.d.ts",
   "js/i18n_behavior.m.d.ts",
   "js/parse_html_subset.m.d.ts",
diff --git a/ui/webui/resources/cr_components/app_management/toggle_row.ts b/ui/webui/resources/cr_components/app_management/toggle_row.ts
index c24c9aeb..6eee6896 100644
--- a/ui/webui/resources/cr_components/app_management/toggle_row.ts
+++ b/ui/webui/resources/cr_components/app_management/toggle_row.ts
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 import './app_management_shared_style.css.js';
 import '//resources/cr_elements/cr_toggle/cr_toggle.js';
-import '//resources/cr_elements/policy/cr_policy_indicator.m.js';
+import '//resources/cr_elements/policy/cr_policy_indicator.js';
 import '//resources/cr_elements/icons.m.js';
 
 import {CrToggleElement} from '//resources/cr_elements/cr_toggle/cr_toggle.js';
diff --git a/ui/webui/resources/cr_components/app_management/uninstall_button.ts b/ui/webui/resources/cr_components/app_management/uninstall_button.ts
index ab5a62f3..0545745e 100644
--- a/ui/webui/resources/cr_components/app_management/uninstall_button.ts
+++ b/ui/webui/resources/cr_components/app_management/uninstall_button.ts
@@ -4,7 +4,7 @@
 
 import './app_management_shared_style.css.js';
 import '//resources/cr_elements/cr_button/cr_button.js';
-import '//resources/cr_elements/policy/cr_tooltip_icon.m.js';
+import '//resources/cr_elements/policy/cr_tooltip_icon.js';
 
 import {assertNotReached} from '//resources/js/assert_ts.js';
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
diff --git a/ui/webui/resources/cr_components/certificate_manager/certificate_entry.ts b/ui/webui/resources/cr_components/certificate_manager/certificate_entry.ts
index 6c4ada2..e4bcc89 100644
--- a/ui/webui/resources/cr_components/certificate_manager/certificate_entry.ts
+++ b/ui/webui/resources/cr_components/certificate_manager/certificate_entry.ts
@@ -6,14 +6,14 @@
  * @fileoverview An element that represents an SSL certificate entry.
  */
 import '../../cr_elements/cr_expand_button/cr_expand_button.js';
-import '../../cr_elements/policy/cr_policy_indicator.m.js';
+import '../../cr_elements/policy/cr_policy_indicator.js';
 import 'chrome://resources/polymer/v3_0/iron-flex-layout/iron-flex-layout-classes.js';
 import './certificate_shared.css.js';
 import './certificate_subentry.js';
 
 import {PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {CrPolicyIndicatorType} from '../../cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorType} from '../../cr_elements/policy/cr_policy_indicator_behavior.js';
 import {I18nMixin} from '../../js/i18n_mixin.js';
 
 import {getTemplate} from './certificate_entry.html.js';
diff --git a/ui/webui/resources/cr_components/certificate_manager/certificate_subentry.ts b/ui/webui/resources/cr_components/certificate_manager/certificate_subentry.ts
index fb6785a5e..73e4a1f 100644
--- a/ui/webui/resources/cr_components/certificate_manager/certificate_subentry.ts
+++ b/ui/webui/resources/cr_components/certificate_manager/certificate_subentry.ts
@@ -9,7 +9,7 @@
 import '../../cr_elements/cr_action_menu/cr_action_menu.js';
 import '../../cr_elements/cr_icon_button/cr_icon_button.js';
 import '../../cr_elements/cr_lazy_render/cr_lazy_render.js';
-import '../../cr_elements/policy/cr_policy_indicator.m.js';
+import '../../cr_elements/policy/cr_policy_indicator.js';
 import '../../cr_elements/icons.m.js';
 import './certificate_shared.css.js';
 
@@ -17,7 +17,7 @@
 
 import {CrActionMenuElement} from '../../cr_elements/cr_action_menu/cr_action_menu.js';
 import {CrLazyRenderElement} from '../../cr_elements/cr_lazy_render/cr_lazy_render.js';
-import {CrPolicyIndicatorType} from '../../cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorType} from '../../cr_elements/policy/cr_policy_indicator_behavior.js';
 import {I18nMixin} from '../../js/i18n_mixin.js';
 
 import {CertificateAction, CertificateActionEvent} from './certificate_manager_types.js';
diff --git a/ui/webui/resources/cr_components/chromeos/BUILD.gn b/ui/webui/resources/cr_components/chromeos/BUILD.gn
index 6b845ce..e999f837 100644
--- a/ui/webui/resources/cr_components/chromeos/BUILD.gn
+++ b/ui/webui/resources/cr_components/chromeos/BUILD.gn
@@ -11,7 +11,6 @@
     "bluetooth:closure_compile_module",
     "cellular_setup:closure_compile_module",
     "multidevice_setup:closure_compile_module",
-    "network:closure_compile",
     "network:closure_compile_module",
     "network_health:closure_compile_module",
     "quick_unlock:closure_compile_module",
diff --git a/ui/webui/resources/cr_components/chromeos/network/BUILD.gn b/ui/webui/resources/cr_components/chromeos/network/BUILD.gn
index 99691a7..e88d7120 100644
--- a/ui/webui/resources/cr_components/chromeos/network/BUILD.gn
+++ b/ui/webui/resources/cr_components/chromeos/network/BUILD.gn
@@ -9,241 +9,6 @@
 
 assert(is_chromeos, "Only ChromeOS components belong here.")
 
-js_type_check("closure_compile") {
-  uses_legacy_modules = true
-  deps = [
-    ":cellular_utils",
-    ":cr_policy_network_behavior_mojo",
-    ":cr_policy_network_indicator_mojo",
-    ":mojo_interface_provider",
-    ":network_apnlist",
-    ":network_choose_mobile",
-    ":network_config",
-    ":network_config_input",
-    ":network_config_select",
-    ":network_config_toggle",
-    ":network_icon",
-    ":network_list_types",
-    ":network_listener_behavior",
-    ":network_nameservers",
-    ":network_password_input",
-    ":network_property_list_mojo",
-    ":network_proxy",
-    ":network_proxy_exclusions",
-    ":network_proxy_input",
-    ":network_select",
-    ":onc_mojo",
-    ":sim_lock_dialogs",
-  ]
-}
-
-js_library("mojo_interface_provider") {
-  deps = [
-    "//chromeos/services/network_config/public/mojom:mojom_js_library_for_compile",
-    "//ui/webui/resources/js:cr",
-  ]
-}
-
-js_library("cr_policy_network_behavior_mojo") {
-  deps = [
-    ":mojo_interface_provider",
-    ":onc_mojo",
-    "../../../cr_elements/policy:cr_policy_indicator_behavior",
-    "//chromeos/services/network_config/public/mojom:mojom_js_library_for_compile",
-  ]
-}
-
-js_library("cr_policy_network_indicator_mojo") {
-  deps = [
-    ":cr_policy_network_behavior_mojo",
-    "../../../cr_elements/policy:cr_policy_indicator_behavior",
-    "../../../cr_elements/policy:cr_tooltip_icon",
-  ]
-}
-
-js_library("network_apnlist") {
-  deps = [
-    ":network_config",
-    ":onc_mojo",
-    "../../../cr_elements/policy:cr_tooltip_icon",
-    "//ui/webui/resources/js:i18n_behavior",
-    "//ui/webui/resources/js:load_time_data",
-  ]
-  externs_list = [ "$externs_path/metrics_private.js" ]
-}
-
-js_library("network_choose_mobile") {
-  deps = [
-    ":network_config",
-    "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:i18n_behavior",
-  ]
-}
-
-js_library("network_config") {
-  deps = [
-    ":mojo_interface_provider",
-    ":network_listener_behavior",
-    "//chromeos/services/network_config/public/mojom:mojom_js_library_for_compile",
-    "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:i18n_behavior",
-  ]
-  externs_list = [
-    # TODO(crbug/1081815): Use autogenerated files instead of chrome_extensions
-    "$externs_path/chrome_extensions.js",
-    "$externs_path/networking_private.js",
-  ]
-  extra_sources = [ "$interfaces_path/networking_private_interface.js" ]
-}
-
-js_library("network_config_element_behavior") {
-  deps = [
-    ":cr_policy_network_behavior_mojo",
-    ":onc_mojo",
-  ]
-}
-
-js_library("network_config_input") {
-  deps = [
-    ":cr_policy_network_behavior_mojo",
-    ":network_config_element_behavior",
-  ]
-  externs_list = [ "$externs_path/networking_private.js" ]
-  extra_sources = [ "$interfaces_path/networking_private_interface.js" ]
-}
-
-js_library("network_config_select") {
-  deps = [
-    ":cr_policy_network_behavior_mojo",
-    ":network_config_element_behavior",
-    "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:i18n_behavior",
-  ]
-  externs_list = [ "$externs_path/networking_private.js" ]
-  extra_sources = [ "$interfaces_path/networking_private_interface.js" ]
-}
-
-js_library("network_config_toggle") {
-  deps = [
-    ":cr_policy_network_behavior_mojo",
-    ":network_config_element_behavior",
-  ]
-  externs_list = [ "$externs_path/networking_private.js" ]
-  extra_sources = [ "$interfaces_path/networking_private_interface.js" ]
-}
-
-js_library("network_nameservers") {
-  deps = [
-    ":cr_policy_network_behavior_mojo",
-    ":onc_mojo",
-    "//ui/webui/resources/js:i18n_behavior",
-  ]
-}
-
-js_library("network_password_input") {
-  deps = [
-    ":cr_policy_network_behavior_mojo",
-    ":network_config_element_behavior",
-    "//ui/webui/resources/js:i18n_behavior",
-  ]
-  externs_list = [ "$externs_path/networking_private.js" ]
-  extra_sources = [ "$interfaces_path/networking_private_interface.js" ]
-}
-
-js_library("network_property_list_mojo") {
-  deps = [
-    ":cr_policy_network_behavior_mojo",
-    ":onc_mojo",
-    "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:i18n_behavior",
-  ]
-}
-
-js_library("network_proxy") {
-  deps = [
-    ":cr_policy_network_behavior_mojo",
-    ":onc_mojo",
-    "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:i18n_behavior",
-  ]
-}
-
-js_library("network_proxy_input") {
-  deps = [
-    ":onc_mojo",
-    "//ui/webui/resources/js:i18n_behavior",
-  ]
-}
-
-js_library("network_proxy_exclusions") {
-}
-
-js_library("network_icon") {
-  deps = [
-    ":onc_mojo",
-    "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:i18n_behavior",
-  ]
-}
-
-js_library("network_list_item") {
-  deps = [
-    ":cr_policy_network_behavior_mojo",
-    ":mojo_interface_provider",
-    ":network_list_types",
-    "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:i18n_behavior",
-    "//ui/webui/resources/js/cr/ui:focus_row_behavior",
-  ]
-}
-
-js_library("network_list_types") {
-}
-
-js_library("network_listener_behavior") {
-  deps = [
-    ":mojo_interface_provider",
-    "//ui/webui/resources/js:assert",
-  ]
-  externs_list = [ "$externs_path/networking_private.js" ]
-  extra_sources = [ "$interfaces_path/networking_private_interface.js" ]
-}
-
-js_library("network_select") {
-  deps = [
-    ":network_list_types",
-    ":network_listener_behavior",
-    ":onc_mojo",
-    "//ui/webui/resources/js:util",
-  ]
-  externs_list = [ "$externs_path/networking_private.js" ]
-}
-
-js_library("onc_mojo") {
-  deps = [
-    "//chromeos/services/network_config/public/mojom:mojom_js_library_for_compile",
-    "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:load_time_data",
-  ]
-}
-
-js_library("cellular_utils") {
-  deps = [
-    ":mojo_interface_provider",
-    ":onc_mojo",
-  ]
-}
-
-js_library("sim_lock_dialogs") {
-  deps = [
-    ":mojo_interface_provider",
-    ":onc_mojo",
-    "//ui/webui/resources/js:assert",
-    "//ui/webui/resources/js:i18n_behavior",
-    "//ui/webui/resources/js/cr/ui:focus_without_ink",
-  ]
-}
-
 js_type_check("closure_compile_module") {
   is_polymer3 = true
   deps = [
@@ -294,7 +59,7 @@
 js_library("cr_policy_network_behavior_mojo.m") {
   sources = [ "$root_gen_dir/ui/webui/resources/cr_components/chromeos/network/cr_policy_network_behavior_mojo.m.js" ]
   deps = [
-    "../../../cr_elements/policy:cr_policy_indicator_behavior.m",
+    "../../../cr_elements/policy:cr_policy_indicator_behavior",
     "//chromeos/services/network_config/public/mojom:mojom_js_library_for_compile",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
   ]
@@ -306,7 +71,7 @@
   deps = [
     ":cr_policy_network_behavior_mojo.m",
     ":onc_mojo.m",
-    "../../../cr_elements/policy:cr_policy_indicator_behavior.m",
+    "../../../cr_elements/policy:cr_policy_indicator_behavior",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
   ]
   extra_deps = [ ":cr_policy_network_indicator_mojo_module" ]
@@ -320,7 +85,7 @@
     ":onc_mojo.m",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/cr_elements/cr_button:cr_button",
-    "//ui/webui/resources/cr_elements/policy:cr_tooltip_icon.m",
+    "//ui/webui/resources/cr_elements/policy:cr_tooltip_icon",
     "//ui/webui/resources/js:assert.m",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:load_time_data.m",
@@ -358,7 +123,7 @@
     "//third_party/polymer/v3_0/components-chromium/paper-spinner:paper-spinner-lite",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
     "//ui/webui/resources/cr_elements/cr_dialog:cr_dialog",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
     "//ui/webui/resources/js:i18n_behavior.m",
     "//ui/webui/resources/js:load_time_data.m",
   ]
@@ -394,7 +159,7 @@
     ":network_config_element_behavior.m",
     ":network_shared_css.m",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
-    "//ui/webui/resources/cr_elements/policy:cr_tooltip_icon.m",
+    "//ui/webui/resources/cr_elements/policy:cr_tooltip_icon",
     "//ui/webui/resources/js:i18n_behavior.m",
   ]
   extra_deps = [ ":network_config_select_module" ]
@@ -433,7 +198,7 @@
     ":network_shared_css.m",
     ":onc_mojo.m",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
   ]
   externs_list =
       [ "//ui/webui/resources/cr_elements/cr_toggle/cr_toggle_externs.js" ]
@@ -491,7 +256,7 @@
     ":network_shared_css.m",
     "//third_party/polymer/v3_0/components-chromium/iron-flex-layout:iron-flex-layout-classes",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
-    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator.m",
+    "//ui/webui/resources/cr_elements/policy:cr_policy_indicator",
     "//ui/webui/resources/js:i18n_behavior.m",
   ]
   externs_list = [
@@ -692,6 +457,7 @@
   html_file = "cr_policy_network_indicator_mojo.html"
   html_type = "dom-module"
   auto_imports = cr_components_chromeos_auto_imports + [ "ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.html|CrPolicyIndicatorBehavior,CrPolicyIndicatorType" ]
+  migrated_imports = cr_components_migrated_imports
 }
 
 polymer_modulizer("network_apnlist") {
@@ -740,6 +506,7 @@
   html_file = "network_config_select.html"
   html_type = "dom-module"
   auto_imports = cr_components_chromeos_auto_imports
+  migrated_imports = cr_components_migrated_imports
 }
 
 polymer_modulizer("network_config_toggle") {
diff --git a/ui/webui/resources/cr_components/chromeos/network/cr_policy_network_behavior_mojo.js b/ui/webui/resources/cr_components/chromeos/network/cr_policy_network_behavior_mojo.js
index c98f878..2c9b4e0 100644
--- a/ui/webui/resources/cr_components/chromeos/network/cr_policy_network_behavior_mojo.js
+++ b/ui/webui/resources/cr_components/chromeos/network/cr_policy_network_behavior_mojo.js
@@ -11,7 +11,7 @@
 // clang-format off
 // #import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
 // #import 'chrome://resources/mojo/chromeos/services/network_config/public/mojom/network_types.mojom-lite.js';
-// #import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.m.js';
+// #import {CrPolicyIndicatorType} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.js';
 // #import {OncMojo} from './onc_mojo.m.js';
 // clang-format on
 
diff --git a/ui/webui/resources/cr_components/chromeos/os_cr_components.gni b/ui/webui/resources/cr_components/chromeos/os_cr_components.gni
index cabc14d..1196a40c 100644
--- a/ui/webui/resources/cr_components/chromeos/os_cr_components.gni
+++ b/ui/webui/resources/cr_components/chromeos/os_cr_components.gni
@@ -80,5 +80,8 @@
   "ui/webui/resources/cr_elements/cr_radio_button/cr_radio_button.html",
   "ui/webui/resources/cr_elements/cr_radio_group/cr_radio_group.html",
   "ui/webui/resources/cr_elements/cr_toggle/cr_toggle.html",
+  "ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.html",
+  "ui/webui/resources/cr_elements/policy/cr_policy_indicator.html",
+  "ui/webui/resources/cr_elements/policy/cr_tooltip_icon.html",
   "ui/webui/resources/html/list_property_update_behavior.html",
 ]
diff --git a/ui/webui/resources/cr_elements/BUILD.gn b/ui/webui/resources/cr_elements/BUILD.gn
index 72dfac3..ba03c553 100644
--- a/ui/webui/resources/cr_elements/BUILD.gn
+++ b/ui/webui/resources/cr_elements/BUILD.gn
@@ -16,6 +16,7 @@
 
 preprocess_folder = "$root_gen_dir/ui/webui/resources/preprocessed/cr_elements"
 if (include_polymer) {
+  preprocess_src_manifest = "preprocessed_src_manifest.json"
   preprocess_gen_manifest = "preprocessed_gen_manifest.json"
 }
 
@@ -28,7 +29,10 @@
     grd_prefix = "cr_elements"
     out_grd = "$target_gen_dir/${grd_prefix}_resources.grdp"
     public_deps = [ ":preprocess" ]
-    manifest_files = [ "$target_gen_dir/$preprocess_gen_manifest" ]
+    manifest_files = [
+      "$target_gen_dir/$preprocess_src_manifest",
+      "$target_gen_dir/$preprocess_gen_manifest",
+    ]
 
     if (is_chromeos_ash) {
       manifest_files += [
@@ -51,6 +55,7 @@
       ":css_wrapper_files",
       ":html_wrapper_files",
       ":preprocess_generated",
+      ":preprocess_src",
     ]
   }
 
@@ -93,14 +98,6 @@
       "hidden_style_css.html",
       "icons.html",
       "md_select_css.html",
-      "policy/cr_policy_indicator_behavior.html",
-      "policy/cr_policy_indicator_behavior.js",
-      "policy/cr_policy_indicator.html",
-      "policy/cr_policy_indicator.js",
-      "policy/cr_policy_pref_indicator.html",
-      "policy/cr_policy_pref_indicator.js",
-      "policy/cr_tooltip_icon.html",
-      "policy/cr_tooltip_icon.js",
       "shared_style_css.html",
       "shared_vars_css.html",
     ]
@@ -108,6 +105,13 @@
 }
 
 if (include_polymer) {
+  preprocess_if_expr("preprocess_src") {
+    in_folder = "."
+    out_folder = preprocess_folder
+    in_files = [ "policy/cr_policy_indicator_behavior.js" ]
+    out_manifest = "$target_gen_dir/$preprocess_src_manifest"
+  }
+
   preprocess_if_expr("preprocess_generated") {
     deps = [ ":custom_elements" ]
     in_folder = target_gen_dir
@@ -125,10 +129,9 @@
       "hidden_style_css.m.js",
       "icons.m.js",
       "md_select_css.m.js",
-      "policy/cr_policy_indicator_behavior.m.js",
-      "policy/cr_policy_indicator.m.js",
-      "policy/cr_policy_pref_indicator.m.js",
-      "policy/cr_tooltip_icon.m.js",
+      "policy/cr_policy_indicator.js",
+      "policy/cr_policy_pref_indicator.js",
+      "policy/cr_tooltip_icon.js",
       "shared_style_css.m.js",
       "shared_vars_css.m.js",
     ]
@@ -146,7 +149,6 @@
   group("closure_compile") {
     deps = [
       ":cr_elements_resources",
-      "policy:closure_compile",
 
       # Targets for auto-generated Polymer 3 JS Modules
       ":cr_elements_module_resources",
@@ -250,7 +252,7 @@
       "cr_dialog:web_components",
       "cr_icon_button:web_components",
       "cr_lottie:web_components",
-      "policy:polymer3_elements",
+      "policy:web_components",
     ]
 
     if (is_chromeos) {
diff --git a/ui/webui/resources/cr_elements/policy/BUILD.gn b/ui/webui/resources/cr_elements/policy/BUILD.gn
index 642533b..1ecefd0 100644
--- a/ui/webui/resources/cr_elements/policy/BUILD.gn
+++ b/ui/webui/resources/cr_elements/policy/BUILD.gn
@@ -3,11 +3,10 @@
 # found in the LICENSE file.
 
 import("//third_party/closure_compiler/compile_js.gni")
-import("//tools/polymer/polymer.gni")
-import("../../tools/js_modulizer.gni")
+import("//tools/polymer/html_to_js.gni")
 
-js_type_check("closure_compile") {
-  uses_legacy_modules = true
+js_type_check("closure_compile_module") {
+  is_polymer3 = true
   deps = [
     ":cr_policy_indicator",
     ":cr_policy_indicator_behavior",
@@ -19,98 +18,32 @@
 js_library("cr_policy_indicator") {
   deps = [
     ":cr_policy_indicator_behavior",
-    "//ui/webui/resources/js:assert",
+    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
   ]
 }
 
 js_library("cr_policy_indicator_behavior") {
-  deps = [ "//ui/webui/resources/js:assert" ]
+  deps = [ "//ui/webui/resources/js:assert.m" ]
 }
 
 js_library("cr_policy_pref_indicator") {
-  deps = [ ":cr_policy_indicator_behavior" ]
+  deps = [
+    ":cr_policy_indicator_behavior",
+    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
+  ]
   externs_list = [ "$externs_path/settings_private.js" ]
 }
 
 js_library("cr_tooltip_icon") {
-}
-
-# Polymer 3 autogenerated version
-
-js_type_check("closure_compile_module") {
-  is_polymer3 = true
-  deps = [
-    ":cr_policy_indicator.m",
-    ":cr_policy_indicator_behavior.m",
-    ":cr_policy_pref_indicator.m",
-    ":cr_tooltip_icon.m",
-  ]
-}
-
-js_library("cr_policy_indicator.m") {
-  sources = [ "$root_gen_dir/ui/webui/resources/cr_elements/policy/cr_policy_indicator.m.js" ]
-  deps = [
-    ":cr_policy_indicator_behavior.m",
-    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
-  ]
-  extra_deps = [ ":cr_policy_indicator_module" ]
-}
-
-js_library("cr_policy_indicator_behavior.m") {
-  sources = [ "$root_gen_dir/ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.m.js" ]
-  deps = [ "//ui/webui/resources/js:assert.m" ]
-  extra_deps = [ ":modulize" ]
-}
-
-js_library("cr_policy_pref_indicator.m") {
-  sources = [ "$root_gen_dir/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.m.js" ]
-  deps = [
-    ":cr_policy_indicator_behavior.m",
-    "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
-  ]
-  externs_list = [ "$externs_path/settings_private.js" ]
-  extra_deps = [ ":cr_policy_pref_indicator_module" ]
-}
-
-js_library("cr_tooltip_icon.m") {
-  sources = [
-    "$root_gen_dir/ui/webui/resources/cr_elements/policy/cr_tooltip_icon.m.js",
-  ]
   deps = [
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
   ]
-  extra_deps = [ ":cr_tooltip_icon_module" ]
 }
 
-group("polymer3_elements") {
-  public_deps = [
-    ":cr_policy_indicator_module",
-    ":cr_policy_pref_indicator_module",
-    ":cr_tooltip_icon_module",
-    ":modulize",
+html_to_js("web_components") {
+  js_files = [
+    "cr_policy_indicator.js",
+    "cr_policy_pref_indicator.js",
+    "cr_tooltip_icon.js",
   ]
 }
-
-polymer_modulizer("cr_policy_indicator") {
-  js_file = "cr_policy_indicator.js"
-  html_file = "cr_policy_indicator.html"
-  html_type = "dom-module"
-  auto_imports = [ "ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.html|CrPolicyIndicatorBehavior,CrPolicyIndicatorType" ]
-}
-
-polymer_modulizer("cr_policy_pref_indicator") {
-  js_file = "cr_policy_pref_indicator.js"
-  html_file = "cr_policy_pref_indicator.html"
-  html_type = "dom-module"
-  auto_imports = [ "ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.html|CrPolicyIndicatorBehavior,CrPolicyIndicatorType" ]
-}
-
-polymer_modulizer("cr_tooltip_icon") {
-  js_file = "cr_tooltip_icon.js"
-  html_file = "cr_tooltip_icon.html"
-  html_type = "dom-module"
-}
-
-js_modulizer("modulize") {
-  input_files = [ "cr_policy_indicator_behavior.js" ]
-}
diff --git a/ui/webui/resources/cr_elements/policy/cr_policy_indicator.m.d.ts b/ui/webui/resources/cr_elements/policy/cr_policy_indicator.d.ts
similarity index 92%
rename from ui/webui/resources/cr_elements/policy/cr_policy_indicator.m.d.ts
rename to ui/webui/resources/cr_elements/policy/cr_policy_indicator.d.ts
index cb90744..177c2ef 100644
--- a/ui/webui/resources/cr_elements/policy/cr_policy_indicator.m.d.ts
+++ b/ui/webui/resources/cr_elements/policy/cr_policy_indicator.d.ts
@@ -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 {CrPolicyIndicatorBehavior} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorBehavior} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.js';
 import {LegacyElementMixin} from 'chrome://resources/polymer/v3_0/polymer/lib/legacy/legacy-element-mixin.js';
 
 interface CrPolicyIndicatorElement extends CrPolicyIndicatorBehavior,
diff --git a/ui/webui/resources/cr_elements/policy/cr_policy_indicator.html b/ui/webui/resources/cr_elements/policy/cr_policy_indicator.html
index 105d311..e901cf3 100644
--- a/ui/webui/resources/cr_elements/policy/cr_policy_indicator.html
+++ b/ui/webui/resources/cr_elements/policy/cr_policy_indicator.html
@@ -1,16 +1,5 @@
-<link rel="import" href="../../html/polymer.html">
-
-<link rel="import" href="../hidden_style_css.html">
-<link rel="import" href="cr_policy_indicator_behavior.html">
-<link rel="import" href="cr_tooltip_icon.html">
-
-<dom-module id="cr-policy-indicator">
-  <template>
     <style include="cr-hidden-style"></style>
     <cr-tooltip-icon hidden$="[[!indicatorVisible]]"
         tooltip-text="[[indicatorTooltip_]]" icon-class="[[indicatorIcon]]"
         icon-aria-label="[[iconAriaLabel]]">
     </cr-tooltip-icon>
-  </template>
-  <script src="cr_policy_indicator.js"></script>
-</dom-module>
diff --git a/ui/webui/resources/cr_elements/policy/cr_policy_indicator.js b/ui/webui/resources/cr_elements/policy/cr_policy_indicator.js
index bd99555..d69cdfd 100644
--- a/ui/webui/resources/cr_elements/policy/cr_policy_indicator.js
+++ b/ui/webui/resources/cr_elements/policy/cr_policy_indicator.js
@@ -3,9 +3,18 @@
 // found in the LICENSE file.
 
 /** @fileoverview Polymer element for indicating policies by type. */
+import '../hidden_style_css.m.js';
+import './cr_tooltip_icon.js';
+
+import {html, Polymer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {CrPolicyIndicatorBehavior, CrPolicyIndicatorType} from './cr_policy_indicator_behavior.js';
+
 Polymer({
   is: 'cr-policy-indicator',
 
+  _template: html`{__html_template__}`,
+
   behaviors: [CrPolicyIndicatorBehavior],
 
   properties: {
diff --git a/ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.m.d.ts b/ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.d.ts
similarity index 100%
rename from ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.m.d.ts
rename to ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.d.ts
diff --git a/ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.html b/ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.html
deleted file mode 100644
index 0601cb7c..0000000
--- a/ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<link rel="import" href="../../html/polymer.html">
-
-<script src="cr_policy_indicator_behavior.js"></script>
diff --git a/ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.js b/ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.js
index 4c4ca0d..1204842f 100644
--- a/ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.js
+++ b/ui/webui/resources/cr_elements/policy/cr_policy_indicator_behavior.js
@@ -8,7 +8,7 @@
  * rework the "policy" naming scheme throughout this directory.
  */
 
-// #import {assertNotReached} from '../../js/assert.m.js';
+import {assertNotReached} from '../../js/assert.m.js';
 
 /**
  * Strings required for policy indicators. These must be set at runtime.
@@ -33,7 +33,7 @@
  * Possible policy indicators that can be shown in settings.
  * @enum {string}
  */
-/* #export */ const CrPolicyIndicatorType = {
+export const CrPolicyIndicatorType = {
   DEVICE_POLICY: 'devicePolicy',
   EXTENSION: 'extension',
   NONE: 'none',
@@ -46,7 +46,7 @@
 };
 
 /** @polymerBehavior */
-/* #export */ const CrPolicyIndicatorBehavior = {
+export const CrPolicyIndicatorBehavior = {
   // Properties exposed to all policy indicators.
   properties: {
     /**
@@ -156,4 +156,3 @@
     return '';
   },
 };
-/* #ignore */ console.warn('crbug/1173575, non-JS module files deprecated.');
diff --git a/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.m.d.ts b/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.d.ts
similarity index 93%
rename from ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.m.d.ts
rename to ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.d.ts
index 0125373..06eaacf 100644
--- a/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.m.d.ts
+++ b/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.d.ts
@@ -4,7 +4,7 @@
 
 import '/tools/typescript/definitions/settings_private.js';
 
-import {CrPolicyIndicatorBehavior} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.m.js';
+import {CrPolicyIndicatorBehavior} from 'chrome://resources/cr_elements/policy/cr_policy_indicator_behavior.js';
 import {LegacyElementMixin} from 'chrome://resources/polymer/v3_0/polymer/lib/legacy/legacy-element-mixin.js';
 
 interface CrPolicyPrefIndicatorElement extends CrPolicyIndicatorBehavior,
diff --git a/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.html b/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.html
index cb1d34a..e142f50 100644
--- a/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.html
+++ b/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.html
@@ -1,16 +1,5 @@
-<link rel="import" href="../../html/polymer.html">
-
-<link rel="import" href="../hidden_style_css.html">
-<link rel="import" href="cr_policy_indicator_behavior.html">
-<link rel="import" href="cr_tooltip_icon.html">
-
-<dom-module id="cr-policy-pref-indicator">
-  <template>
     <style include="cr-hidden-style"></style>
     <cr-tooltip-icon hidden$="[[!indicatorVisible]]"
         tooltip-text="[[indicatorTooltip]]" icon-class="[[indicatorIcon]]"
         icon-aria-label="[[iconAriaLabel]]" exportparts="tooltip">
     </cr-tooltip-icon>
-  </template>
-  <script src="cr_policy_pref_indicator.js"></script>
-</dom-module>
diff --git a/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.js b/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.js
index a1807af..e584966 100644
--- a/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.js
+++ b/ui/webui/resources/cr_elements/policy/cr_policy_pref_indicator.js
@@ -6,9 +6,18 @@
  * @fileoverview Polymer element for indicating policies that apply to an
  * element controlling a settings preference.
  */
+import '../hidden_style_css.m.js';
+import './cr_tooltip_icon.js';
+
+import {html, Polymer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {CrPolicyIndicatorBehavior, CrPolicyIndicatorType} from './cr_policy_indicator_behavior.js';
+
 Polymer({
   is: 'cr-policy-pref-indicator',
 
+  _template: html`{__html_template__}`,
+
   behaviors: [CrPolicyIndicatorBehavior],
 
   properties: {
diff --git a/ui/webui/resources/cr_elements/policy/cr_tooltip_icon.m.d.ts b/ui/webui/resources/cr_elements/policy/cr_tooltip_icon.d.ts
similarity index 100%
rename from ui/webui/resources/cr_elements/policy/cr_tooltip_icon.m.d.ts
rename to ui/webui/resources/cr_elements/policy/cr_tooltip_icon.d.ts
diff --git a/ui/webui/resources/cr_elements/policy/cr_tooltip_icon.html b/ui/webui/resources/cr_elements/policy/cr_tooltip_icon.html
index b859627..86eed13 100644
--- a/ui/webui/resources/cr_elements/policy/cr_tooltip_icon.html
+++ b/ui/webui/resources/cr_elements/policy/cr_tooltip_icon.html
@@ -1,13 +1,3 @@
-<link rel="import" href="../../html/polymer.html">
-
-<link rel="import" href="../icons.html">
-<link rel="import" href="../shared_style_css.html">
-<link rel="import" href="../shared_vars_css.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/paper-tooltip/paper-tooltip.html">
-
-<dom-module id="cr-tooltip-icon">
-  <template>
     <style include="cr-shared-style">
       :host {
         display: flex;  /* Position independently from the line-height. */
@@ -34,6 +24,3 @@
         fit-to-visible-bounds part="tooltip">
       <slot name="tooltip-text">[[tooltipText]]</slot>
     </paper-tooltip>
-  </template>
-  <script src="cr_tooltip_icon.js"></script>
-</dom-module>
diff --git a/ui/webui/resources/cr_elements/policy/cr_tooltip_icon.js b/ui/webui/resources/cr_elements/policy/cr_tooltip_icon.js
index 5d92759..2946e38 100644
--- a/ui/webui/resources/cr_elements/policy/cr_tooltip_icon.js
+++ b/ui/webui/resources/cr_elements/policy/cr_tooltip_icon.js
@@ -2,9 +2,19 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import '../icons.m.js';
+import '../shared_style_css.m.js';
+import '../shared_vars_css.m.js';
+import '//resources/polymer/v3_0/iron-icon/iron-icon.js';
+import '//resources/polymer/v3_0/paper-tooltip/paper-tooltip.js';
+
+import {html, Polymer} from '//resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
 Polymer({
   is: 'cr-tooltip-icon',
 
+  _template: html`{__html_template__}`,
+
   properties: {
     iconAriaLabel: String,
 
@@ -23,4 +33,4 @@
   getFocusableElement() {
     return this.$.indicator;
   },
-});
\ No newline at end of file
+});
diff --git a/weblayer/browser/profile_impl.cc b/weblayer/browser/profile_impl.cc
index 8748a5f3..aa6e5cc 100644
--- a/weblayer/browser/profile_impl.cc
+++ b/weblayer/browser/profile_impl.cc
@@ -304,6 +304,8 @@
             content::BrowsingDataRemover::DATA_TYPE_ATTRIBUTION_REPORTING;
         remove_mask |=
             content::BrowsingDataRemover::DATA_TYPE_AGGREGATION_SERVICE;
+        remove_mask |= content::BrowsingDataRemover::
+            DATA_TYPE_PRIVATE_AGGREGATION_INTERNAL;
         break;
       case BrowsingDataType::CACHE:
         remove_mask |= content::BrowsingDataRemover::DATA_TYPE_CACHE;
diff --git a/weblayer/browser/url_bar/page_info_delegate_impl.cc b/weblayer/browser/url_bar/page_info_delegate_impl.cc
index 687a31d..8f46fd2 100644
--- a/weblayer/browser/url_bar/page_info_delegate_impl.cc
+++ b/weblayer/browser/url_bar/page_info_delegate_impl.cc
@@ -5,6 +5,7 @@
 #include "weblayer/browser/url_bar/page_info_delegate_impl.h"
 
 #include "build/build_config.h"
+#include "components/permissions/permission_util.h"
 #include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h"
 #include "components/security_state/content/content_utils.h"
 #include "components/subresource_filter/content/browser/subresource_filter_content_settings_manager.h"
diff --git a/weblayer/public/java/BUILD.gn b/weblayer/public/java/BUILD.gn
index b3285d8..9dd5b65 100644
--- a/weblayer/public/java/BUILD.gn
+++ b/weblayer/public/java/BUILD.gn
@@ -44,7 +44,10 @@
     "org/chromium/weblayer/BrowserFragment.java",
     "org/chromium/weblayer/BrowserFragmentCreateParams.java",
     "org/chromium/weblayer/BrowserFragmentDelegate.java",
+    "org/chromium/weblayer/BrowserFragmentNavigationDelegate.java",
+    "org/chromium/weblayer/BrowserFragmentNavigationParams.java",
     "org/chromium/weblayer/BrowserFragmentTabDelegate.java",
+    "org/chromium/weblayer/BrowserFragmentTabListDelegate.java",
     "org/chromium/weblayer/BrowserRestoreCallback.java",
     "org/chromium/weblayer/BrowsingDataType.java",
     "org/chromium/weblayer/Callback.java",
@@ -193,8 +196,11 @@
     "org/chromium/browserfragment/interfaces/IBrowserSandboxCallback.aidl",
     "org/chromium/browserfragment/interfaces/IBrowserSandboxService.aidl",
     "org/chromium/browserfragment/interfaces/IFragmentParams.aidl",
+    "org/chromium/browserfragment/interfaces/INavigationObserverDelegate.aidl",
+    "org/chromium/browserfragment/interfaces/INavigationParams.aidl",
     "org/chromium/browserfragment/interfaces/IStringCallback.aidl",
     "org/chromium/browserfragment/interfaces/ITabCallback.aidl",
+    "org/chromium/browserfragment/interfaces/ITabListObserverDelegate.aidl",
     "org/chromium/browserfragment/interfaces/ITabNavigationControllerProxy.aidl",
     "org/chromium/browserfragment/interfaces/ITabObserverDelegate.aidl",
     "org/chromium/browserfragment/interfaces/ITabParams.aidl",
@@ -217,11 +223,17 @@
     "org/chromium/browserfragment/Browser.java",
     "org/chromium/browserfragment/BrowserFragment.java",
     "org/chromium/browserfragment/FragmentParams.java",
+    "org/chromium/browserfragment/Navigation.java",
+    "org/chromium/browserfragment/NavigationObserver.java",
+    "org/chromium/browserfragment/NavigationObserverDelegate.java",
     "org/chromium/browserfragment/Tab.java",
+    "org/chromium/browserfragment/TabListObserver.java",
+    "org/chromium/browserfragment/TabListObserverDelegate.java",
     "org/chromium/browserfragment/TabManager.java",
     "org/chromium/browserfragment/TabNavigationController.java",
     "org/chromium/browserfragment/TabObserver.java",
     "org/chromium/browserfragment/TabObserverDelegate.java",
+    "org/chromium/browserfragment/TabRegistry.java",
     "org/chromium/browserfragment/WebMessageCallback.java",
     "org/chromium/browserfragment/WebMessageReplyProxy.java",
   ]
diff --git a/weblayer/public/java/org/chromium/browserfragment/BrowserFragment.java b/weblayer/public/java/org/chromium/browserfragment/BrowserFragment.java
index 0b84012..69c88fc 100644
--- a/weblayer/public/java/org/chromium/browserfragment/BrowserFragment.java
+++ b/weblayer/public/java/org/chromium/browserfragment/BrowserFragment.java
@@ -40,7 +40,7 @@
     private SurfaceView mSurfaceView;
     private Browser mBrowser;
     private IBrowserFragmentDelegate mDelegate;
-    private final TabObserverDelegate mTabObserverDelegate = new TabObserverDelegate();
+    private final TabListObserverDelegate mTabListObserverDelegate = new TabListObserverDelegate();
     private ListenableFuture<TabManager> mFutureTabManager;
     private CallbackToFutureAdapter.Completer<TabManager> mTabManagerCompleter;
     private Bundle mInstanceState = new Bundle();
@@ -127,7 +127,7 @@
 
         try {
             mDelegate.setClient(mClient);
-            mDelegate.setTabObserverDelegate(mTabObserverDelegate);
+            mDelegate.setTabListObserverDelegate(mTabListObserverDelegate);
             mDelegate.onAttach();
         } catch (RemoteException e) {
         }
@@ -239,25 +239,25 @@
     }
 
     /**
-     * Register a tab observer and returns if successful.
+     * Registers a browser observer and returns if successful.
      *
-     * @param tabObserver The TabObserver.
+     * @param tabListObserver The TabListObserver.
      *
      * @return true if observer was added to the list of observers.
      */
-    public boolean registerTabObserver(@NonNull TabObserver tabObserver) {
-        return mTabObserverDelegate.registerObserver(tabObserver);
+    public boolean registerTabListObserver(@NonNull TabListObserver tabListObserver) {
+        return mTabListObserverDelegate.registerObserver(tabListObserver);
     }
 
     /**
-     * Unregister a tab observer and returns if successful.
+     * Unregisters a browser observer and returns if successful.
      *
-     * @param tabObserver The TabObserver to remove.
+     * @param tabListObserver The TabListObserver to remove.
      *
      * @return true if observer was removed from the list of observers.
      */
-    public boolean unregisterTabObserver(@NonNull TabObserver tabObserver) {
-        return mTabObserverDelegate.unregisterObserver(tabObserver);
+    public boolean unregisterTabListObserver(@NonNull TabListObserver tabListObserver) {
+        return mTabListObserverDelegate.unregisterObserver(tabListObserver);
     }
 
     private BrowserViewModel getViewModel() {
diff --git a/weblayer/public/java/org/chromium/browserfragment/Navigation.java b/weblayer/public/java/org/chromium/browserfragment/Navigation.java
new file mode 100644
index 0000000..97ac874
--- /dev/null
+++ b/weblayer/public/java/org/chromium/browserfragment/Navigation.java
@@ -0,0 +1,50 @@
+// 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.
+
+package org.chromium.browserfragment;
+
+import android.net.Uri;
+
+import androidx.annotation.NonNull;
+
+import org.chromium.browserfragment.interfaces.INavigationParams;
+
+/**
+ * {@link Navigation} contains information about the current Tab Navigation.
+ */
+public class Navigation {
+    private INavigationParams mNavigationParams;
+
+    Navigation(@NonNull INavigationParams navigationParams) {
+        mNavigationParams = navigationParams;
+    }
+
+    /**
+     * The uri the main frame is navigating to. This may change during the navigation when
+     * encountering a server redirect.
+     */
+    @NonNull
+    public Uri getUri() {
+        return mNavigationParams.uri;
+    }
+
+    /**
+     * Returns the status code of the navigation. Returns 0 if the navigation hasn't completed yet
+     * or if a response wasn't received.
+     */
+    public int getStatusCode() {
+        return mNavigationParams.statusCode;
+    }
+
+    /**
+     * Whether the navigation happened without changing document. Examples of same document
+     * navigations are:
+     *  - reference fragment navigations
+     *  - pushState/replaceState
+     *  - same page history navigation
+     */
+    public boolean isSameDocument() {
+        return mNavigationParams.isSameDocument;
+    }
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/NavigationObserver.java b/weblayer/public/java/org/chromium/browserfragment/NavigationObserver.java
new file mode 100644
index 0000000..5d5d9d05
--- /dev/null
+++ b/weblayer/public/java/org/chromium/browserfragment/NavigationObserver.java
@@ -0,0 +1,67 @@
+// 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.
+
+package org.chromium.browserfragment;
+
+import androidx.annotation.NonNull;
+
+/**
+ * An interface for observing changes to a Tab.
+ */
+public abstract class NavigationObserver {
+    /**
+     * Called when a navigation aborts in the Tab.
+     *
+     * Note that |navigation| is a snapshot of the current navigation, content might change over the
+     * course of the navigation.
+     *
+     * @param navigation the unique object for this navigation.
+     */
+    public void onNavigationFailed(@NonNull Navigation navigation) {}
+
+    /**
+     * Called when a navigation completes successfully in the Tab.
+     *
+     * The document load will still be ongoing in the Tab. Use the document loads
+     * events such as onFirstContentfulPaint and related methods to listen for continued events from
+     * this Tab.
+     *
+     * Note that this is fired by same-document navigations, such as fragment navigations or
+     * pushState/replaceState, which will not result in a document change. To filter these out, use
+     * NavigationHandle::IsSameDocument.
+     *
+     * Note that |navigation| is a snapshot of the current navigation, content might change over the
+     * course of the navigation.
+     *
+     * @param navigation the unique object for this navigation.
+     */
+    public void onNavigationCompleted(@NonNull Navigation navigation) {}
+
+    /**
+     * Called when a navigation started in the Tab. |navigation| is unique to a
+     * specific navigation.
+     *
+     * Note that this is only fired by navigations in the main frame.
+     *
+     * Note that this is fired by same-document navigations, such as fragment navigations or
+     * pushState/replaceState, which will not result in a document change. To filter these out, use
+     * Navigation::IsSameDocument.
+     *
+     * Note that |navigation| is a snapshot of the current navigation, content might change over the
+     * course of the navigation.
+     *
+     * Note that there is no guarantee that NavigationCompleted/NavigationFailed will be called for
+     * any particular navigation before NavigationStarted is called on the next.
+     *
+     * @param navigation the unique object for this navigation.
+     */
+    public void onNavigationStarted(@NonNull Navigation navigation) {}
+
+    /**
+     * The load state of the document has changed.
+     *
+     * @param progress The loading progress.
+     */
+    public void onLoadProgressChanged(double progress) {}
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/NavigationObserverDelegate.java b/weblayer/public/java/org/chromium/browserfragment/NavigationObserverDelegate.java
new file mode 100644
index 0000000..346a7e8
--- /dev/null
+++ b/weblayer/public/java/org/chromium/browserfragment/NavigationObserverDelegate.java
@@ -0,0 +1,79 @@
+// 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.
+
+package org.chromium.browserfragment;
+
+import android.os.Handler;
+import android.os.Looper;
+
+import androidx.annotation.NonNull;
+
+import org.chromium.base.ObserverList;
+import org.chromium.browserfragment.interfaces.INavigationObserverDelegate;
+import org.chromium.browserfragment.interfaces.INavigationParams;
+
+/**
+ * {@link NavigationObserverDelegate} notifies registered {@Link NavigationObserver}s of navigation
+ * events in a Tab.
+ */
+class NavigationObserverDelegate extends INavigationObserverDelegate.Stub {
+    private final Handler mHandler = new Handler(Looper.getMainLooper());
+
+    private ObserverList<NavigationObserver> mNavigationObservers =
+            new ObserverList<NavigationObserver>();
+
+    /**
+     * Registers a {@link NavigationObserver}.
+     *
+     * @return true if the observer was added to the list of observers.
+     */
+    boolean registerObserver(NavigationObserver tabObserver) {
+        return mNavigationObservers.addObserver(tabObserver);
+    }
+
+    /**
+     * Unregisters a {@link NavigationObserver}.
+     *
+     * @return true if the observer was removed from the list of observers.
+     */
+    boolean unregisterObserver(NavigationObserver tabObserver) {
+        return mNavigationObservers.removeObserver(tabObserver);
+    }
+
+    @Override
+    public void notifyNavigationStarted(@NonNull INavigationParams navigation) {
+        mHandler.post(() -> {
+            for (NavigationObserver observer : mNavigationObservers) {
+                observer.onNavigationStarted(new Navigation(navigation));
+            }
+        });
+    }
+
+    @Override
+    public void notifyNavigationCompleted(@NonNull INavigationParams navigation) {
+        mHandler.post(() -> {
+            for (NavigationObserver observer : mNavigationObservers) {
+                observer.onNavigationCompleted(new Navigation(navigation));
+            }
+        });
+    }
+
+    @Override
+    public void notifyNavigationFailed(@NonNull INavigationParams navigation) {
+        mHandler.post(() -> {
+            for (NavigationObserver observer : mNavigationObservers) {
+                observer.onNavigationFailed(new Navigation(navigation));
+            }
+        });
+    }
+
+    @Override
+    public void notifyLoadProgressChanged(double progress) {
+        mHandler.post(() -> {
+            for (NavigationObserver observer : mNavigationObservers) {
+                observer.onLoadProgressChanged(progress);
+            }
+        });
+    }
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/Tab.java b/weblayer/public/java/org/chromium/browserfragment/Tab.java
index c37ed22..f873b0f 100644
--- a/weblayer/public/java/org/chromium/browserfragment/Tab.java
+++ b/weblayer/public/java/org/chromium/browserfragment/Tab.java
@@ -25,7 +25,7 @@
 public class Tab {
     private ITabProxy mTabProxy;
     private TabNavigationController mTabNavigationController;
-
+    private TabObserverDelegate mTabObserverDelegate = new TabObserverDelegate();
     private String mGuid;
 
     Tab(@NonNull ITabParams tabParams) {
@@ -36,6 +36,11 @@
         mTabProxy = tabParams.tabProxy;
         mGuid = tabParams.tabGuid;
         mTabNavigationController = new TabNavigationController(tabParams.navigationControllerProxy);
+
+        try {
+            mTabProxy.setTabObserverDelegate(mTabObserverDelegate);
+        } catch (RemoteException e) {
+        }
     }
 
     public String getGuid() {
@@ -137,6 +142,27 @@
         } catch (RemoteException e) {
         }
     }
+    /**
+     * Registers a {@link TabObserver} and returns if successful.
+     *
+     * @param tabObserver The TabObserver.
+     *
+     * @return true if observer was added to the list of observers.
+     */
+    public boolean registerTabObserver(@NonNull TabObserver tabObserver) {
+        return mTabObserverDelegate.registerObserver(tabObserver);
+    }
+
+    /**
+     * Unregisters a {@link Tabobserver} and returns if successful.
+     *
+     * @param tabObserver The TabObserver to remove.
+     *
+     * @return true if observer was removed from the list of observers.
+     */
+    public boolean unregisterTabObserver(@NonNull TabObserver tabObserver) {
+        return mTabObserverDelegate.unregisterObserver(tabObserver);
+    }
 
     @Override
     public int hashCode() {
diff --git a/weblayer/public/java/org/chromium/browserfragment/TabListObserver.java b/weblayer/public/java/org/chromium/browserfragment/TabListObserver.java
new file mode 100644
index 0000000..836ccda
--- /dev/null
+++ b/weblayer/public/java/org/chromium/browserfragment/TabListObserver.java
@@ -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.
+
+package org.chromium.browserfragment;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+/**
+ * An interface for observing changes to the set of Tabs in a BrowserFragment.
+ */
+public abstract class TabListObserver {
+    /**
+     * The active tab has changed.
+     *
+     * @param activeTab The newly active tab, null if no tab is active.
+     */
+    public void onActiveTabChanged(@Nullable Tab activeTab) {}
+
+    /**
+     * A tab was added to the BrowserFragment.
+     *
+     * @param tab The tab that was added.
+     */
+    public void onTabAdded(@NonNull Tab tab) {}
+
+    /**
+     * A tab was removed from the BrowserFragment.
+     *
+     * WARNING: this is *not* called when the  BrowserFragment is destroyed. See {@link
+     * #onWillDestroyBrowserAndAllTabs} for more.
+     *
+     * @param tab The tab that was removed.
+     */
+    public void onTabRemoved(@NonNull Tab tab) {}
+
+    /**
+     * Called when the BrowserFragment is about to be destroyed. After this
+     * call the BrowserFragment with all Tabs are destroyed and can not be used.
+     */
+    public void onWillDestroyBrowserAndAllTabs() {}
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/TabListObserverDelegate.java b/weblayer/public/java/org/chromium/browserfragment/TabListObserverDelegate.java
new file mode 100644
index 0000000..b7d424e
--- /dev/null
+++ b/weblayer/public/java/org/chromium/browserfragment/TabListObserverDelegate.java
@@ -0,0 +1,85 @@
+// 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.
+
+package org.chromium.browserfragment;
+
+import android.os.Handler;
+import android.os.Looper;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import org.chromium.base.ObserverList;
+import org.chromium.browserfragment.interfaces.ITabListObserverDelegate;
+import org.chromium.browserfragment.interfaces.ITabParams;
+
+/**
+ * {@link TabListObserverDelegate} notifies {@link TabListObserver}s of events in the Browser.
+ */
+class TabListObserverDelegate extends ITabListObserverDelegate.Stub {
+    private final Handler mHandler = new Handler(Looper.getMainLooper());
+
+    private ObserverList<TabListObserver> mTabListObservers = new ObserverList<TabListObserver>();
+
+    /**
+     * Register a TabListObserver.
+     *
+     * @return true if the observer was added to the list of observers.
+     */
+    boolean registerObserver(TabListObserver tabListObserver) {
+        return mTabListObservers.addObserver(tabListObserver);
+    }
+
+    /**
+     * Unregister a TabListObserver.
+     *
+     * @return true if the observer was removed from the list of observers.
+     */
+    boolean unregisterObserver(TabListObserver tabListObserver) {
+        return mTabListObservers.removeObserver(tabListObserver);
+    }
+
+    @Override
+    public void notifyActiveTabChanged(@Nullable ITabParams tabParams) {
+        mHandler.post(() -> {
+            Tab tab = null;
+            if (tabParams != null) {
+                tab = TabRegistry.getInstance().getOrCreateTab(tabParams);
+            }
+            for (TabListObserver observer : mTabListObservers) {
+                observer.onActiveTabChanged(tab);
+            }
+        });
+    }
+
+    @Override
+    public void notifyTabAdded(@NonNull ITabParams tabParams) {
+        mHandler.post(() -> {
+            Tab tab = TabRegistry.getInstance().getOrCreateTab(tabParams);
+            for (TabListObserver observer : mTabListObservers) {
+                observer.onTabAdded(tab);
+            }
+        });
+    }
+
+    @Override
+    public void notifyTabRemoved(@NonNull ITabParams tabParams) {
+        mHandler.post(() -> {
+            Tab tab = TabRegistry.getInstance().getOrCreateTab(tabParams);
+            for (TabListObserver observer : mTabListObservers) {
+                observer.onTabRemoved(tab);
+            }
+            TabRegistry.getInstance().removeTab(tab);
+        });
+    }
+
+    @Override
+    public void notifyWillDestroyBrowserAndAllTabs() {
+        mHandler.post(() -> {
+            for (TabListObserver observer : mTabListObservers) {
+                observer.onWillDestroyBrowserAndAllTabs();
+            }
+        });
+    }
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/TabManager.java b/weblayer/public/java/org/chromium/browserfragment/TabManager.java
index 5765e5c..a416b5b 100644
--- a/weblayer/public/java/org/chromium/browserfragment/TabManager.java
+++ b/weblayer/public/java/org/chromium/browserfragment/TabManager.java
@@ -18,7 +18,7 @@
 import org.chromium.browserfragment.interfaces.ITabParams;
 
 /**
- * Class for interaction with Browser Tabs.
+ * Class for interaction with BrowserFragment Tabs.
  * Calls into BrowserFragmentDelegate which runs on the Binder thread, and requires
  * finished initialization from onCreate on UIThread.
  * Access only via ListenableFuture through BrowserFragment.
@@ -49,7 +49,7 @@
         @Override
         public void onResult(@Nullable ITabParams tabParams) {
             if (tabParams != null) {
-                mCompleter.set(new Tab(tabParams));
+                mCompleter.set(TabRegistry.getInstance().getOrCreateTab(tabParams));
                 return;
             }
             mCompleter.set(null);
diff --git a/weblayer/public/java/org/chromium/browserfragment/TabNavigationController.java b/weblayer/public/java/org/chromium/browserfragment/TabNavigationController.java
index 3e48e55..7d018bc 100644
--- a/weblayer/public/java/org/chromium/browserfragment/TabNavigationController.java
+++ b/weblayer/public/java/org/chromium/browserfragment/TabNavigationController.java
@@ -20,6 +20,9 @@
 public class TabNavigationController {
     private final ITabNavigationControllerProxy mTabNavigationControllerProxy;
 
+    private NavigationObserverDelegate mNavigationObserverDelegate =
+            new NavigationObserverDelegate();
+
     private final class RequestNavigationCallback extends IBooleanCallback.Stub {
         private CallbackToFutureAdapter.Completer<Boolean> mCompleter;
 
@@ -35,6 +38,11 @@
 
     TabNavigationController(ITabNavigationControllerProxy tabNavigationControllerProxy) {
         mTabNavigationControllerProxy = tabNavigationControllerProxy;
+        try {
+            mTabNavigationControllerProxy.setNavigationObserverDelegate(
+                    mNavigationObserverDelegate);
+        } catch (RemoteException e) {
+        }
     }
 
     /**
@@ -100,4 +108,26 @@
             return "Can navigate forward Future";
         });
     }
+
+    /**
+     * Registers a {@link NavigationObserver} and returns if successful.
+     *
+     * @param navigationObserver The {@link NavigationObserver}.
+     *
+     * @return true if observer was added to the list of observers.
+     */
+    public boolean registerNavigationObserver(@NonNull NavigationObserver navigationObserver) {
+        return mNavigationObserverDelegate.registerObserver(navigationObserver);
+    }
+
+    /**
+     * Unregisters a {@link NavigationObserver} and returns if successful.
+     *
+     * @param navigationObserver The TabObserver to remove.
+     *
+     * @return true if observer was removed from the list of observers.
+     */
+    public boolean unregisterNavigationObserver(@NonNull NavigationObserver navigationObserver) {
+        return mNavigationObserverDelegate.unregisterObserver(navigationObserver);
+    }
 }
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/TabObserver.java b/weblayer/public/java/org/chromium/browserfragment/TabObserver.java
index 11584a7..d8ad526 100644
--- a/weblayer/public/java/org/chromium/browserfragment/TabObserver.java
+++ b/weblayer/public/java/org/chromium/browserfragment/TabObserver.java
@@ -5,39 +5,29 @@
 package org.chromium.browserfragment;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 
 /**
- * An interface for observing changes to the set of tabs in a BrowserFragment.
+ * An interface for observing changes to a Tab.
  */
 public abstract class TabObserver {
     /**
-     * The active tab has changed.
+     * The Uri that can be displayed in the location-bar has updated.
      *
-     * @param activeTab The newly active tab, null if no tab is active.
+     * @param uri The new user-visible uri.
      */
-    public void onActiveTabChanged(@Nullable Tab activeTab) {}
+    public void onVisibleUriChanged(@NonNull String uri) {}
 
     /**
-     * A tab was added to the BrowserFragment.
+     * Called when the title of this tab changes. Note before the page sets a title, the title may
+     * be a portion of the Uri.
      *
-     * @param tab The tab that was added.
+     * @param title New title of this tab.
      */
-    public void onTabAdded(@NonNull Tab tab) {}
+    public void onTitleUpdated(@NonNull String title) {}
 
     /**
-     * A tab was removed from the BrowserFragment.
-     *
-     * WARNING: this is *not* called when the  BrowserFragment is destroyed. See {@link
-     * #onWillDestroyBrowserAndAllTabs} for more.
-     *
-     * @param tab The tab that was removed.
+     * Triggered when the render process dies, either due to crash or killed by the system to
+     * reclaim memory.
      */
-    public void onTabRemoved(@NonNull Tab tab) {}
-
-    /**
-     * Called when the BrowserFragment is about to be destroyed. After this
-     * call the BrowserFragment with all Tabs are destroyed and can not be used.
-     */
-    public void onWillDestroyBrowserAndAllTabs() {}
+    public void onRenderProcessGone() {}
 }
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/TabObserverDelegate.java b/weblayer/public/java/org/chromium/browserfragment/TabObserverDelegate.java
index 7614f96..4750ebe 100644
--- a/weblayer/public/java/org/chromium/browserfragment/TabObserverDelegate.java
+++ b/weblayer/public/java/org/chromium/browserfragment/TabObserverDelegate.java
@@ -8,14 +8,12 @@
 import android.os.Looper;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 
 import org.chromium.base.ObserverList;
 import org.chromium.browserfragment.interfaces.ITabObserverDelegate;
-import org.chromium.browserfragment.interfaces.ITabParams;
 
 /**
- * TabObserverDelegate notifies TabObservers of Tab-events in weblayer.
+ * {@link TabObserverDelegate} notifies registered {@Link TabObserver}s of events in the Tab.
  */
 class TabObserverDelegate extends ITabObserverDelegate.Stub {
     private final Handler mHandler = new Handler(Looper.getMainLooper());
@@ -23,7 +21,7 @@
     private ObserverList<TabObserver> mTabObservers = new ObserverList<TabObserver>();
 
     /**
-     * Register a TabObserver.
+     * Registers a {@link TabObserver}.
      *
      * @return true if the observer was added to the list of observers.
      */
@@ -32,7 +30,7 @@
     }
 
     /**
-     * Unregister a TabObserver.
+     * Unregisters a {@link TabObserver}.
      *
      * @return true if the observer was removed from the list of observers.
      */
@@ -41,43 +39,28 @@
     }
 
     @Override
-    public void notifyActiveTabChanged(@Nullable ITabParams tabParams) {
+    public void notifyVisibleUriChanged(@NonNull String uri) {
         mHandler.post(() -> {
-            Tab tab = null;
-            if (tabParams != null) {
-                tab = new Tab(tabParams);
-            }
             for (TabObserver observer : mTabObservers) {
-                observer.onActiveTabChanged(tab);
+                observer.onVisibleUriChanged(uri);
             }
         });
     }
 
     @Override
-    public void notifyTabAdded(@NonNull ITabParams tabParams) {
+    public void notifyTitleUpdated(@NonNull String title) {
         mHandler.post(() -> {
-            Tab tab = new Tab(tabParams);
             for (TabObserver observer : mTabObservers) {
-                observer.onTabAdded(tab);
+                observer.onTitleUpdated(title);
             }
         });
     }
 
     @Override
-    public void notifyTabRemoved(@NonNull ITabParams tabParams) {
-        mHandler.post(() -> {
-            Tab tab = new Tab(tabParams);
-            for (TabObserver observer : mTabObservers) {
-                observer.onTabRemoved(tab);
-            }
-        });
-    }
-
-    @Override
-    public void notifyWillDestroyBrowserAndAllTabs() {
+    public void notifyRenderProcessGone() {
         mHandler.post(() -> {
             for (TabObserver observer : mTabObservers) {
-                observer.onWillDestroyBrowserAndAllTabs();
+                observer.onRenderProcessGone();
             }
         });
     }
diff --git a/weblayer/public/java/org/chromium/browserfragment/TabRegistry.java b/weblayer/public/java/org/chromium/browserfragment/TabRegistry.java
new file mode 100644
index 0000000..4f797fc47
--- /dev/null
+++ b/weblayer/public/java/org/chromium/browserfragment/TabRegistry.java
@@ -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.
+
+package org.chromium.browserfragment;
+
+import org.chromium.browserfragment.interfaces.ITabParams;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Tab registry for storing open {@link Tab}s on the browserfragment side.
+ *
+ * For internal use only.
+ */
+class TabRegistry {
+    private Map<String, Tab> mGuidToTab = new HashMap<String, Tab>();
+
+    private static TabRegistry sInstance;
+
+    private TabRegistry() {}
+
+    static TabRegistry getInstance() {
+        if (sInstance == null) {
+            sInstance = new TabRegistry();
+        }
+        return sInstance;
+    }
+
+    Tab getOrCreateTab(ITabParams tabParams) {
+        Tab tab = mGuidToTab.get(tabParams.tabGuid);
+        if (tab == null) {
+            tab = new Tab(tabParams);
+            mGuidToTab.put(tabParams.tabGuid, tab);
+        }
+        return tab;
+    }
+
+    void removeTab(Tab tab) {
+        mGuidToTab.remove(tab.getGuid());
+    }
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/interfaces/IBrowserFragmentDelegate.aidl b/weblayer/public/java/org/chromium/browserfragment/interfaces/IBrowserFragmentDelegate.aidl
index 256dee12..0735599 100644
--- a/weblayer/public/java/org/chromium/browserfragment/interfaces/IBrowserFragmentDelegate.aidl
+++ b/weblayer/public/java/org/chromium/browserfragment/interfaces/IBrowserFragmentDelegate.aidl
@@ -7,7 +7,7 @@
 import android.os.Bundle;
 import org.chromium.browserfragment.interfaces.IBrowserFragmentDelegateClient;
 import org.chromium.browserfragment.interfaces.IBooleanCallback;
-import org.chromium.browserfragment.interfaces.ITabObserverDelegate;
+import org.chromium.browserfragment.interfaces.ITabListObserverDelegate;
 import org.chromium.browserfragment.interfaces.ITabProxy;
 import org.chromium.browserfragment.interfaces.ITabCallback;
 
@@ -32,7 +32,7 @@
 
     // Tab operations.
     void getActiveTab(ITabCallback callback) = 14;
-    void setTabObserverDelegate(ITabObserverDelegate tabObserverDelegate) = 15;
+    void setTabListObserverDelegate(ITabListObserverDelegate tabListObserverDelegate) = 15;
     void tryNavigateBack(IBooleanCallback callback) = 17;
     void createTab(ITabCallback callback) = 18;
 }
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/interfaces/INavigationObserverDelegate.aidl b/weblayer/public/java/org/chromium/browserfragment/interfaces/INavigationObserverDelegate.aidl
new file mode 100644
index 0000000..c9d5a353
--- /dev/null
+++ b/weblayer/public/java/org/chromium/browserfragment/interfaces/INavigationObserverDelegate.aidl
@@ -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.
+
+package org.chromium.browserfragment.interfaces;
+
+import org.chromium.browserfragment.interfaces.INavigationParams;
+
+oneway interface INavigationObserverDelegate {
+    void notifyNavigationStarted(in INavigationParams navigation) = 1;
+    void notifyNavigationCompleted(in INavigationParams navigation) = 2;
+    void notifyNavigationFailed(in INavigationParams navigation) = 3;
+    void notifyLoadProgressChanged(double progress) = 4;
+}
diff --git a/weblayer/public/java/org/chromium/browserfragment/interfaces/INavigationParams.aidl b/weblayer/public/java/org/chromium/browserfragment/interfaces/INavigationParams.aidl
new file mode 100644
index 0000000..06c2c58
--- /dev/null
+++ b/weblayer/public/java/org/chromium/browserfragment/interfaces/INavigationParams.aidl
@@ -0,0 +1,16 @@
+// 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.
+
+package org.chromium.browserfragment.interfaces;
+
+import android.net.Uri;
+
+import org.chromium.browserfragment.interfaces.ITabProxy;
+import org.chromium.browserfragment.interfaces.ITabNavigationControllerProxy;
+
+parcelable INavigationParams {
+    Uri uri;
+    int statusCode;
+    boolean isSameDocument;
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabListObserverDelegate.aidl b/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabListObserverDelegate.aidl
new file mode 100644
index 0000000..311bf71
--- /dev/null
+++ b/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabListObserverDelegate.aidl
@@ -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.
+
+package org.chromium.browserfragment.interfaces;
+
+import org.chromium.browserfragment.interfaces.ITabParams;
+
+oneway interface ITabListObserverDelegate {
+    void notifyActiveTabChanged(in ITabParams tabParams) = 1;
+    void notifyTabAdded(in ITabParams tabParams) = 2;
+    void notifyTabRemoved(in ITabParams tabParams) = 3;
+    void notifyWillDestroyBrowserAndAllTabs() = 4;
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabNavigationControllerProxy.aidl b/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabNavigationControllerProxy.aidl
index f79ba9ef..f3439b1 100644
--- a/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabNavigationControllerProxy.aidl
+++ b/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabNavigationControllerProxy.aidl
@@ -5,6 +5,7 @@
 package org.chromium.browserfragment.interfaces;
 
 import org.chromium.browserfragment.interfaces.IBooleanCallback;
+import org.chromium.browserfragment.interfaces.INavigationObserverDelegate;
 
 oneway interface ITabNavigationControllerProxy {
     void navigate(in String uri) = 1;
@@ -13,4 +14,5 @@
     void canGoBack(IBooleanCallback callback) = 4;
     void canGoForward(IBooleanCallback callback) = 5;
 
+    void setNavigationObserverDelegate(INavigationObserverDelegate tabNavigationDelegate) = 6;
 }
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabObserverDelegate.aidl b/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabObserverDelegate.aidl
index 2a9e9aa..3764de1 100644
--- a/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabObserverDelegate.aidl
+++ b/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabObserverDelegate.aidl
@@ -7,8 +7,7 @@
 import org.chromium.browserfragment.interfaces.ITabParams;
 
 oneway interface ITabObserverDelegate {
-    void notifyActiveTabChanged(in ITabParams tabParams) = 1;
-    void notifyTabAdded(in ITabParams tabParams) = 2;
-    void notifyTabRemoved(in ITabParams tabParams) = 3;
-    void notifyWillDestroyBrowserAndAllTabs() = 4;
+    void notifyTitleUpdated(String title) = 1;
+    void notifyVisibleUriChanged(String uri) = 2;
+    void notifyRenderProcessGone() = 3;
 }
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabProxy.aidl b/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabProxy.aidl
index 03bc1c5..39f742c 100644
--- a/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabProxy.aidl
+++ b/weblayer/public/java/org/chromium/browserfragment/interfaces/ITabProxy.aidl
@@ -8,6 +8,7 @@
 import org.chromium.browserfragment.interfaces.IWebMessageCallback;
 
 import java.util.List;
+import org.chromium.browserfragment.interfaces.ITabObserverDelegate;
 
 oneway interface ITabProxy {
   void setActive() = 1;
@@ -16,4 +17,6 @@
 
   void registerWebMessageCallback(in IWebMessageCallback callback, in String jsObjectName, in List<String> allowedOrigins) = 4;
   void unregisterWebMessageCallback(in String jsObjectName) = 5;
+
+  void setTabObserverDelegate(ITabObserverDelegate tabObserverDelegate) = 6;
 }
diff --git a/weblayer/public/java/org/chromium/weblayer/BrowserFragmentDelegate.java b/weblayer/public/java/org/chromium/weblayer/BrowserFragmentDelegate.java
index a82adc06..8409938 100644
--- a/weblayer/public/java/org/chromium/weblayer/BrowserFragmentDelegate.java
+++ b/weblayer/public/java/org/chromium/weblayer/BrowserFragmentDelegate.java
@@ -18,7 +18,7 @@
 import org.chromium.browserfragment.interfaces.IBrowserFragmentDelegateClient;
 import org.chromium.browserfragment.interfaces.IFragmentParams;
 import org.chromium.browserfragment.interfaces.ITabCallback;
-import org.chromium.browserfragment.interfaces.ITabObserverDelegate;
+import org.chromium.browserfragment.interfaces.ITabListObserverDelegate;
 import org.chromium.browserfragment.interfaces.ITabParams;
 import org.chromium.weblayer_private.interfaces.ObjectWrapper;
 
@@ -35,7 +35,7 @@
     // TODO(rayankans): Create an event handler instead of using the weblayer fragment directly.
     private BrowserFragment mFragment;
 
-    private BrowserFragmentTabDelegate mTabDelegate;
+    private BrowserFragmentTabListDelegate mBrowserDelegate;
 
     private IBrowserFragmentDelegateClient mClient;
     private SurfaceControlViewHost mSurfaceControlViewHost;
@@ -43,7 +43,7 @@
     BrowserFragmentDelegate(Context context, WebLayer webLayer, IFragmentParams params) {
         mContext = context;
         mWebLayer = webLayer;
-        mTabDelegate = new BrowserFragmentTabDelegate();
+        mBrowserDelegate = new BrowserFragmentTabListDelegate();
 
         BrowserFragmentCreateParams createParams = (new BrowserFragmentCreateParams.Builder())
                                                            .setProfileName(params.profileName)
@@ -123,7 +123,7 @@
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
-        mHandler.post(() -> mFragment.onCreate(savedInstanceState, mTabDelegate));
+        mHandler.post(() -> mFragment.onCreate(savedInstanceState, mBrowserDelegate));
     }
 
     @Override
@@ -174,8 +174,8 @@
     }
 
     @Override
-    public void setTabObserverDelegate(ITabObserverDelegate tabObserverDelegate) {
-        mTabDelegate.setObserver(tabObserverDelegate);
+    public void setTabListObserverDelegate(ITabListObserverDelegate browserObserverDelegate) {
+        mBrowserDelegate.setObserver(browserObserverDelegate);
     }
 
     @Override
diff --git a/weblayer/public/java/org/chromium/weblayer/BrowserFragmentNavigationDelegate.java b/weblayer/public/java/org/chromium/weblayer/BrowserFragmentNavigationDelegate.java
new file mode 100644
index 0000000..587a94a
--- /dev/null
+++ b/weblayer/public/java/org/chromium/weblayer/BrowserFragmentNavigationDelegate.java
@@ -0,0 +1,62 @@
+// 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.
+
+package org.chromium.weblayer;
+
+import android.os.RemoteException;
+
+import androidx.annotation.NonNull;
+
+import org.chromium.browserfragment.interfaces.INavigationObserverDelegate;
+
+/**
+ * This class acts as a proxy between the Tab navigation events happening in
+ * weblayer and the NavigationObserverDelegate in browserfragment.
+ */
+class BrowserFragmentNavigationDelegate extends NavigationCallback {
+    private INavigationObserverDelegate mNavigationObserver;
+
+    void setObserver(INavigationObserverDelegate observer) {
+        mNavigationObserver = observer;
+    }
+
+    @Override
+    public void onNavigationStarted(@NonNull Navigation navigation) {
+        maybeRunOnNavigationObserver(observer -> {
+            observer.notifyNavigationStarted(BrowserFragmentNavigationParams.create(navigation));
+        });
+    }
+
+    @Override
+    public void onNavigationCompleted(@NonNull Navigation navigation) {
+        maybeRunOnNavigationObserver(observer -> {
+            observer.notifyNavigationCompleted(BrowserFragmentNavigationParams.create(navigation));
+        });
+    }
+
+    @Override
+    public void onNavigationFailed(@NonNull Navigation navigation) {
+        maybeRunOnNavigationObserver(observer -> {
+            observer.notifyNavigationFailed(BrowserFragmentNavigationParams.create(navigation));
+        });
+    }
+
+    @Override
+    public void onLoadProgressChanged(double progress) {
+        maybeRunOnNavigationObserver(observer -> observer.notifyLoadProgressChanged(progress));
+    }
+
+    private interface OnNavigationObserverCallback {
+        void run(INavigationObserverDelegate navigationObserver) throws RemoteException;
+    }
+
+    private void maybeRunOnNavigationObserver(OnNavigationObserverCallback callback) {
+        if (mNavigationObserver != null) {
+            try {
+                callback.run(mNavigationObserver);
+            } catch (RemoteException e) {
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/weblayer/BrowserFragmentNavigationParams.java b/weblayer/public/java/org/chromium/weblayer/BrowserFragmentNavigationParams.java
new file mode 100644
index 0000000..40d73f5
--- /dev/null
+++ b/weblayer/public/java/org/chromium/weblayer/BrowserFragmentNavigationParams.java
@@ -0,0 +1,22 @@
+// 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.
+
+package org.chromium.weblayer;
+
+import org.chromium.browserfragment.interfaces.INavigationParams;
+
+/**
+ * This class is a helper class to create {@link INavigationParams}-parcelable.
+ */
+class BrowserFragmentNavigationParams {
+    private BrowserFragmentNavigationParams() {}
+
+    public static INavigationParams create(Navigation navigation) {
+        INavigationParams params = new INavigationParams();
+        params.uri = navigation.getUri();
+        params.statusCode = navigation.getHttpStatusCode();
+        params.isSameDocument = navigation.isSameDocument();
+        return params;
+    }
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/weblayer/BrowserFragmentTabDelegate.java b/weblayer/public/java/org/chromium/weblayer/BrowserFragmentTabDelegate.java
index dd937f0..0351a8df 100644
--- a/weblayer/public/java/org/chromium/weblayer/BrowserFragmentTabDelegate.java
+++ b/weblayer/public/java/org/chromium/weblayer/BrowserFragmentTabDelegate.java
@@ -4,71 +4,37 @@
 
 package org.chromium.weblayer;
 
+import android.net.Uri;
 import android.os.RemoteException;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 
 import org.chromium.browserfragment.interfaces.ITabObserverDelegate;
-import org.chromium.browserfragment.interfaces.ITabParams;
 
 /**
  * This class acts as a proxy between the Tab events happening in
- * weblayer and the TabManager in browserfragment.
+ * weblayer and the TabObserverDelegate in browserfragment.
  */
-class BrowserFragmentTabDelegate extends TabListCallback {
+class BrowserFragmentTabDelegate extends TabCallback {
     private ITabObserverDelegate mTabObserver;
 
-    private final NewTabCallback mNewTabCallback = new NewTabCallback() {
-        @Override
-        public void onNewTab(@NonNull Tab tab, @NewTabType int type) {
-            // Set foreground tabs and tabs in new windows by default to active.
-            switch (type) {
-                case NewTabType.FOREGROUND_TAB:
-                case NewTabType.NEW_WINDOW:
-                    tab.getBrowser().setActiveTab(tab);
-                    break;
-            }
-        }
-    };
-
     void setObserver(ITabObserverDelegate observer) {
         mTabObserver = observer;
     }
 
     @Override
-    public void onActiveTabChanged(@Nullable Tab tab) {
-        maybeRunOnTabObserver(observer -> {
-            ITabParams tabParams = null;
-            if (tab != null) {
-                tabParams = TabParams.buildParcelable(tab);
-            }
-            observer.notifyActiveTabChanged(tabParams);
-        });
+    public void onVisibleUriChanged(@NonNull Uri uri) {
+        maybeRunOnTabObserver(observer -> { observer.notifyVisibleUriChanged(uri.toString()); });
     }
 
     @Override
-    public void onTabAdded(@NonNull Tab tab) {
-        // This is a requirement to open new tabs.
-        tab.setNewTabCallback(mNewTabCallback);
-
-        maybeRunOnTabObserver(observer -> {
-            ITabParams tabParams = TabParams.buildParcelable(tab);
-            observer.notifyTabAdded(tabParams);
-        });
+    public void onRenderProcessGone() {
+        maybeRunOnTabObserver(observer -> { observer.notifyRenderProcessGone(); });
     }
 
     @Override
-    public void onTabRemoved(@NonNull Tab tab) {
-        maybeRunOnTabObserver(observer -> {
-            ITabParams tabParams = TabParams.buildParcelable(tab);
-            observer.notifyTabRemoved(tabParams);
-        });
-    }
-
-    @Override
-    public void onWillDestroyBrowserAndAllTabs() {
-        maybeRunOnTabObserver(observer -> observer.notifyWillDestroyBrowserAndAllTabs());
+    public void onTitleUpdated(@NonNull String title) {
+        maybeRunOnTabObserver(observer -> { observer.notifyTitleUpdated(title); });
     }
 
     private interface OnTabObserverCallback {
diff --git a/weblayer/public/java/org/chromium/weblayer/BrowserFragmentTabListDelegate.java b/weblayer/public/java/org/chromium/weblayer/BrowserFragmentTabListDelegate.java
new file mode 100644
index 0000000..8bee486
--- /dev/null
+++ b/weblayer/public/java/org/chromium/weblayer/BrowserFragmentTabListDelegate.java
@@ -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.
+
+package org.chromium.weblayer;
+
+import android.os.RemoteException;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import org.chromium.browserfragment.interfaces.ITabListObserverDelegate;
+import org.chromium.browserfragment.interfaces.ITabParams;
+
+/**
+ * This class acts as a proxy between the TabList events happening in
+ * weblayer and the BrowserObserverDelegate in browserfragment.
+ */
+class BrowserFragmentTabListDelegate extends TabListCallback {
+    private ITabListObserverDelegate mBrowserObserver;
+
+    private final NewTabCallback mNewTabCallback = new NewTabCallback() {
+        @Override
+        public void onNewTab(@NonNull Tab tab, @NewTabType int type) {
+            // Set foreground tabs and tabs in new windows by default to active.
+            switch (type) {
+                case NewTabType.FOREGROUND_TAB:
+                case NewTabType.NEW_WINDOW:
+                    tab.getBrowser().setActiveTab(tab);
+                    break;
+            }
+        }
+    };
+
+    void setObserver(ITabListObserverDelegate observer) {
+        mBrowserObserver = observer;
+    }
+
+    @Override
+    public void onActiveTabChanged(@Nullable Tab tab) {
+        maybeRunOnBrowserObserver(observer -> {
+            ITabParams tabParams = null;
+            if (tab != null) {
+                tabParams = TabParams.buildParcelable(tab);
+            }
+            observer.notifyActiveTabChanged(tabParams);
+        });
+    }
+
+    @Override
+    public void onTabAdded(@NonNull Tab tab) {
+        // This is a requirement to open new tabs.
+        tab.setNewTabCallback(mNewTabCallback);
+
+        maybeRunOnBrowserObserver(observer -> {
+            ITabParams tabParams = TabParams.buildParcelable(tab);
+            observer.notifyTabAdded(tabParams);
+        });
+    }
+
+    @Override
+    public void onTabRemoved(@NonNull Tab tab) {
+        maybeRunOnBrowserObserver(observer -> {
+            ITabParams tabParams = TabParams.buildParcelable(tab);
+            observer.notifyTabRemoved(tabParams);
+        });
+    }
+
+    @Override
+    public void onWillDestroyBrowserAndAllTabs() {
+        maybeRunOnBrowserObserver(observer -> observer.notifyWillDestroyBrowserAndAllTabs());
+    }
+
+    private interface OnBrowserObserverCallback {
+        void run(ITabListObserverDelegate tabObserver) throws RemoteException;
+    }
+
+    private void maybeRunOnBrowserObserver(OnBrowserObserverCallback callback) {
+        if (mBrowserObserver != null) {
+            try {
+                callback.run(mBrowserObserver);
+            } catch (RemoteException e) {
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/weblayer/Tab.java b/weblayer/public/java/org/chromium/weblayer/Tab.java
index ac81926..21709be3 100644
--- a/weblayer/public/java/org/chromium/weblayer/Tab.java
+++ b/weblayer/public/java/org/chromium/weblayer/Tab.java
@@ -55,6 +55,10 @@
     private NewTabCallback mNewTabCallback;
     private final ObserverList<ScrollOffsetCallback> mScrollOffsetCallbacks;
     private @Nullable ActionModeCallback mActionModeCallback;
+
+    private TabProxy mTabProxy;
+    private TabNavigationControllerProxy mTabNavigationControllerProxy;
+
     // Id from the remote side.
     private final int mId;
     // Guid from the remote side.
@@ -70,6 +74,8 @@
         mScrollOffsetCallbacks = null;
         mId = 0;
         mGuid = "";
+        mTabProxy = null;
+        mTabNavigationControllerProxy = null;
     }
 
     Tab(ITab impl, Browser browser) {
@@ -88,6 +94,10 @@
         mNavigationController = NavigationController.create(mImpl);
         mFindInPageController = new FindInPageController(mImpl);
         mMediaCaptureController = new MediaCaptureController(mImpl);
+
+        mTabProxy = new TabProxy(this);
+        mTabNavigationControllerProxy = new TabNavigationControllerProxy(mNavigationController);
+
         registerTab(this);
     }
 
@@ -420,6 +430,16 @@
         return mGuid;
     }
 
+    @NonNull
+    TabNavigationControllerProxy getTabNavigationControllerProxy() {
+        return mTabNavigationControllerProxy;
+    }
+
+    @NonNull
+    TabProxy getTabProxy() {
+        return mTabProxy;
+    }
+
     /**
      * Set arbitrary data on the tab. This will be saved and restored with the browser, so it is
      * important to keep this data as small as possible.
diff --git a/weblayer/public/java/org/chromium/weblayer/TabNavigationControllerProxy.java b/weblayer/public/java/org/chromium/weblayer/TabNavigationControllerProxy.java
index fd2407e..4181612 100644
--- a/weblayer/public/java/org/chromium/weblayer/TabNavigationControllerProxy.java
+++ b/weblayer/public/java/org/chromium/weblayer/TabNavigationControllerProxy.java
@@ -10,15 +10,20 @@
 import android.os.RemoteException;
 
 import org.chromium.browserfragment.interfaces.IBooleanCallback;
+import org.chromium.browserfragment.interfaces.INavigationObserverDelegate;
 import org.chromium.browserfragment.interfaces.ITabNavigationControllerProxy;
 
 class TabNavigationControllerProxy extends ITabNavigationControllerProxy.Stub {
     private final Handler mHandler = new Handler(Looper.getMainLooper());
 
+    private BrowserFragmentNavigationDelegate mNavigationObserverDelegate =
+            new BrowserFragmentNavigationDelegate();
     private final NavigationController mNavigationController;
 
     TabNavigationControllerProxy(NavigationController navigationController) {
         mNavigationController = navigationController;
+
+        mNavigationController.registerNavigationCallback(mNavigationObserverDelegate);
     }
 
     @Override
@@ -59,4 +64,9 @@
             }
         });
     }
+
+    @Override
+    public void setNavigationObserverDelegate(INavigationObserverDelegate navigationDelegate) {
+        mNavigationObserverDelegate.setObserver(navigationDelegate);
+    }
 }
\ No newline at end of file
diff --git a/weblayer/public/java/org/chromium/weblayer/TabParams.java b/weblayer/public/java/org/chromium/weblayer/TabParams.java
index a647844..979f00d 100644
--- a/weblayer/public/java/org/chromium/weblayer/TabParams.java
+++ b/weblayer/public/java/org/chromium/weblayer/TabParams.java
@@ -14,10 +14,9 @@
 class TabParams {
     static ITabParams buildParcelable(@NonNull Tab tab) {
         ITabParams parcel = new ITabParams();
-        parcel.tabProxy = new TabProxy(tab);
+        parcel.tabProxy = tab.getTabProxy();
         parcel.tabGuid = tab.getGuid();
-        parcel.navigationControllerProxy =
-                new TabNavigationControllerProxy(tab.getNavigationController());
+        parcel.navigationControllerProxy = tab.getTabNavigationControllerProxy();
 
         return parcel;
     }
diff --git a/weblayer/public/java/org/chromium/weblayer/TabProxy.java b/weblayer/public/java/org/chromium/weblayer/TabProxy.java
index ea78b72e..9f607e0 100644
--- a/weblayer/public/java/org/chromium/weblayer/TabProxy.java
+++ b/weblayer/public/java/org/chromium/weblayer/TabProxy.java
@@ -9,6 +9,7 @@
 import android.os.RemoteException;
 
 import org.chromium.browserfragment.interfaces.IStringCallback;
+import org.chromium.browserfragment.interfaces.ITabObserverDelegate;
 import org.chromium.browserfragment.interfaces.ITabProxy;
 import org.chromium.browserfragment.interfaces.IWebMessageCallback;
 
@@ -17,6 +18,7 @@
 /**
  * This class acts as a proxy between a Tab object in the embedding app
  * and the Tab implementation in WebLayer.
+ * A (@link TabProxy} is owned by the {@link Tab}.
  */
 class TabProxy extends ITabProxy.Stub {
     private final Handler mHandler = new Handler(Looper.getMainLooper());
@@ -24,14 +26,23 @@
     private int mTabId;
     private String mGuid;
 
+    private BrowserFragmentTabDelegate mTabObserverDelegate = new BrowserFragmentTabDelegate();
+    private BrowserFragmentNavigationDelegate mNavigationObserverDelegate =
+            new BrowserFragmentNavigationDelegate();
+
     TabProxy(Tab tab) {
         mTabId = tab.getId();
         mGuid = tab.getGuid();
+
+        tab.registerTabCallback(mTabObserverDelegate);
     }
 
     void invalidate() {
         mTabId = -1;
         mGuid = null;
+
+        mTabObserverDelegate = null;
+        mNavigationObserverDelegate = null;
     }
 
     boolean isValid() {
@@ -116,4 +127,9 @@
     public void unregisterWebMessageCallback(String jsObjectName) {
         mHandler.post(() -> { getTab().unregisterWebMessageCallback(jsObjectName); });
     }
+
+    @Override
+    public void setTabObserverDelegate(ITabObserverDelegate tabObserverDelegate) {
+        mTabObserverDelegate.setObserver(tabObserverDelegate);
+    }
 }
diff --git a/weblayer/shell/android/browserfragment_shell_apk/src/org/chromium/browserfragment/shell/BrowserFragmentShellActivity.java b/weblayer/shell/android/browserfragment_shell_apk/src/org/chromium/browserfragment/shell/BrowserFragmentShellActivity.java
index 30b89504..579cafd9 100644
--- a/weblayer/shell/android/browserfragment_shell_apk/src/org/chromium/browserfragment/shell/BrowserFragmentShellActivity.java
+++ b/weblayer/shell/android/browserfragment_shell_apk/src/org/chromium/browserfragment/shell/BrowserFragmentShellActivity.java
@@ -24,7 +24,10 @@
 import org.chromium.browserfragment.Browser;
 import org.chromium.browserfragment.BrowserFragment;
 import org.chromium.browserfragment.FragmentParams;
+import org.chromium.browserfragment.Navigation;
+import org.chromium.browserfragment.NavigationObserver;
 import org.chromium.browserfragment.Tab;
+import org.chromium.browserfragment.TabListObserver;
 import org.chromium.browserfragment.TabManager;
 import org.chromium.browserfragment.TabObserver;
 import org.chromium.browserfragment.WebMessageCallback;
@@ -93,25 +96,77 @@
 
         BrowserFragment fragment = getOrCreateBrowserFragment(browser, savedInstanceState);
 
-        fragment.registerTabObserver(new TabObserver() {
+        fragment.registerTabListObserver(new TabListObserver() {
             @Override
             public void onActiveTabChanged(@Nullable Tab activeTab) {
-                Log.i(TAG, "received 'onActiveTabChanged'-event");
+                Log.i(TAG, "received BrowserEvent: 'onActiveTabChanged'-event");
             }
 
             @Override
             public void onTabAdded(@NonNull Tab tab) {
-                Log.i(TAG, "received 'onTabAdded'-event");
+                Log.i(TAG, "received BrowserEvent: 'onTabAdded'-event");
+                tab.registerTabObserver(new TabObserver() {
+                    @Override
+                    public void onVisibleUriChanged(@NonNull String uri) {
+                        Log.i(TAG, "received TabEvent: 'onVisibleUriChanged(" + uri + ")'");
+                    }
+
+                    @Override
+                    public void onTitleUpdated(@NonNull String title) {
+                        Log.i(TAG, "received TabEvent: 'onTitleUpdated(" + title + ")'");
+                    }
+
+                    @Override
+                    public void onRenderProcessGone() {
+                        Log.i(TAG, "received TabEvent: 'onRenderProcessGone()'");
+                    }
+                });
+
+                tab.getNavigationController().registerNavigationObserver(new NavigationObserver() {
+                    @Override
+                    public void onNavigationFailed(@NonNull Navigation navigation) {
+                        Log.i(TAG, "received NavigationEvent: 'onNavigationFailed()';");
+                        Log.i(TAG,
+                                "Navigation: url:" + navigation.getUri()
+                                        + ", HTTP-StatusCode: " + navigation.getStatusCode()
+                                        + ", samePage: " + navigation.isSameDocument());
+                    }
+
+                    @Override
+                    public void onNavigationCompleted(@NonNull Navigation navigation) {
+                        Log.i(TAG, "received NavigationEvent: 'onNavigationCompleted()';");
+                        Log.i(TAG,
+                                "Navigation: url:" + navigation.getUri()
+                                        + ", HTTP-StatusCode: " + navigation.getStatusCode()
+                                        + ", samePage: " + navigation.isSameDocument());
+                    }
+
+                    @Override
+                    public void onNavigationStarted(@NonNull Navigation navigation) {
+                        Log.i(TAG, "received NavigationEvent: 'onNavigationStarted()'");
+                        Log.i(TAG,
+                                "Navigation: url:" + navigation.getUri()
+                                        + ", HTTP-StatusCode: " + navigation.getStatusCode()
+                                        + ", samePage: " + navigation.isSameDocument());
+                    }
+
+                    @Override
+                    public void onLoadProgressChanged(double progress) {
+                        Log.i(TAG,
+                                "received NavigationEvent: 'onLoadProgressChanged(" + progress
+                                        + ")'");
+                    }
+                });
             }
 
             @Override
             public void onTabRemoved(@NonNull Tab tab) {
-                Log.i(TAG, "received 'onTabRemoved'-event");
+                Log.i(TAG, "received BrowserEvent: 'onTabRemoved'-event");
             }
 
             @Override
             public void onWillDestroyBrowserAndAllTabs() {
-                Log.i(TAG, "received 'onWillDestroyBrowserAndAllTabs'-event");
+                Log.i(TAG, "received BrowserEvent: 'onWillDestroyBrowserAndAllTabs'-event");
             }
         });
         ListenableFuture<TabManager> tabManagerFuture = fragment.getTabManager();