diff --git a/DEPS b/DEPS
index 62a732e..a1978bc 100644
--- a/DEPS
+++ b/DEPS
@@ -200,11 +200,11 @@
   # 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': 'b432754c00d7e9235261e607d1e124d02966f735',
+  'skia_revision': '95b5fb9213d745aa8dd435044ca771554f2a3794',
   # 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': '7950639f3f0f74bf090930d365ff28e97be47ab4',
+  'v8_revision': 'db1a5e72db56e0241356c2b824f50770d62dec90',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -212,11 +212,11 @@
   # 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': '46823b0ba3d62a6375a6ff4c846123bc0f362db1',
+  'angle_revision': 'abcabb474bf1c25eea48d7dca14bcafde737eba7',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': '6d612051c083238db89541be4fbb2d624a9baef4',
+  'swiftshader_revision': '88e698a4f3e35f509ac80d9ffed8a4e0bbe3a85a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -267,7 +267,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '844c1542a1f424d04242e6e5107c35d5d7115776',
+  'catapult_revision': 'a629d81faa7aca80572b7a45df4589d952509664',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -327,11 +327,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '3cd31e647c7de96644e52613b3b23270736654fb',
+  'dawn_revision': '03badec5d73ab4138f798b94221546c496177a09',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'quiche_revision': 'e6fd1cf8d62270478827895c56f5427844e19f15',
+  'quiche_revision': 'e8f461547a9378aa0642c786c3acc3ec3716f4c7',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ios_webkit
   # and whatever else without interference from each other.
@@ -366,7 +366,7 @@
   'ukey2_revision': '0275885d8e6038c39b8a8ca55e75d1d4d1727f47',
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'tint_revision': '4c13659a2a39df7435881b23c00742b557ed6474',
+  'tint_revision': '6cd6f7462c4932bcea016bb0a2c171aa1f2c5dc1',
 
   # TODO(crbug.com/941824): The values below need to be kept in sync
   # between //DEPS and //buildtools/DEPS, so if you're updating one,
@@ -747,7 +747,7 @@
       'packages': [
           {
                'package': 'chromium/third_party/android_tools_bundletool',
-               'version': 'gB66fGCdzqmQO6U6hxhoZDCGjOg-oqxhT_4uywaUw1oC',
+               'version': 'FIj7ed-law2zMv41QhjEXabkaJ7aN2ztmE0Tv3Z_gFUC',
           },
       ],
       'condition': 'checkout_android',
@@ -919,7 +919,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '9c0dc3026eedcd500b61df4f5a36febc1edda545',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '260eb0f662b4b173c66e9dc892328f982185e83c',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1066,7 +1066,7 @@
     Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + '18e09b9197a3b1d771c077c530d1a4ebad04c167',
 
   'src/third_party/icu':
-    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '7db579a73addda0edb2bb83465ae51bcdc601af7',
+    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '6a33b647c0647c3eb97eae5432153ef2dfca7baa',
 
   'src/third_party/icu4j': {
       'packages': [
@@ -1369,7 +1369,7 @@
       'packages': [
           {
               'package': 'fuchsia/third_party/aemu/linux-amd64',
-              'version': 'nv6wFuL5e4oM14o83fKYTaYGvYpeIY0g-cCj2yzejZwC'
+              'version': '5OY8JrY59_SN8JDYYSYG1f0O_RxD33PtPWz_jpCPEkEC'
           },
       ],
       'condition': 'host_os == "linux" and checkout_fuchsia',
@@ -1551,7 +1551,7 @@
   },
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '79348b55df90f3f7d00f12fbc0c679cff147ba81',
+    Var('webrtc_git') + '/src.git' + '@' + '19526a69c763d26f4699f14dd33681db8976a1b1',
 
   'src/third_party/libgifcodec':
      Var('skia_git') + '/libgifcodec' + '@'+  Var('libgifcodec_revision'),
@@ -1623,7 +1623,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@d44407ce07e612c965a9d6be85bf2806373db7d0',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@047f4d3302282c0c9b2ecaf3acbd697c97457e17',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/android_webview/browser/metrics/aw_metrics_service_client.cc b/android_webview/browser/metrics/aw_metrics_service_client.cc
index d16ef6a..4efc9fc 100644
--- a/android_webview/browser/metrics/aw_metrics_service_client.cc
+++ b/android_webview/browser/metrics/aw_metrics_service_client.cc
@@ -76,7 +76,7 @@
   return metrics::ChromeUserMetricsExtension::ANDROID_WEBVIEW;
 }
 
-int AwMetricsServiceClient::GetSampleRatePerMille() {
+int AwMetricsServiceClient::GetSampleRatePerMille() const {
   // Down-sample unknown channel as a precaution in case it ends up being
   // shipped to Stable users.
   version_info::Channel channel = version_info::android::GetChannel();
@@ -134,10 +134,6 @@
   delegate_->RegisterAdditionalMetricsProviders(service);
 }
 
-bool AwMetricsServiceClient::IsPersistentHistogramsEnabled() {
-  return base::FeatureList::IsEnabled(base::kPersistentHistogramsFeature);
-}
-
 // static
 void JNI_AwMetricsServiceClient_SetHaveMetricsConsent(JNIEnv* env,
                                                       jboolean user_consent,
diff --git a/android_webview/browser/metrics/aw_metrics_service_client.h b/android_webview/browser/metrics/aw_metrics_service_client.h
index 35e7d54..43e2fd3 100644
--- a/android_webview/browser/metrics/aw_metrics_service_client.h
+++ b/android_webview/browser/metrics/aw_metrics_service_client.h
@@ -130,11 +130,10 @@
   // metrics::AndroidMetricsServiceClient:
   void OnMetricsStart() override;
   void OnMetricsNotStarted() override;
-  int GetSampleRatePerMille() override;
+  int GetSampleRatePerMille() const override;
   int GetPackageNameLimitRatePerMille() override;
   void RegisterAdditionalMetricsProviders(
       metrics::MetricsService* service) override;
-  bool IsPersistentHistogramsEnabled() override;
 
  private:
   bool app_in_foreground_ = false;
diff --git a/ash/ambient/ambient_controller.cc b/ash/ambient/ambient_controller.cc
index 0c5bf62..361ec07 100644
--- a/ash/ambient/ambient_controller.cc
+++ b/ash/ambient/ambient_controller.cc
@@ -171,19 +171,9 @@
     : fingerprint_(std::move(fingerprint)) {
   ambient_backend_controller_ = CreateAmbientBackendController();
 
-  ambient_ui_model_observer_.Add(&ambient_ui_model_);
-  // |SessionController| is initialized before |this| in Shell.
-  session_observer_.Add(Shell::Get()->session_controller());
-
-  auto* power_manager_client = chromeos::PowerManagerClient::Get();
-  DCHECK(power_manager_client);
-  power_manager_client_observer_.Add(power_manager_client);
-
-  ambient_backend_model_observer_.Add(
-      ambient_photo_controller_.ambient_backend_model());
-
-  fingerprint_->AddFingerprintObserver(
-      fingerprint_observer_receiver_.BindNewPipeAndPassRemote());
+  // |SessionController| is initialized before |this| in Shell. Necessary to
+  // bind observer here to monitor |OnActiveUserPrefServiceChanged|.
+  session_observer_.Observe(Shell::Get()->session_controller());
 }
 
 AmbientController::~AmbientController() {
@@ -212,12 +202,11 @@
       }
       // Observes the |PowerStatus| on the battery charging status change for
       // the current ambient session.
-      if (!power_status_observer_.IsObserving(PowerStatus::Get())) {
-        power_status_observer_.Add(PowerStatus::Get());
-      }
+      if (!power_status_observer_.IsObserving())
+        power_status_observer_.Observe(PowerStatus::Get());
 
-      if (!user_activity_observer_.IsObserving(ui::UserActivityDetector::Get()))
-        user_activity_observer_.Add(ui::UserActivityDetector::Get());
+      if (!user_activity_observer_.IsObserving())
+        user_activity_observer_.Observe(ui::UserActivityDetector::Get());
 
       StartRefreshingImages();
       break;
@@ -253,10 +242,8 @@
       if (visibility == AmbientUiVisibility::kHidden) {
         if (LockScreen::HasInstance()) {
           // Add observer for user activity.
-          if (!user_activity_observer_.IsObserving(
-                  ui::UserActivityDetector::Get())) {
-            user_activity_observer_.Add(ui::UserActivityDetector::Get());
-          }
+          if (!user_activity_observer_.IsObserving())
+            user_activity_observer_.Observe(ui::UserActivityDetector::Get());
 
           // Start timer to show ambient mode.
           inactivity_timer_.Start(
@@ -267,12 +254,11 @@
       } else {
         DCHECK(visibility == AmbientUiVisibility::kClosed);
         inactivity_timer_.Stop();
-        if (user_activity_observer_.IsObserving(
-                ui::UserActivityDetector::Get())) {
-          user_activity_observer_.Remove(ui::UserActivityDetector::Get());
-        }
-        if (power_status_observer_.IsObserving(PowerStatus::Get()))
-          power_status_observer_.Remove(PowerStatus::Get());
+        if (user_activity_observer_.IsObserving())
+          user_activity_observer_.RemoveObservation();
+
+        if (power_status_observer_.IsObserving())
+          power_status_observer_.RemoveObservation();
       }
 
       break;
@@ -337,7 +323,6 @@
 
 void AmbientController::OnActiveUserPrefServiceChanged(
     PrefService* pref_service) {
-  // TODO(b/170510846) make ambient controller handle pref off state better
   if (!AmbientClient::Get()->IsAmbientModeAllowed() ||
       GetPrimaryUserPrefService() != pref_service) {
     return;
@@ -347,26 +332,11 @@
   pref_change_registrar_->Init(pref_service);
 
   pref_change_registrar_->Add(
-      ambient::prefs::kAmbientModeLockScreenInactivityTimeoutSeconds,
-      base::BindRepeating(
-          &AmbientController::OnLockScreenInactivityTimeoutPrefChanged,
-          weak_ptr_factory_.GetWeakPtr()));
-
-  pref_change_registrar_->Add(
-      ambient::prefs::kAmbientModeLockScreenBackgroundTimeoutSeconds,
-      base::BindRepeating(
-          &AmbientController::OnLockScreenBackgroundTimeoutPrefChanged,
-          weak_ptr_factory_.GetWeakPtr()));
-
-  pref_change_registrar_->Add(
-      ambient::prefs::kAmbientModePhotoRefreshIntervalSeconds,
-      base::BindRepeating(&AmbientController::OnPhotoRefreshIntervalPrefChanged,
+      ambient::prefs::kAmbientModeEnabled,
+      base::BindRepeating(&AmbientController::OnEnabledPrefChanged,
                           weak_ptr_factory_.GetWeakPtr()));
 
-  // Trigger the callbacks manually the first time to init AmbientUiModel.
-  OnLockScreenInactivityTimeoutPrefChanged();
-  OnLockScreenBackgroundTimeoutPrefChanged();
-  OnPhotoRefreshIntervalPrefChanged();
+  OnEnabledPrefChanged();
 }
 
 void AmbientController::OnPowerStatusChanged() {
@@ -541,6 +511,72 @@
   }
 }
 
+void AmbientController::OnEnabledPrefChanged() {
+  if (IsAmbientModeEnabled()) {
+    DVLOG(1) << "Ambient mode enabled";
+
+    pref_change_registrar_->Add(
+        ambient::prefs::kAmbientModeLockScreenInactivityTimeoutSeconds,
+        base::BindRepeating(
+            &AmbientController::OnLockScreenInactivityTimeoutPrefChanged,
+            weak_ptr_factory_.GetWeakPtr()));
+
+    pref_change_registrar_->Add(
+        ambient::prefs::kAmbientModeLockScreenBackgroundTimeoutSeconds,
+        base::BindRepeating(
+            &AmbientController::OnLockScreenBackgroundTimeoutPrefChanged,
+            weak_ptr_factory_.GetWeakPtr()));
+
+    pref_change_registrar_->Add(
+        ambient::prefs::kAmbientModePhotoRefreshIntervalSeconds,
+        base::BindRepeating(
+            &AmbientController::OnPhotoRefreshIntervalPrefChanged,
+            weak_ptr_factory_.GetWeakPtr()));
+
+    // Trigger the callbacks manually the first time to init AmbientUiModel.
+    OnLockScreenInactivityTimeoutPrefChanged();
+    OnLockScreenBackgroundTimeoutPrefChanged();
+    OnPhotoRefreshIntervalPrefChanged();
+
+    ambient_ui_model_observer_.Observe(&ambient_ui_model_);
+
+    ambient_backend_model_observer_.Observe(
+        ambient_photo_controller_.ambient_backend_model());
+
+    auto* power_manager_client = chromeos::PowerManagerClient::Get();
+    DCHECK(power_manager_client);
+    power_manager_client_observer_.Observe(power_manager_client);
+
+    fingerprint_->AddFingerprintObserver(
+        fingerprint_observer_receiver_.BindNewPipeAndPassRemote());
+
+  } else {
+    DVLOG(1) << "Ambient mode disabled";
+
+    CloseUi();
+
+    for (const auto* pref_name :
+         {ambient::prefs::kAmbientModeLockScreenBackgroundTimeoutSeconds,
+          ambient::prefs::kAmbientModeLockScreenInactivityTimeoutSeconds,
+          ambient::prefs::kAmbientModePhotoRefreshIntervalSeconds}) {
+      if (pref_change_registrar_->IsObserved(pref_name))
+        pref_change_registrar_->Remove(pref_name);
+    }
+
+    if (ambient_ui_model_observer_.IsObserving())
+      ambient_ui_model_observer_.RemoveObservation();
+
+    if (ambient_backend_model_observer_.IsObserving())
+      ambient_backend_model_observer_.RemoveObservation();
+
+    if (power_manager_client_observer_.IsObserving())
+      power_manager_client_observer_.RemoveObservation();
+
+    if (fingerprint_observer_receiver_.is_bound())
+      fingerprint_observer_receiver_.reset();
+  }
+}
+
 void AmbientController::OnLockScreenInactivityTimeoutPrefChanged() {
   auto* pref_service = GetPrimaryUserPrefService();
   if (!pref_service)
diff --git a/ash/ambient/ambient_controller.h b/ash/ambient/ambient_controller.h
index c28fb8a..c756e4c2 100644
--- a/ash/ambient/ambient_controller.h
+++ b/ash/ambient/ambient_controller.h
@@ -18,9 +18,10 @@
 #include "ash/public/cpp/session/session_observer.h"
 #include "ash/session/session_controller_impl.h"
 #include "ash/system/power/power_status.h"
+#include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/timer/timer.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "components/prefs/pref_change_registrar.h"
@@ -125,6 +126,10 @@
 
  private:
   friend class AmbientAshTestBase;
+  friend class AmbientControllerTest;
+  FRIEND_TEST_ALL_PREFIXES(AmbientControllerTest,
+                           BindsObserversWhenAmbientEnabled);
+  FRIEND_TEST_ALL_PREFIXES(AmbientControllerTest, BindsObserversWhenAmbientOn);
 
   // Hide or close Ambient mode UI.
   void DismissUI();
@@ -157,6 +162,7 @@
   void CloseAllWidgets(bool immediately);
 
   // Invoked when the Ambient mode prefs state changes.
+  void OnEnabledPrefChanged();
   void OnLockScreenInactivityTimeoutPrefChanged();
   void OnLockScreenBackgroundTimeoutPrefChanged();
   void OnPhotoRefreshIntervalPrefChanged();
@@ -178,18 +184,18 @@
   // Lazily initialized on the first call of |AcquireWakeLock|.
   mojo::Remote<device::mojom::WakeLock> wake_lock_;
 
-  ScopedObserver<AmbientUiModel, AmbientUiModelObserver>
+  base::ScopedObservation<AmbientUiModel, AmbientUiModelObserver>
       ambient_ui_model_observer_{this};
-  ScopedObserver<AmbientBackendModel, AmbientBackendModelObserver>
+  base::ScopedObservation<AmbientBackendModel, AmbientBackendModelObserver>
       ambient_backend_model_observer_{this};
-  ScopedObserver<SessionControllerImpl, SessionObserver> session_observer_{
-      this};
-  ScopedObserver<PowerStatus, PowerStatus::Observer> power_status_observer_{
-      this};
-  ScopedObserver<chromeos::PowerManagerClient,
-                 chromeos::PowerManagerClient::Observer>
+  base::ScopedObservation<SessionControllerImpl, SessionObserver>
+      session_observer_{this};
+  base::ScopedObservation<PowerStatus, PowerStatus::Observer>
+      power_status_observer_{this};
+  base::ScopedObservation<chromeos::PowerManagerClient,
+                          chromeos::PowerManagerClient::Observer>
       power_manager_client_observer_{this};
-  ScopedObserver<ui::UserActivityDetector, ui::UserActivityObserver>
+  base::ScopedObservation<ui::UserActivityDetector, ui::UserActivityObserver>
       user_activity_observer_{this};
 
   // Observes user profile prefs for ambient.
diff --git a/ash/ambient/ambient_controller_unittest.cc b/ash/ambient/ambient_controller_unittest.cc
index 2f9bfd3..c2de9943 100644
--- a/ash/ambient/ambient_controller_unittest.cc
+++ b/ash/ambient/ambient_controller_unittest.cc
@@ -10,6 +10,7 @@
 
 #include "ash/ambient/test/ambient_ash_test_base.h"
 #include "ash/ambient/ui/ambient_container_view.h"
+#include "ash/public/cpp/ambient/ambient_prefs.h"
 #include "ash/public/cpp/ambient/ambient_ui_model.h"
 #include "ash/root_window_controller.h"
 #include "ash/shell.h"
@@ -41,6 +42,10 @@
     GetSessionControllerClient()->set_show_lock_screen_views(true);
   }
 
+  bool IsPrefObserved(const std::string& pref_name) {
+    return ambient_controller()->pref_change_registrar_->IsObserved(pref_name);
+  }
+
   bool WidgetsVisible() {
     const auto& views = GetContainerViews();
     return views.size() > 0 &&
@@ -526,7 +531,7 @@
   EXPECT_FALSE(IsLocked());
   EXPECT_TRUE(ambient_controller()->IsShown());
 
-  FastForwardToLockScreen();
+  FastForwardToBackgroundLockScreenTimeout();
   EXPECT_TRUE(IsLocked());
   // Should not disrupt ongoing ambient mode.
   EXPECT_TRUE(ambient_controller()->IsShown());
@@ -583,7 +588,7 @@
   FastForwardTiny();
   EXPECT_TRUE(ambient_controller()->IsShown());
 
-  FastForwardToLockScreen();
+  FastForwardToBackgroundLockScreenTimeout();
   EXPECT_FALSE(IsLocked());
 
   // Closes ambient for clean-up.
@@ -603,7 +608,7 @@
   FastForwardTiny();
   EXPECT_TRUE(ambient_controller()->IsShown());
 
-  FastForwardToLockScreen();
+  FastForwardToBackgroundLockScreenTimeout();
   EXPECT_FALSE(IsLocked());
 
   // Closes ambient for clean-up.
@@ -648,7 +653,7 @@
   FastForwardTiny();
   EXPECT_TRUE(ambient_controller()->IsShown());
 
-  FastForwardToLockScreen();
+  FastForwardToBackgroundLockScreenTimeout();
   EXPECT_TRUE(IsLocked());
 
   // Should dismiss ambient mode screen.
@@ -761,4 +766,70 @@
   EXPECT_FALSE(ambient_controller()->IsShown());
 }
 
+TEST_F(AmbientControllerTest, ObservesPrefsWhenAmbientEnabled) {
+  SetAmbientModeEnabled(false);
+
+  // This pref is always observed.
+  EXPECT_TRUE(IsPrefObserved(ambient::prefs::kAmbientModeEnabled));
+
+  std::vector<std::string> other_prefs{
+      ambient::prefs::kAmbientModeLockScreenInactivityTimeoutSeconds,
+      ambient::prefs::kAmbientModeLockScreenBackgroundTimeoutSeconds,
+      ambient::prefs::kAmbientModePhotoRefreshIntervalSeconds};
+
+  for (auto& pref_name : other_prefs)
+    EXPECT_FALSE(IsPrefObserved(pref_name));
+
+  SetAmbientModeEnabled(true);
+
+  EXPECT_TRUE(IsPrefObserved(ambient::prefs::kAmbientModeEnabled));
+
+  for (auto& pref_name : other_prefs)
+    EXPECT_TRUE(IsPrefObserved(pref_name));
+}
+
+TEST_F(AmbientControllerTest, BindsObserversWhenAmbientEnabled) {
+  auto* ctrl = ambient_controller();
+
+  SetAmbientModeEnabled(false);
+
+  // SessionObserver must always be observing to detect when user pref service
+  // is started.
+  EXPECT_TRUE(ctrl->session_observer_.IsObserving());
+
+  EXPECT_FALSE(ctrl->ambient_ui_model_observer_.IsObserving());
+  EXPECT_FALSE(ctrl->ambient_backend_model_observer_.IsObserving());
+  EXPECT_FALSE(ctrl->power_manager_client_observer_.IsObserving());
+
+  SetAmbientModeEnabled(true);
+
+  // Session observer should still be observing.
+  EXPECT_TRUE(ctrl->session_observer_.IsObserving());
+
+  EXPECT_TRUE(ctrl->ambient_ui_model_observer_.IsObserving());
+  EXPECT_TRUE(ctrl->ambient_backend_model_observer_.IsObserving());
+  EXPECT_TRUE(ctrl->power_manager_client_observer_.IsObserving());
+}
+
+TEST_F(AmbientControllerTest, BindsObserversWhenAmbientOn) {
+  auto* ctrl = ambient_controller();
+
+  LockScreen();
+
+  // Start monitoring user activity on hidden ui.
+  EXPECT_TRUE(ctrl->user_activity_observer_.IsObserving());
+  // Do not monitor power status yet.
+  EXPECT_FALSE(ctrl->power_status_observer_.IsObserving());
+
+  FastForwardToLockScreenTimeout();
+
+  EXPECT_TRUE(ctrl->user_activity_observer_.IsObserving());
+  EXPECT_TRUE(ctrl->power_status_observer_.IsObserving());
+
+  UnlockScreen();
+
+  EXPECT_FALSE(ctrl->user_activity_observer_.IsObserving());
+  EXPECT_FALSE(ctrl->power_status_observer_.IsObserving());
+}
+
 }  // namespace ash
diff --git a/ash/ambient/test/ambient_ash_test_base.cc b/ash/ambient/test/ambient_ash_test_base.cc
index aed8e828..06c8d9fca 100644
--- a/ash/ambient/test/ambient_ash_test_base.cc
+++ b/ash/ambient/test/ambient_ash_test_base.cc
@@ -316,7 +316,7 @@
   task_environment()->FastForwardBy(base::TimeDelta::FromMilliseconds(10));
 }
 
-void AmbientAshTestBase::FastForwardToLockScreen() {
+void AmbientAshTestBase::FastForwardToBackgroundLockScreenTimeout() {
   task_environment()->FastForwardBy(kFastForwardFactor *
                                     ambient_controller()
                                         ->ambient_ui_model()
diff --git a/ash/ambient/test/ambient_ash_test_base.h b/ash/ambient/test/ambient_ash_test_base.h
index 9b46590..3f0b7f25 100644
--- a/ash/ambient/test/ambient_ash_test_base.h
+++ b/ash/ambient/test/ambient_ash_test_base.h
@@ -109,7 +109,7 @@
   void FastForwardToRefreshWeather();
 
   // Advance the task environment timer to ambient mode lock screen delay.
-  void FastForwardToLockScreen();
+  void FastForwardToBackgroundLockScreenTimeout();
   void FastForwardHalfLockScreenDelay();
 
   void SetPowerStateCharging();
diff --git a/ash/capture_mode/capture_mode_test_api.cc b/ash/capture_mode/capture_mode_test_api.cc
index 0123998..3be7267 100644
--- a/ash/capture_mode/capture_mode_test_api.cc
+++ b/ash/capture_mode/capture_mode_test_api.cc
@@ -67,6 +67,11 @@
   controller_->enable_audio_recording_ = enabled;
 }
 
+void CaptureModeTestApi::FlushRecordingServiceForTesting() {
+  DCHECK(controller_->is_recording_in_progress());
+  controller_->recording_service_remote_.FlushForTesting();
+}
+
 void CaptureModeTestApi::SetType(bool for_video) {
   controller_->SetType(for_video ? CaptureModeType::kVideo
                                  : CaptureModeType::kImage);
diff --git a/ash/public/cpp/capture_mode_test_api.h b/ash/public/cpp/capture_mode_test_api.h
index 95706b1..0b93668 100644
--- a/ash/public/cpp/capture_mode_test_api.h
+++ b/ash/public/cpp/capture_mode_test_api.h
@@ -58,6 +58,10 @@
   // only be called before recording starts, otherwise it has no effect.
   void SetAudioRecordingEnabled(bool enabled);
 
+  // Flushes the recording service pipe synchronously. Can only be called while
+  // recording is in progress.
+  void FlushRecordingServiceForTesting();
+
  private:
   // Sets the capture mode type to a video capture if |for_video| is true, or
   // image capture otherwise.
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_bs.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_bs.xtb
index 2afadb9..46f3ecf 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_bs.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_bs.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Pohranjivanje svih stranica u trenutnom prozoru kao oznaka u novom folderu</translation>
 <translation id="355103131818127604">Otvaranje linka u novoj kartici u pozadini</translation>
 <translation id="3622741593887335780">Uvećanje (kada je postavljeno na priključnu stanicu ILI kada su omogućena povećala preko cijelog ekrana)</translation>
+<translation id="3633851487917460983">Otvori međuspremnik</translation>
 <translation id="3649256019230929621">Minimiziranje prozora</translation>
 <translation id="3655154169297074232">Kartice i telefoni</translation>
 <translation id="3668361878347172356">Ponavljanje posljednje radnje</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_ca.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_ca.xtb
index 0d739c1..b4a0bc14 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_ca.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_ca.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Desa totes les pàgines obertes de la finestra actual a les adreces d'interès en una carpeta nova</translation>
 <translation id="355103131818127604">Obre l'enllaç en una pestanya nova en segon pla</translation>
 <translation id="3622741593887335780">Amplia (quan la lupa de pantalla completa O la lupa acoblada estiguin activades)</translation>
+<translation id="3633851487917460983">Obre el porta-retalls</translation>
 <translation id="3649256019230929621">Minimitza la finestra</translation>
 <translation id="3655154169297074232">Pestanyes i finestres</translation>
 <translation id="3668361878347172356">Refés la darrera acció</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_da.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_da.xtb
index 1e58896..956b28e 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_da.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_da.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Gem alle åbne sider i dit nuværende vindue som bogmærker i en ny mappe</translation>
 <translation id="355103131818127604">Åbn linket på en ny fane i baggrunden</translation>
 <translation id="3622741593887335780">Zoom ind (når lupvinduet er fastgjort, ELLER forstørrelse af fuld skærm er aktiveret)</translation>
+<translation id="3633851487917460983">Åbn udklipsholderen</translation>
 <translation id="3649256019230929621">Minimer vinduet</translation>
 <translation id="3655154169297074232">Faner og vinduer</translation>
 <translation id="3668361878347172356">Gentag den sidste handling</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_et.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_et.xtb
index d007cec2..86c4a401 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_et.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_et.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Aktiivse akna kõikide avatud lehtede salvestamine uude kausta järjehoidjatena</translation>
 <translation id="355103131818127604">Lingi avamine taustal uuel vahelehel</translation>
 <translation id="3622741593887335780">Sissesuumimine (kui seade on dokitud VÕI täisekraani luup on lubatud</translation>
+<translation id="3633851487917460983">Lõikelaua avamine</translation>
 <translation id="3649256019230929621">Minimeeri aken</translation>
 <translation id="3655154169297074232">Vahelehed ja aknad</translation>
 <translation id="3668361878347172356">Viimase toimingu uuesti tegemine</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_eu.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_eu.xtb
index 433f2911..944db59d 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_eu.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_eu.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Gorde uneko leihoan irekita dauden orri guztiak laster-marka gisa karpeta berri batean</translation>
 <translation id="355103131818127604">Ireki esteka beste fitxa batean, atzeko planoan</translation>
 <translation id="3622741593887335780">Handitu (lupa ainguratua EDO pantaila osoko lupa gaituta daudenean)</translation>
+<translation id="3633851487917460983">Ireki arbela</translation>
 <translation id="3649256019230929621">Minimizatu leihoa</translation>
 <translation id="3655154169297074232">Fitxak eta leihoak</translation>
 <translation id="3668361878347172356">Berregin azken ekintza</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_fi.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_fi.xtb
index 9b2bf27..061aa79 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_fi.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_fi.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Tallenna nykyisen ikkunan kaikki välilehdet kirjanmerkeiksi uuteen kansioon</translation>
 <translation id="355103131818127604">Avaa linkki taustalle uudella välilehdellä</translation>
 <translation id="3622741593887335780">Lähennä (telakoinnin aikana TAI koko näytön suurennuslasien ollessa käytössä)</translation>
+<translation id="3633851487917460983">Avaa leikepöytä</translation>
 <translation id="3649256019230929621">Pienennä ikkuna</translation>
 <translation id="3655154169297074232">Välilehdet ja ikkunat</translation>
 <translation id="3668361878347172356">Toista viimeisin toiminto</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_hi.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_hi.xtb
index 76ae5046..e739a974 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_hi.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_hi.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">अपनी मौजूदा विंडो में खुले सभी पेजों को नए फ़ोल्डर में बुकमार्क के रूप में सेव करें</translation>
 <translation id="355103131818127604">लिंक को बैकग्राउंड में नए टैब में खोलें</translation>
 <translation id="3622741593887335780">ज़ूम इन करें (डॉक किए जाने या फ़ुलस्क्रीन पर सामग्री को बड़ा दिखाने की सुविधा चालू किए जाने पर)</translation>
+<translation id="3633851487917460983">क्लिपबोर्ड खोलें</translation>
 <translation id="3649256019230929621">विंडो को छोटा करें</translation>
 <translation id="3655154169297074232">टैब और विंडो</translation>
 <translation id="3668361878347172356">अपनी पिछली कार्रवाई फिर से करें</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_hr.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_hr.xtb
index 4fd20676..396e5c3 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_hr.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_hr.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Spremanje svih otvorenih stranica u trenutačnom prozoru kao oznaka u novoj mapi</translation>
 <translation id="355103131818127604">Otvaranje veze u novoj kartici u pozadini</translation>
 <translation id="3622741593887335780">Povećanje (kada je fiksirano ILI kada su omogućena povećala cijelog zaslona)</translation>
+<translation id="3633851487917460983">Otvori međuspremnik</translation>
 <translation id="3649256019230929621">Minimiziranje prozora</translation>
 <translation id="3655154169297074232">Kartice i prozori</translation>
 <translation id="3668361878347172356">Ponavljanje posljednje radnje</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_lo.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_lo.xtb
index d792c56..ab6907ae 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_lo.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_lo.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">ບັນທຶກທຸກໜ້າທີ່ເປີດຢູ່ໃນໜ້າຈໍປັດຈຸບັນຂອງທ່ານເປັນບຸກມາກໃນໂຟນເດີໃໝ່</translation>
 <translation id="355103131818127604">ເປີດລິ້ງໃນແຖບໃໝ່ຢູ່ໃນພື້ນຫຼັງ</translation>
 <translation id="3622741593887335780">ຊູມເຂົ້າ (ເມື່ອດັອກ ຫຼື ເປີດນຳໃຊ້ແວ່ນຂະຫຍາຍເຕັມຈໍ)</translation>
+<translation id="3633851487917460983">ເປີດຄລິບບອດ</translation>
 <translation id="3649256019230929621">ຫຍໍ້ໜ້າ​ຕ່າງລົງ</translation>
 <translation id="3655154169297074232">ແຖບ ແລະ ໜ້າຈໍ</translation>
 <translation id="3668361878347172356">ໃຊ້ຄຳສັ່ງຫຼ້າສຸດຂອງທ່ານຄືນໃໝ່</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_lt.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_lt.xtb
index c3b6924..ba398c4 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_lt.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_lt.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Visus dabartiniame lange atidarytus puslapius išsaugoti kaip žymes naujame aplanke</translation>
 <translation id="355103131818127604">Atidaryti nuorodą naujame skirtuke fone</translation>
 <translation id="3622741593887335780">Artinti (kai yra doke ARBA įgalintas viso ekrano didinimas)</translation>
+<translation id="3633851487917460983">Atidaryti iškarpinę</translation>
 <translation id="3649256019230929621">Sumažinti langą</translation>
 <translation id="3655154169297074232">Skirtukai ir langai</translation>
 <translation id="3668361878347172356">Grąžinti paskutinį veiksmą</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_my.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_my.xtb
index f5c4041..03a64cec 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_my.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_my.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">လက်ရှိဝင်းဒိုးအတွင်းတွင် ဖွင့်ထားသော ဝဘ်စာမျက်နှာများအားလုံးကို ဝဘ်လိပ်စာများအဖြစ် ဖိုင်တွဲအသစ်တွင် သိမ်းရန်</translation>
 <translation id="355103131818127604">လင့်ခ်ကို နောက်ကွယ်၌ တဘ်အသစ်တွင် ဖွင့်ရန်</translation>
 <translation id="3622741593887335780">ဇူးမ်ဆွဲရန် (တပ်ဆင်ထားသည့်အခါ သို့မဟုတ် မျက်နှာပြင်အပြည့် မှန်ဘီလူးကို ဖွင့်ထားသည့်အခါ)</translation>
+<translation id="3633851487917460983">ကလစ်ဘုတ် ဖွင့်ရန်</translation>
 <translation id="3649256019230929621">ဝင်းဒိုး ဇူးမ်ဖြုတ်ရန်</translation>
 <translation id="3655154169297074232">တဘ်နှင့် ဝင်းဒိုးများ</translation>
 <translation id="3668361878347172356">သင်၏ နောက်ဆုံးလုပ်ဆောင်ချက်ကို ပြန်လုပ်ရန်</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_no.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_no.xtb
index 91a9176..8bd94ad 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_no.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_no.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Lagre alle åpne sider i det aktive vinduet som bokmerker i en ny mappe</translation>
 <translation id="355103131818127604">Åpne linken i en ny fane i bakgrunnen</translation>
 <translation id="3622741593887335780">Zoom inn (når dokket ELLER forstørrelse med fullskjerm er på)</translation>
+<translation id="3633851487917460983">Åpne utklippstavlen</translation>
 <translation id="3649256019230929621">Minimerer vinduet</translation>
 <translation id="3655154169297074232">Faner og vinduer</translation>
 <translation id="3668361878347172356">Utfør forrige handling likevel</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_pl.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_pl.xtb
index 939ac3a3..ef2589cf 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_pl.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_pl.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Zapisz wszystkie strony otwarte w bieżącym oknie jako zakładki w nowym folderze</translation>
 <translation id="355103131818127604">Otwórz link w nowej karcie w tle</translation>
 <translation id="3622741593887335780">Powiększ (gdy zadokowany LUB włączona lupa pełnego ekranu)</translation>
+<translation id="3633851487917460983">Otwórz schowek</translation>
 <translation id="3649256019230929621">Minimalizuj okno</translation>
 <translation id="3655154169297074232">Karty i okna</translation>
 <translation id="3668361878347172356">Ponów ostatnią czynność</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_ro.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_ro.xtb
index 8dc24dc7..9f57dc9 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_ro.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_ro.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Salvează toate paginile deschise în fereastra curentă ca marcaje într-un dosar nou</translation>
 <translation id="355103131818127604">Deschide linkul într-o filă nouă din fundal</translation>
 <translation id="3622741593887335780">Mărește (când lupa andocată SAU lupa de ecran complet este activată)</translation>
+<translation id="3633851487917460983">Deschide clipboardul</translation>
 <translation id="3649256019230929621">Minimizați fereastra</translation>
 <translation id="3655154169297074232">File și ferestre</translation>
 <translation id="3668361878347172356">Repetă ultima acțiune</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sl.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sl.xtb
index eaae14c4..4ecd2f4 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sl.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sl.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Shranjevanje vseh odprtih strani v trenutnem oknu kot zaznamke v novi mapi</translation>
 <translation id="355103131818127604">Odpiranje povezave na novem zavihku v ozadju</translation>
 <translation id="3622741593887335780">Povečava (kadar je omogočena zasidrana ALI celozaslonska lupa)</translation>
+<translation id="3633851487917460983">Odpiranje odložišča</translation>
 <translation id="3649256019230929621">Pomanjšanje olna</translation>
 <translation id="3655154169297074232">Zavihki in okna</translation>
 <translation id="3668361878347172356">Uveljavitev zadnjega dejanja</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sr-Latn.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sr-Latn.xtb
index 40dc1b2b..15298c3b 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sr-Latn.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sr-Latn.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Sačuvajte sve otvorene stranice u trenutnom prozoru kao obeleživače u novom direktorijumu</translation>
 <translation id="355103131818127604">Otvorite link na novoj kartici u pozadini</translation>
 <translation id="3622741593887335780">Uvećajte (na baznoj stanici ILI kada su omogućene lupe za ceo ekran)</translation>
+<translation id="3633851487917460983">Otvori privremenu memoriju</translation>
 <translation id="3649256019230929621">Smanjivanje prozora</translation>
 <translation id="3655154169297074232">Kartice i prozori</translation>
 <translation id="3668361878347172356">Ponovite poslednju radnju</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sr.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sr.xtb
index 7d4b67f2..d16ba61 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_sr.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_sr.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">Сачувајте све отворене странице у тренутном прозору као обележиваче у новом директоријуму</translation>
 <translation id="355103131818127604">Отворите линк на новој картици у позадини</translation>
 <translation id="3622741593887335780">Увећајте (на базној станици ИЛИ када су омогућене лупе за цео екран)</translation>
+<translation id="3633851487917460983">Отвори привремену меморију</translation>
 <translation id="3649256019230929621">Смањивање прозора</translation>
 <translation id="3655154169297074232">Картице и прозори</translation>
 <translation id="3668361878347172356">Поновите последњу радњу</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_te.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_te.xtb
index 20e8a242..12223d28 100644
--- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_te.xtb
+++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_te.xtb
@@ -74,6 +74,7 @@
 <translation id="353037708190149633">మీ ప్రస్తుత విండోలో తెరిచి ఉన్న అన్ని పేజీలను బుక్‌మార్క్‌ల లాగా కొత్త ఫోల్డర్‌లో సేవ్ చేయండి</translation>
 <translation id="355103131818127604">లింక్‌ను కొత్త ట్యాబ్‌లో నేపథ్యంలో తెరవండి</translation>
 <translation id="3622741593887335780">దగ్గరగా జూమ్ చేస్తుంది (డాక్ చేయబడినప్పుడు లేదా పూర్తి స్క్రీన్ మాగ్నిఫైయర్‌లు ప్రారంభించబడినప్పుడు)</translation>
+<translation id="3633851487917460983">క్లిప్‌బోర్డ్‌ను తెరువు</translation>
 <translation id="3649256019230929621">విండోను కుదించు</translation>
 <translation id="3655154169297074232">ట్యాబ్‌లు &amp; విండోలు</translation>
 <translation id="3668361878347172356">మీ చివరి చర్యను మళ్లీ చేయండి</translation>
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb
index 78e4e0e..639351dd 100644
--- a/ash/strings/ash_strings_as.xtb
+++ b/ash/strings/ash_strings_as.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">ৰাতিৰ পোহৰ</translation>
 <translation id="2727175239389218057">প্ৰত্যুত্তৰ দিয়ক</translation>
 <translation id="2727977024730340865">কম পাৱাৰৰ এটা চাৰ্জাৰত প্লাগ ইন কৰা হৈছে। বেটাৰীৰ চাৰ্জিং বিশ্বাসযোগ্য নহ'বও পাৰে।</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> <ph name="MANAGER" />এ পৰিচালনা কৰে</translation>
 <translation id="2792498699870441125">Alt+Search</translation>
 <translation id="2819276065543622893">আপুনি এতিয়া ছাইন আউট হ’ব।</translation>
 <translation id="28232023175184696">ইণ্টাৰনেটৰ সৈতে সংযোগ কৰিব নোৱাৰি। পুনৰ চেষ্টা কৰিবলৈ ক্লিক কৰক।</translation>
@@ -563,6 +564,7 @@
 <translation id="6297287540776456956">কোনো অংশ বাছনি কৰিবলৈ ষ্টাইলাছ ব্যৱহাৰ কৰক</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> ক <ph name="ROTATION" />লৈ ঘূৰোৱা হৈছিল</translation>
 <translation id="6315170314923504164">কণ্ঠস্বৰ</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> হৈছে <ph name="MANAGER" />এ পৰিচালনা কৰা এটা পৰিচালিত ছেশ্বন</translation>
 <translation id="6376931439017688372">ব্লুটুথ অন কৰা আছে</translation>
 <translation id="6381109794406942707">ডিভাইচটো আনলক কৰিবলৈ, আপোনাৰ পিনটো দিয়ক।</translation>
 <translation id="639644700271529076">CAPS LOCK অফ হৈ আছে</translation>
diff --git a/ash/strings/ash_strings_bs.xtb b/ash/strings/ash_strings_bs.xtb
index 40d2bb1f..96954ff2 100644
--- a/ash/strings/ash_strings_bs.xtb
+++ b/ash/strings/ash_strings_bs.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Nije dostupna mobilna mreža</translation>
 <translation id="3249513730522716925">Prozor <ph name="WINDOW_TITLE" /> je premješten s radne površine <ph name="ACTIVE_DESK" /> na radnu površinu <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Šta sve možete uraditi?</translation>
+<translation id="3269597722229482060">Desni klik</translation>
 <translation id="3289674678944039601">Punjenje putem adaptera</translation>
 <translation id="3290356915286466215">Nije osigurano</translation>
 <translation id="3294437725009624529">Gost</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Prebaci na PIN</translation>
 <translation id="4215497585250573029">Postavke za VPN</translation>
 <translation id="4217571870635786043">Diktiranje</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, instalirana aplikacija, pauzirana</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Snimak ekrana</translation>
 <translation id="425364040945105958">Nema SIM kartice</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">Privatna mreža</translation>
 <translation id="8152092012181020186">Pritisnite Ctrl + W da zatvorite.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Ovom postavkom upravlja vaš administrator.</translation>
+<translation id="8155628902202578800">Otvorite dijalog za <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835">Koristite <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Mobilna mreža. Jačina signala od <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Obavještenje su sakrivena.</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">Potvrdite identitet: <ph name="ORIGIN_NAME" /> želi potvrditi vaš identitet</translation>
 <translation id="875593634123171288">Prikaži postavke VPN mreže</translation>
 <translation id="8759408218731716181">Nije moguće postaviti višestruku prijavu</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, instalirana aplikacija, blokirana</translation>
 <translation id="8785070478575117577">Povezivanje na mrežu <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">WiFi</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index b770d20..6bc688c 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">No hi ha cap xarxa mòbil disponible</translation>
 <translation id="3249513730522716925">La finestra <ph name="WINDOW_TITLE" /> ha passat de l'escriptori <ph name="ACTIVE_DESK" /> a l'escriptori <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Què pots fer?</translation>
+<translation id="3269597722229482060">Clic amb el botó dret</translation>
 <translation id="3289674678944039601">S'està carregant per adaptador</translation>
 <translation id="3290356915286466215">No segura</translation>
 <translation id="3294437725009624529">Convidat</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Canvia a PIN</translation>
 <translation id="4215497585250573029">Configuració de VPN</translation>
 <translation id="4217571870635786043">Dictat</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, aplicació instal·lada, en pausa</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Captura de pantalla</translation>
 <translation id="425364040945105958">No hi ha cap SIM</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">Xarxa privada</translation>
 <translation id="8152092012181020186">Prem Ctrl+W per tancar.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" />. El teu administrador gestiona aquesta opció de configuració.</translation>
+<translation id="8155628902202578800">Obre el quadre de diàleg d'informació per a <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835">S'està utilitzant <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Xarxa mòbil. Intensitat del senyal: <ph name="SIGNAL_STRENGTH" />.</translation>
 <translation id="8192202700944119416">S'han amagat les notificacions.</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">Verifica la teva identitat: <ph name="ORIGIN_NAME" /> vol confirmar que ets tu</translation>
 <translation id="875593634123171288">Mostra la configuració de la VPN</translation>
 <translation id="8759408218731716181">No es pot configurar l'inici de sessió múltiple</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, aplicació instal·lada, bloquejada</translation>
 <translation id="8785070478575117577">Connecta't a <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index 4b630eec..31de632 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Der er ingen tilgængelige mobilnetværk</translation>
 <translation id="3249513730522716925">Vindue <ph name="WINDOW_TITLE" /> blev flyttet fra Skrivebord <ph name="ACTIVE_DESK" /> til Skrivebord <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Hvad kan du gøre?</translation>
+<translation id="3269597722229482060">Højreklik</translation>
 <translation id="3289674678944039601">Oplader via adapter</translation>
 <translation id="3290356915286466215">Ikke beskyttet</translation>
 <translation id="3294437725009624529">Gæst</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Skift til pinkode</translation>
 <translation id="4215497585250573029">VPN-indstillinger</translation>
 <translation id="4217571870635786043">Diktering</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, installeret app, sat på pause</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Screenshot</translation>
 <translation id="425364040945105958">Intet SIM-kort</translation>
@@ -762,6 +764,7 @@
 <translation id="8142699993796781067">Privat netværk</translation>
 <translation id="8152092012181020186">Tryk på Ctrl+W for at lukke.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Denne indstilling administreres af din administrator.</translation>
+<translation id="8155628902202578800">Åbn dialogboks med oplysninger om <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835">Bruger <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Mobilnetværk. Signalstyrke: <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Notifikationer er skjult.</translation>
@@ -827,6 +830,7 @@
 <translation id="8755498163081687682">Bekræft din identitet: <ph name="ORIGIN_NAME" /> ønsker, at du bekræfter din identitet</translation>
 <translation id="875593634123171288">Vis VPN-indstillinger</translation>
 <translation id="8759408218731716181">Samlet login fra flere konti kan ikke konfigureres</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, installeret app, blokeret</translation>
 <translation id="8785070478575117577">Opret forbindelse til <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index 6a985cb..9324d863 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Luz nocturna</translation>
 <translation id="2727175239389218057">Responder</translation>
 <translation id="2727977024730340865">Conexión a un cargador de baja potencia. Es posible que la carga de la batería no sea confiable.</translation>
+<translation id="2778650143428714839"><ph name="MANAGER" /> administra <ph name="DEVICE_TYPE" /></translation>
 <translation id="2792498699870441125">Alt+tecla de búsqueda</translation>
 <translation id="2819276065543622893">Saldrás de la sesión ahora.</translation>
 <translation id="28232023175184696">No me puedo conectar a Internet. Haz clic para volver a intentarlo.</translation>
@@ -565,6 +566,7 @@
 <translation id="6297287540776456956">Usa la pluma stylus para seleccionar una región</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> se giró a <ph name="ROTATION" />.</translation>
 <translation id="6315170314923504164">Voz</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> es una sesión administrada por <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Se activó la conexión Bluetooth</translation>
 <translation id="6381109794406942707">Para desbloquear el dispositivo, ingresa el PIN.</translation>
 <translation id="639644700271529076">El bloqueo de mayúsculas está desactivado.</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index 9307efa..bfe6022 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Luz nocturna</translation>
 <translation id="2727175239389218057">Responder</translation>
 <translation id="2727977024730340865">Conectado a un cargador de baja potencia. Es posible que la carga de la batería no sea fiable.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> gestionado por <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt+tecla de búsqueda</translation>
 <translation id="2819276065543622893">Tu sesión se cerrará ahora.</translation>
 <translation id="28232023175184696">No es posible conectarse a Internet. Haz clic aquí para volver a intentarlo.</translation>
@@ -565,6 +566,7 @@
 <translation id="6297287540776456956">Usa el lápiz óptico para seleccionar una parte de la pantalla</translation>
 <translation id="6310121235600822547">Se ha modificado la rotación de <ph name="DISPLAY_NAME" /> a <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Voz</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> es una sesión administrada por <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">El Bluetooth está activado</translation>
 <translation id="6381109794406942707">Para desbloquear el dispositivo, introduce tu PIN.</translation>
 <translation id="639644700271529076">Bloqueo de mayúsculas desactivado</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index 508214f..96a25890 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Ühtegi mobiilsidevõrku pole saadaval</translation>
 <translation id="3249513730522716925">Aken <ph name="WINDOW_TITLE" /> teisaldati töölaualt <ph name="ACTIVE_DESK" /> töölauale <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Mida sa teha oskad?</translation>
+<translation id="3269597722229482060">Paremklikk</translation>
 <translation id="3289674678944039601">Laadimine adapteri kaudu</translation>
 <translation id="3290356915286466215">Kaitsmata</translation>
 <translation id="3294437725009624529">Külaline</translation>
@@ -341,6 +342,7 @@
 <translation id="4212472694152630271">Kasuta PIN-koodi</translation>
 <translation id="4215497585250573029">VPN-i seaded</translation>
 <translation id="4217571870635786043">Dikteerimine</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, installitud rakendus, ajutiselt peatatud</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Ekraanipilt</translation>
 <translation id="425364040945105958">SIM-kaarti pole</translation>
@@ -762,6 +764,7 @@
 <translation id="8142699993796781067">Privaatvõrk</translation>
 <translation id="8152092012181020186">Sulgemiseks vajutage klahvikombinatsiooni Ctrl + W.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Seda seadet haldab administraator.</translation>
+<translation id="8155628902202578800">Avage konto <ph name="USER_EMAIL_ADDRESS" /> teabedialoog</translation>
 <translation id="8167567890448493835">Kasutusel: <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Mobiilsidevõrk. Signaalitugevus: <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Märguanded on peidetud.</translation>
@@ -827,6 +830,7 @@
 <translation id="8755498163081687682">Kinnitage oma isik: <ph name="ORIGIN_NAME" /> soovib teie isiku kinnitada</translation>
 <translation id="875593634123171288">Kuvab VPN-i seaded</translation>
 <translation id="8759408218731716181">Mitmesse kontosse sisselogimist ei saa häälestada</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, installitud rakendus, blokeeritud</translation>
 <translation id="8785070478575117577">Loo ühendus võrguga <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" />.</translation>
 <translation id="8814190375133053267">WiFi</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb
index 701e742..5d6138e 100644
--- a/ash/strings/ash_strings_eu.xtb
+++ b/ash/strings/ash_strings_eu.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Ez dago sare mugikor erabilgarririk</translation>
 <translation id="3249513730522716925"><ph name="WINDOW_TITLE" /> leihoa <ph name="ACTIVE_DESK" /> lan-eremutik <ph name="TARGET_DESK" /> lan-eremura eraman da</translation>
 <translation id="3255483164551725916">Zer egin dezakezu?</translation>
+<translation id="3269597722229482060">Egin klik eskuineko botoiarekin</translation>
 <translation id="3289674678944039601">Egokigailu bidez kargatzen</translation>
 <translation id="3290356915286466215">Babestu gabe</translation>
 <translation id="3294437725009624529">Gonbidatua</translation>
@@ -341,6 +342,7 @@
 <translation id="4212472694152630271">Aldatu PIN kodera</translation>
 <translation id="4215497585250573029">VPN ezarpenak</translation>
 <translation id="4217571870635786043">Diktaketa</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, instalatutako eta pausatutako aplikazioa</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Pantaila-argazkia</translation>
 <translation id="425364040945105958">Ez dago SIM txartelik</translation>
@@ -762,6 +764,7 @@
 <translation id="8142699993796781067">Sare pribatua</translation>
 <translation id="8152092012181020186">Ixteko, sakatu Ktrl + W.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Administratzaileak kudeatzen du ezarpen hau.</translation>
+<translation id="8155628902202578800">Ireki <ph name="USER_EMAIL_ADDRESS" /> erabiltzailearen informazio-leihoa</translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> erabiltzen</translation>
 <translation id="8170567869359129153">Sare mugikorra. Seinalearen indarra: <ph name="SIGNAL_STRENGTH" />.</translation>
 <translation id="8192202700944119416">Jakinarazpenak ezkutatuta daude.</translation>
@@ -827,6 +830,7 @@
 <translation id="8755498163081687682">Egiaztatu zure nortasuna: <ph name="ORIGIN_NAME" /> webguneak zeu zarela berretsi nahi du</translation>
 <translation id="875593634123171288">Erakutsi VPN ezarpenak</translation>
 <translation id="8759408218731716181">Ezin da saio-hasiera anitza konfiguratu</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, instalatutako eta blokeatutako aplikazioa</translation>
 <translation id="8785070478575117577">Konektatu <ph name="NETWORK_NAME" /> sarera</translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi konexioa</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index d0841f69..77b79ad 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Mobiiliverkkoja ei ole käytettävissä</translation>
 <translation id="3249513730522716925">Ikkuna <ph name="WINDOW_TITLE" /> siirretty työpöydältä <ph name="ACTIVE_DESK" /> työpöydälle <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Mitä osaat tehdä?</translation>
+<translation id="3269597722229482060">Klikkaa kakkospainiketta</translation>
 <translation id="3289674678944039601">Ladataan virtalähteen kautta</translation>
 <translation id="3290356915286466215">Suojaamaton</translation>
 <translation id="3294437725009624529">Vierailja</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Vaihda PIN-koodiin</translation>
 <translation id="4215497585250573029">VPN-asetukset</translation>
 <translation id="4217571870635786043">Sanelu</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, asennettu sovellus, keskeytetty</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Kuvakaappaus</translation>
 <translation id="425364040945105958">Ei SIM-korttia</translation>
@@ -763,6 +765,7 @@
 <translation id="8142699993796781067">Yksityinen verkko</translation>
 <translation id="8152092012181020186">Sulje painamalla Ctrl + W.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Järjestelmänvalvojasi ylläpitää tätä asetusta.</translation>
+<translation id="8155628902202578800">Avaa tietoikkuna: <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> käytössä</translation>
 <translation id="8170567869359129153">Mobiiliverkko. Signaalin voimakkuus <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Ilmoitukset on piilotettu.</translation>
@@ -828,6 +831,7 @@
 <translation id="8755498163081687682">Vahvista henkilöllisyytesi: <ph name="ORIGIN_NAME" /> haluaa vahvistaa henkilöllisyytesi</translation>
 <translation id="875593634123171288">Näytä VPN-asetukset</translation>
 <translation id="8759408218731716181">Useisiin tileihin kirjautumista ei sallita</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, asennettu sovellus, estetty</translation>
 <translation id="8785070478575117577">Yhdistä: <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index d0445077..a27fef3 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">कोई मोबाइल नेटवर्क उपलब्ध नहीं</translation>
 <translation id="3249513730522716925">Window <ph name="WINDOW_TITLE" /> को डेस्क <ph name="ACTIVE_DESK" /> से डेस्क <ph name="TARGET_DESK" /> पर सेट कर दिया गया है</translation>
 <translation id="3255483164551725916">तुम क्या-क्या कर सकती हो?</translation>
+<translation id="3269597722229482060">दायां क्लिक करें</translation>
 <translation id="3289674678944039601">अडैप्टर से चार्ज हो रहा है</translation>
 <translation id="3290356915286466215">असुरक्षित</translation>
 <translation id="3294437725009624529">अतिथि</translation>
@@ -341,6 +342,7 @@
 <translation id="4212472694152630271">पिन पर स्विच करें</translation>
 <translation id="4215497585250573029">वीपीएन की सेटिंग</translation>
 <translation id="4217571870635786043">लिखवाना</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, इंस्टॉल किया गया ऐप्लिकेशन, कुछ देर के लिए रोका गया</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">स्क्रीनशॉट</translation>
 <translation id="425364040945105958">कोई सिम कार्ड नहीं लगाया गया है</translation>
@@ -762,6 +764,7 @@
 <translation id="8142699993796781067">निजी नेटवर्क</translation>
 <translation id="8152092012181020186">बंद करने के लिए Ctrl + W दबाएं.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> इस सेटिंग को आपका एडमिन प्रबंधित करता है.</translation>
+<translation id="8155628902202578800"><ph name="USER_EMAIL_ADDRESS" /> के लिए, जानकारी वाला डायलॉग खोलें.</translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> का इस्तेमाल किया जा रहा है</translation>
 <translation id="8170567869359129153">मोबाइल नेटवर्क. सिग्नल की क्षमता <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">सूचनाएं छिपी हुई हैं.</translation>
@@ -827,6 +830,7 @@
 <translation id="8755498163081687682">अपनी पहचान की पुष्टि करें: <ph name="ORIGIN_NAME" /> आपकी पहचान की पुष्टि करना चाहता है</translation>
 <translation id="875593634123171288">VPN सेटिंग दिखाएं</translation>
 <translation id="8759408218731716181">एक से ज़्यादा साइन-इन सेट अप नहीं किया जा सका</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, इंस्टॉल किया गया ऐप्लिकेशन, ब्लॉक किया गया</translation>
 <translation id="8785070478575117577"><ph name="NETWORK_NAME" /> से कनेक्ट करें</translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">वाई-फ़ाई </translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index 81070c75..2cc82a0 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Mobilne mreže nisu dostupne</translation>
 <translation id="3249513730522716925">Prozor <ph name="WINDOW_TITLE" /> premješten je s radne površine <ph name="ACTIVE_DESK" /> na radnu površinu <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Što možeš učiniti?</translation>
+<translation id="3269597722229482060">Desni klik</translation>
 <translation id="3289674678944039601">Punjenje putem adaptera</translation>
 <translation id="3290356915286466215">Nije osigurano</translation>
 <translation id="3294437725009624529">Gost</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Prelazak na PIN</translation>
 <translation id="4215497585250573029">VPN postavke</translation>
 <translation id="4217571870635786043">Diktat</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, instalirana aplikacija, pauzirana</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Snimka zaslona</translation>
 <translation id="425364040945105958">Nema SIM kartice</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">Privatna mreža</translation>
 <translation id="8152092012181020186">Pritisnite Ctrl + W da biste zatvorili.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Tom postavkom upravlja vaš administrator.</translation>
+<translation id="8155628902202578800">Otvorite dijalog za <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835">Upotrebljava se <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Mobilna mreža. Jačina signala od <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Obavijesti su skrivene.</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">Potvrdite svoj identitet: <ph name="ORIGIN_NAME" /> želi potvrditi da ste to vi</translation>
 <translation id="875593634123171288">Prikaz postavki VPN-a</translation>
 <translation id="8759408218731716181">Nije moguće postaviti višestruku prijavu</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, instalirana aplikacija, blokirana</translation>
 <translation id="8785070478575117577">Povežite se sa satom <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
diff --git a/ash/strings/ash_strings_lo.xtb b/ash/strings/ash_strings_lo.xtb
index 7425775..d5c83d2 100644
--- a/ash/strings/ash_strings_lo.xtb
+++ b/ash/strings/ash_strings_lo.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">ບໍ່ມີເຄືອຂ່າຍມືຖື</translation>
 <translation id="3249513730522716925">ຍ້າຍໜ້າຈໍ <ph name="WINDOW_TITLE" /> ຈາກເດັສ <ph name="ACTIVE_DESK" /> ໄປຫາເດັສ <ph name="TARGET_DESK" /> ແລ້ວ</translation>
 <translation id="3255483164551725916">ທ່ານເຮັດຫຍັງໄດ້ແດ່?</translation>
+<translation id="3269597722229482060">ຄລິກຂວາ</translation>
 <translation id="3289674678944039601">ກຳລັງສາກຜ່ານອະແດັບເຕີ</translation>
 <translation id="3290356915286466215">ບໍ່ປອດໄພ</translation>
 <translation id="3294437725009624529">ແຂກ</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">ປ່ຽນໄປໃຊ້ PIN</translation>
 <translation id="4215497585250573029">ການຕັ້ງຄ່າ VPN</translation>
 <translation id="4217571870635786043">ການພິມຕາມຄຳບອກ</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, ແອັບທີ່ຕິດຕັ້ງແລ້ວ, ຢຸດໄວ້ຊົ່ວຄາວແລ້ວ</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">ຮູບຖ່າຍໜ້າຈໍ</translation>
 <translation id="425364040945105958">ບໍ່ມີ SIM</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">ເຄືອ​ຂ່າຍ​ສ່ວນຕົວ</translation>
 <translation id="8152092012181020186">ກົດ Ctrl + W ເພື່ອປິດ.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> ການຕັ້ງຄ່ານີ້ຈັດການໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ.</translation>
+<translation id="8155628902202578800">ເປີດກ່ອງໂຕ້ຕອງຂໍ້ມູນສຳລັບ <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835">ກຳລັງໃຊ້ <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">ເຄືອຂ່າຍມືຖື. ຄວາມແຮງສັນຍານ <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">ເຊື່ອງການແຈ້ງເຕືອນໄວ້ແລ້ວ.</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">ຢັ້ງຢືນຕົວຕົນຂອງທ່ານ: <ph name="ORIGIN_NAME" /> ຕ້ອງການຢືນຢັນວ່າມັນແມ່ນທ່ານ</translation>
 <translation id="875593634123171288">ສະແດງການຕັ້ງຄ່າ VPN</translation>
 <translation id="8759408218731716181">ບໍ່ສາມາດຕັ້ງລົງຊື່ເຂົ້າ​ໃຊ້ຫຼາຍອັນໄດ້</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, ແອັບທີ່ຕິດຕັ້ງແລ້ວ, ບລັອກໄວ້ແລ້ວ</translation>
 <translation id="8785070478575117577">ເຊື່ອມຕໍ່ກັບ <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi​-Fi</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index 58e90c47..cdc1782 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Nėra jokių pasiekiamų mobiliojo ryšio tinklų</translation>
 <translation id="3249513730522716925">Langas „<ph name="WINDOW_TITLE" />“ perkeltas iš darbalaukio „<ph name="ACTIVE_DESK" />“ į darbalaukį „<ph name="TARGET_DESK" />“</translation>
 <translation id="3255483164551725916">„What can you do?“ (Ką gali atlikti?)</translation>
+<translation id="3269597722229482060">Spustelėti dešiniuoju klavišu</translation>
 <translation id="3289674678944039601">Įkraunama naudojant adapterį</translation>
 <translation id="3290356915286466215">Neapsaugota</translation>
 <translation id="3294437725009624529">Svečias</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Perjungti į PIN kodą</translation>
 <translation id="4215497585250573029">VPN nustatymai</translation>
 <translation id="4217571870635786043">Diktavimas</translation>
+<translation id="4221957499226645091">„<ph name="APP_NAME" />“, įdiegta programa, pristabdyta</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Ekrano kopija</translation>
 <translation id="425364040945105958">Nėra SIM kortelės</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">Privatus tinklas</translation>
 <translation id="8152092012181020186">Paspauskite „Ctrl“ + W, kad uždarytumėte.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Šį nustatymą tvarko jūsų administratorius.</translation>
+<translation id="8155628902202578800">Atidaryti <ph name="USER_EMAIL_ADDRESS" /> informacijos dialogo langą</translation>
 <translation id="8167567890448493835">Naudojama: <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Mobiliojo ryšio tinklas. Signalo stiprumas <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Pranešimai yra paslėpti.</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">Patvirtinkite savo tapatybę: <ph name="ORIGIN_NAME" /> norėtų patvirtinti, kad tai jūs</translation>
 <translation id="875593634123171288">Rodyti VPN nustatymus</translation>
 <translation id="8759408218731716181">Negalima nustatyti kelių paskyrų</translation>
+<translation id="878215960996152260">„<ph name="APP_NAME" />“, įdiegta programa, užblokuota</translation>
 <translation id="8785070478575117577">Prisijungti prie „<ph name="NETWORK_NAME" />“</translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">WI-Fi</translation>
diff --git a/ash/strings/ash_strings_my.xtb b/ash/strings/ash_strings_my.xtb
index a9f25b1..2091e5e 100644
--- a/ash/strings/ash_strings_my.xtb
+++ b/ash/strings/ash_strings_my.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">မည်သည့် ကွန်ရက်မျှ မရနိုင်ပါ</translation>
 <translation id="3249513730522716925">ဝင်းဒိုး <ph name="WINDOW_TITLE" /> ကို 'မြင်ကွင်း <ph name="ACTIVE_DESK" />' မှ 'မြင်ကွင်း <ph name="TARGET_DESK" />' သို့ ရွှေ့ထားသည်</translation>
 <translation id="3255483164551725916">သင်ဘာလုပ်နိုင်သလဲ။</translation>
+<translation id="3269597722229482060">ညာဘက်ခလုတ်ကို နှိပ်ရန်</translation>
 <translation id="3289674678944039601">ကြားခံကိရိယာမှတစ်ဆင့် အားသွင်းနေသည်</translation>
 <translation id="3290356915286466215">မလုံခြုံပါ</translation>
 <translation id="3294437725009624529">ဧည့်သည်</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">ပင်နံပါတ်သို့ပြောင်းရန်</translation>
 <translation id="4215497585250573029">VPN ဆက်တင်များ</translation>
 <translation id="4217571870635786043">အသံထွက်၍ ဖတ်ပေးခြင်း</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />၊ ထည့်သွင်းထားသည့် အက်ပ်၊ ခဏရပ်ထားသည်</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">မျက်နှာပြင် လျှပ်တပြက်ပုံ</translation>
 <translation id="425364040945105958">ဆင်းကတ်မရှိပါ</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">ကိုယ်ပိုင်ကွန်ရက်</translation>
 <translation id="8152092012181020186">ပိတ်ရန် Ctrl + W နှိပ်ပါ။</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> ဤဆက်တင်ကို သင့်စီမံခန့်ခွဲသူက စီမံသည်။</translation>
+<translation id="8155628902202578800"><ph name="USER_EMAIL_ADDRESS" /> အတွက် အချက်အလက်ဒိုင်ယာလော့ခ် ဖွင့်ပါ</translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" /> အသုံးပြုခြင်း</translation>
 <translation id="8170567869359129153">မိုဘိုင်းကွန်ရက်။ <ph name="SIGNAL_STRENGTH" /> ၏ လိုင်းဆွဲအား</translation>
 <translation id="8192202700944119416">အကြောင်းကြားချက်များကို ဝှက်ထားသည်။</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">သင်၏အထောက်အထားကို အတည်ပြုပါ- သင်ဖြစ်ကြောင်း <ph name="ORIGIN_NAME" /> က အတည်ပြုလိုသည်</translation>
 <translation id="875593634123171288">VPN ဆက်တင်များကို ပြရန်</translation>
 <translation id="8759408218731716181">အများအပြား လက်မှတ်ထိုး ဝင်မှုကို သတ်မှတ် မပေးနိုင်</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />၊ ထည့်သွင်းထားသည့် အက်ပ်၊ ပိတ်ထားသည်</translation>
 <translation id="8785070478575117577"><ph name="NETWORK_NAME" /> သို့ ချိတ်ဆက်ရန်</translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />။ <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">ကြိုးမဲ့</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index 726ec46..47c8bae 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Ingen mobilnettverk er tilgjengelige</translation>
 <translation id="3249513730522716925">Vinduet <ph name="WINDOW_TITLE" /> ble flyttet fra skrivebord <ph name="ACTIVE_DESK" /> til skrivebord <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Hva kan du gjøre?</translation>
+<translation id="3269597722229482060">Høyreklikk</translation>
 <translation id="3289674678944039601">Lader via adapter</translation>
 <translation id="3290356915286466215">Usikret</translation>
 <translation id="3294437725009624529">Gjest</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Bytt til PIN-kode</translation>
 <translation id="4215497585250573029">VPN-innstillinger</translation>
 <translation id="4217571870635786043">Diktering</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, installert app, satt på pause</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Skjermdump</translation>
 <translation id="425364040945105958">Uten SIM-kort</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">Privat nettverk</translation>
 <translation id="8152092012181020186">Trykk på Ctrl + W for å lukke.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Denne innstillingen administreres av administratoren.</translation>
+<translation id="8155628902202578800">Åpne dialogboksen for informasjon om <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835">Bruker <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Mobilnettverk. Signalstyrke på <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Varsler er skjult.</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">Verifiser identiteten din: <ph name="ORIGIN_NAME" /> vil bekrefte at det er deg</translation>
 <translation id="875593634123171288">Vis innstillinger for VPN</translation>
 <translation id="8759408218731716181">Kan ikke konfigurere multipålogging</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, installert app, blokkert</translation>
 <translation id="8785070478575117577">Koble til <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index d5b021d..f3443a32 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Brak dostępnych sieci komórkowych</translation>
 <translation id="3249513730522716925">Okno <ph name="WINDOW_TITLE" /> zostało przeniesione z biurka <ph name="ACTIVE_DESK" /> na biurko <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Co potrafisz?</translation>
+<translation id="3269597722229482060">Kliknij prawym</translation>
 <translation id="3289674678944039601">Ładowanie z zasilacza.</translation>
 <translation id="3290356915286466215">Niezabezpieczona</translation>
 <translation id="3294437725009624529">Gość</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Zmień na PIN</translation>
 <translation id="4215497585250573029">Ustawienia sieci VPN</translation>
 <translation id="4217571870635786043">Dyktowanie</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, zainstalowana aplikacja, wstrzymana</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Zrzut ekranu</translation>
 <translation id="425364040945105958">Brak karty SIM</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">Sieć prywatna</translation>
 <translation id="8152092012181020186">Aby zamknąć, naciśnij CTRL + W.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> – tym ustawieniem zarządza Twój administrator.</translation>
+<translation id="8155628902202578800">Otwórz okno informacyjne dla konta <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835">W użyciu jest: <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Sieć komórkowa. Siła sygnału: <ph name="SIGNAL_STRENGTH" />.</translation>
 <translation id="8192202700944119416">Powiadomienia są ukryte.</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">Weryfikacja tożsamości: strona <ph name="ORIGIN_NAME" /> wymaga potwierdzenia, że to Ty</translation>
 <translation id="875593634123171288">Pokaż ustawienia VPN</translation>
 <translation id="8759408218731716181">Nie można skonfigurować wielokrotnego logowania</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, zainstalowana aplikacja, zablokowana</translation>
 <translation id="8785070478575117577">Połącz z <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index e464b4c..ad464d28 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Modo noturno</translation>
 <translation id="2727175239389218057">Responder</translation>
 <translation id="2727977024730340865">Conectado a um carregador de baixa potência. O carregamento da bateria pode não ser confiável.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" /> gerenciado por <ph name="MANAGER" /></translation>
 <translation id="2792498699870441125">Alt + Pesquisar</translation>
 <translation id="2819276065543622893">Você sairá agora.</translation>
 <translation id="28232023175184696">Não é possível se conectar à Internet. Clique para tentar novamente.</translation>
@@ -565,6 +566,7 @@
 <translation id="6297287540776456956">Use a stylus para selecionar uma região</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> foi substituída por <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Voz</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" /> é uma sessão gerenciada por <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Bluetooth ativado</translation>
 <translation id="6381109794406942707">Para desbloquear o dispositivo, digite o PIN.</translation>
 <translation id="639644700271529076">CAPS LOCK está desativado</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index d866b071..828bf660 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Nicio rețea mobilă disponibilă</translation>
 <translation id="3249513730522716925">Fereastra <ph name="WINDOW_TITLE" /> a fost mutată de pe desktopul <ph name="ACTIVE_DESK" /> pe desktopul <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Ce poți face?</translation>
+<translation id="3269597722229482060">Clic dreapta</translation>
 <translation id="3289674678944039601">Se încarcă prin adaptor</translation>
 <translation id="3290356915286466215">Nesecurizată</translation>
 <translation id="3294437725009624529">Invitat</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Comută la PIN</translation>
 <translation id="4215497585250573029">Setări VPN</translation>
 <translation id="4217571870635786043">Dictare</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, aplicație instalată, în pauză</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Captură de ecran</translation>
 <translation id="425364040945105958">Niciun card SIM</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">Rețea privată</translation>
 <translation id="8152092012181020186">Apasă Ctrl + W pentru a închide.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Această setare este gestionată de administrator.</translation>
+<translation id="8155628902202578800">Deschide fereastra de dialog cu informații pentru <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835">Se folosește <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Rețea mobilă. Puterea semnalului: <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Notificările sunt ascunse.</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">Confirmă-ți identitatea: <ph name="ORIGIN_NAME" /> solicită să îți confirmi identitatea</translation>
 <translation id="875593634123171288">Afișează setările VPN</translation>
 <translation id="8759408218731716181">Nu se poate configura conectarea multiplă</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, aplicație instalată, blocată</translation>
 <translation id="8785070478575117577">Conectează-te la <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index c74adaf..2fb6191a 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Ночной свет</translation>
 <translation id="2727175239389218057">Ответить</translation>
 <translation id="2727977024730340865">Подключено маломощное зарядное устройство. Возможны проблемы при зарядке.</translation>
+<translation id="2778650143428714839">Устройством <ph name="DEVICE_TYPE" /> управляет <ph name="MANAGER" />.</translation>
 <translation id="2792498699870441125">Alt + Search</translation>
 <translation id="2819276065543622893">Сеанс завершен.</translation>
 <translation id="28232023175184696">Ошибка подключения к Интернету. Нажмите, чтобы повторить попытку.</translation>
@@ -564,6 +565,7 @@
 <translation id="6297287540776456956">Чтобы выбрать регион, используйте стилус</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" />: положение изменено на <ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">Микрофон</translation>
+<translation id="6338485349199627913">Сеансом "<ph name="DISPLAY_NAME" />" управляет <ph name="MANAGER" /></translation>
 <translation id="6376931439017688372">Bluetooth включен</translation>
 <translation id="6381109794406942707">Чтобы разблокировать устройство, введите PIN-код.</translation>
 <translation id="639644700271529076">CAPS LOCK отключен</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index 33c0b61..9b88cea 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Mobilno omrežje ni na voljo</translation>
 <translation id="3249513730522716925">Okno <ph name="WINDOW_TITLE" /> je bilo premaknjeno iz namizja <ph name="ACTIVE_DESK" /> v namizje <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Kakšne možnosti so na voljo?</translation>
+<translation id="3269597722229482060">Desni klik</translation>
 <translation id="3289674678944039601">Polnjenje prek napajalnika</translation>
 <translation id="3290356915286466215">Ni varno</translation>
 <translation id="3294437725009624529">Gost</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Preklopi na kodo PIN</translation>
 <translation id="4215497585250573029">Nastavitve VPN-ja</translation>
 <translation id="4217571870635786043">Narek</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, nameščena aplikacija, začasno zaustavljena</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Posnetek zaslona</translation>
 <translation id="425364040945105958">Ni kartice SIM</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">Zasebno omrežje</translation>
 <translation id="8152092012181020186">Pritisnite Ctrl + W, če ga želite zapreti.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> To nastavitev upravlja skrbnik.</translation>
+<translation id="8155628902202578800">Odpri pogovorno okno z informacijami o uporabniku <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835">Uporaba jezika <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Mobilno omrežje. Moč signala: <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Obvestila so skrita.</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">Preverjanje identitete: Spletno mesto <ph name="ORIGIN_NAME" /> želi potrditi, ali ste to res vi.</translation>
 <translation id="875593634123171288">Prikaz nastavitev omrežja VPN</translation>
 <translation id="8759408218731716181">Prijave z več računi ni mogoče nastaviti</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, nameščena aplikacija, blokirana</translation>
 <translation id="8785070478575117577">Vzpostavitev povezave z omrežjem <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
diff --git a/ash/strings/ash_strings_sr-Latn.xtb b/ash/strings/ash_strings_sr-Latn.xtb
index 2e2d7e5..ff3d7ee 100644
--- a/ash/strings/ash_strings_sr-Latn.xtb
+++ b/ash/strings/ash_strings_sr-Latn.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Nije dostupna nijedna mobilna mreža</translation>
 <translation id="3249513730522716925">Prozor <ph name="WINDOW_TITLE" /> je premešten sa radne površine <ph name="ACTIVE_DESK" /> na radnu površinu <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Šta možeš da radiš?</translation>
+<translation id="3269597722229482060">Desni klik</translation>
 <translation id="3289674678944039601">Puni se preko adaptera</translation>
 <translation id="3290356915286466215">Nezaštićeno</translation>
 <translation id="3294437725009624529">Gost</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Pređi na PIN</translation>
 <translation id="4215497585250573029">Podešavanja VPN-a</translation>
 <translation id="4217571870635786043">Diktiranje</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, instalirana aplikacija, pauzirana</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Snimak ekrana</translation>
 <translation id="425364040945105958">Nema SIM kartice</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">Privatna mreža</translation>
 <translation id="8152092012181020186">Pritisnite Ctrl + W da biste zatvorili.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Ovim podešavanjem upravlja administrator.</translation>
+<translation id="8155628902202578800">Otvara dijalog sa informacijama za korisnika <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835">Koristi se <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Mobilna mreža. Jačina signala od <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Obaveštenja su sakrivena.</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">Verifikujte identitet: <ph name="ORIGIN_NAME" /> želi da potvrdi da ste to vi</translation>
 <translation id="875593634123171288">Pregledajte podešavanja VPN-a</translation>
 <translation id="8759408218731716181">Nije moguće podesiti višestruko prijavljivanje</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, instalirana aplikacija, blokirana</translation>
 <translation id="8785070478575117577">Povežite se sa uređajem <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">WiFi</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index dfbfc68..f079ad80 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">Није доступна ниједна мобилна мрежа</translation>
 <translation id="3249513730522716925">Прозор <ph name="WINDOW_TITLE" /> је премештен са радне површине <ph name="ACTIVE_DESK" /> на радну површину <ph name="TARGET_DESK" /></translation>
 <translation id="3255483164551725916">Шта можеш да радиш?</translation>
+<translation id="3269597722229482060">Десни клик</translation>
 <translation id="3289674678944039601">Пуни се преко адаптера</translation>
 <translation id="3290356915286466215">Незаштићено</translation>
 <translation id="3294437725009624529">Гост</translation>
@@ -340,6 +341,7 @@
 <translation id="4212472694152630271">Пређи на PIN</translation>
 <translation id="4215497585250573029">Подешавања VPN-а</translation>
 <translation id="4217571870635786043">Диктирање</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, инсталирана апликација, паузирана</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">Снимак екрана</translation>
 <translation id="425364040945105958">Нема SIM картице</translation>
@@ -761,6 +763,7 @@
 <translation id="8142699993796781067">Приватна мрежа</translation>
 <translation id="8152092012181020186">Притисните Ctrl + W да бисте затворили.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> Овим подешавањем управља администратор.</translation>
+<translation id="8155628902202578800">Отвара дијалог са информацијама за корисника <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8167567890448493835">Користи се <ph name="LOCALE_NAME" /></translation>
 <translation id="8170567869359129153">Мобилна мрежа. Јачина сигнала од <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">Обавештења су сакривена.</translation>
@@ -826,6 +829,7 @@
 <translation id="8755498163081687682">Верификујте идентитет: <ph name="ORIGIN_NAME" /> жели да потврди да сте то ви</translation>
 <translation id="875593634123171288">Прегледајте подешавања VPN-а</translation>
 <translation id="8759408218731716181">Није могуће подесити вишеструко пријављивање</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, инсталирана апликација, блокирана</translation>
 <translation id="8785070478575117577">Повежите се са уређајем <ph name="NETWORK_NAME" /></translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">WiFi</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 0f22acc..75b6e21 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -238,6 +238,7 @@
 <translation id="3236488194889173876">మొబైల్ నెట్‌వర్క్ ఏదీ అందుబాటులో లేదు</translation>
 <translation id="3249513730522716925">"<ph name="WINDOW_TITLE" />" విండో అన్నది "<ph name="ACTIVE_DESK" />" డెస్క్ నుండి "<ph name="TARGET_DESK" />" డెస్క్‌కు తరలించబడింది</translation>
 <translation id="3255483164551725916">నువ్వు ఏమి చేయగలవు?</translation>
+<translation id="3269597722229482060">కుడి క్లిక్</translation>
 <translation id="3289674678944039601">అడాప్టర్ ద్వారా ఛార్జ్ అవుతోంది</translation>
 <translation id="3290356915286466215">అసురక్షితమైనది</translation>
 <translation id="3294437725009624529">అతిథి</translation>
@@ -341,6 +342,7 @@
 <translation id="4212472694152630271">పిన్‌కి స్విచ్ చేయి</translation>
 <translation id="4215497585250573029">VPN సెట్టింగ్‌లు</translation>
 <translation id="4217571870635786043">డిక్టేషన్</translation>
+<translation id="4221957499226645091"><ph name="APP_NAME" />, ఇన్‌స్టాల్ చేయబడిన యాప్, పాజ్ చేయబడింది</translation>
 <translation id="4239069858505860023">GPRS</translation>
 <translation id="4250229828105606438">స్క్రీన్‌షాట్</translation>
 <translation id="425364040945105958">SIM లేదు</translation>
@@ -762,6 +764,7 @@
 <translation id="8142699993796781067">ప్రైవే. నెట్‌వర్క్</translation>
 <translation id="8152092012181020186">మూసివేయడానికి Ctrl + W నొక్కండి.</translation>
 <translation id="8155007568264258537"><ph name="FEATURE_NAME" /> ఈ సెట్టింగ్ మీ నిర్వాహకుడి ద్వారా నిర్వహించబడుతుంది.</translation>
+<translation id="8155628902202578800"><ph name="USER_EMAIL_ADDRESS" /> కోసం సమాచార డైలాగ్‌ను తెరువు</translation>
 <translation id="8167567890448493835"><ph name="LOCALE_NAME" />ని ఉపయోగిస్తోంది</translation>
 <translation id="8170567869359129153">మొబైల్ నెట్‌వర్క్. సిగ్నల్ సామర్థ్యం - <ph name="SIGNAL_STRENGTH" /></translation>
 <translation id="8192202700944119416">నోటిఫికేషన్‌లు దాచబడ్డాయి.</translation>
@@ -827,6 +830,7 @@
 <translation id="8755498163081687682">మీ గుర్తింపును వెరిఫై చేయండి: <ph name="ORIGIN_NAME" /> అది మీరేనని నిర్ధారించాలనుకుంటుంది</translation>
 <translation id="875593634123171288">VPN సెట్టింగ్‌లను చూపుతుంది</translation>
 <translation id="8759408218731716181">బహుళ సైన్-ఇన్‌ను సెటప్ చేయలేరు</translation>
+<translation id="878215960996152260"><ph name="APP_NAME" />, ఇన్‌స్టాల్ చేయబడిన యాప్, బ్లాక్ చేయబడింది</translation>
 <translation id="8785070478575117577"><ph name="NETWORK_NAME" />కు కనెక్ట్ చేయండి</translation>
 <translation id="8788027118671217603"><ph name="STATE_TEXT" />. <ph name="ENTERPRISE_TEXT" /></translation>
 <translation id="8814190375133053267">Wi-Fi</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index be607c15..cd22837 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">Gece Işığı</translation>
 <translation id="2727175239389218057">Yanıtla</translation>
 <translation id="2727977024730340865">Düşük güçlü bir şarj cihazına takıldı. Şarj durumu güvenilir olmayabilir.</translation>
+<translation id="2778650143428714839"><ph name="DEVICE_TYPE" />, <ph name="MANAGER" /> tarafından yönetiliyor</translation>
 <translation id="2792498699870441125">Alt+Arama</translation>
 <translation id="2819276065543622893">Şimdi çıkış yapacaksınız.</translation>
 <translation id="28232023175184696">İnternete bağlanamıyor. Tekrar denemek için tıklayın.</translation>
@@ -565,6 +566,7 @@
 <translation id="6297287540776456956">Alan seçmek için ekran kalemini kullanın</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> dönme ayarı <ph name="ROTATION" /> olarak değiştirildi</translation>
 <translation id="6315170314923504164">Ses</translation>
+<translation id="6338485349199627913"><ph name="DISPLAY_NAME" />, <ph name="MANAGER" /> tarafından yönetilen bir oturumdur</translation>
 <translation id="6376931439017688372">Bluetooth açık</translation>
 <translation id="6381109794406942707">Cihazın kilidini açmak için PIN'inizi girin.</translation>
 <translation id="639644700271529076">CAPS LOCK kapalı</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index 01a70bf..e98f1e7e 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -185,6 +185,7 @@
 <translation id="2718395828230677721">夜燈</translation>
 <translation id="2727175239389218057">回覆</translation>
 <translation id="2727977024730340865">使用低功率充電器,可能導致充電狀態不穩定。</translation>
+<translation id="2778650143428714839">這部 <ph name="DEVICE_TYPE" /> 是由 <ph name="MANAGER" /> 管理</translation>
 <translation id="2792498699870441125">Alt + 搜尋鍵</translation>
 <translation id="2819276065543622893">現在即將登出。</translation>
 <translation id="28232023175184696">無法連線至網際網路。按一下即可重試。</translation>
@@ -564,6 +565,7 @@
 <translation id="6297287540776456956">使用觸控筆選取擷取範圍</translation>
 <translation id="6310121235600822547"><ph name="DISPLAY_NAME" /> 已旋轉到<ph name="ROTATION" /></translation>
 <translation id="6315170314923504164">語音</translation>
+<translation id="6338485349199627913">「<ph name="DISPLAY_NAME" />」是由 <ph name="MANAGER" /> 管理的工作階段</translation>
 <translation id="6376931439017688372">藍牙已開啟</translation>
 <translation id="6381109794406942707">如要解鎖裝置,請輸入你的 PIN 碼。</translation>
 <translation id="639644700271529076">大寫鍵已關閉</translation>
diff --git a/ash/system/phonehub/phone_hub_metrics.cc b/ash/system/phonehub/phone_hub_metrics.cc
index 20b7c01..3b9c7a5b 100644
--- a/ash/system/phonehub/phone_hub_metrics.cc
+++ b/ash/system/phonehub/phone_hub_metrics.cc
@@ -70,5 +70,10 @@
   base::UmaHistogramCounts100("PhoneHub.NotificationCount", count);
 }
 
+void LogNotificationInteraction(NotificationInteraction interaction) {
+  base::UmaHistogramEnumeration("PhoneHub.NotificationInteraction",
+                                interaction);
+}
+
 }  // namespace phone_hub_metrics
 }  // namespace ash
diff --git a/ash/system/phonehub/phone_hub_metrics.h b/ash/system/phonehub/phone_hub_metrics.h
index 2a6af4d..ab8b200d 100644
--- a/ash/system/phonehub/phone_hub_metrics.h
+++ b/ash/system/phonehub/phone_hub_metrics.h
@@ -44,6 +44,16 @@
   kMaxValue = kToggleLocatePhoneOff
 };
 
+// Enumeration of possible interactions with a PhoneHub notification. Keep in
+// sync with corresponding enum in tools/metrics/histograms/enums.xml. These
+// values are persisted to logs. Entries should not be renumbered and numeric
+// values should never be reused.
+enum class NotificationInteraction {
+  kInlineReply = 0,
+  kDismiss = 1,
+  kMaxValue = kDismiss,
+};
+
 // Logs an |event| occurring for the given |interstitial_screen|.
 void LogInterstitialScreenEvent(Screen screen, InterstitialScreenEvent event);
 
@@ -68,6 +78,9 @@
 // Logs the number of PhoneHub notifications after one is added or removed.
 void LogNotificationCount(int count);
 
+// Logs a given |interaction| with a PhoneHub notification.
+void LogNotificationInteraction(NotificationInteraction interaction);
+
 }  // namespace phone_hub_metrics
 }  // namespace ash
 
diff --git a/ash/system/phonehub/phone_hub_notification_controller.cc b/ash/system/phonehub/phone_hub_notification_controller.cc
index 00c5ad0..b6bdc029 100644
--- a/ash/system/phonehub/phone_hub_notification_controller.cc
+++ b/ash/system/phonehub/phone_hub_notification_controller.cc
@@ -35,6 +35,8 @@
 
 namespace ash {
 
+using phone_hub_metrics::NotificationInteraction;
+
 namespace {
 const char kNotifierId[] = "chrome://phonehub";
 const char kNotifierIdSeparator[] = "-";
@@ -348,6 +350,8 @@
     int64_t notification_id) {
   CHECK(manager_);
   manager_->DismissNotification(notification_id);
+  phone_hub_metrics::LogNotificationInteraction(
+      NotificationInteraction::kDismiss);
 }
 
 void PhoneHubNotificationController::SendInlineReply(
@@ -355,6 +359,8 @@
     const base::string16& inline_reply_text) {
   CHECK(manager_);
   manager_->SendInlineReply(notification_id, inline_reply_text);
+  phone_hub_metrics::LogNotificationInteraction(
+      NotificationInteraction::kInlineReply);
 }
 
 void PhoneHubNotificationController::LogNotificationCount() {
diff --git a/base/android/bundle_utils.cc b/base/android/bundle_utils.cc
index c2f6a84..745606d 100644
--- a/base/android/bundle_utils.cc
+++ b/base/android/bundle_utils.cc
@@ -66,8 +66,12 @@
 
 // static
 bool BundleUtils::IsBundle() {
-  return Java_BundleUtils_isBundleForNative(
-      base::android::AttachCurrentThread());
+  return Java_BundleUtils_isBundleForNative(AttachCurrentThread());
+}
+
+// static
+bool BundleUtils::IsolatedSplitsEnabled() {
+  return Java_BundleUtils_isolatedSplitsEnabled(AttachCurrentThread());
 }
 
 // static
diff --git a/base/android/bundle_utils.h b/base/android/bundle_utils.h
index 2efb54b..76593254 100644
--- a/base/android/bundle_utils.h
+++ b/base/android/bundle_utils.h
@@ -18,6 +18,9 @@
   // Returns true if the current build is a bundle.
   static bool IsBundle();
 
+  // Returns true if isolated splits are enabled.
+  static bool IsolatedSplitsEnabled();
+
   // Helper function asking Java to resolve a library path. This is required for
   // resolving a module library made available via SplitCompat, rather than in
   // its eventual fully-installed state.
diff --git a/base/android/java/src/org/chromium/base/BundleUtils.java b/base/android/java/src/org/chromium/base/BundleUtils.java
index dd2ae192..1971e14 100644
--- a/base/android/java/src/org/chromium/base/BundleUtils.java
+++ b/base/android/java/src/org/chromium/base/BundleUtils.java
@@ -65,6 +65,11 @@
         sIsBundle = isBundle;
     }
 
+    @CalledByNative
+    public static boolean isolatedSplitsEnabled() {
+        return BuildConfig.ISOLATED_SPLITS_ENABLED;
+    }
+
     /**
      * Returns whether splitName is installed. Note, this will return false on Android versions
      * below O, where isolated splits are not supported.
diff --git a/base/android/java/templates/BuildConfig.template b/base/android/java/templates/BuildConfig.template
index 6ca47684..b40fe5d 100644
--- a/base/android/java/templates/BuildConfig.template
+++ b/base/android/java/templates/BuildConfig.template
@@ -86,4 +86,10 @@
 #else
     public static MAYBE_FINAL boolean IS_CHROMECAST_BRANDING_INTERNAL MAYBE_FALSE;
 #endif
+
+#if defined(_ISOLATED_SPLITS_ENABLED)
+    public static MAYBE_FINAL boolean ISOLATED_SPLITS_ENABLED = true;
+#else
+    public static MAYBE_FINAL boolean ISOLATED_SPLITS_ENABLED MAYBE_FALSE;
+#endif
 }
diff --git a/base/files/file_path_watcher.cc b/base/files/file_path_watcher.cc
index 7b42482..83745aa 100644
--- a/base/files/file_path_watcher.cc
+++ b/base/files/file_path_watcher.cc
@@ -36,11 +36,18 @@
 }
 
 bool FilePathWatcher::Watch(const FilePath& path,
-                            bool recursive,
+                            Type type,
                             const Callback& callback) {
   DCHECK(sequence_checker_.CalledOnValidSequence());
   DCHECK(path.IsAbsolute());
-  return impl_->Watch(path, recursive, callback);
+  return impl_->Watch(path, type, callback);
+}
+
+bool FilePathWatcher::Watch(const FilePath& path,
+                            bool recursive,
+                            const Callback& callback) {
+  return Watch(path, recursive ? Type::kRecursive : Type::kNonRecursive,
+               callback);
 }
 
 }  // namespace base
diff --git a/base/files/file_path_watcher.h b/base/files/file_path_watcher.h
index 0289334..87a2cb64 100644
--- a/base/files/file_path_watcher.h
+++ b/base/files/file_path_watcher.h
@@ -16,6 +16,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/sequence_checker.h"
 #include "base/sequenced_task_runner.h"
+#include "build/build_config.h"
 
 namespace base {
 
@@ -32,6 +33,25 @@
 // Must be destroyed on the sequence that invokes Watch().
 class BASE_EXPORT FilePathWatcher {
  public:
+  enum class Type {
+    // Indicates that the watcher should watch the given path and its
+    // ancestors for changes. If the path does not exist, its ancestors will
+    // be watched in anticipation of it appearing later. If the path names a
+    // directory, changes within the directory are not watched.
+    kNonRecursive,
+
+    // Indicates that the watcher should watch the given path, its ancestors,
+    // and its descendants for changes. If the path names a directory, changes
+    // within the directory are watched.
+    kRecursive,
+
+#if defined(OS_MAC)
+    // Indicates that the watcher should watch the given path only (neither
+    // ancestors nor descendants). The watch fails if the path does not exist.
+    kTrivial,
+#endif  // defined(OS_MAC)
+  };
+
   // Callback type for Watch(). |path| points to the file that was updated,
   // and |error| is true if the platform specific code detected an error. In
   // that case, the callback won't be invoked again.
@@ -41,12 +61,14 @@
   // Used internally to encapsulate different members on different platforms.
   class PlatformDelegate {
    public:
+    using Type = FilePathWatcher::Type;
+
     PlatformDelegate();
     virtual ~PlatformDelegate();
 
     // Start watching for the given |path| and notify |delegate| about changes.
     virtual bool Watch(const FilePath& path,
-                       bool recursive,
+                       Type type,
                        const Callback& callback) WARN_UNUSED_RESULT = 0;
 
     // Stop watching. This is called from FilePathWatcher's dtor in order to
@@ -86,16 +108,17 @@
   // Returns true if the platform and OS version support recursive watches.
   static bool RecursiveWatchAvailable();
 
-  // Invokes |callback| whenever updates to |path| are detected. This should be
-  // called at most once. Set |recursive| to true to watch |path| and its
-  // children. The callback will be invoked on the same sequence. Returns true
-  // on success.
+  // Starts watching |path| (and its descendants if |type| is kRecursive) for
+  // changes. |callback| will be run on the caller's sequence to report such
+  // changes. Returns true if the watch was started successfully and |callback|
+  // may one day be run, or false in case of failure (e.g., a recursive watch on
+  // platforms that do not support such).
   //
   // On POSIX, this must be called from a thread that supports
   // FileDescriptorWatcher.
-  //
-  // Recursive watch is not supported on all platforms and file systems.
-  // Watch() will return false in the case of failure.
+  bool Watch(const FilePath& path, Type type, const Callback& callback);
+
+  // Compatibility function (deprecated) for the above.
   bool Watch(const FilePath& path, bool recursive, const Callback& callback);
 
  private:
diff --git a/base/files/file_path_watcher_fsevents.cc b/base/files/file_path_watcher_fsevents.cc
index 5b7132e..2956ba0 100644
--- a/base/files/file_path_watcher_fsevents.cc
+++ b/base/files/file_path_watcher_fsevents.cc
@@ -83,14 +83,14 @@
 }
 
 bool FilePathWatcherFSEvents::Watch(const FilePath& path,
-                                    bool recursive,
+                                    Type type,
                                     const FilePathWatcher::Callback& callback) {
   DCHECK(!callback.is_null());
   DCHECK(callback_.is_null());
 
   // This class could support non-recursive watches, but that is currently
   // left to FilePathWatcherKQueue.
-  if (!recursive)
+  if (type != Type::kRecursive)
     return false;
 
   set_task_runner(SequencedTaskRunnerHandle::Get());
diff --git a/base/files/file_path_watcher_fsevents.h b/base/files/file_path_watcher_fsevents.h
index 0ca7da1..145db2e 100644
--- a/base/files/file_path_watcher_fsevents.h
+++ b/base/files/file_path_watcher_fsevents.h
@@ -31,7 +31,7 @@
 
   // FilePathWatcher::PlatformDelegate overrides.
   bool Watch(const FilePath& path,
-             bool recursive,
+             Type type,
              const FilePathWatcher::Callback& callback) override;
   void Cancel() override;
 
diff --git a/base/files/file_path_watcher_fuchsia.cc b/base/files/file_path_watcher_fuchsia.cc
index 53c927e..13dfb73 100644
--- a/base/files/file_path_watcher_fuchsia.cc
+++ b/base/files/file_path_watcher_fuchsia.cc
@@ -18,7 +18,7 @@
   ~FilePathWatcherImpl() override {}
 
   bool Watch(const FilePath& path,
-             bool recursive,
+             Type type,
              const FilePathWatcher::Callback& callback) override;
 
   void Cancel() override;
@@ -31,7 +31,7 @@
 };
 
 bool FilePathWatcherImpl::Watch(const FilePath& path,
-                                bool recursive,
+                                Type type,
                                 const FilePathWatcher::Callback& callback) {
   DCHECK(!callback.is_null());
   DCHECK(callback_.is_null());
diff --git a/base/files/file_path_watcher_kqueue.cc b/base/files/file_path_watcher_kqueue.cc
index 84553ccc..544b3d78 100644
--- a/base/files/file_path_watcher_kqueue.cc
+++ b/base/files/file_path_watcher_kqueue.cc
@@ -8,6 +8,10 @@
 #include <stddef.h>
 #include <sys/param.h>
 
+#include <algorithm>
+#include <string>
+#include <vector>
+
 #include "base/bind.h"
 #include "base/file_descriptor_posix.h"
 #include "base/files/file_util.h"
@@ -47,7 +51,7 @@
   path.GetComponents(&components);
 
   if (components.size() < 1) {
-    return -1;
+    return 0;
   }
 
   int last_existing_entry = 0;
@@ -80,6 +84,23 @@
   return last_existing_entry;
 }
 
+// static
+int FilePathWatcherKQueue::EventForItem(const FilePath& path,
+                                        EventVector* events) {
+  // Make sure that we are working with a clean slate.
+  DCHECK(events->empty());
+
+  events->resize(1);
+  auto& event = events->front();
+  EV_SET(&event, FileDescriptorForPath(path), EVFILT_VNODE,
+         (EV_ADD | EV_CLEAR | EV_RECEIPT),
+         (NOTE_DELETE | NOTE_WRITE | NOTE_ATTRIB | NOTE_RENAME | NOTE_REVOKE |
+          NOTE_EXTEND),
+         0, new EventData(path, /*subdir=*/FilePath::StringType()));
+
+  return event.ident != kNoFileDescriptor ? 1 : 0;
+}
+
 uintptr_t FilePathWatcherKQueue::FileDescriptorForPath(const FilePath& path) {
   ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK);
   int fd = HANDLE_EINTR(open(path.value().c_str(), O_EVTONLY));
@@ -236,13 +257,13 @@
 }
 
 bool FilePathWatcherKQueue::Watch(const FilePath& path,
-                                  bool recursive,
+                                  Type type,
                                   const FilePathWatcher::Callback& callback) {
   DCHECK(target_.value().empty());  // Can only watch one path.
   DCHECK(!callback.is_null());
   DCHECK_EQ(kqueue_, -1);
   // Recursive watch is not supported using kqueue.
-  DCHECK(!recursive);
+  DCHECK_NE(type, Type::kRecursive);
 
   callback_ = callback;
   target_ = path;
@@ -255,8 +276,14 @@
     return false;
   }
 
-  int last_entry = EventsForPath(target_, &events_);
-  DCHECK_NE(last_entry, 0);
+  int last_entry = type == Type::kNonRecursive
+                       ? EventsForPath(target_, &events_)
+                       : EventForItem(target_, &events_);
+  if (last_entry < 1) {
+    // No notifications can possibly come in, so fail fast.
+    Cancel();
+    return false;
+  }
 
   EventVector responses(last_entry);
 
diff --git a/base/files/file_path_watcher_kqueue.h b/base/files/file_path_watcher_kqueue.h
index ef79be55..327b57d5 100644
--- a/base/files/file_path_watcher_kqueue.h
+++ b/base/files/file_path_watcher_kqueue.h
@@ -35,7 +35,7 @@
 
   // FilePathWatcher::PlatformDelegate overrides.
   bool Watch(const FilePath& path,
-             bool recursive,
+             Type type,
              const FilePathWatcher::Callback& callback) override;
   void Cancel() override;
 
@@ -87,6 +87,10 @@
   // defined as one that has a ident (file descriptor) field != -1.
   static int EventsForPath(FilePath path, EventVector *events);
 
+  // Fills |events| with one kevent for |path|. Returns 1 if a file descriptor
+  // for |path| could be created, or 0 otherwise.
+  static int EventForItem(const FilePath& path, EventVector* events);
+
   // Release a kevent generated by EventsForPath.
   static void ReleaseEvent(struct kevent& event);
 
diff --git a/base/files/file_path_watcher_linux.cc b/base/files/file_path_watcher_linux.cc
index 4e231b6..0271c05 100644
--- a/base/files/file_path_watcher_linux.cc
+++ b/base/files/file_path_watcher_linux.cc
@@ -175,7 +175,7 @@
   // Start watching |path| for changes and notify |delegate| on each change.
   // Returns true if watch for |path| has been added successfully.
   bool Watch(const FilePath& path,
-             bool recursive,
+             Type type,
              const FilePathWatcher::Callback& callback) override;
 
   // Cancel the watch. This unregisters the instance with InotifyReader.
@@ -233,7 +233,7 @@
   // The file or directory we're supposed to watch.
   FilePath target_;
 
-  bool recursive_ = false;
+  Type type_ = Type::kNonRecursive;
 
   // The vector of watches and next component names for all path components,
   // starting at the root directory. The last entry corresponds to the watch for
@@ -518,14 +518,14 @@
 }
 
 bool FilePathWatcherImpl::Watch(const FilePath& path,
-                                bool recursive,
+                                Type type,
                                 const FilePathWatcher::Callback& callback) {
   DCHECK(target_.empty());
 
   set_task_runner(SequencedTaskRunnerHandle::Get());
   callback_ = callback;
   target_ = path;
-  recursive_ = recursive;
+  type_ = type;
 
   std::vector<FilePath::StringType> comps;
   target_.GetComponents(&comps);
@@ -594,7 +594,7 @@
     bool is_dir) {
   DCHECK(HasValidWatchVector());
 
-  if (!recursive_)
+  if (type_ != Type::kRecursive)
     return;
 
   if (!DirectoryExists(target_)) {
@@ -635,7 +635,7 @@
 }
 
 void FilePathWatcherImpl::UpdateRecursiveWatchesForPath(const FilePath& path) {
-  DCHECK(recursive_);
+  DCHECK_EQ(type_, Type::kRecursive);
   DCHECK(!path.empty());
   DCHECK(DirectoryExists(path));
 
@@ -678,7 +678,7 @@
 
 void FilePathWatcherImpl::TrackWatchForRecursion(InotifyReader::Watch watch,
                                                  const FilePath& path) {
-  DCHECK(recursive_);
+  DCHECK_EQ(type_, Type::kRecursive);
   DCHECK(!path.empty());
   DCHECK(target_.IsParent(path));
 
@@ -692,7 +692,7 @@
 }
 
 void FilePathWatcherImpl::RemoveRecursiveWatches() {
-  if (!recursive_)
+  if (type_ != Type::kRecursive)
     return;
 
   for (const auto& it : recursive_paths_by_watch_)
diff --git a/base/files/file_path_watcher_mac.cc b/base/files/file_path_watcher_mac.cc
index 4dcf90b..edc34e53 100644
--- a/base/files/file_path_watcher_mac.cc
+++ b/base/files/file_path_watcher_mac.cc
@@ -24,11 +24,11 @@
   ~FilePathWatcherImpl() override = default;
 
   bool Watch(const FilePath& path,
-             bool recursive,
+             Type type,
              const FilePathWatcher::Callback& callback) override {
     // Use kqueue for non-recursive watches and FSEvents for recursive ones.
     DCHECK(!impl_.get());
-    if (recursive) {
+    if (type == Type::kRecursive) {
       if (!FilePathWatcher::RecursiveWatchAvailable())
         return false;
 #if !defined(OS_IOS)
@@ -38,7 +38,7 @@
       impl_ = std::make_unique<FilePathWatcherKQueue>();
     }
     DCHECK(impl_.get());
-    return impl_->Watch(path, recursive, callback);
+    return impl_->Watch(path, type, callback);
   }
 
   void Cancel() override {
diff --git a/base/files/file_path_watcher_stub.cc b/base/files/file_path_watcher_stub.cc
index 93a5babe..13a7164e 100644
--- a/base/files/file_path_watcher_stub.cc
+++ b/base/files/file_path_watcher_stub.cc
@@ -20,7 +20,7 @@
   ~FilePathWatcherImpl() override = default;
 
   bool Watch(const FilePath& path,
-             bool recursive,
+             Type type,
              const FilePathWatcher::Callback& callback) override {
     return false;
   }
diff --git a/base/files/file_path_watcher_unittest.cc b/base/files/file_path_watcher_unittest.cc
index 5fb7fd08..ae726f32 100644
--- a/base/files/file_path_watcher_unittest.cc
+++ b/base/files/file_path_watcher_unittest.cc
@@ -180,7 +180,7 @@
   bool SetupWatch(const FilePath& target,
                   FilePathWatcher* watcher,
                   TestDelegateBase* delegate,
-                  bool recursive_watch) WARN_UNUSED_RESULT;
+                  FilePathWatcher::Type watch_type) WARN_UNUSED_RESULT;
 
   bool WaitForEvents() WARN_UNUSED_RESULT {
     return WaitForEventsWithTimeout(TestTimeouts::action_timeout());
@@ -211,8 +211,8 @@
 bool FilePathWatcherTest::SetupWatch(const FilePath& target,
                                      FilePathWatcher* watcher,
                                      TestDelegateBase* delegate,
-                                     bool recursive_watch) {
-  return watcher->Watch(target, recursive_watch,
+                                     FilePathWatcher::Type watch_type) {
+  return watcher->Watch(target, watch_type,
                         base::BindRepeating(&TestDelegateBase::OnFileChanged,
                                             delegate->AsWeakPtr()));
 }
@@ -221,7 +221,8 @@
 TEST_F(FilePathWatcherTest, NewFile) {
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   ASSERT_TRUE(WriteFile(test_file(), "content"));
   ASSERT_TRUE(WaitForEvents());
@@ -233,7 +234,8 @@
 
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   // Now make sure we get notified if the file is modified.
   ASSERT_TRUE(WriteFile(test_file(), "new content"));
@@ -247,7 +249,8 @@
 
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   // Now make sure we get notified if the file is modified.
   ASSERT_TRUE(base::Move(source_file, test_file()));
@@ -259,7 +262,8 @@
 
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   // Now make sure we get notified if the file is deleted.
   base::DeleteFile(test_file());
@@ -293,7 +297,8 @@
 TEST_F(FilePathWatcherTest, DeleteDuringNotify) {
   base::RunLoop run_loop;
   Deleter deleter(run_loop.QuitClosure());
-  ASSERT_TRUE(SetupWatch(test_file(), deleter.watcher(), &deleter, false));
+  ASSERT_TRUE(SetupWatch(test_file(), deleter.watcher(), &deleter,
+                         FilePathWatcher::Type::kNonRecursive));
 
   ASSERT_TRUE(WriteFile(test_file(), "content"));
   run_loop.Run();
@@ -308,7 +313,8 @@
 TEST_F(FilePathWatcherTest, DestroyWithPendingNotification) {
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
   FilePathWatcher watcher;
-  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
   ASSERT_TRUE(WriteFile(test_file(), "content"));
 }
 
@@ -316,8 +322,10 @@
   FilePathWatcher watcher1, watcher2;
   std::unique_ptr<TestDelegate> delegate1(new TestDelegate(collector()));
   std::unique_ptr<TestDelegate> delegate2(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(test_file(), &watcher1, delegate1.get(), false));
-  ASSERT_TRUE(SetupWatch(test_file(), &watcher2, delegate2.get(), false));
+  ASSERT_TRUE(SetupWatch(test_file(), &watcher1, delegate1.get(),
+                         FilePathWatcher::Type::kNonRecursive));
+  ASSERT_TRUE(SetupWatch(test_file(), &watcher2, delegate2.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   ASSERT_TRUE(WriteFile(test_file(), "content"));
   ASSERT_TRUE(WaitForEvents());
@@ -330,7 +338,8 @@
   FilePath dir(temp_dir_.GetPath().AppendASCII("dir"));
   FilePath file(dir.AppendASCII("file"));
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(file, &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(file, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   ASSERT_TRUE(base::CreateDirectory(dir));
 
@@ -362,7 +371,8 @@
   FilePathWatcher watcher;
   FilePath file(path.AppendASCII("file"));
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(file, &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(file, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   FilePath sub_path(temp_dir_.GetPath());
   for (std::vector<std::string>::const_iterator d(dir_names.begin());
@@ -387,7 +397,8 @@
   ASSERT_TRUE(base::CreateDirectory(dir));
   ASSERT_TRUE(WriteFile(file, "content"));
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(file, &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(file, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   ASSERT_TRUE(base::DeletePathRecursively(dir));
   ASSERT_TRUE(WaitForEvents());
@@ -398,7 +409,8 @@
   ASSERT_TRUE(WriteFile(test_file(), "content"));
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   ASSERT_TRUE(base::DeleteFile(test_file()));
   VLOG(1) << "Waiting for file deletion";
@@ -415,7 +427,8 @@
   FilePath file1(dir.AppendASCII("file1"));
   FilePath file2(dir.AppendASCII("file2"));
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(dir, &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(dir, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   ASSERT_TRUE(base::CreateDirectory(dir));
   VLOG(1) << "Waiting for directory creation";
@@ -449,10 +462,11 @@
   FilePath subdir(dir.AppendASCII("subdir"));
   FilePath file(subdir.AppendASCII("file"));
   std::unique_ptr<TestDelegate> file_delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(file, &file_watcher, file_delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(file, &file_watcher, file_delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
   std::unique_ptr<TestDelegate> subdir_delegate(new TestDelegate(collector()));
   ASSERT_TRUE(SetupWatch(subdir, &subdir_watcher, subdir_delegate.get(),
-                         false));
+                         FilePathWatcher::Type::kNonRecursive));
 
   // Setup a directory hierarchy.
   ASSERT_TRUE(base::CreateDirectory(subdir));
@@ -470,7 +484,8 @@
   FilePathWatcher watcher;
   FilePath dir(temp_dir_.GetPath().AppendASCII("dir"));
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  bool setup_result = SetupWatch(dir, &watcher, delegate.get(), true);
+  bool setup_result = SetupWatch(dir, &watcher, delegate.get(),
+                                 FilePathWatcher::Type::kRecursive);
   if (!FilePathWatcher::RecursiveWatchAvailable()) {
     ASSERT_FALSE(setup_result);
     return;
@@ -557,7 +572,8 @@
   ASSERT_TRUE(base::CreateDirectory(test_dir));
   FilePath symlink(test_dir.AppendASCII("symlink"));
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(symlink, &watcher, delegate.get(), true));
+  ASSERT_TRUE(SetupWatch(symlink, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kRecursive));
 
   // Link creation.
   FilePath target1(temp_dir_.GetPath().AppendASCII("target1"));
@@ -602,10 +618,11 @@
   ASSERT_TRUE(WriteFile(source_file, "content"));
 
   std::unique_ptr<TestDelegate> file_delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(dest_file, &file_watcher, file_delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(dest_file, &file_watcher, file_delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
   std::unique_ptr<TestDelegate> subdir_delegate(new TestDelegate(collector()));
   ASSERT_TRUE(SetupWatch(dest_subdir, &subdir_watcher, subdir_delegate.get(),
-                         false));
+                         FilePathWatcher::Type::kNonRecursive));
 
   // Move the directory into place, s.t. the watched file appears.
   ASSERT_TRUE(base::Move(source_dir, dest_dir));
@@ -625,7 +642,8 @@
   ASSERT_TRUE(WriteFile(test_file(), "content"));
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_file(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   // Now make sure we get notified if the file is modified.
   ASSERT_TRUE(base::MakeFileUnreadable(test_file()));
@@ -639,7 +657,8 @@
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
   // Note that we are watching the symlink
-  ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   // Now make sure we get notified if the link is created.
   // Note that test_file() doesn't have to exist.
@@ -655,7 +674,8 @@
   ASSERT_TRUE(CreateSymbolicLink(test_file(), test_link()));
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   // Now make sure we get notified if the link is deleted.
   ASSERT_TRUE(base::DeleteFile(test_link()));
@@ -670,7 +690,8 @@
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
   // Note that we are watching the symlink.
-  ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   // Now make sure we get notified if the file is modified.
   ASSERT_TRUE(WriteFile(test_file(), "new content"));
@@ -684,7 +705,8 @@
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
   // Note that we are watching the symlink.
-  ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   // Now make sure we get notified if the target file is created.
   ASSERT_TRUE(WriteFile(test_file(), "content"));
@@ -699,7 +721,8 @@
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
   // Note that we are watching the symlink.
-  ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_link(), &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   // Now make sure we get notified if the target file is deleted.
   ASSERT_TRUE(base::DeleteFile(test_file()));
@@ -719,7 +742,8 @@
   ASSERT_TRUE(base::CreateDirectory(dir));
   ASSERT_TRUE(WriteFile(file, "content"));
   // Note that we are watching dir.lnk/file which doesn't exist yet.
-  ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   ASSERT_TRUE(CreateSymbolicLink(dir, link_dir));
   VLOG(1) << "Waiting for link creation";
@@ -747,7 +771,8 @@
   // neither dir nor dir/file exist yet.
   ASSERT_TRUE(CreateSymbolicLink(dir, link_dir));
   // Note that we are watching dir.lnk/file.
-  ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   ASSERT_TRUE(base::CreateDirectory(dir));
   ASSERT_TRUE(WriteFile(file, "content"));
@@ -775,7 +800,8 @@
   ASSERT_TRUE(base::CreateDirectory(dir));
   ASSERT_TRUE(CreateSymbolicLink(dir, link_dir));
   // Note that we are watching dir.lnk/file but the file doesn't exist yet.
-  ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(linkfile, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   ASSERT_TRUE(WriteFile(file, "content"));
   VLOG(1) << "Waiting for file creation";
@@ -849,7 +875,8 @@
 
   FilePathWatcher watcher;
   std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector()));
-  ASSERT_TRUE(SetupWatch(test_file, &watcher, delegate.get(), false));
+  ASSERT_TRUE(SetupWatch(test_file, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kNonRecursive));
 
   // We should not get notified in this case as it hasn't affected our ability
   // to access the file.
@@ -865,6 +892,64 @@
 }
 
 #endif  // OS_APPLE
+
+#if defined(OS_MAC)
+
+// Fail fast if trying to trivially watch a non-existent item.
+TEST_F(FilePathWatcherTest, TrivialNoDir) {
+  const FilePath tmp_dir = temp_dir_.GetPath();
+  const FilePath non_existent = tmp_dir.Append(FILE_PATH_LITERAL("nope"));
+
+  FilePathWatcher watcher;
+  auto delegate = std::make_unique<TestDelegate>(collector());
+  ASSERT_FALSE(SetupWatch(non_existent, &watcher, delegate.get(),
+                          FilePathWatcher::Type::kTrivial));
+}
+
+// Succeed starting a watch on a directory.
+TEST_F(FilePathWatcherTest, TrivialDirStart) {
+  const FilePath tmp_dir = temp_dir_.GetPath();
+
+  FilePathWatcher watcher;
+  auto delegate = std::make_unique<TestDelegate>(collector());
+  ASSERT_TRUE(SetupWatch(tmp_dir, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kTrivial));
+}
+
+// Observe a change on a directory
+TEST_F(FilePathWatcherTest, TrivialDirChange) {
+  const FilePath tmp_dir = temp_dir_.GetPath();
+
+  FilePathWatcher watcher;
+  auto delegate = std::make_unique<TestDelegate>(collector());
+  ASSERT_TRUE(SetupWatch(tmp_dir, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kTrivial));
+
+  ASSERT_TRUE(TouchFile(tmp_dir, base::Time::Now(), base::Time::Now()));
+  ASSERT_TRUE(WaitForEvents());
+}
+
+// Observe no change when a parent is modified.
+TEST_F(FilePathWatcherTest, TrivialParentDirChange) {
+  const FilePath tmp_dir = temp_dir_.GetPath();
+  const FilePath sub_dir1 = tmp_dir.Append(FILE_PATH_LITERAL("subdir"));
+  const FilePath sub_dir2 = sub_dir1.Append(FILE_PATH_LITERAL("subdir_redux"));
+
+  ASSERT_TRUE(CreateDirectory(sub_dir1));
+  ASSERT_TRUE(CreateDirectory(sub_dir2));
+
+  FilePathWatcher watcher;
+  auto delegate = std::make_unique<TestDelegate>(collector());
+  ASSERT_TRUE(SetupWatch(sub_dir2, &watcher, delegate.get(),
+                         FilePathWatcher::Type::kTrivial));
+
+  // There should be no notification for a change to |sub_dir2|'s parent.
+  ASSERT_TRUE(Move(sub_dir1, tmp_dir.Append(FILE_PATH_LITERAL("over_here"))));
+  ASSERT_FALSE(WaitForEvents());
+}
+
+#endif  // defined(OS_MAC)
+
 }  // namespace
 
 }  // namespace base
diff --git a/base/files/file_path_watcher_win.cc b/base/files/file_path_watcher_win.cc
index 3689546..61e0c70 100644
--- a/base/files/file_path_watcher_win.cc
+++ b/base/files/file_path_watcher_win.cc
@@ -27,13 +27,12 @@
                             public base::win::ObjectWatcher::Delegate {
  public:
   FilePathWatcherImpl()
-      : handle_(INVALID_HANDLE_VALUE),
-        recursive_watch_(false) {}
+      : handle_(INVALID_HANDLE_VALUE), type_(Type::kNonRecursive) {}
   ~FilePathWatcherImpl() override;
 
   // FilePathWatcher::PlatformDelegate:
   bool Watch(const FilePath& path,
-             bool recursive,
+             Type type,
              const FilePathWatcher::Callback& callback) override;
   void Cancel() override;
 
@@ -70,8 +69,8 @@
   // ObjectWatcher to watch handle_ for events.
   base::win::ObjectWatcher watcher_;
 
-  // Set to true to watch the sub trees of the specified directory file path.
-  bool recursive_watch_;
+  // The type of watch requested.
+  Type type_;
 
   // Keep track of the last modified time of the file.  We use nulltime
   // to represent the file not existing.
@@ -91,14 +90,14 @@
 }
 
 bool FilePathWatcherImpl::Watch(const FilePath& path,
-                                bool recursive,
+                                Type type,
                                 const FilePathWatcher::Callback& callback) {
   DCHECK(target_.value().empty());  // Can only watch one path.
 
   set_task_runner(SequencedTaskRunnerHandle::Get());
   callback_ = callback;
   target_ = path;
-  recursive_watch_ = recursive;
+  type_ = type;
 
   File::Info file_info;
   ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK);
@@ -151,7 +150,7 @@
     ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK);
     file_exists = GetFileInfo(target_, &file_info);
   }
-  if (recursive_watch_) {
+  if (type_ == Type::kRecursive) {
     // Only the mtime of |target_| is tracked but in a recursive watch,
     // some other file or directory may have changed so all notifications
     // are passed through. It is possible to figure out which file changed
@@ -160,7 +159,7 @@
     // http://qualapps.blogspot.com/2010/05/understanding-readdirectorychangesw.html
     callback_.Run(target_, false);
   } else if (file_exists && (last_modified_.is_null() ||
-             last_modified_ != file_info.last_modified)) {
+                             last_modified_ != file_info.last_modified)) {
     last_modified_ = file_info.last_modified;
     first_notification_ = Time::Now();
     callback_.Run(target_, false);
@@ -248,7 +247,7 @@
   std::vector<FilePath> child_dirs;
   FilePath watched_path(target_);
   while (true) {
-    if (!SetupWatchHandle(watched_path, recursive_watch_, &handle_))
+    if (!SetupWatchHandle(watched_path, type_ == Type::kRecursive, &handle_))
       return false;
 
     // Break if a valid handle is returned. Try the parent directory otherwise.
@@ -272,8 +271,10 @@
     watched_path = watched_path.Append(child_dirs.back());
     child_dirs.pop_back();
     HANDLE temp_handle = INVALID_HANDLE_VALUE;
-    if (!SetupWatchHandle(watched_path, recursive_watch_, &temp_handle))
+    if (!SetupWatchHandle(watched_path, type_ == Type::kRecursive,
+                          &temp_handle)) {
       return false;
+    }
     if (temp_handle == INVALID_HANDLE_VALUE)
       break;
     FindCloseChangeNotification(handle_);
diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn
index 01500199..e7e3d5c 100644
--- a/build/android/BUILD.gn
+++ b/build/android/BUILD.gn
@@ -68,7 +68,7 @@
       "//tools/android/md5sum",
     ]
     data = [
-      "//third_party/android_build_tools/bundletool/bundletool-all-1.2.0.jar",
+      "//third_party/android_build_tools/bundletool/bundletool-all-1.4.0.jar",
     ]
   }
 }
diff --git a/build/android/devil_chromium.json b/build/android/devil_chromium.json
index 10b0740c..0bfcfd84 100644
--- a/build/android/devil_chromium.json
+++ b/build/android/devil_chromium.json
@@ -111,7 +111,7 @@
       "file_info": {
         "default": {
           "local_paths": [
-            "../../third_party/android_build_tools/bundletool/bundletool-all-1.2.0.jar"
+            "../../third_party/android_build_tools/bundletool/bundletool-all-1.4.0.jar"
           ]
         }
       }
diff --git a/build/android/gyp/bundletool.py b/build/android/gyp/bundletool.py
index 003e3bf..695d3cd 100755
--- a/build/android/gyp/bundletool.py
+++ b/build/android/gyp/bundletool.py
@@ -19,7 +19,7 @@
     __file__, '..', '..', '..', '..', 'third_party', 'android_build_tools',
     'bundletool'))
 
-BUNDLETOOL_VERSION = '1.2.0'
+BUNDLETOOL_VERSION = '1.4.0'
 
 BUNDLETOOL_JAR_PATH = os.path.join(
     BUNDLETOOL_DIR, 'bundletool-all-%s.jar' % BUNDLETOOL_VERSION)
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index b7dbc7b..99ad6d9 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -1935,6 +1935,7 @@
   #   bundles_supported: Whether or not this target can be treated as a bundle.
   #   resources_version_variable:
   #   is_incremental_install:
+  #   isolated_splits_enabled: Value for ISOLATED_SPLITS_ENABLED.
   template("generate_build_config_srcjar") {
     java_cpp_template(target_name) {
       sources = [ "//base/android/java/templates/BuildConfig.template" ]
@@ -1961,6 +1962,11 @@
         defines += [ "_BUNDLES_SUPPORTED" ]
       }
 
+      if (defined(invoker.isolated_splits_enabled) &&
+          invoker.isolated_splits_enabled) {
+        defines += [ "_ISOLATED_SPLITS_ENABLED" ]
+      }
+
       if (defined(invoker.is_incremental_install) &&
           invoker.is_incremental_install) {
         defines += [ "_IS_INCREMENTAL_INSTALL" ]
@@ -2702,7 +2708,11 @@
 
     if (_generate_buildconfig_java) {
       generate_build_config_srcjar("${_template_name}__build_config_srcjar") {
-        forward_variables_from(invoker, [ "min_sdk_version" ])
+        forward_variables_from(invoker,
+                               [
+                                 "min_sdk_version",
+                                 "isolated_splits_enabled",
+                               ])
         _bundles_supported = _is_bundle_module || _is_static_library_provider
         if (defined(invoker.bundles_supported)) {
           _bundles_supported = invoker.bundles_supported
@@ -3628,6 +3638,7 @@
                                "generate_buildconfig_java",
                                "generate_final_jni",
                                "input_jars_paths",
+                               "isolated_splits_enabled",
                                "is_base_module",
                                "jacoco_never_instrument",
                                "jar_excluded_patterns",
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 5703325..fa06aa2 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -153,6 +153,9 @@
   # Turn off the --call-graph-profile-sort flag for lld by default. Enable
   # selectively for targets where it's beneficial.
   enable_call_graph_profile_sort = chrome_pgo_phase == 2
+
+  # Enable DWARF v5.
+  use_dwarf5 = false
 }
 
 declare_args() {
@@ -2297,13 +2300,17 @@
       # version 7 also produces debug data that is incompatible with Breakpad
       # dump_syms, so this is still required (https://crbug.com/622406).
       cflags += [ "-fno-standalone-debug" ]
-    } else if (is_mac) {
+    } else if (is_mac && !use_dwarf5) {
       # clang defaults to DWARF2 on macOS unless mac_deployment_target is
       # at least 10.11.
       # TODO(thakis): Remove this once mac_deployment_target is 10.11.
       cflags += [ "-gdwarf-4" ]
     }
 
+    if (use_dwarf5 && !is_nacl) {
+      cflags += [ "-gdwarf-5" ]
+    }
+
     # The gcc-based nacl compilers don't support -fdebug-compilation-dir (see
     # elsewhere in this file), so they can't have build-dir-independent output.
     # Disable symbols for nacl object files to get deterministic,
@@ -2376,13 +2383,17 @@
     }
   } else {
     cflags = []
-    if (is_mac) {
+    if (is_mac && !use_dwarf5) {
       # clang defaults to DWARF2 on macOS unless mac_deployment_target is
       # at least 10.11.
       # TODO(thakis): Remove this once mac_deployment_target is 10.11.
       cflags += [ "-gdwarf-4" ]
     }
 
+    if (use_dwarf5 && !is_nacl) {
+      cflags += [ "-gdwarf-5" ]
+    }
+
     # The gcc-based nacl compilers don't support -fdebug-compilation-dir (see
     # elsewhere in this file), so they can't have build-dir-independent output.
     # Disable symbols for nacl object files to get deterministic,
diff --git a/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py b/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py
index d79a89b..ac9d76fc 100755
--- a/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py
+++ b/build/linux/sysroot_scripts/find_incompatible_glibc_symbols.py
@@ -16,13 +16,15 @@
 
 
 def get_replacements(nm_file, max_allowed_glibc_version):
-  symbol_format = re.compile('\S+ \S+ ([^@]+)@@?(\S+)\n')
   version_format = re.compile('GLIBC_[0-9\.]+')
   symbols = {}
   for line in nm_file:
-    m = re.match(symbol_format, line)
-    symbol = m.group(1)
-    version = m.group(2)
+    # Some versions of nm have a bug where the version gets printed twice.
+    # Since the symbol may either be formatted like "name@@VERSION" or
+    # "name@@VERSION@@VERSION", handle both cases.
+    symver = line.split('@@')
+    symbol = symver[0].split(' ')[-1]
+    version = symver[-1]
     if not re.match(version_format, version):
       continue
     if symbol in symbols:
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni
index fd5fdd9e2..00fde451 100644
--- a/chrome/android/chrome_public_apk_tmpl.gni
+++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -528,6 +528,9 @@
 
       # Add all loadable modules and shared libraries from DFMs.
       if (_enable_chrome_module) {
+        # Sets ISOLATED_SPLITS_ENABLED in BuildConfig.java.
+        isolated_splits_enabled = true
+
         # The arcore manifest needs to be merged into the base module because the Play
         # Store verifies the com.google.ar.core.min_apk_version meta-data tag is in
         # the base manifest.
@@ -790,6 +793,7 @@
       "deps",
       "is_monochrome",
       "is_trichrome",
+      "isolated_splits_enabled",
       "loadable_modules",
       "native_lib_placeholders",
       "negative_main_dex_globs",
diff --git a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ca.xtb b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ca.xtb
index c628e7c..2f96b78 100644
--- a/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ca.xtb
+++ b/chrome/android/features/autofill_assistant/java/strings/translations/android_chrome_autofill_assistant_strings_ca.xtb
@@ -16,7 +16,7 @@
 <translation id="5267269112080050255">L'Assistent de Google a Chrome s'ha obert a alçada completa.</translation>
 <translation id="5447168050208292829">Fes la facturació per al teu vol\namb només uns quants tocs</translation>
 <translation id="5801568494490449797">Preferències</translation>
-<translation id="6555233628095991027">L'Assistent de Google a Chrome ocupa la meitat inferior de la pantalla.</translation>
+<translation id="6555233628095991027">L'Assistent de Google a Chrome s'ha obert a mitja alçada.</translation>
 <translation id="6785872064505734160">L'Assistent de Google a Chrome pot dur a terme accions per tu en llocs web</translation>
 <translation id="6973932557599545801">Em sap greu, però no et puc ajudar. Continua pel teu compte.</translation>
 <translation id="7135664311366978968">Compra entrades de cinema\namb només uns quants tocs</translation>
diff --git a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb
index 6c7b3fe..3c861a8 100644
--- a/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb
+++ b/chrome/android/features/keyboard_accessory/internal/java/strings/translations/android_keyboard_accessory_strings_ca.xtb
@@ -3,7 +3,7 @@
 <translationbundle lang="ca">
 <translation id="1383876407941801731">Cerca</translation>
 <translation id="1566281227936819866">S'estan mostrant les formes de pagament desades</translation>
-<translation id="1717486229951421299">La llista de credencials que s'emplenaran amb un toc està oberta i ocupa la meitat inferior de la pantalla.</translation>
+<translation id="1717486229951421299">La llista de credencials que s'emplenaran amb un toc s'ha obert a mitja alçada.</translation>
 <translation id="207576718733492531">La llista de credencials que s'emplenaran amb un toc està tancada.</translation>
 <translation id="2359808026110333948">Continua</translation>
 <translation id="2610239185026711824">Suggereix una contrasenya</translation>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderRow.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderRow.java
index 0bcf7b1..76c1cb1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderRow.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkFolderRow.java
@@ -13,6 +13,7 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
 import org.chromium.components.bookmarks.BookmarkId;
+import org.chromium.components.bookmarks.BookmarkType;
 
 /**
  * A row view that shows folder info in the bookmarks UI.
@@ -43,11 +44,22 @@
     BookmarkItem setBookmarkId(BookmarkId bookmarkId, @Location int location) {
         BookmarkItem item = super.setBookmarkId(bookmarkId, location);
         mTitleView.setText(item.getTitle());
-        int childCount = mDelegate.getModel().getTotalBookmarkCount(bookmarkId);
-        mDescriptionView.setText((childCount > 0)
-                        ? getResources().getQuantityString(
-                                  R.plurals.bookmarks_count, childCount, childCount)
-                        : getResources().getString(R.string.no_bookmarks));
+
+        // Set description.
+        if (item.getId().getType() == BookmarkType.READING_LIST) {
+            int unreadCount = mDelegate.getModel().getUnreadCount(bookmarkId);
+            mDescriptionView.setText(unreadCount > 0
+                            ? getResources().getQuantityString(
+                                    R.plurals.reading_list_unread_page_count, unreadCount,
+                                    unreadCount)
+                            : getResources().getString(R.string.reading_list_no_unread_pages));
+        } else {
+            int childCount = mDelegate.getModel().getTotalBookmarkCount(bookmarkId);
+            mDescriptionView.setText((childCount > 0)
+                            ? getResources().getQuantityString(
+                                    R.plurals.bookmarks_count, childCount, childCount)
+                            : getResources().getString(R.string.no_bookmarks));
+        }
         return item;
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
index 4c0fd24..8b2b324 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.bookmarks;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
 
 import org.chromium.base.ObserverList;
@@ -115,6 +116,22 @@
     }
 
     /**
+     * @param bookmarkId The {@link BookmarkId} for the reading list folder.
+     * @return The total number of unread reading list articles.
+     */
+    public int getUnreadCount(@NonNull BookmarkId bookmarkId) {
+        assert bookmarkId.getType() == BookmarkType.READING_LIST;
+        List<BookmarkId> children = getChildIDs(bookmarkId);
+        int unreadCount = 0;
+        for (BookmarkId child : children) {
+            BookmarkItem childItem = getBookmarkById(child);
+            if (!childItem.isRead()) unreadCount++;
+        }
+
+        return unreadCount;
+    }
+
+    /**
      * @return The id of the default folder to add bookmarks/folders to.
      */
     public BookmarkId getDefaultFolder() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/bottomsheet/BookmarkBottomSheetCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/bottomsheet/BookmarkBottomSheetCoordinator.java
index 776a13df..2d729767 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/bottomsheet/BookmarkBottomSheetCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/bottomsheet/BookmarkBottomSheetCoordinator.java
@@ -114,12 +114,7 @@
                                R.plurals.bookmarks_count, totalCount, totalCount)
                                       : mContext.getResources().getString(R.string.no_bookmarks);
             case BookmarkType.READING_LIST:
-                List<BookmarkId> children = mBookmarkModel.getChildIDs(bookmarkItem.getId());
-                int unreadCount = 0;
-                for (BookmarkId child : children) {
-                    BookmarkItem childItem = mBookmarkModel.getBookmarkById(child);
-                    if (!childItem.isRead()) unreadCount++;
-                }
+                int unreadCount = mBookmarkModel.getUnreadCount(bookmarkItem.getId());
                 return unreadCount > 0
                         ? mContext.getResources().getQuantityString(
                                 R.plurals.reading_list_unread_page_count, unreadCount, unreadCount)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java
index 34280e3..f8541569b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentRequestService.java
@@ -172,7 +172,7 @@
 
     // Implements BrowserPaymentRequest:
     @Override
-    public void onQueryForQuotaCreated(
+    public void modifyQueryForQuotaCreatedIfNeeded(
             Map<String, PaymentMethodData> queryForQuota, PaymentOptions paymentOptions) {
         if (queryForQuota.containsKey(MethodStrings.BASIC_CARD)
                 && PaymentFeatureList.isEnabledOrExperimentalFeaturesEnabled(
@@ -334,7 +334,7 @@
 
     // Implements BrowserPaymentRequest:
     @Override
-    public void modifyMethodData(@Nullable Map<String, PaymentMethodData> methodDataMap) {
+    public void modifyMethodDataIfNeeded(@Nullable Map<String, PaymentMethodData> methodDataMap) {
         if (!mIsGooglePayBridgeActivated || methodDataMap == null) return;
         Map<String, PaymentMethodData> result = new ArrayMap<>();
         for (PaymentMethodData methodData : methodDataMap.values()) {
@@ -551,7 +551,7 @@
 
     // Implements BrowserPaymentRequest:
     @Override
-    public void retry(PaymentValidationErrors errors) {
+    public void onRetry(PaymentValidationErrors errors) {
         mWasRetryCalled = true;
         mPaymentUiService.onRetry(errors);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentResponseHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentResponseHelper.java
index a1966d3..233c0791 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentResponseHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ChromePaymentResponseHelper.java
@@ -26,8 +26,8 @@
     private final PaymentApp mSelectedPaymentApp;
     private final PaymentOptions mPaymentOptions;
     private final boolean mSkipToGpay;
+    private final PaymentResponse mPaymentResponse;
     private AutofillAddress mSelectedShippingAddress;
-    private PaymentResponse mPaymentResponse;
     private PaymentResponseResultCallback mResultCallback;
     private boolean mIsWaitingForShippingNormalization;
     private boolean mIsWaitingForPaymentsDetails = true;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/ContactDetailsSection.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/ContactDetailsSection.java
index 25b65b5..2d70be74 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/ContactDetailsSection.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/ContactDetailsSection.java
@@ -29,8 +29,7 @@
 public class ContactDetailsSection extends SectionInformation {
     private final Context mContext;
     private final ContactEditor mContactEditor;
-
-    private List<AutofillProfile> mProfiles;
+    private final List<AutofillProfile> mProfiles;
 
     /**
      * Builds a Contact section from a list of AutofillProfile.
@@ -70,21 +69,18 @@
                 createAutofillContactFromProfile(editedAddress.getProfile());
         if (null == updatedContact) return;
 
-        if (mItems != null) {
-            for (int i = 0; i < mItems.size(); i++) {
-                AutofillContact existingContact = (AutofillContact) mItems.get(i);
-                if (existingContact.getProfile().getGUID().equals(
-                            editedAddress.getProfile().getGUID())) {
-                    // We need to replace |existingContact| with |updatedContact|.
-                    mItems.remove(i);
-                    mItems.add(i, updatedContact);
-                    return;
-                }
+        for (int i = 0; i < mItems.size(); i++) {
+            AutofillContact existingContact = (AutofillContact) mItems.get(i);
+            if (existingContact.getProfile().getGUID().equals(
+                        editedAddress.getProfile().getGUID())) {
+                // We need to replace |existingContact| with |updatedContact|.
+                mItems.remove(i);
+                mItems.add(i, updatedContact);
+                return;
             }
         }
         // The contact didn't exist. Add the new address to |mItems| to the end of the list, in
         // anticipation of the contacts section refresh.
-        if (mItems == null) mItems = new ArrayList<>();
         mItems.add(updatedContact);
 
         // The selection is not updated.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java
index 9e893b83..2b354d11 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/PaymentUiService.java
@@ -164,7 +164,7 @@
         /** Record the show event to the journey logger and record the transaction amount. */
         void recordShowEventAndTransactionAmount();
         /**
-         * @return Whether {@link ChromePaymentRequestService#retry} has been
+         * @return Whether {@link ChromePaymentRequestService#onRetry} has been
          *         called.
          */
         boolean wasRetryCalled();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/SectionInformation.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/SectionInformation.java
index b77632e..6139eef 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/SectionInformation.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ui/SectionInformation.java
@@ -31,8 +31,10 @@
      */
     public static final int INVALID_SELECTION = -2;
 
+    protected final ArrayList<EditableOption> mItems = new ArrayList<>();
+
     @PaymentRequestUI.DataType private final int mDataType;
-    protected ArrayList<EditableOption> mItems;
+
     private int mSelectedItem;
     private boolean mDisplayInSingleLineInNormalMode = true;
     public String mErrorMessage;
@@ -84,7 +86,7 @@
      * @return Whether the section is empty.
      */
     public boolean isEmpty() {
-        return mItems == null || mItems.isEmpty();
+        return mItems.isEmpty();
     }
 
     /**
@@ -94,7 +96,7 @@
      * @return The number of items in this section.
      */
     public int getSize() {
-        return mItems == null ? 0 : mItems.size();
+        return mItems.size();
     }
 
     /**
@@ -105,7 +107,7 @@
      */
     @Nullable
     public EditableOption getItem(int position) {
-        if (mItems == null || mItems.isEmpty() || position < 0 || position >= mItems.size()) {
+        if (mItems.isEmpty() || position < 0 || position >= mItems.size()) {
             return null;
         }
 
@@ -129,7 +131,6 @@
      *                     made.
      */
     public void setSelectedItem(EditableOption selectedItem) {
-        if (mItems == null) return;
         for (int i = 0; i < mItems.size(); i++) {
             if (mItems.get(i) == selectedItem) {
                 mSelectedItem = i;
@@ -164,7 +165,6 @@
      * @param item The item to add.
      */
     public void addAndSelectItem(EditableOption item) {
-        if (mItems == null) mItems = new ArrayList<>();
         mItems.add(0, item);
         mSelectedItem = 0;
     }
@@ -176,7 +176,6 @@
      * @param item The item to add or update.
      */
     public void addAndSelectOrUpdateItem(EditableOption item) {
-        if (mItems == null) mItems = new ArrayList<>();
         int i = 0;
         for (; i < mItems.size(); i++) {
             if (TextUtils.equals(mItems.get(i).getIdentifier(), item.getIdentifier())) {
@@ -277,8 +276,7 @@
         return mAddditionalText;
     }
 
-    /** @return List of items in the section. Can be null. */
-    @Nullable
+    /** @return List of items in the section. */
     public List<EditableOption> getItems() {
         return mItems;
     }
@@ -291,12 +289,12 @@
      */
     protected void updateItemsWithCollection(
             int selection, @Nullable Collection<? extends EditableOption> itemCollection) {
+        mItems.clear();
         if (itemCollection == null || itemCollection.isEmpty()) {
             mSelectedItem = NO_SELECTION;
-            mItems = null;
         } else {
             mSelectedItem = selection;
-            mItems = new ArrayList<>(itemCollection);
+            mItems.addAll(itemCollection);
         }
     }
 
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java
index 0f80f837..645fad0 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkTest.java
@@ -1553,6 +1553,7 @@
         Assert.assertEquals("The 1st view should be reading list.", BookmarkType.READING_LIST,
                 getIdByPosition(0).getType());
         onView(withText("Reading list")).check(matches(isDisplayed()));
+        onView(withText("No unread pages")).check(matches(isDisplayed()));
 
         Assert.assertEquals("The 2nd view should be a divider.", BookmarkListEntry.ViewType.DIVIDER,
                 getAdapter().getItemViewType(1));
@@ -1560,6 +1561,35 @@
                 BookmarkListEntry.ViewType.FOLDER, getAdapter().getItemViewType(2));
     }
 
+    @Test
+    @SmallTest
+    @Features.EnableFeatures({ChromeFeatureList.READ_LATER})
+    public void testReadingListFolderShownOneUnreadPage() throws Exception {
+        BookmarkPromoHeader.forcePromoStateForTests(PromoState.PROMO_NONE);
+        openBookmarkManager();
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mBookmarkModel.addToReadingList("a", "https://a.com/reading_list_0");
+            mManager.openFolder(mBookmarkModel.getRootFolderId());
+        });
+        onView(withText("Reading list")).check(matches(isDisplayed()));
+        onView(withText("1 unread page")).check(matches(isDisplayed()));
+    }
+
+    @Test
+    @SmallTest
+    @Features.EnableFeatures({ChromeFeatureList.READ_LATER})
+    public void testReadingListFolderShownMultipleUnreadPages() throws Exception {
+        BookmarkPromoHeader.forcePromoStateForTests(PromoState.PROMO_NONE);
+        openBookmarkManager();
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            mBookmarkModel.addToReadingList("a", "https://a.com/reading_list_0");
+            mBookmarkModel.addToReadingList("b", "https://a.com/reading_list_1");
+            mManager.openFolder(mBookmarkModel.getRootFolderId());
+        });
+        onView(withText("Reading list")).check(matches(isDisplayed()));
+        onView(withText("2 unread pages")).check(matches(isDisplayed()));
+    }
+
     /**
      * Adds a bookmark in the scenario where we have partner bookmarks.
      *
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestContactDetailsSectionUnitTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestContactDetailsSectionUnitTest.java
index 053c5843..5df2250 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestContactDetailsSectionUnitTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/payments/PaymentRequestContactDetailsSectionUnitTest.java
@@ -233,7 +233,7 @@
                 true /* requestPayerPhone */, true /* requestPayerEmail */);
 
         List<EditableOption> items = mContactDetailsSection.getItems();
-        Assert.assertEquals(null, items);
+        Assert.assertEquals(0, items.size());
         Assert.assertEquals(
                 SectionInformation.NO_SELECTION, mContactDetailsSection.getSelectedItemIndex());
 
@@ -308,7 +308,7 @@
                 true /* requestPayerPhone */, true /* requestPayerEmail */);
 
         List<EditableOption> items = mContactDetailsSection.getItems();
-        Assert.assertEquals(null, items);
+        Assert.assertEquals(0, items.size());
         Assert.assertEquals(
                 SectionInformation.NO_SELECTION, mContactDetailsSection.getSelectedItemIndex());
 
diff --git a/chrome/android/modules/cablev2_authenticator/cablev2_authenticator_module.gni b/chrome/android/modules/cablev2_authenticator/cablev2_authenticator_module.gni
index 1e292402..2531a49 100644
--- a/chrome/android/modules/cablev2_authenticator/cablev2_authenticator_module.gni
+++ b/chrome/android/modules/cablev2_authenticator/cablev2_authenticator_module.gni
@@ -5,5 +5,9 @@
   native_deps =
       [ "//chrome/android/modules/cablev2_authenticator/internal:native" ]
   load_native_on_get_impl = true
-  uses_split = "chrome"
+
+  # This module uses native->Java JNI calls, which isn't currently supported
+  # in isolated splits. The following line should be uncommented once it is.
+  #
+  # uses_split = "chrome"
 }
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt
index e4a1b85c..166ce7e 100644
--- a/chrome/android/profiles/newest.txt
+++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-88.0.4312.0_rc-r1-merged.afdo.bz2
+chromeos-chrome-amd64-89.0.4328.0_rc-r1-merged.afdo.bz2
diff --git a/chrome/app/os_settings_strings.grdp b/chrome/app/os_settings_strings.grdp
index 658217f..112212e2 100644
--- a/chrome/app/os_settings_strings.grdp
+++ b/chrome/app/os_settings_strings.grdp
@@ -990,6 +990,9 @@
   <message name="IDS_SETTINGS_DURATION_IN_SECONDS" desc="A duration in seconds. Should be short.">
     <ph name="DURATION">$1<ex>1.5</ex></ph>s
   </message>
+  <message name="IDS_SETTINGS_SWITCH_ACCESS_ACTION_ASSIGNMENT_DIALOG_TITLE" desc="A title for a dialog to assign a switch key to an action. Switch Access is an alternative input method designed for users with limited mobility, where the user has as little as one switch (for example, a button) to control the computer.">
+    Assign switch <ph name="action">$1<ex>Select</ex></ph>
+  </message>
   <message name="IDS_SETTINGS_SWITCH_ACCESS_ACTION_ASSIGNMENT_DIALOG_WAIT_FOR_KEY_PROMPT" desc="A message shown to ask a suer to press a switch key to be assigned to an action. Switch Access is an alternative input method designed for users with limited mobility, where the user has as little as one switch (for example, a button) to control the computer.">
     Please press a switch key to assign.
   </message>
diff --git a/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SWITCH_ACCESS_ACTION_ASSIGNMENT_DIALOG_TITLE.png.sha1 b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SWITCH_ACCESS_ACTION_ASSIGNMENT_DIALOG_TITLE.png.sha1
new file mode 100644
index 0000000..c2e29d09
--- /dev/null
+++ b/chrome/app/os_settings_strings_grdp/IDS_SETTINGS_SWITCH_ACCESS_ACTION_ASSIGNMENT_DIALOG_TITLE.png.sha1
@@ -0,0 +1 @@
+40856515c0f2a1fdea5339e9707779f19333eb61
\ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb
index 449106f2..08465eec 100644
--- a/chrome/app/resources/generated_resources_as.xtb
+++ b/chrome/app/resources/generated_resources_as.xtb
@@ -433,6 +433,7 @@
 <translation id="1475502736924165259">আপোনাৰ ফাইলত অন্য শিতানত অন্তর্ভুক্ত নোহোৱা প্ৰমাণপত্ৰ আছে</translation>
 <translation id="1476088332184200792">আপোনাৰ ডিভাইচটোলৈ প্ৰতিলিপি কৰক</translation>
 <translation id="1476607407192946488">&amp;ভাষাৰ ছেটিং</translation>
+<translation id="1477446329585670721"><ph name="DOMAIN" />ৰ বাবে আপুনি নিজৰ স্মাৰ্ট কাৰ্ডখন ভৰাই ৰখাৰ আৱশ্যক।</translation>
 <translation id="1478340334823509079">সবিশেষ: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">ইনষ্টল কৰাৰ সুবিধাটো সক্ষম কৰা হোৱা নাই</translation>
 <translation id="1481537595330271162">ডিস্কৰ আকাৰ সলনি কৰাত আসোঁৱাহ হৈছে</translation>
@@ -2028,6 +2029,7 @@
 <translation id="3320630259304269485">সুৰক্ষিত ব্ৰাউজিং (বিপজ্জনক ছাইটসমূহৰ পৰা সুৰক্ষা) আৰু অন্য সুৰক্ষা সম্পর্কীয় ছেটিংসমূহ</translation>
 <translation id="3323295311852517824">{NUM_FILES,plural, =0{এই ডেটাখিনিত সংবেদনশীল অথবা বিপজ্জনক সমল আছে। এই সমলখিনি আঁতৰাওক আৰু পুনৰ চেষ্টা কৰক।}=1{এই ফাইলটোত সংবেদনশীল অথবা বিপজ্জনক সমল আছে। এই সমলখিনি আঁতৰাওক আৰু পুনৰ চেষ্টা কৰক।}one{এই ফাইলসমূহত সংবেদনশীল অথবা বিপজ্জনক সমল আছে। এই সমলখিনি আঁতৰাওক আৰু পুনৰ চেষ্টা কৰক।}other{এই ফাইলসমূহত সংবেদনশীল অথবা বিপজ্জনক সমল আছে। এই সমলখিনি আঁতৰাওক আৰু পুনৰ চেষ্টা কৰক।}}</translation>
 <translation id="3323521181261657960">ব’নাছ! আপুনি আৰু বেছি স্ক্ৰীণ টাইম পাইছে</translation>
+<translation id="3325804108816646710">উপলব্ধ প্ৰ’ফাইল বিচাৰি থকা হৈছে...</translation>
 <translation id="3325910708063135066">Mac ছিষ্টেম অগ্ৰাধিকাৰত কেমেৰা আৰু মাইক্ৰ’ফ’ন অফ কৰা আছে</translation>
 <translation id="3327050066667856415">Chromebook সুৰক্ষাৰ বাবে ডিজাইন কৰা হয়। আপোনাৰ ডিভাইচটো মালৱেৰৰ পৰা স্বয়ংক্ৰিয়ভাৱে সুৰক্ষিত হয় – কোনো অতিৰিক্ত ছফ্টৱেৰৰ আৱশ্যক নহয়।</translation>
 <translation id="3328489342742826322">বেকআপৰ পৰা পুনঃস্থাপন কৰিলে আপোনাৰ Linux ফাইলবোৰৰ ফ’ল্ডাৰত ইতিমধ্যে থকা Linux এপ্লিকেশ্বনটো মচি পেলাব।</translation>
@@ -2095,6 +2097,7 @@
 <translation id="3412265149091626468">বাছনিলৈ যাওক</translation>
 <translation id="3413122095806433232">চিএ ব্যৱহাৰকাৰী: <ph name="LOCATION" /></translation>
 <translation id="3414952576877147120">আকাৰ:</translation>
+<translation id="3414966631182382431"><ph name="MANAGER" />এ আপোনাৰ <ph name="BEGIN_LINK" />ব্ৰাউজাৰটো পৰিচালনা কৰে<ph name="END_LINK" /></translation>
 <translation id="3416468988018290825">সদায় সম্পূর্ণ URLসমূহ দেখুৱাওক</translation>
 <translation id="3417835166382867856">সন্ধানৰ টেব</translation>
 <translation id="3417836307470882032">২৪ ঘণ্টীয়া ঘড়ী ব্যৱহাৰ কৰক</translation>
@@ -3165,6 +3168,7 @@
 <translation id="4651484272688821107">ডেম’ ম’ডৰ সংসাধনৰ সৈতে অনলাইন কম্প’নেণ্ট ল’ড কৰিব পৰা নগ’ল৷</translation>
 <translation id="4652935475563630866">কেমেৰাৰ ছেটিঙত কৰা সালসলনিৰ বাবে Parallels Desktop পুনৰ লঞ্চ কৰাৰ আৱশ্যক। আগবাঢ়িবলৈ Parallels Desktop পুনৰ লঞ্চ কৰক।</translation>
 <translation id="4653405415038586100">Linux কনফিগাৰ কৰোঁতে আসোঁৱাহ হৈছে</translation>
+<translation id="4657914796247705218">TrackPointৰ গতিবেগ</translation>
 <translation id="465878909996028221">ব্ৰাউজাৰ পুনৰ্নিৰ্দেশৰ বাবে কেৱল http, https আৰু ফাইলৰ প্ৰট'কলসমূহহে সমৰ্থিত।</translation>
 <translation id="4659077111144409915">প্ৰাথমিক একাউণ্ট</translation>
 <translation id="4659126640776004816">আপুনি Google একাউণ্টত ছাইন ইন কৰিলে এই সুবিধাটো অন কৰা হয়।</translation>
@@ -3825,6 +3829,7 @@
 <translation id="5470735824776589490">পাৱাৰৱাশ্বৰ জৰিয়তে আপোনাৰ ডিভাইচটো ৰিছেট কৰিব পৰাৰ পূর্বে এবাৰ ৰিষ্টার্ট কৰাৰ আৱশ্যক। <ph name="LINK_BEGIN" />অধিক জানক<ph name="LINK_END" /></translation>
 <translation id="5471768120198416576">নমস্কাৰ! মই আপোনাৰ পাঠৰপৰা কথনৰ ভইচ।</translation>
 <translation id="5472627187093107397">এই ছাইটটোৰ বাবে পাছৱর্ডসমূহ ছেভ কৰক</translation>
+<translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{পিনত অতি কমেও এটা বৰ্ণ থাকিবই লাগিব}one{পিনত অতি কমেও # টা বৰ্ণ থাকিবই লাগিব}other{পিনত অতি কমেও # টা বৰ্ণ থাকিবই লাগিব}}</translation>
 <translation id="5473333559083690127">আপোনাৰ নতুন পিনটো আকৌ দিয়ক</translation>
 <translation id="5481273127572794904">স্বয়ংক্ৰিয়ভাৱে একাধিক ফাইল ডাউনল’ড কৰাৰ অনুমতি নাই</translation>
 <translation id="5481941284378890518">নিকটৱৰ্তী প্ৰিণ্টাৰ যোগ কৰক</translation>
@@ -4361,6 +4366,7 @@
 <translation id="6087960857463881712">অনন্য মুখমণ্ডল</translation>
 <translation id="6091761513005122595">শ্বেয়াৰ সফলভাৱে মাউণ্ট কৰা হ’ল।</translation>
 <translation id="6093888419484831006">আপডে'ট বাতিল কৰি থকা হৈছে...</translation>
+<translation id="6095541101974653012">আপোনাক লগ আউট কৰোৱা হৈছে।</translation>
 <translation id="6095984072944024315">−</translation>
 <translation id="6096047740730590436">বিস্তাৰিত আকাৰত খোলক</translation>
 <translation id="6096326118418049043">X.500 নাম</translation>
@@ -4692,6 +4698,7 @@
 <translation id="6474884162850599008">Google Drive একাউণ্ট সংযোগৰ পৰা আঁতৰাওক</translation>
 <translation id="6475697075626596525"><ph name="APP_NAME" />এ আপোনাৰ স্ক্ৰীণৰ সমলসমূহ শ্বেয়াৰ কৰিব খোজে। আপুনি কি শ্বেয়াৰ কৰিব খোজে সেয়া বাছনি কৰক।</translation>
 <translation id="6478248366783946499">বিপজ্জনক ফাইলটো ৰাখিবনে?</translation>
+<translation id="6480327114083866287"><ph name="MANAGER" />এ পৰিচালনা কৰে</translation>
 <translation id="6483485061007832714">ডাউনল’ড কৰা ফাইল খোলক</translation>
 <translation id="6483805311199035658"><ph name="FILE" /> খুলি থকা হৈছে...</translation>
 <translation id="6488384360522318064">ভাষা বাছনি কৰক</translation>
@@ -4878,6 +4885,7 @@
 <translation id="671928215901716392">লক স্ক্ৰীণ</translation>
 <translation id="6721678857435001674">আপোনাৰ সুৰক্ষা সম্পৰ্কীয় চাবিৰ মেক আৰু ম’ডেল চাওক</translation>
 <translation id="6721972322305477112">&amp;ফাইল</translation>
+<translation id="672208878794563299">এই ছাইটটোৱে পৰৱৰ্তী সময়ত পুনৰ সুধিব।</translation>
 <translation id="672213144943476270">অতিথি হিচাপে ব্ৰাউজ কৰা আৰম্ভ কৰাৰ আগতে অনুগ্ৰহ কৰি আপোনাৰ প্ৰ'ফাইল আনলক কৰক।</translation>
 <translation id="6723661294526996303">বুকমাৰ্ক আৰু ছেটিংসমূহ আমদানি কৰক...</translation>
 <translation id="6723839937902243910">পাৱাৰ</translation>
@@ -6271,6 +6279,7 @@
 <translation id="8317671367883557781">নেটৱর্ক সংযোগ যোগ কৰক</translation>
 <translation id="8319414634934645341">বিস্তাৰিত চাবিৰ ব্যৱহাৰ</translation>
 <translation id="8320459152843401447">আপোনাৰ সম্পূর্ণ স্ক্ৰীণ</translation>
+<translation id="8321837372750396788">এই <ph name="DEVICE_TYPE" />টো <ph name="MANAGER" />এ পৰিচালনা কৰিব।</translation>
 <translation id="8322814362483282060">এই পৃষ্ঠাটোৰ আপোনাৰ মাইক্ৰফ’নৰ এক্সেছ অৱৰোধ কৰি ৰখা হৈছিল।</translation>
 <translation id="8323167517179506834">URL টাইপ কৰক</translation>
 <translation id="8324784016256120271">আপুনি বিভিন্ন ছাইটসমূহত কৰা ব্ৰাউজিঙৰ কার্যকলাপ চাবলৈ ছাইটসমূহে কুকিসমূহ ব্যৱহাৰ কৰিব পাৰে, যেনে, বিজ্ঞাপন ব্যক্তিগতকৃত কৰিবলৈ</translation>
@@ -6577,6 +6586,7 @@
 <translation id="8698269656364382265">পূৰ্বৱৰ্তী স্ক্রীনখনলৈ উভতি যাবলৈ বাওঁফালৰ পৰা ছোৱাইপ কৰক।</translation>
 <translation id="869884720829132584">এপ্লিকেশ্বনৰ মেনু</translation>
 <translation id="869891660844655955">ম্যাদ উকলাৰ তাৰিখ</translation>
+<translation id="8702825062053163569">আপোনাৰ <ph name="DEVICE_TYPE" /> লক কৰা হৈছে।</translation>
 <translation id="8703346390800944767">বিজ্ঞাপন এৰি যাওক</translation>
 <translation id="8705331520020532516">ক্ৰমিক নম্বৰ</translation>
 <translation id="8705580154597116082">ফ’নৰ মাধ্যমেৰে ৱাই-ফাই উপলব্ধ</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 97b15db..963af6b 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -7072,7 +7072,7 @@
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" জোড়া হয়েছে</translation>
 <translation id="9215742531438648683">Google Play Store আনইনস্টল করুন</translation>
 <translation id="9218430445555521422">ডিফল্ট হিসেবে সেট করুন</translation>
-<translation id="9219103736887031265">ছবিগুলি</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="9220525904950070496">অ্যাকাউন্ট সরান</translation>
 <translation id="9220820413868316583">তুলে নিন এবং আবার চেষ্টা করুন।</translation>
 <translation id="923467487918828349">সমস্ত দেখান</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb
index 97c48ef..e9320d8 100644
--- a/chrome/app/resources/generated_resources_bs.xtb
+++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Preuzmite pametne Google funkcije za Chrome</translation>
 <translation id="1147322039136785890">Sada je na redu <ph name="SUPERVISED_USER_NAME" /></translation>
 <translation id="1147991416141538220">Da zatražite pristup, kontaktirajte administratora ovog uređaja.</translation>
+<translation id="1148063863818152153">EID vašeg uređaja</translation>
 <translation id="1149401351239820326">Mjesec isteka</translation>
 <translation id="1149725087019908252">Skeniranje fajla <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">To je posljednje automatsko ažuriranje softvera i sigurnosno ažuriranje za uređaj <ph name="DEVICE_TYPE" />. Da dobijete buduća ažuriranja, nadogradite uređaj na noviji model. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
@@ -316,6 +317,7 @@
 <translation id="1343865611738742294">Pruža Linux aplikacijama odobrenje za pristup USB uređajima. Linux neće zapamtiti USB uređaj nakon što ga uklonite.</translation>
 <translation id="1346630054604077329">Potvrdi i ponovo pokreni</translation>
 <translation id="1347256498747320987">Instaliranje ažuriranja i aplikacija. Ako nastavite, pristajete da ovaj uređaj također može s vremena na vrijeme automatski preuzimati i instalirati ažuriranja i aplikacije s Googlea, od vašeg mobilnog operatera i proizvođača vašeg uređaja, uz mogući prijenos podataka na mobilnoj mreži. Neke od tih aplikacija mogu također nuditi kupovinu unutar aplikacija. <ph name="BEGIN_LINK1" />Saznajte više<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linux pohrana</translation>
 <translation id="1347975661240122359">Ažuriranje će početi kada baterija dosegne <ph name="BATTERY_LEVEL" />%.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Nije moguće pronaći PPD. Provjerite je li Chromebook na mreži i pokušajte ponovo.</translation>
@@ -557,6 +559,7 @@
 <translation id="1608668830839595724">Više radnji za odabrane stavke</translation>
 <translation id="161042844686301425">Cijan</translation>
 <translation id="1611432201750675208">Vaš uređaj je zaključan</translation>
+<translation id="1612019740169791082">Vaš spremnik nije konfiguriran za podržavanje promjena veličine diska. Da biste prilagodili količinu prostora koji je rezerviran za Linux, izradite sigurnosnu kopiju i vratite je u novom spremniku.</translation>
 <translation id="1614511179807650956">Moguće je da ste iskoristili ograničenje prijenosa podataka na mobilnoj mreži. Posjetite portal za aktivaciju <ph name="NAME" /> da kupite još prijenosa podataka</translation>
 <translation id="161460670679785907">Nije moguće zaštititi vaš telefon</translation>
 <translation id="1616206807336925449">Za ovu ekstenziju nisu potrebna posebna odobrenja.</translation>
@@ -691,6 +694,7 @@
 <translation id="175772926354468439">Omogući temu</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Prikaži u Chrome Web trgovini</translation>
+<translation id="1761845175367251960">Računi korisnika <ph name="NAME" /></translation>
 <translation id="176193854664720708">Senzor za otisak prsta se nalazi na dugmetu za otključavanje Nježno ga dodirnite bilo kojim prstom.</translation>
 <translation id="1763046204212875858">Kreirajte prečice aplikacija</translation>
 <translation id="1763808908432309942">Otvara se u novoj kartici</translation>
@@ -900,6 +904,7 @@
 <translation id="1999115740519098545">Prilikom pokretanja</translation>
 <translation id="2000419248597011803">Šalje neke kolačiće i pretraživanja s trake za adresu i iz okvira za pretraživanje vašem zadanom pretraživaču</translation>
 <translation id="2002109485265116295">U stvarnom vremenu</translation>
+<translation id="200217416291116199">Preporučuje se sigurnosno kopiranje datoteka u slučaju nemogućnosti dovršetka nadogradnje. Pokretanjem nadogradnje Linux će se isključiti. Prije nastavka spremite otvorene datoteke.</translation>
 <translation id="2003130567827682533">Da aktivirate podatke na usluzi "<ph name="NAME" />", prvo se povežite na WiFi mrežu</translation>
 <translation id="2005199804247617997">Drugi profili</translation>
 <translation id="2006638907958895361">Otvori link u aplikaciji <ph name="APP" /></translation>
@@ -1611,6 +1616,7 @@
 <translation id="2807517655263062534">Fajlovi koje preuzmete će se pojaviti ovdje</translation>
 <translation id="2809586584051668049">i još <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
 <translation id="2810390687497823527">Ako ne prepoznajete ekstenziju ili ako vaš preglednik ne funkcionira kako bi trebalo, ovdje možete isključiti ili prilagoditi ekstenzije.</translation>
+<translation id="2811205483104563968">Računi</translation>
 <translation id="2812049959647166806">Thunderbolt nije podržan</translation>
 <translation id="2812989263793994277">Ne prikazuj nikakve slike</translation>
 <translation id="2813094189969465044">Roditeljski nadzor</translation>
@@ -1649,6 +1655,7 @@
 <translation id="2858138569776157458">Popularno</translation>
 <translation id="2861301611394761800">Ažuriranje sistema je završeno. Ponovo pokrenite sistem.</translation>
 <translation id="2861941300086904918">Upravitelj sigurnosti izvornog klijenta</translation>
+<translation id="2862815659905780618">Uklanjanje razvojnog okruženja za Linux</translation>
 <translation id="2864601841139725659">Postavite sliku profila</translation>
 <translation id="2865919525181940183">Snimak ekrana programa koji su trenutno na ekranu.</translation>
 <translation id="286674810810214575">Provjeravanje izvora napajanja...</translation>
@@ -1762,6 +1769,7 @@
 <translation id="2989123969927553766">Ubrzanje klizanja miša</translation>
 <translation id="2989474696604907455">nije priključeno</translation>
 <translation id="2989786307324390836">DER šifrirani binarni sistem, pojedinačni certifikat</translation>
+<translation id="2990313168615879645">Dodavanje Google računa</translation>
 <translation id="2992931425024192067">Prikaži sav sadržaj obavještenja</translation>
 <translation id="2993517869960930405">Informacije o aplikaciji</translation>
 <translation id="2996286169319737844">Podaci su šifrirani vašom lozinkom za prolaz za sinhroniziranje. Ovo ne obuhvata načine plaćanja i adrese iz Google Paya.</translation>
@@ -2373,6 +2381,7 @@
 <translation id="3706463572498736864">Stranica po tabeli</translation>
 <translation id="370649949373421643">Omogući Wi-Fi</translation>
 <translation id="370665806235115550">Učitavanje...</translation>
+<translation id="3707163604290651814">Trenutačno ste prijavljeni kao <ph name="NAME" /></translation>
 <translation id="3709244229496787112">Preglednik je isključen prije nego što je preuzimanje završeno.</translation>
 <translation id="3711931198657368127">Zalijepi i idi na <ph name="URL" /></translation>
 <translation id="3711945201266135623">Na serveru za štampanje je pronađen sljedeći broj štampača: <ph name="NUM_PRINTERS" /></translation>
@@ -2879,6 +2888,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K uživo)</translation>
 <translation id="4310139701823742692">Fajl je u pogrešnom formatu. Provjerite PPD fajl i pokušajte ponovo.</translation>
 <translation id="431076611119798497">&amp;Detalji</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{Jedan Google račun}one{<ph name="EXTRA_ACCOUNTS" /> Google račun}few{<ph name="EXTRA_ACCOUNTS" /> Google računa}other{<ph name="EXTRA_ACCOUNTS" /> Google računa}}</translation>
 <translation id="4312866146174492540">Blokiraj (zadano)</translation>
 <translation id="4314815835985389558">Upravljanje sinhronizacijom</translation>
 <translation id="4316850752623536204">Web lokacija programera</translation>
@@ -3258,6 +3268,7 @@
 <translation id="4764368918650455114">Provjerite jesu li oba uređaja otključana, jedan blizu drugoga i je li na njima uključen Bluetooth. Ako dijelite s Chromebookom, provjerite je li na njemu uključeno Dijeljenje u blizini (odaberite vrijeme da otvorite područje statusa, a zatim odaberite Dijeljenje u blizini). <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Omogućava aplikaciji Android Messages da šalje SMS-ove s vašeg telefona na vaš Chromebook</translation>
 <translation id="4768332406694066911">Imate potvrde ovih organizacija koje vas identificiraju</translation>
+<translation id="4773112038801431077">Nadogradnja Linuxa</translation>
 <translation id="477647109558161443">Kreiraj prečicu na radnoj površini</translation>
 <translation id="4776917500594043016">Lozinka za račun <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4777825441726637019">Trgovina Play</translation>
@@ -3751,6 +3762,7 @@
 <translation id="5368720394188453070">Vaš telefon je zaključan. Otključajte ga za ulazak.</translation>
 <translation id="5368779022775404937">Prijava na domenu <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Omogući ubrzavanje miša</translation>
+<translation id="5369694795837229225">Postavljanje razvojnog okruženja za Linux</translation>
 <translation id="5370819323174483825">&amp;Ponovo učitaj</translation>
 <translation id="5372529912055771682">Ova verzija operativnog sistema ne podržava ponuđeni način prijave.  Provjerite radite li na najnovijoj verziji i pokušajte ponovo.</translation>
 <translation id="5372579129492968947">Otkačite ekstenziju</translation>
@@ -4475,6 +4487,8 @@
 <translation id="6212168817037875041">Isključi ekran</translation>
 <translation id="6212752530110374741">Pošalji link e-poštom</translation>
 <translation id="6213230117190778270">Primi</translation>
+<translation id="6215620815501168899">Zatvori skočni prozor s EID-om ili QR kodom</translation>
+<translation id="6216601812881225442">Vaš spremnik ne podržava promjenu veličine. Da biste prilagodili količinu prostora koji je unaprijed dodijeljen Linuxu, izradite sigurnosnu kopiju i vratite je u novom spremniku.</translation>
 <translation id="6216696360484424239">Automatska prijava</translation>
 <translation id="6218058416316985984">Uređaj <ph name="DEVICE_TYPE" /> je van mreže. Povežite se na internet i pokušajte ponovo.</translation>
 <translation id="6220413761270491930">Greška pri učitavanju ekstenzije</translation>
@@ -4764,7 +4778,7 @@
 <translation id="6545665334409411530">Brzina ponavljanja</translation>
 <translation id="6545864417968258051">Skeniranje Bluetootha</translation>
 <translation id="6545867563032584178">Mikrofon je isključen u postavkama Mac sistema</translation>
-<translation id="6547354035488017500">Oslobodite najmanje 512 MB prostora ili će vaš uređaj prestati da radi. Da oslobodite prostor, izbrišite fajlove s pohrane uređaja.</translation>
+<translation id="6547354035488017500">Oslobodite najmanje 512 MB prostora ili će vaš uređaj prestati raditi. Da oslobodite prostor, izbrišite fajlove iz pohrane uređaja.</translation>
 <translation id="654871471440386944">Uključiti pregledanje znakom za umetanje?</translation>
 <translation id="6550675742724504774">Opcije</translation>
 <translation id="6551508934388063976">Komanda nije dostupna. Pritiniste control-N da otvorite novi prozor.</translation>
@@ -4867,6 +4881,7 @@
 <translation id="6680442031740878064">Dostupno: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Brzina</translation>
 <translation id="6681668084120808868">Snimi fotografiju</translation>
+<translation id="6683948477137300040">Skočni prozor za prikazivanje EID-a ili QR koda</translation>
 <translation id="6684827949542560880">Preuzimanje najnovijeg ažuriranja</translation>
 <translation id="668599234725812620">Otvori Google Play</translation>
 <translation id="6686490380836145850">Zatvori kartice s desne strane</translation>
@@ -5102,6 +5117,7 @@
 <translation id="6955535239952325894">Ova postavka je onemogućena na upravljanim preglednicima</translation>
 <translation id="6957044667612803194">Ovaj sigurnosni ključ ne podržava PIN-ove.</translation>
 <translation id="6957231940976260713">Ime usluge</translation>
+<translation id="6960507406838246615">Potrebno je ažurirati Linux</translation>
 <translation id="696103774840402661">Trajno su izbrisani svi fajlovi i lokalni podaci za sve korisnike na ovom uređaju <ph name="DEVICE_TYPE" />.</translation>
 <translation id="6964390816189577014">Junak</translation>
 <translation id="6964760285928603117">Ukloni iz grupe</translation>
@@ -5121,6 +5137,7 @@
 <translation id="697312151395002334">Dozvoljeno je slanje skočnih prozora i korištenje preusmjeravanja</translation>
 <translation id="6973611239564315524">Dostupna je nadogradnja na Debian 10 (Buster)</translation>
 <translation id="6974609594866392343">Način rada za demonstraciju van mreže</translation>
+<translation id="697508444536771064">Isključi Linux</translation>
 <translation id="6977381486153291903">Revizija firmvera</translation>
 <translation id="6977877318519394148">Instaliraj Rosettu</translation>
 <translation id="6978121630131642226">Pretraživači</translation>
@@ -5521,6 +5538,7 @@
 <translation id="7443806024147773267">Pristupite svojim lozinkama kad god ste prijavljeni na Google račun.</translation>
 <translation id="7444983668544353857">Onemogući <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Instalirajte aplikacije automatski</translation>
+<translation id="7448538354405258275">Predstavnik korisničke službe može upotrijebiti EID broj kako bi vam pomogao da aktivirate uslugu.</translation>
 <translation id="7449752890690775568">Ukloniti lozinku?</translation>
 <translation id="7450761244949417357">Otvaranje u pregledniku <ph name="ALTERNATIVE_BROWSER_NAME" /></translation>
 <translation id="7453008956351770337">Ako odaberete ovaj štampač, sljedećoj ekstenziji dajete odobrenje da pristupi vašem štampaču:</translation>
@@ -6050,6 +6068,7 @@
 <translation id="8032244173881942855">Nije moguće emitirati karticu.</translation>
 <translation id="8033827949643255796">odabrano</translation>
 <translation id="8033958968890501070">Vrijeme je isteklo</translation>
+<translation id="8036049989879571495">Postavljanje razvojnog okruženja za Linux (Beta)</translation>
 <translation id="8037117027592400564">Čitaj naglas sav tekst koristeći sintetizirani glas</translation>
 <translation id="8037357227543935929">Pitaj (zadano)</translation>
 <translation id="803771048473350947">Fajl</translation>
@@ -6978,6 +6997,7 @@
 <translation id="909108997331068008">Profil koji koristi <ph name="EXISTING_USER" /> je već prijavljen na <ph name="NEW_USER" /></translation>
 <translation id="9094033019050270033">Ažuriraj lozinku</translation>
 <translation id="9094038138851891550">Korisničko ime je nevažeće</translation>
+<translation id="9094859731829297286">Jeste li sigurni da želite rezervirati disk fiksne veličine za Linux?</translation>
 <translation id="9094982973264386462">Ukloni</translation>
 <translation id="9095253524804455615">Ukloni</translation>
 <translation id="909554839118732438">Zatvori anonimni način rada</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 1d150ec..ab312900 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Eines intel·ligents a Chrome</translation>
 <translation id="1147322039136785890">Ara és el torn de: <ph name="SUPERVISED_USER_NAME" /></translation>
 <translation id="1147991416141538220">Per demanar accés, contacta amb l'administrador d'aquest dispositiu.</translation>
+<translation id="1148063863818152153">L'EID del teu dispositiu</translation>
 <translation id="1149401351239820326">Mes de caducitat</translation>
 <translation id="1149725087019908252">S'està analitzant <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">Aquesta actualització de programari i seguretat és l'última que rebràs per a aquest <ph name="DEVICE_TYPE" />. Per obtenir actualitzacions en el futur, canvia el dispositiu per un model més nou. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation>
@@ -314,6 +315,7 @@
 <translation id="1343865611738742294">Concedeix permís a les aplicacions de Linux per accedir als dispositius USB. Linux no recordarà els dispositius USB després d'extreure'ls.</translation>
 <translation id="1346630054604077329">Confirma i reinicia</translation>
 <translation id="1347256498747320987">Instal·la actualitzacions i aplicacions. En continuar, acceptes que aquest dispositiu també pugui baixar i instal·lar automàticament actualitzacions i aplicacions de Google, de l'operador de telefonia mòbil i del fabricant del dispositiu, i que és possible que ho faci utilitzant dades mòbils. Pot ser que algunes d'aquestes aplicacions ofereixin compres des de l'aplicació. <ph name="BEGIN_LINK1" />Més informació<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Emmagatzematge de Linux</translation>
 <translation id="1347975661240122359">L'actualització començarà quan hi hagi un <ph name="BATTERY_LEVEL" />% de bateria.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">No hem trobat el fitxer PPD. Comprova que Chromebook estigui en línia i torna-ho a provar.</translation>
@@ -555,6 +557,7 @@
 <translation id="1608668830839595724">Més accions per als elements seleccionats</translation>
 <translation id="161042844686301425">Cian</translation>
 <translation id="1611432201750675208">El dispositiu està bloquejat</translation>
+<translation id="1612019740169791082">La configuració del contenidor no admet canvis de mida del disc. Per ajustar la quantitat d'espai que es reserva per a Linux, crea una còpia de seguretat i, a continuació, fes la restauració en un contenidor nou.</translation>
 <translation id="1614511179807650956">És possible que hagis esgotat la quantitat assignada de dades mòbils. Visita el portal d'activació <ph name="NAME" /> per comprar més dades.</translation>
 <translation id="161460670679785907">No es pot detectar el telèfon</translation>
 <translation id="1616206807336925449">Aquesta extensió no requereix cap permís especial.</translation>
@@ -689,6 +692,7 @@
 <translation id="175772926354468439">Activa el tema</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Mostra a Chrome Web Store</translation>
+<translation id="1761845175367251960">Comptes de: <ph name="NAME" /></translation>
 <translation id="176193854664720708">El sensor d'empremtes digitals és al botó d'engegada. Toca'l lleugerament amb un dit.</translation>
 <translation id="1763046204212875858">Creació de dreceres a aplicacions</translation>
 <translation id="1763808908432309942">S'obre en una pestanya nova</translation>
@@ -898,6 +902,7 @@
 <translation id="1999115740519098545">A l'inici</translation>
 <translation id="2000419248597011803">Envia al motor de cerca predeterminat algunes galetes i cerques de la barra d'adreces i del quadre de cerca</translation>
 <translation id="2002109485265116295">En temps real</translation>
+<translation id="200217416291116199">Es recomana fer una còpia de seguretat dels fitxers per si de cas l'actualització no es pot completar. En iniciar l'actualització, Linux s'apagarà. Desa els fitxers oberts abans de continuar.</translation>
 <translation id="2003130567827682533">Per activar les dades del servei <ph name="NAME" />, primer connecta't a una xarxa Wi‑Fi</translation>
 <translation id="2005199804247617997">Altres perfils</translation>
 <translation id="2006638907958895361">Obre l'enllaç a <ph name="APP" /></translation>
@@ -1608,6 +1613,7 @@
 <translation id="2807517655263062534">Aquí es mostren els fitxers baixats</translation>
 <translation id="2809586584051668049">i <ph name="NUMBER_ADDITIONAL_DISABLED" /> més</translation>
 <translation id="2810390687497823527">Si no reconeixes una extensió o si el navegador no funciona de la manera esperada, pots desactivar o personalitzar les extensions aquí.</translation>
+<translation id="2811205483104563968">Comptes</translation>
 <translation id="2812049959647166806">Els connectors Thunderbolt no s'admeten</translation>
 <translation id="2812989263793994277">No mostris cap imatge</translation>
 <translation id="2813094189969465044">Controls parentals</translation>
@@ -1646,6 +1652,7 @@
 <translation id="2858138569776157458">Llocs populars</translation>
 <translation id="2861301611394761800">Actualització del sistema completada. Reinicieu el sistema.</translation>
 <translation id="2861941300086904918">Administrador de seguretat de Native Client</translation>
+<translation id="2862815659905780618">Suprimeix l'entorn de desenvolupament de Linux</translation>
 <translation id="2864601841139725659">Estableix la teva foto de perfil</translation>
 <translation id="2865919525181940183">Captura de pantalla de programes que hi ha en pantalla en aquests moments</translation>
 <translation id="286674810810214575">S'estan comprovant les fonts d'alimentació...</translation>
@@ -1759,6 +1766,7 @@
 <translation id="2989123969927553766">Acceleració de desplaçament del ratolí</translation>
 <translation id="2989474696604907455">no connectat</translation>
 <translation id="2989786307324390836">Binari codificat amb DER, certificat únic</translation>
+<translation id="2990313168615879645">Afegeix un Compte de Google</translation>
 <translation id="2992931425024192067">Mostra tot el contingut de les notificacions</translation>
 <translation id="2993517869960930405">Informació de l'aplicació</translation>
 <translation id="2996286169319737844">Les dades estan encriptades amb la teva frase de contrasenya de sincronització. No inclouen les formes de pagament ni les adreces de Google Pay.</translation>
@@ -2370,6 +2378,7 @@
 <translation id="3706463572498736864">Pàgines per full</translation>
 <translation id="370649949373421643">Activa la Wi-Fi</translation>
 <translation id="370665806235115550">S'està carregant...</translation>
+<translation id="3707163604290651814">Has iniciat la sessió com a <ph name="NAME" /></translation>
 <translation id="3709244229496787112">S'ha tancat el navegador abans que la baixada es completés.</translation>
 <translation id="3711931198657368127">Engan&amp;xa i ves a <ph name="URL" /></translation>
 <translation id="3711945201266135623">S'han trobat <ph name="NUM_PRINTERS" /> impressores al servidor d'impressió</translation>
@@ -2875,6 +2884,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K actius)</translation>
 <translation id="4310139701823742692">El format del fitxer PPD és incorrecte. Revisa'l i torna-ho a provar.</translation>
 <translation id="431076611119798497">&amp;Detalls</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{1 Compte de Google}other{<ph name="EXTRA_ACCOUNTS" /> Comptes de Google}}</translation>
 <translation id="4312866146174492540">Bloqueja (opció predeterminada)</translation>
 <translation id="4314815835985389558">Gestiona la sincronització</translation>
 <translation id="4316850752623536204">Lloc web per a desenvolupadors</translation>
@@ -3254,6 +3264,7 @@
 <translation id="4764368918650455114">Comprova que els dos dispositius estiguin desbloquejats, l'un a prop de l'altre i amb el Bluetooth activat. Si vols compartir fitxers amb un Chromebook, comprova que tingui la funció Compartició Nearby activada (obre l'àrea d'estat seleccionant l'hora i, a continuació, selecciona Compartició Nearby). <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Permet que Missatges Android retransmeti els missatges de text del telèfon al teu Chromebook</translation>
 <translation id="4768332406694066911">Tens certificats d'aquestes organitzacions que t'identifiquen</translation>
+<translation id="4773112038801431077">Actualitza Linux</translation>
 <translation id="477647109558161443">Crea una drecera de l'escriptori</translation>
 <translation id="4776917500594043016">Contrasenya per a <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4777825441726637019">Play Store</translation>
@@ -3748,6 +3759,7 @@
 <translation id="5368720394188453070">El telèfon està bloquejat. Desbloquegeu-lo per accedir-hi.</translation>
 <translation id="5368779022775404937">Inicia la sessió a <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Activa l'acceleració del ratolí</translation>
+<translation id="5369694795837229225">Configura un entorn de desenvolupament de Linux</translation>
 <translation id="5370819323174483825">&amp;Tornar a carregar</translation>
 <translation id="5372529912055771682">El mode d'inscripció proporcionat no és compatible amb aquesta versió del sistema operatiu. Assegureu-vos que estigueu executant la darrera versió i torneu-ho a provar.</translation>
 <translation id="5372579129492968947">Deixa de fixar l'extensió</translation>
@@ -4473,6 +4485,8 @@
 <translation id="6212168817037875041">Desactiva la pantalla</translation>
 <translation id="6212752530110374741">Envia l'enllaç per correu electrònic</translation>
 <translation id="6213230117190778270">Rep</translation>
+<translation id="6215620815501168899">Tanca la finestra emergent amb el codi QR i amb l'EID</translation>
+<translation id="6216601812881225442">El teu contenidor no admet el canvi de mida. Per ajustar la quantitat d'espai que s'assigna prèviament a Linux, crea una còpia de seguretat i, a continuació, fes la restauració en un contenidor nou.</translation>
 <translation id="6216696360484424239">Inicia la sessió automàticament</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> no té connexió. Connecta't a Internet i torna-ho a provar.</translation>
 <translation id="6220413761270491930">Error en carregar l'extensió</translation>
@@ -4865,6 +4879,7 @@
 <translation id="6680442031740878064">Disponible: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Velocitat</translation>
 <translation id="6681668084120808868">Fes una foto</translation>
+<translation id="6683948477137300040">Mostra la finestra emergent amb el codi QR i amb l'EID del dispositiu</translation>
 <translation id="6684827949542560880">S'està baixant l'actualització més recent</translation>
 <translation id="668599234725812620">Obre Google Play</translation>
 <translation id="6686490380836145850">Tanca les pestanyes de la dreta</translation>
@@ -5100,6 +5115,7 @@
 <translation id="6955535239952325894">Aquesta opció de configuració està desactivada als navegadors gestionats</translation>
 <translation id="6957044667612803194">Aquesta clau de seguretat no admet codis PIN</translation>
 <translation id="6957231940976260713">Nom del servei</translation>
+<translation id="6960507406838246615">Cal actualitzar Linux</translation>
 <translation id="696103774840402661">Tots els fitxers i totes les dades locals de tots els usuaris d'aquest dispositiu <ph name="DEVICE_TYPE" /> s'han suprimit permanentment.</translation>
 <translation id="6964390816189577014">Heroi</translation>
 <translation id="6964760285928603117">Suprimeix del grup</translation>
@@ -5119,6 +5135,7 @@
 <translation id="697312151395002334">Amb permís per enviar finestres emergents i utilitzar redireccions</translation>
 <translation id="6973611239564315524">Hi ha disponible una actualització a Debian 10 (Buster)</translation>
 <translation id="6974609594866392343">Mode de demostració sense connexió</translation>
+<translation id="697508444536771064">Apaga Linux</translation>
 <translation id="6977381486153291903">Revisió de microprogramari</translation>
 <translation id="6977877318519394148">Instal·la Rosetta</translation>
 <translation id="6978121630131642226">Motors de cerca</translation>
@@ -5519,6 +5536,7 @@
 <translation id="7443806024147773267">Accedeix a les contrasenyes sempre que tinguis la sessió iniciada al Compte de Google</translation>
 <translation id="7444983668544353857">Desactiva <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Instal·lar aplicacions automàticament.</translation>
+<translation id="7448538354405258275">El representant d'un servei d'atenció al client pot utilitzar el número de l'EID per ajudar-te a activar el servei.</translation>
 <translation id="7449752890690775568">Vols suprimir la contrasenya?</translation>
 <translation id="7450761244949417357">S'està obrint a <ph name="ALTERNATIVE_BROWSER_NAME" /></translation>
 <translation id="7453008956351770337">En seleccionar aquesta impressora, doneu permís a l'extensió següent per accedir a la vostra impressora:</translation>
@@ -6048,6 +6066,7 @@
 <translation id="8032244173881942855">No es pot emetre la pestanya.</translation>
 <translation id="8033827949643255796">seleccionats</translation>
 <translation id="8033958968890501070">Temps d'espera esgotat</translation>
+<translation id="8036049989879571495">Configura un entorn de desenvolupament de Linux (versió beta)</translation>
 <translation id="8037117027592400564">Llegeix tot el text en veu alta mitjançant una síntesi de veu</translation>
 <translation id="8037357227543935929">Pregunta (opció predeterminada)</translation>
 <translation id="803771048473350947">Fitxer</translation>
@@ -6974,6 +6993,7 @@
 <translation id="909108997331068008">El perfil <ph name="EXISTING_USER" /> ja s'ha utilitzat per iniciar la sessió a <ph name="NEW_USER" /></translation>
 <translation id="9094033019050270033">Actualitza la contrasenya</translation>
 <translation id="9094038138851891550">El nom d'usuari no és vàlid</translation>
+<translation id="9094859731829297286">Confirmes que vols reservar un disc de mida fixa per a Linux?</translation>
 <translation id="9094982973264386462">Suprimeix</translation>
 <translation id="9095253524804455615">Suprimeix</translation>
 <translation id="909554839118732438">Tanca les finestres d'incògnit</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index a43f3ee0..816e313 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Få Googles smarte funktioner i Chrome</translation>
 <translation id="1147322039136785890">Nu er enheden klar til <ph name="SUPERVISED_USER_NAME" /></translation>
 <translation id="1147991416141538220">Hvis du vil anmode om adgang, skal du kontakte administratoren af denne enhed.</translation>
+<translation id="1148063863818152153">Din enheds EID-nummer</translation>
 <translation id="1149401351239820326">Udløbsmåned</translation>
 <translation id="1149725087019908252">Scanner <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">Dette er den sidste automatiske software- og sikkerhedsopdatering for denne <ph name="DEVICE_TYPE" />. Opgrader til en nyere model for at få fremtidige opdateringer. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
@@ -315,6 +316,7 @@
 <translation id="1343865611738742294">Giv Linux-apps adgang til USB-enheder. Linux husker ikke en USB-enhed, når den er fjernet.</translation>
 <translation id="1346630054604077329">Bekræft og genstart</translation>
 <translation id="1347256498747320987">Installer opdateringer og apps. Hvis du fortsætter, accepterer du, at denne enhed også kan downloade og installere opdateringer og apps automatisk fra Google, dit mobilselskab og producenten af din enhed. Dette kan ske ved hjælp af mobildata. Nogle af disse apps tilbyder muligvis køb i appen. <ph name="BEGIN_LINK1" />Få flere oplysninger<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linux-lagerplads</translation>
 <translation id="1347975661240122359">Opdateringen starter, når batteriniveauet er på <ph name="BATTERY_LEVEL" /> %.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD-filen kan ikke findes. Sørg for, at din Chromebook er online, og prøv igen.</translation>
@@ -556,6 +558,7 @@
 <translation id="1608668830839595724">Flere handlinger for de valgte elementer</translation>
 <translation id="161042844686301425">Cyan</translation>
 <translation id="1611432201750675208">Din enhed er låst</translation>
+<translation id="1612019740169791082">Din container er ikke konfigureret til at understøtte ændringer af diskstørrelsen. Du kan justere den mængde plads, der skal reserveres til Linux, ved at sikkerhedskopiere og derefter gendanne i en ny container.</translation>
 <translation id="1614511179807650956">Du har muligvis opbrugt den tilladte mobildatamængde. Gå til aktiveringsportalen for <ph name="NAME" /> for at købe mere data.</translation>
 <translation id="161460670679785907">Din telefon kan ikke registreres</translation>
 <translation id="1616206807336925449">Denne udvidelse kræver ikke nogen særlige tilladelser.</translation>
@@ -690,6 +693,7 @@
 <translation id="175772926354468439">Aktivér tema</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Se i Chrome Webshop</translation>
+<translation id="1761845175367251960">Konti tilhørende <ph name="NAME" /></translation>
 <translation id="176193854664720708">Fingeraftrykslæseren sidder i afbryderknappen. Tryk let på den med en finger.</translation>
 <translation id="1763046204212875858">Opret programgenveje</translation>
 <translation id="1763808908432309942">Åbnes på en ny fane</translation>
@@ -899,6 +903,7 @@
 <translation id="1999115740519098545">Ved opstart</translation>
 <translation id="2000419248597011803">Sender visse cookies og søgninger fra adresselinjen og søgefeltet til din standardsøgemaskine</translation>
 <translation id="2002109485265116295">Realtid</translation>
+<translation id="200217416291116199">Det anbefales at sikkerhedskopiere filer, i tilfælde af at opgraderingen ikke kan fuldføres. Når du starter opgraderingen, lukker Linux ned. Gem åbne filer, før du fortsætter.</translation>
 <translation id="2003130567827682533">Hvis du vil aktivere data fra "<ph name="NAME" />", skal du først oprette forbindelse til et Wi-Fi-netværk</translation>
 <translation id="2005199804247617997">Andre profiler</translation>
 <translation id="2006638907958895361">Åbn linket i <ph name="APP" /></translation>
@@ -1610,6 +1615,7 @@
 <translation id="2807517655263062534">Dine downloadede filer vises her</translation>
 <translation id="2809586584051668049">og <ph name="NUMBER_ADDITIONAL_DISABLED" /> mere</translation>
 <translation id="2810390687497823527">Hvis du ikke kan genkende en udvidelse, eller hvis din browser ikke fungerer som forventet, kan du deaktivere eller tilpasse udvidelser her.</translation>
+<translation id="2811205483104563968">Konti</translation>
 <translation id="2812049959647166806">Thunderbolt understøttes ikke</translation>
 <translation id="2812989263793994277">Vis ikke billeder</translation>
 <translation id="2813094189969465044">Børnesikring</translation>
@@ -1648,6 +1654,7 @@
 <translation id="2858138569776157458">Topwebsites</translation>
 <translation id="2861301611394761800">Opdateringen af systemet er fuldført. Genstart systemet.</translation>
 <translation id="2861941300086904918">Sikkerhedsadministrator for Native Client</translation>
+<translation id="2862815659905780618">Fjern Linux-udviklingsmiljø</translation>
 <translation id="2864601841139725659">Vælg profilbillede</translation>
 <translation id="2865919525181940183">Screenshot af de programmer, der lige nu er på skærmen</translation>
 <translation id="286674810810214575">Tjekker strømkilder...</translation>
@@ -1761,6 +1768,7 @@
 <translation id="2989123969927553766">Acceleration af rulning med mus</translation>
 <translation id="2989474696604907455">ikke tilknyttet</translation>
 <translation id="2989786307324390836">DER-kodet binær, enkeltcertifikat</translation>
+<translation id="2990313168615879645">Tilføj Google-konto</translation>
 <translation id="2992931425024192067">Vis alt indhold i notifikationer</translation>
 <translation id="2993517869960930405">Oplysninger om appen</translation>
 <translation id="2996286169319737844">Dataene er krypteret med din adgangssætning til synkronisering. Dette omfatter ikke betalingsmetoder og adresser fra Google Pay.</translation>
@@ -2372,6 +2380,7 @@
 <translation id="3706463572498736864">Sider pr. ark</translation>
 <translation id="370649949373421643">Aktivér Wi-Fi</translation>
 <translation id="370665806235115550">Indlæser...</translation>
+<translation id="3707163604290651814">Du er i øjeblikket logget ind som <ph name="NAME" /></translation>
 <translation id="3709244229496787112">Browseren blev lukket ned, inden overførslen var færdig.</translation>
 <translation id="3711931198657368127">Ind&amp;sæt, og gå til <ph name="URL" /></translation>
 <translation id="3711945201266135623">Der blev fundet <ph name="NUM_PRINTERS" /> printere på printerserveren</translation>
@@ -2878,6 +2887,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K live)</translation>
 <translation id="4310139701823742692">Filen har et forkert format. Tjek PPD-filen, og prøv igen.</translation>
 <translation id="431076611119798497">&amp;Detaljer</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{1 Google-konto}one{<ph name="EXTRA_ACCOUNTS" /> Google-konto}other{<ph name="EXTRA_ACCOUNTS" /> Google-konti}}</translation>
 <translation id="4312866146174492540">Bloker (standardindstilling)</translation>
 <translation id="4314815835985389558">Administrer synkronisering</translation>
 <translation id="4316850752623536204">Udviklers website</translation>
@@ -3257,6 +3267,7 @@
 <translation id="4764368918650455114">Sørg for, at begge enheder er låst op, er i nærheden af hinanden, og at både Bluetooth og placering er aktiveret. Hvis du deler med en Chromebook, skal du sørge for, at "Deling tæt på" er aktiveret (åbn statusområdet ved at vælge klokkeslættet og "Deling tæt på"). <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Tillader, at Android Beskeder videresender sms-beskeder fra din telefon til din Chromebook</translation>
 <translation id="4768332406694066911">Du har certifikater fra disse organisationer, der identificerer dig</translation>
+<translation id="4773112038801431077">Opgrader Linux</translation>
 <translation id="477647109558161443">Opret en genvej på skrivebordet</translation>
 <translation id="4776917500594043016">Adgangskode for <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4777825441726637019">Play Butik</translation>
@@ -3750,6 +3761,7 @@
 <translation id="5368720394188453070">Din telefon er låst. Lås den op for at få adgang.</translation>
 <translation id="5368779022775404937">Log ind på <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Aktivér acceleration af mus</translation>
+<translation id="5369694795837229225">Konfigurer Linux-udviklingsmiljø</translation>
 <translation id="5370819323174483825">&amp;Opdater</translation>
 <translation id="5372529912055771682">Den medfølgende tilstand for tilmelding understøttes ikke af denne version af operativsystemet. Sørg for, at du kører den nyeste version, og prøv igen.</translation>
 <translation id="5372579129492968947">Frigør udvidelse</translation>
@@ -4475,6 +4487,8 @@
 <translation id="6212168817037875041">Sluk skærmen</translation>
 <translation id="6212752530110374741">Send link via mail</translation>
 <translation id="6213230117190778270">Modtag</translation>
+<translation id="6215620815501168899">Luk pop op-vinduet med EID-nummer og QR-kode</translation>
+<translation id="6216601812881225442">Din container understøtter ikke størrelsesjusteringer. Du kan justere den mængde plads, der er forudallokeret til Linux, ved at sikkerhedskopiere og derefter gendanne i en ny container.</translation>
 <translation id="6216696360484424239">Log automatisk ind</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> er offline. Opret forbindelse til internettet, og prøv igen.</translation>
 <translation id="6220413761270491930">Der opstod en fejl ved indlæsning af udvidelsen</translation>
@@ -4867,6 +4881,7 @@
 <translation id="6680442031740878064">Tilgængelig: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Talehastighed</translation>
 <translation id="6681668084120808868">Tag billede</translation>
+<translation id="6683948477137300040">Pop op-vinduet Vis enhedens EID-nummer og QR-kode</translation>
 <translation id="6684827949542560880">Downloader den nyeste opdatering</translation>
 <translation id="668599234725812620">Åbn Google Play</translation>
 <translation id="6686490380836145850">Luk fanerne til højre</translation>
@@ -5102,6 +5117,7 @@
 <translation id="6955535239952325894">Denne indstilling er deaktiveret i administrerede browsere</translation>
 <translation id="6957044667612803194">Denne sikkerhedsnøgle understøtter ikke pinkoder</translation>
 <translation id="6957231940976260713">Tjenestens navn</translation>
+<translation id="6960507406838246615">Kræver Linux-opdatering</translation>
 <translation id="696103774840402661">Alle filer og lokale data for alle brugere på denne <ph name="DEVICE_TYPE" /> er blevet slettet permanent.</translation>
 <translation id="6964390816189577014">Helt</translation>
 <translation id="6964760285928603117">Fjern fra gruppe</translation>
@@ -5121,6 +5137,7 @@
 <translation id="697312151395002334">Har tilladelse til at sende pop op-vinduer og bruge omdirigeringer</translation>
 <translation id="6973611239564315524">Der er en tilgængelig opdatering til Debian 10 (Buster)</translation>
 <translation id="6974609594866392343">Offline demotilstand</translation>
+<translation id="697508444536771064">Luk Linux</translation>
 <translation id="6977381486153291903">Firmwarerevision</translation>
 <translation id="6977877318519394148">Installer Rosetta</translation>
 <translation id="6978121630131642226">Søgemaskiner</translation>
@@ -5521,6 +5538,7 @@
 <translation id="7443806024147773267">Få adgang til dine adgangskoder, så snart du logger ind på din Google-konto</translation>
 <translation id="7444983668544353857">Deaktiver <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Installer apps automatisk</translation>
+<translation id="7448538354405258275">En kundeservicemedarbejder kan bruge EID-nummeret til at hjælpe dig med at aktivere tjenesten.</translation>
 <translation id="7449752890690775568">Vil du fjerne adgangskoden?</translation>
 <translation id="7450761244949417357">Åbner i <ph name="ALTERNATIVE_BROWSER_NAME" /> nu</translation>
 <translation id="7453008956351770337">Ved at vælge denne printer giver du følgende udvidelser adgang til din printer:</translation>
@@ -6049,6 +6067,7 @@
 <translation id="8032244173881942855">Fanen kunne ikke castes.</translation>
 <translation id="8033827949643255796">valgt</translation>
 <translation id="8033958968890501070">Timeout</translation>
+<translation id="8036049989879571495">Konfigurer Linux-udviklingsmiljø (beta)</translation>
 <translation id="8037117027592400564">Læs hele teksten højt ved hjælp af talesyntese</translation>
 <translation id="8037357227543935929">Spørg (standardindstilling)</translation>
 <translation id="803771048473350947">Fil</translation>
@@ -6977,6 +6996,7 @@
 <translation id="909108997331068008">Profilen tilhørende <ph name="EXISTING_USER" /> er allerede logget ind på <ph name="NEW_USER" /></translation>
 <translation id="9094033019050270033">Opdater adgangskoden</translation>
 <translation id="9094038138851891550">Brugernavnet er ugyldigt</translation>
+<translation id="9094859731829297286">Er du sikker på, at du vil reservere en disk med fast størrelse til Linux?</translation>
 <translation id="9094982973264386462">Fjern</translation>
 <translation id="9095253524804455615">Fjern</translation>
 <translation id="909554839118732438">Luk inkognitovinduer</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 806552a..d3ac04c 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -432,6 +432,7 @@
 <translation id="1475502736924165259">Tienes certificados archivados que no coinciden con ninguna de las demás categorías</translation>
 <translation id="1476088332184200792">Copiar a tu dispositivo</translation>
 <translation id="1476607407192946488">&amp;Configuración de idiomas</translation>
+<translation id="1477446329585670721"><ph name="DOMAIN" /> requiere que no quites la tarjeta inteligente.</translation>
 <translation id="1478340334823509079">Detalles: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">La instalación no está habilitada</translation>
 <translation id="1481537595330271162">Se produjo un error al cambiar el tamaño del disco</translation>
@@ -2027,6 +2028,7 @@
 <translation id="3320630259304269485">Navegación segura (protección contra sitios peligrosos) y otras opciones de configuración de seguridad</translation>
 <translation id="3323295311852517824">{NUM_FILES,plural, =0{Estos datos incluyen contenido sensible o peligroso. Quita el contenido correspondiente y vuelve a intentarlo.}=1{Este archivo incluye contenido sensible o peligroso. Quita el contenido correspondiente y vuelve a intentarlo.}other{Estos archivos incluyen contenido sensible o peligroso. Quita el contenido correspondiente y vuelve a intentarlo.}}</translation>
 <translation id="3323521181261657960">Bonus: Disfruta de más tiempo de uso</translation>
+<translation id="3325804108816646710">Buscando perfiles disponibles…</translation>
 <translation id="3325910708063135066">La cámara y el micrófono están desactivados en las Preferencias del Sistema de Mac</translation>
 <translation id="3327050066667856415">Las Chromebooks están diseñadas para ser seguras. Tu dispositivo cuenta con una protección automática contra software malicioso, por lo que no necesitas una protección adicional.</translation>
 <translation id="3328489342742826322">Si implementas una copia de seguridad, se borrarán los datos y apps de Linux existentes en tu carpeta de archivos de Linux.</translation>
@@ -2094,6 +2096,7 @@
 <translation id="3412265149091626468">Saltar a selección</translation>
 <translation id="3413122095806433232">Emisores de certificados: <ph name="LOCATION" /></translation>
 <translation id="3414952576877147120">Tamaño:</translation>
+<translation id="3414966631182382431"><ph name="MANAGER" /> <ph name="BEGIN_LINK" />administra tu navegador<ph name="END_LINK" /></translation>
 <translation id="3416468988018290825">Mostrar siempre las URL completas</translation>
 <translation id="3417835166382867856">Buscar pestañas</translation>
 <translation id="3417836307470882032">Formato de 24 horas</translation>
@@ -3168,6 +3171,7 @@
 <translation id="4651484272688821107">No se pudo cargar el componente en línea con los recursos del modo de demostración.</translation>
 <translation id="4652935475563630866">Es necesario que reinicies Parallels Desktop para aplicar los cambios en la configuración de la cámara. Para continuar, reinicia Parallels Desktop.</translation>
 <translation id="4653405415038586100">Se produjo un error al configurar Linux</translation>
+<translation id="4657914796247705218">Velocidad de TrackPoint</translation>
 <translation id="465878909996028221">Solo se admiten los protocolos http, https y de archivo para las redirecciones a navegadores.</translation>
 <translation id="4659077111144409915">Cuenta principal</translation>
 <translation id="4659126640776004816">Esta función se activa cuando accedes a tu Cuenta de Google.</translation>
@@ -3828,6 +3832,7 @@
 <translation id="5470735824776589490">Debes reiniciar tu dispositivo para poder restablecerlo con Powerwash. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="5471768120198416576">Hola, soy la voz que leerá tus textos.</translation>
 <translation id="5472627187093107397">Guardar contraseñas para este sitio</translation>
+<translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{El PIN debe tener al menos un carácter}other{El PIN debe tener al menos # caracteres}}</translation>
 <translation id="5473333559083690127">Vuelve a ingresar el PIN nuevo</translation>
 <translation id="5481273127572794904">No puede descargar múltiples archivos de forma automática</translation>
 <translation id="5481941284378890518">Agregar impresoras cercanas</translation>
@@ -4366,6 +4371,7 @@
 <translation id="6087960857463881712">Cara increíble</translation>
 <translation id="6091761513005122595">Se activó correctamente el recurso compartido.</translation>
 <translation id="6093888419484831006">Cancelando actualización…</translation>
+<translation id="6095541101974653012">Saliste de tu cuenta.</translation>
 <translation id="6095984072944024315">−</translation>
 <translation id="6096047740730590436">Abrir de forma maximizada</translation>
 <translation id="6096326118418049043">Nombre X 500</translation>
@@ -4699,6 +4705,7 @@
 <translation id="6474884162850599008">Desconectar la cuenta de Google Drive</translation>
 <translation id="6475697075626596525"><ph name="APP_NAME" /> desea compartir el contenido de tu pantalla. Elige lo que deseas compartir.</translation>
 <translation id="6478248366783946499">¿Deseas conservar el archivo peligroso?</translation>
+<translation id="6480327114083866287">Administrador: <ph name="MANAGER" /></translation>
 <translation id="6483485061007832714">Abrir el archivo descargado</translation>
 <translation id="6483805311199035658">Abriendo <ph name="FILE" />...</translation>
 <translation id="6488384360522318064">Seleccionar idioma</translation>
@@ -4887,6 +4894,7 @@
 <translation id="671928215901716392">Bloquear pantalla</translation>
 <translation id="6721678857435001674">Ver la marca y el modelo de tu llave de seguridad</translation>
 <translation id="6721972322305477112">&amp;Archivo</translation>
+<translation id="672208878794563299">Este sitio solicitará acceso la próxima vez.</translation>
 <translation id="672213144943476270">Desbloquea tu perfil antes de navegar como invitado.</translation>
 <translation id="6723661294526996303">Importar favoritos y configuración...</translation>
 <translation id="6723839937902243910">Alimentación</translation>
@@ -6284,6 +6292,7 @@
 <translation id="8317671367883557781">Agregar conexión de red</translation>
 <translation id="8319414634934645341">Uso extendido de la clave</translation>
 <translation id="8320459152843401447">Tu pantalla completa</translation>
+<translation id="8321837372750396788"><ph name="MANAGER" /> administrará este dispositivo <ph name="DEVICE_TYPE" />.</translation>
 <translation id="8322814362483282060">Esta página no tiene permiso para acceder al micrófono.</translation>
 <translation id="8323167517179506834">Ingresar URL</translation>
 <translation id="8324784016256120271">Los sitios pueden usar cookies para ver la actividad de navegación en diferentes sitios, por ejemplo, con el fin de personalizar anuncios.</translation>
@@ -6591,6 +6600,7 @@
 <translation id="8698269656364382265">Si quieres regresar a la pantalla anterior, desliza el dedo desde el lado izquierdo.</translation>
 <translation id="869884720829132584">Menú Aplicaciones</translation>
 <translation id="869891660844655955">Fecha de vencimiento</translation>
+<translation id="8702825062053163569">Se bloqueó tu <ph name="DEVICE_TYPE" />.</translation>
 <translation id="8703346390800944767">Omitir anuncio</translation>
 <translation id="8705331520020532516">Número de serie</translation>
 <translation id="8705580154597116082">Wi-Fi disponible mediante el teléfono</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 5d5adf92..54a287c2 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -432,6 +432,7 @@
 <translation id="1475502736924165259">Tienes certificados registrados que no corresponden a ninguna otra categoría</translation>
 <translation id="1476088332184200792">Copiar en tu dispositivo</translation>
 <translation id="1476607407192946488">&amp;Configuración de idioma</translation>
+<translation id="1477446329585670721"><ph name="DOMAIN" /> requiere que mantengas insertada tu tarjeta inteligente.</translation>
 <translation id="1478340334823509079">Detalles: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">La instalación no está habilitada</translation>
 <translation id="1481537595330271162">No se ha podido cambiar el tamaño del disco</translation>
@@ -2030,6 +2031,7 @@
 <translation id="3320630259304269485">Navegación segura (protección frente a sitios web peligrosos) y otros ajustes de seguridad</translation>
 <translation id="3323295311852517824">{NUM_FILES,plural, =0{Estos datos incluyen contenido sensible o peligroso. Elimina ese contenido e inténtalo de nuevo.}=1{Este archivo incluye contenido sensible o peligroso. Elimina ese contenido e inténtalo de nuevo.}other{Estos archivos incluyen contenido sensible o peligroso. Elimina ese contenido e inténtalo de nuevo.}}</translation>
 <translation id="3323521181261657960">¡Extra! Has conseguido más tiempo de pantalla</translation>
+<translation id="3325804108816646710">Buscando perfiles disponibles...</translation>
 <translation id="3325910708063135066">La cámara y el micrófono están desactivados en las Preferencias del Sistema de Mac</translation>
 <translation id="3327050066667856415">Los Chromebooks se han diseñado pensando en la seguridad. Tu dispositivo está protegido automáticamente contra el software malicioso. No necesita software adicional.</translation>
 <translation id="3328489342742826322">Al restaurar una copia de seguridad, se eliminarán las aplicaciones y los datos actuales de Linux de la carpeta Archivos de Linux.</translation>
@@ -2097,6 +2099,7 @@
 <translation id="3412265149091626468">Ir a la selección</translation>
 <translation id="3413122095806433232">Entidades emisoras de certificados: <ph name="LOCATION" /></translation>
 <translation id="3414952576877147120">Tamaño:</translation>
+<translation id="3414966631182382431"><ph name="MANAGER" /> <ph name="BEGIN_LINK" />gestiona el navegador<ph name="END_LINK" /></translation>
 <translation id="3416468988018290825">Mostrar siempre URL completas</translation>
 <translation id="3417835166382867856">Buscar pestañas</translation>
 <translation id="3417836307470882032">Formato 24 horas</translation>
@@ -3170,6 +3173,7 @@
 <translation id="4651484272688821107">No se ha podido cargar el componente online con los recursos del modo de demostración.</translation>
 <translation id="4652935475563630866">El cambio en el ajuste de la cámara requiere que se reinicie Parallels Desktop. Reinicia Parallels Desktop para continuar.</translation>
 <translation id="4653405415038586100">No se ha podido configurar Linux</translation>
+<translation id="4657914796247705218">Velocidad del TrackPoint</translation>
 <translation id="465878909996028221">Las redirecciones de navegador solo son compatibles con los protocolos HTTP, HTTPS y de archivo.</translation>
 <translation id="4659077111144409915">Cuenta principal</translation>
 <translation id="4659126640776004816">Esta función se activará cuando inicies sesión en tu cuenta de Google.</translation>
@@ -3830,6 +3834,7 @@
 <translation id="5470735824776589490">Es necesario reiniciar el dispositivo antes de poder restablecerlo con Powerwash. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="5471768120198416576">¡Hola! Soy tu voz de la síntesis de voz.</translation>
 <translation id="5472627187093107397">Guardar contraseñas de este sitio web</translation>
+<translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{El PIN debe tener al menos un carácter}other{El PIN debe tener al menos # caracteres}}</translation>
 <translation id="5473333559083690127">Volver a introducir el nuevo PIN</translation>
 <translation id="5481273127572794904">No puede descargar varios archivos automáticamente</translation>
 <translation id="5481941284378890518">Añadir impresoras cercanas</translation>
@@ -4368,6 +4373,7 @@
 <translation id="6087960857463881712">Cara de emoción</translation>
 <translation id="6091761513005122595">El recurso compartido se ha activado correctamente.</translation>
 <translation id="6093888419484831006">Cancelando la actualización...</translation>
+<translation id="6095541101974653012">Se ha cerrado tu sesión.</translation>
 <translation id="6095984072944024315">−</translation>
 <translation id="6096047740730590436">Abrir de forma maximizada</translation>
 <translation id="6096326118418049043">Nombre X.500</translation>
@@ -4701,6 +4707,7 @@
 <translation id="6474884162850599008">Desconectar cuenta de Google Drive</translation>
 <translation id="6475697075626596525"><ph name="APP_NAME" /> quiere compartir el contenido de tu pantalla. Elige lo que quieres compartir.</translation>
 <translation id="6478248366783946499">¿Quieres conservar el archivo peligroso?</translation>
+<translation id="6480327114083866287">Gestionado por <ph name="MANAGER" /></translation>
 <translation id="6483485061007832714">Abrir descarga</translation>
 <translation id="6483805311199035658">Abriendo <ph name="FILE" />...</translation>
 <translation id="6488384360522318064">Seleccionar idioma</translation>
@@ -4889,6 +4896,7 @@
 <translation id="671928215901716392">Bloquear pantalla</translation>
 <translation id="6721678857435001674">Ver la marca y el modelo de tu llave de seguridad</translation>
 <translation id="6721972322305477112">&amp;Archivo</translation>
+<translation id="672208878794563299">Este sitio volverá a preguntar la próxima vez.</translation>
 <translation id="672213144943476270">Desbloquea tu perfil antes de navegar como invitado.</translation>
 <translation id="6723661294526996303">Importar marcadores y configuración...</translation>
 <translation id="6723839937902243910">Batería</translation>
@@ -6286,6 +6294,7 @@
 <translation id="8317671367883557781">Añadir conexión de red</translation>
 <translation id="8319414634934645341">Uso mejorado de clave</translation>
 <translation id="8320459152843401447">Toda la pantalla</translation>
+<translation id="8321837372750396788"><ph name="MANAGER" /> gestionará este <ph name="DEVICE_TYPE" />.</translation>
 <translation id="8322814362483282060">Esta página no tiene permiso para acceder al micrófono</translation>
 <translation id="8323167517179506834">Escribe una URL</translation>
 <translation id="8324784016256120271">Los sitios web pueden usar cookies para ver tu actividad de navegación en otros sitios web, por ejemplo, para personalizar anuncios</translation>
@@ -6593,6 +6602,7 @@
 <translation id="8698269656364382265">Para volver a la pantalla anterior, desliza el dedo horizontalmente desde la izquierda.</translation>
 <translation id="869884720829132584">Menú de aplicaciones</translation>
 <translation id="869891660844655955">Fecha de caducidad</translation>
+<translation id="8702825062053163569">Se ha bloqueado tu <ph name="DEVICE_TYPE" />.</translation>
 <translation id="8703346390800944767">Saltar anuncio</translation>
 <translation id="8705331520020532516">Número de serie</translation>
 <translation id="8705580154597116082">Wi-Fi disponible a través del teléfono</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index 4e790ed..a9c492b 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Google'i nutikus Chrome'is</translation>
 <translation id="1147322039136785890">Nüüd on kasutaja <ph name="SUPERVISED_USER_NAME" /> kord</translation>
 <translation id="1147991416141538220">Juurdepääsu palumiseks võtke ühendust selle seadme administraatoriga.</translation>
+<translation id="1148063863818152153">Teie seadme EID</translation>
 <translation id="1149401351239820326">Aegumiskuu</translation>
 <translation id="1149725087019908252">Faili <ph name="FILE_NAME" /> skannimine</translation>
 <translation id="1150490752229770117">See on seadme <ph name="DEVICE_TYPE" /> viimane automaatne tarkvara- ja turbevärskendus. Tulevaste värskenduste hankimiseks võtke kasutusele uuem mudel. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation>
@@ -314,6 +315,7 @@
 <translation id="1343865611738742294">Andke Linuxi rakendustele luba USB-seadmetele juurde pääseda. Linux ei mäleta USB-seadet pärast selle eemaldamist.</translation>
 <translation id="1346630054604077329">Kinnita ja taaskäivita</translation>
 <translation id="1347256498747320987">Installige rakendusi ja värskendusi. Jätkamisel nõustute, et see seade võib Google'i, teie operaatori ja seadme tootja värskendusi ning rakendusi automaatselt alla laadida ja installida, kasutades selleks võib-olla teie mobiilset andmesidet. Mõned rakendused võivad pakkuda rakendusesiseseid oste. <ph name="BEGIN_LINK1" />Lisateave<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linuxi salvestusruum</translation>
 <translation id="1347975661240122359">Värskendamine algab, kui akutase jõuab <ph name="BATTERY_LEVEL" />%-ni.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD-d ei leita. Veenduge, et teie Chromebook oleks võrguga ühendatud, ja proovige uuesti.</translation>
@@ -555,6 +557,7 @@
 <translation id="1608668830839595724">Rohkem toiminguid valitud üksuste jaoks</translation>
 <translation id="161042844686301425">Tsüaan</translation>
 <translation id="1611432201750675208">Teie seade on lukustatud</translation>
+<translation id="1612019740169791082">Teie konteiner ei ole konfigureeritud toetama ketta suuruse muutmist. Linuxi jaoks eraldatud kettaruumi kohandamiseks varundage sisu ja taastage see uues konteineris.</translation>
 <translation id="1614511179807650956">Võimalik, et olete oma mobiilse andmeside mahu ära kasutanud. Andmesidemahtu saab juurde osta aktiveerimisportaalis <ph name="NAME" />.</translation>
 <translation id="161460670679785907">Teie telefoni ei saa tuvastada</translation>
 <translation id="1616206807336925449">Selle laienduse jaoks pole erilube vaja.</translation>
@@ -689,6 +692,7 @@
 <translation id="175772926354468439">Luba teema</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Kuva Chrome'i veebipoes</translation>
+<translation id="1761845175367251960">Kasutaja <ph name="NAME" /> kontod</translation>
 <translation id="176193854664720708">Sõrmejäljeandur on toitenupp. Puudutage seda õrnalt mis tahes sõrmega.</translation>
 <translation id="1763046204212875858">Rakenduse otseteede loomine</translation>
 <translation id="1763808908432309942">Avaneb uuel vahekaardil</translation>
@@ -898,6 +902,7 @@
 <translation id="1999115740519098545">Käivitamisel</translation>
 <translation id="2000419248597011803">Saadab teie vaikeotsingumootorile mõned küpsisefailid ja otsingud teie aadressiribalt ning otsingukastist</translation>
 <translation id="2002109485265116295">Reaalajas</translation>
+<translation id="200217416291116199">Failide varundamine on soovitatav, et vältida nende kaotsiminekut juhul, kui üleminekut ei saa lõpule viia. Uuele versioonile üleminekul lülitatakse Linux välja. Enne jätkamist salvestage avatud failid.</translation>
 <translation id="2003130567827682533">Võrgu „<ph name="NAME" />” andmeside aktiveerimiseks looge esmalt ühendus WiFi-võrguga</translation>
 <translation id="2005199804247617997">Muud profiilid</translation>
 <translation id="2006638907958895361">Ava link rakenduses <ph name="APP" /></translation>
@@ -1609,6 +1614,7 @@
 <translation id="2807517655263062534">Siin kuvatakse teie allalaaditud failid</translation>
 <translation id="2809586584051668049">ja veel <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
 <translation id="2810390687497823527">Kui laiendus on teile võõras või brauser ei tööta ootuspäraselt, saate siin laiendusi kohandada või need välja lülitada.</translation>
+<translation id="2811205483104563968">Kontod</translation>
 <translation id="2812049959647166806">Thunderbolti ei toetata</translation>
 <translation id="2812989263793994277">Ära kuva ühtki pilti</translation>
 <translation id="2813094189969465044">Vanemlik järelevalve</translation>
@@ -1647,6 +1653,7 @@
 <translation id="2858138569776157458">Popid saidid</translation>
 <translation id="2861301611394761800">Süsteemi värskendus on lõpule viidud. Taaskäivitage süsteem.</translation>
 <translation id="2861941300086904918">Native Clienti turvalisuse haldur</translation>
+<translation id="2862815659905780618">Linuxi arenduskeskkonna eemaldamine</translation>
 <translation id="2864601841139725659">Profiilipildi määramine</translation>
 <translation id="2865919525181940183">Ekraanipilt programmidest, mis on praegu ekraanil kuvatud</translation>
 <translation id="286674810810214575">Toiteallikate kontrollimine …</translation>
@@ -1760,6 +1767,7 @@
 <translation id="2989123969927553766">Hiirega kerimise kiirendus</translation>
 <translation id="2989474696604907455">pole ühendatud</translation>
 <translation id="2989786307324390836">DER-i kodeeritud kahendsüsteem, üks sertifikaat</translation>
+<translation id="2990313168615879645">Lisa Google'i konto</translation>
 <translation id="2992931425024192067">Kuva kogu märguande sisu</translation>
 <translation id="2993517869960930405">Rakenduse teave</translation>
 <translation id="2996286169319737844">Andmed on krüpteeritud teie sünkroonimisparooliga. See ei hõlma Google Pay makseviise ja aadresse.</translation>
@@ -2371,6 +2379,7 @@
 <translation id="3706463572498736864">Lehekülgi lehe kohta</translation>
 <translation id="370649949373421643">Luba WiFi</translation>
 <translation id="370665806235115550">Laadimine...</translation>
+<translation id="3707163604290651814">Olete praegu sisse logitud kasutajana <ph name="NAME" /></translation>
 <translation id="3709244229496787112">Brauseri suleti enne allalaadimise lõppu.</translation>
 <translation id="3711931198657368127">Kleebi ja ava <ph name="URL" /></translation>
 <translation id="3711945201266135623">Prindiserverist leiti <ph name="NUM_PRINTERS" /> printerit</translation>
@@ -2877,6 +2886,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />kB (<ph name="NUM_KILOBYTES_LIVE" />kB reaalajas)</translation>
 <translation id="4310139701823742692">Failivorming on vale. Kontrollige PPD-faili ja proovige uuesti.</translation>
 <translation id="431076611119798497">&amp;Üksikasjad</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{1 Google'i konto}other{<ph name="EXTRA_ACCOUNTS" /> Google'i kontot}}</translation>
 <translation id="4312866146174492540">Blokeeri (vaikimisi)</translation>
 <translation id="4314815835985389558">Sünkroonimise haldamine</translation>
 <translation id="4316850752623536204">Arendaja veebisait</translation>
@@ -3256,6 +3266,7 @@
 <translation id="4764368918650455114">Veenduge, et mõlemad seadmed oleksid avatud, lähestikku ja Bluetooth oleks sisse lülitatud. Kui jagate Chromebookiga, veenduge, et funktsioon Läheduses jagamine oleks aktiveeritud (avage olekuala, valides kellaaja, seejärel tehke valik Läheduses jagamine). <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Lubab rakendusel Android Messages tekstisõnumeid telefonist Chromebooki edastada</translation>
 <translation id="4768332406694066911">Teil on nende organisatsioonide sertifikaadid, mis teid tuvastavad</translation>
+<translation id="4773112038801431077">Üleminek Linuxi uuemale versioonile</translation>
 <translation id="477647109558161443">Loo töölaua otsetee</translation>
 <translation id="4776917500594043016">Kasutaja <ph name="USER_EMAIL_ADDRESS" /> parool</translation>
 <translation id="4777825441726637019">Play pood</translation>
@@ -3749,6 +3760,7 @@
 <translation id="5368720394188453070">Teie telefon on lukus. Avage see sisenemiseks.</translation>
 <translation id="5368779022775404937">Logige sisse saidile <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Luba hiire kiirendi</translation>
+<translation id="5369694795837229225">Linuxi arenduskeskkonna seadistamine</translation>
 <translation id="5370819323174483825">&amp;Laadi uuesti</translation>
 <translation id="5372529912055771682">Operatsioonisüsteemi see versioon ei toeta valitud registreerimisviisi. Veenduge, et käitate uusimat versiooni, ja proovige uuesti.</translation>
 <translation id="5372579129492968947">Vabasta laiendus</translation>
@@ -4473,6 +4485,8 @@
 <translation id="6212168817037875041">Lülita ekraan välja</translation>
 <translation id="6212752530110374741">Saada link meiliga</translation>
 <translation id="6213230117190778270">Võta vastu</translation>
+<translation id="6215620815501168899">Sulge EID ja QR-koodi hüpikaken</translation>
+<translation id="6216601812881225442">Teie konteiner ei toeta suuruse muutmist. Linuxi jaoks varem eraldatud kettaruumi kohandamiseks varundage sisu ja taastage see uues konteineris.</translation>
 <translation id="6216696360484424239">Automaatne sisselogimine</translation>
 <translation id="6218058416316985984">Seadmel <ph name="DEVICE_TYPE" /> puudub võrguühendus. Looge ühendus Internetiga ja proovige uuesti.</translation>
 <translation id="6220413761270491930">Viga laienduse laadimisel</translation>
@@ -4865,6 +4879,7 @@
 <translation id="6680442031740878064">Saadaval: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Kiirus</translation>
 <translation id="6681668084120808868">Tee foto</translation>
+<translation id="6683948477137300040">Kuva seadme EID või QR-koodiga hüpikaken</translation>
 <translation id="6684827949542560880">Uusima värskenduse allalaadimine</translation>
 <translation id="668599234725812620">Ava Google Play</translation>
 <translation id="6686490380836145850">Sule vahelehed paremalt</translation>
@@ -5100,6 +5115,7 @@
 <translation id="6955535239952325894">See seade on hallatud brauserites keelatud</translation>
 <translation id="6957044667612803194">See turvavõti ei toeta PIN-koode</translation>
 <translation id="6957231940976260713">Teenuse nimi</translation>
+<translation id="6960507406838246615">Linuxit on vaja värskendada</translation>
 <translation id="696103774840402661">Kõigi seadmes <ph name="DEVICE_TYPE" /> olevate kasutajate kõik failid ja kohalikud andmed on jäädavalt kustutatud.</translation>
 <translation id="6964390816189577014">Kangelane</translation>
 <translation id="6964760285928603117">Grupist eemaldamine</translation>
@@ -5119,6 +5135,7 @@
 <translation id="697312151395002334">Lubatud saata hüpikaknaid ja kasutada ümbersuunamisi</translation>
 <translation id="6973611239564315524">Uuendamine versioonile Debian 10 (Buster) on saadaval</translation>
 <translation id="6974609594866392343">Võrguühenduseta demorežiim</translation>
+<translation id="697508444536771064">Lülita Linux välja</translation>
 <translation id="6977381486153291903">Püsivara redaktsioon</translation>
 <translation id="6977877318519394148">Installi Rosetta</translation>
 <translation id="6978121630131642226">Otsingumootorid</translation>
@@ -5519,6 +5536,7 @@
 <translation id="7443806024147773267">Pääsete oma paroolidele juurde alati, kui olete oma Google'i kontole sisse logitud</translation>
 <translation id="7444983668544353857">Keela <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Rakenduste automaatne installimine</translation>
+<translation id="7448538354405258275">Klienditeeninduse esindaja saab EID-numbrit kasutada, et aidata teil teenus aktiveerida.</translation>
 <translation id="7449752890690775568">Kas eemaldada parool?</translation>
 <translation id="7450761244949417357">Brauser <ph name="ALTERNATIVE_BROWSER_NAME" /> avatakse kohe</translation>
 <translation id="7453008956351770337">Kui valite selle printeri, annate järgmisele laiendile loa printerile juurde pääseda.</translation>
@@ -6048,6 +6066,7 @@
 <translation id="8032244173881942855">Vahelehte ei õnnestu üle kanda.</translation>
 <translation id="8033827949643255796">valitud</translation>
 <translation id="8033958968890501070">Ajalõpp</translation>
+<translation id="8036049989879571495">Linuxi arenduskeskkonna (beetaversiooni) seadistamine</translation>
 <translation id="8037117027592400564">Kogu kõnesünteesil põhineva teksti lugemine</translation>
 <translation id="8037357227543935929">Küsi (vaikimisi)</translation>
 <translation id="803771048473350947">Fail</translation>
@@ -6974,6 +6993,7 @@
 <translation id="909108997331068008">Kasutaja <ph name="EXISTING_USER" /> profiiliga ollakse kontole <ph name="NEW_USER" /> juba sisse logitud</translation>
 <translation id="9094033019050270033">Värskenda parooli</translation>
 <translation id="9094038138851891550">Sobimatu kasutajanimi</translation>
+<translation id="9094859731829297286">Kas soovite kindlasti Linuxi jaoks kettal reserveerida fikseeritud mahu?</translation>
 <translation id="9094982973264386462">Eemalda</translation>
 <translation id="9095253524804455615">Eemalda</translation>
 <translation id="909554839118732438">Sule inkognito aknad</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb
index eb7d373..13ac798c 100644
--- a/chrome/app/resources/generated_resources_eu.xtb
+++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Lortu Google eginbide aurreratuak Chrome-n</translation>
 <translation id="1147322039136785890"><ph name="SUPERVISED_USER_NAME" /> erabiltzailearen txanda da orain</translation>
 <translation id="1147991416141538220">Atzitzeko baimena eskatzeko, jarri gailuaren administratzailearekin harremanetan.</translation>
+<translation id="1148063863818152153">Gailuaren EID zenbakia</translation>
 <translation id="1149401351239820326">Iraungitze-hilabetea</translation>
 <translation id="1149725087019908252"><ph name="FILE_NAME" /> aztertzen</translation>
 <translation id="1150490752229770117"><ph name="DEVICE_TYPE" /> gailurako azken software- eta segurtasun-eguneratze automatikoa da hau. Eguneratze gehiago jasotzeko, lortu modelo berriago bat. <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation>
@@ -314,6 +315,7 @@
 <translation id="1343865611738742294">Eman USB bidezko gailua atzitzeko baimena Linux-eko aplikazioei. USB bidezko gailu bat kendu ondoren, Linux-ek ez du gogoratuko.</translation>
 <translation id="1346630054604077329">Berretsi eta berrezarri</translation>
 <translation id="1347256498747320987">Instalatu eguneratzeak eta aplikazioak. Aurrera eginez gero, onartu egingo duzu agian gailuak automatikoki deskargatu eta instalatuko dituela Google-ren, operadorearen edo fabrikatzailearen eguneratzeak eta aplikazioak ere, beharbada datu-konexioa erabilita. Baliteke aplikazio horietako batzuetan erosketak egin ahal izatea. <ph name="BEGIN_LINK1" />Lortu informazio gehiago<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linux-en biltegiratzea</translation>
 <translation id="1347975661240122359">Bateriaren gutxienez % <ph name="BATTERY_LEVEL" /> duzunean hasiko da eguneratzen.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Ezin da aurkitu PPD fitxategia. Ziurtatu Chromebook-a Internetera konektatuta dagoela eta saiatu berriro.</translation>
@@ -555,6 +557,7 @@
 <translation id="1608668830839595724">Ekintza gehiago hautatutako elementuetarako</translation>
 <translation id="161042844686301425">Ziana</translation>
 <translation id="1611432201750675208">Gailua blokeatuta dago</translation>
+<translation id="1612019740169791082">Edukiontzia ez dago konfiguratuta diskoaren tamaina aldatzeko. Linux-ek erreserbatuta daukan biltegiratzeko tokia doitzeko, egin babeskopia bat eta, ondoren, lehenera ezazu beste edukiontzi batean.</translation>
 <translation id="1614511179807650956">Agian mugikorreko datuen kuota osoa erabili duzu. Datu gehiago erosteko, joan <ph name="NAME" /> aktibazio-atarira.</translation>
 <translation id="161460670679785907">Ezin da hauteman telefonoa</translation>
 <translation id="1616206807336925449">Luzapen honek ez du baimen berezirik behar.</translation>
@@ -689,6 +692,7 @@
 <translation id="175772926354468439">Gaitu gaia</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Ikusi Chrome Web Store dendan</translation>
+<translation id="1761845175367251960"><ph name="NAME" /> erabiltzailearen kontuak</translation>
 <translation id="176193854664720708">Etengailuan dago hatz-marken sentsorea. Ezarri edozein hatz leuntasunez.</translation>
 <translation id="1763046204212875858">Sortu aplikazioetarako lasterbideak</translation>
 <translation id="1763808908432309942">Beste fitxa batean irekiko da</translation>
@@ -898,6 +902,7 @@
 <translation id="1999115740519098545">Abioan</translation>
 <translation id="2000419248597011803">Helbide-barrako zein bilaketa-koadroko bilaketak eta cookie batzuk bidaltzen ditu bilatzaile lehenetsira</translation>
 <translation id="2002109485265116295">Denbora errealean</translation>
+<translation id="200217416291116199">Gomendagarria da fitxategien babeskopiak egitea. Horrela, ez da daturik galduko bertsio-berritzea osatu ezin bada. Bertsio-berritzea hasten denean, itxi egingo da Linux. Gorde irekitako fitxategiak aurrera egin aurretik.</translation>
 <translation id="2003130567827682533">"<ph name="NAME" />" datuak aktibatzeko, konektatu wifi-sare batera</translation>
 <translation id="2005199804247617997">Beste profil batzuk</translation>
 <translation id="2006638907958895361">Ireki esteka <ph name="APP" /> aplikazioan</translation>
@@ -1609,6 +1614,7 @@
 <translation id="2807517655263062534">Deskargatutako fitxategiak agertuko dira hemen</translation>
 <translation id="2809586584051668049">eta beste <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
 <translation id="2810390687497823527">Luzapenen bat ezagutzen ez baduzu edo arakatzaileak ez badu funtzionatzen behar bezala, desaktibatu edo pertsonalizatu luzapenak hemen.</translation>
+<translation id="2811205483104563968">Kontuak</translation>
 <translation id="2812049959647166806">Thunderbolt konektorea ez da bateragarria</translation>
 <translation id="2812989263793994277">Ez erakutsi irudirik</translation>
 <translation id="2813094189969465044">Gurasoen murriztapenak</translation>
@@ -1647,6 +1653,7 @@
 <translation id="2858138569776157458">Webgune nagusiak</translation>
 <translation id="2861301611394761800">Sistema eguneratu da. Berrabiarazi sistema.</translation>
 <translation id="2861941300086904918">Bezero natiboaren segurtasun-kudeatzailea</translation>
+<translation id="2862815659905780618">Kendu Linux-eko garapen-ingurunea</translation>
 <translation id="2864601841139725659">Ezarri profileko argazkia</translation>
 <translation id="2865919525181940183">Pantailan dauden programen pantaila-argazkia</translation>
 <translation id="286674810810214575">Energia-iturriak egiaztatzen…</translation>
@@ -1760,6 +1767,7 @@
 <translation id="2989123969927553766">Saguarekin gora eta behera bizkorrago egiteko aukera</translation>
 <translation id="2989474696604907455">konektatu gabe</translation>
 <translation id="2989786307324390836">DER kodetze bitarra, ziurtagiri bakarra</translation>
+<translation id="2990313168615879645">Gehitu Google-ko kontu bat</translation>
 <translation id="2992931425024192067">Erakutsi jakinarazpenen eduki guztia</translation>
 <translation id="2993517869960930405">Aplikazioari buruzko informazioa</translation>
 <translation id="2996286169319737844">Sinkronizazio-pasaesaldiarekin enkriptatu dira datuak. Ez dira hartzen barne Google Pay-ko ordainketa-metodoak eta helbideak.</translation>
@@ -2371,6 +2379,7 @@
 <translation id="3706463572498736864">Orri bakoitzeko orrialde kopurua</translation>
 <translation id="370649949373421643">Gaitu Wi-Fi konexioa</translation>
 <translation id="370665806235115550">Kargatzen…</translation>
+<translation id="3707163604290651814"><ph name="NAME" /> gisa hasi duzu saioa</translation>
 <translation id="3709244229496787112">Arakatzailea deskarga itxi baino lehen itxi da.</translation>
 <translation id="3711931198657368127">It&amp;satsi eta joan "<ph name="URL" />" helbidera</translation>
 <translation id="3711945201266135623"><ph name="NUM_PRINTERS" /> inprimagailu aurkitu dira inprimatze-zerbitzarian</translation>
@@ -2877,6 +2886,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (zuzeneko <ph name="NUM_KILOBYTES_LIVE" /> K)</translation>
 <translation id="4310139701823742692">Fitxategiaren formatua ez da zuzena. Egiaztatu PPD fitxategia eta saiatu berriro.</translation>
 <translation id="431076611119798497">&amp;Xehetasunak</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{Google-ko kontu bat}other{Google-ko <ph name="EXTRA_ACCOUNTS" /> kontu}}</translation>
 <translation id="4312866146174492540">Blokeatu (lehenetsia)</translation>
 <translation id="4314815835985389558">Kudeatu sinkronizazioa</translation>
 <translation id="4316850752623536204">Garatzaileen webgunea</translation>
@@ -3256,6 +3266,7 @@
 <translation id="4764368918650455114">Egiaztatu bi gailuak desblokeatuta eta elkarrengandik hurbil daudela, eta Bluetooth-a aktibatuta daukatela. Chromebook batekin edukia partekatzeko asmoa baduzu, egiaztatu Nearby Sharing aktibatuta daukala (hautatu ordua egoeraren eremua irekitzeko, eta, gero, hautatu Nearby Share). <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Testu-mezuak telefonotik Chromebook gailura bidaltzea baimentzen dio Android Mezuak aplikazioari</translation>
 <translation id="4768332406694066911">Identifikatzen zaituzten erakunde hauen ziurtagiriak dituzu</translation>
+<translation id="4773112038801431077">Bertsio-berritu Linux</translation>
 <translation id="477647109558161443">Sortu mahaigaineko lasterbidea</translation>
 <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" /> erabiltzaile-kontuaren pasahitza</translation>
 <translation id="4777825441726637019">Play Store</translation>
@@ -3749,6 +3760,7 @@
 <translation id="5368720394188453070">Telefonoa blokeatuta dago. Desblokea ezazu sartzeko.</translation>
 <translation id="5368779022775404937">Hasi saioa <ph name="REALM" /> domeinuan</translation>
 <translation id="5369491905435686894">Gaitu saguaren erabilera bizkortua</translation>
+<translation id="5369694795837229225">Konfiguratu Linux-eko garapen-ingurunea</translation>
 <translation id="5370819323174483825">&amp;Kargatu berriro</translation>
 <translation id="5372529912055771682">Sistema eragilearen bertsio honek ez du onartzen erregistratzeko adierazitako modua. Egiaztatu bertsiorik berriena erabiltzen ari zarela eta saiatu berriro.</translation>
 <translation id="5372579129492968947">Kendu aingura luzapenari</translation>
@@ -4472,6 +4484,8 @@
 <translation id="6212168817037875041">Itzali pantaila</translation>
 <translation id="6212752530110374741">Bidali esteka posta elektronikoz</translation>
 <translation id="6213230117190778270">Jaso</translation>
+<translation id="6215620815501168899">Itxi EID zenbakiaren eta QR kodearen leiho gainerakorra</translation>
+<translation id="6216601812881225442">Ezin da aldatu diskoaren tamaina. Linux-ek aldez aurretik esleituta duen biltegiratzeko tokia doitzeko, egin babeskopia bat eta, ondoren, lehenera ezazu beste edukiontzi batean.</translation>
 <translation id="6216696360484424239">Hasi saioa automatikoki</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ez dago konektatuta Internetera. Konekta ezazu eta saiatu berriro.</translation>
 <translation id="6220413761270491930">Errore bat gertatu da luzapena kargatzean</translation>
@@ -4864,6 +4878,7 @@
 <translation id="6680442031740878064">Libre: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Abiadura</translation>
 <translation id="6681668084120808868">Atera argazkia</translation>
+<translation id="6683948477137300040">Erakutsi gailuaren EID zenbakiaren eta QR kodearen leiho gainerakorra</translation>
 <translation id="6684827949542560880">Azken eguneratzea deskargatzen</translation>
 <translation id="668599234725812620">Ireki Google Play</translation>
 <translation id="6686490380836145850">Itxi eskuineko fitxak</translation>
@@ -5099,6 +5114,7 @@
 <translation id="6955535239952325894">Ezarpen hau desgaituta dago kudeatutako arakatzaileetan</translation>
 <translation id="6957044667612803194">Segurtasun-giltza honek ez ditu onartzen PIN kodeak</translation>
 <translation id="6957231940976260713">Zerbitzuaren izena</translation>
+<translation id="6960507406838246615">Linux eguneratu egin behar da</translation>
 <translation id="696103774840402661"><ph name="DEVICE_TYPE" /> gailuan gordeta zeuden erabiltzaile guztien fitxategi eta gailuko datu guztiak betiko ezabatu dira.</translation>
 <translation id="6964390816189577014">Heroia</translation>
 <translation id="6964760285928603117">Kendu taldetik</translation>
@@ -5118,6 +5134,7 @@
 <translation id="697312151395002334">Leiho gainerakorrak bidal ditzakete, eta birbideratzeak erabili</translation>
 <translation id="6973611239564315524">Debian 10 (Buster) berritzeko bertsio bat dago erabilgarri</translation>
 <translation id="6974609594866392343">Konexiorik gabeko demo modua</translation>
+<translation id="697508444536771064">Itxi Linux</translation>
 <translation id="6977381486153291903">Firmwarearen berrikuspena</translation>
 <translation id="6977877318519394148">Instalatu Rosetta</translation>
 <translation id="6978121630131642226">Bilatzaileak</translation>
@@ -5518,6 +5535,7 @@
 <translation id="7443806024147773267">Pasahitzak eskura izango dituzu Google-ko kontuan saioa hasita badaukazu</translation>
 <translation id="7444983668544353857">Desgaitu <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Instalatu aplikazioak automatikoki</translation>
+<translation id="7448538354405258275">Bezeroarentzako laguntza-zerbitzuko ordezkariak zerbitzua aktibatzen laguntzeko erabil dezake EID zenbakia.</translation>
 <translation id="7449752890690775568">Pasahitza kendu nahi duzu?</translation>
 <translation id="7450761244949417357"><ph name="ALTERNATIVE_BROWSER_NAME" /> arakatzailean irekiko da orain</translation>
 <translation id="7453008956351770337">Inprimagailu hau aukeratzean, inprimagailua erabiltzeko baimena ematen diozu luzapen honi:</translation>
@@ -6046,6 +6064,7 @@
 <translation id="8032244173881942855">Ezin da igorri fitxa.</translation>
 <translation id="8033827949643255796">hautatuta</translation>
 <translation id="8033958968890501070">Gainditu egin da denbora-muga</translation>
+<translation id="8036049989879571495">Konfiguratu Linux-eko garapen-ingurunea (beta)</translation>
 <translation id="8037117027592400564">Irakurri testu idatzi guztiak ahots sintetizatua erabilita</translation>
 <translation id="8037357227543935929">Galdetu (lehenetsia)</translation>
 <translation id="803771048473350947">Fitxategia</translation>
@@ -6972,6 +6991,7 @@
 <translation id="909108997331068008"><ph name="EXISTING_USER" /> erabiltzailearen profilak dagoeneko hasita dauka saioa <ph name="NEW_USER" /> kontuan</translation>
 <translation id="9094033019050270033">Aldatu pasahitza</translation>
 <translation id="9094038138851891550">Erabiltzaile-izenak ez du balio</translation>
+<translation id="9094859731829297286">Ziur tamaina finkoko disko bat erreserbatu nahi duzula Linux-erako?</translation>
 <translation id="9094982973264386462">Kendu</translation>
 <translation id="9095253524804455615">Kendu</translation>
 <translation id="909554839118732438">Itxi ezkutuko moduko leiho guztiak</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 6f78e1dd..e3f8226 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Googlen älykkäitä ratkaisuja Chromeen</translation>
 <translation id="1147322039136785890"><ph name="SUPERVISED_USER_NAME" /> voi nyt ottaa ohjat</translation>
 <translation id="1147991416141538220">Jos haluat pyytää käyttöoikeutta, ota yhteyttä laitteen järjestelmänvalvojaan.</translation>
+<translation id="1148063863818152153">Laitteen EID-numero</translation>
 <translation id="1149401351239820326">Viimeinen voimassaolokuukausi</translation>
 <translation id="1149725087019908252">Skannataan: <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">Tämä on viimeinen automaattinen ohjelmisto- ja tietoturvapäivitys, jonka <ph name="DEVICE_TYPE" /> saa. Vaihda uudempaan malliin, jos haluat jatkossa saada päivityksiä. <ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation>
@@ -314,6 +315,7 @@
 <translation id="1343865611738742294">Anna Linux-sovelluksille USB-laitteiden käyttöoikeus. Linux ei muista USB-laitetta, kun se on poistettu.</translation>
 <translation id="1346630054604077329">Vahvista ja käynnistä uudelleen</translation>
 <translation id="1347256498747320987">Asenna päivityksiä ja sovelluksia. Jatkamalla hyväksyt, että laite voi automaattisesti ladata ja asentaa Googlen, operaattorisi tai laitevalmistajan päivityksiä ja sovelluksia, mahdollisesti mobiilidatayhteyden välityksellä. Osa näistä sovelluksista voi tarjota sovelluksen sisäisiä ostoksia. <ph name="BEGIN_LINK1" />Lue lisää<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linux-tallennustila</translation>
 <translation id="1347975661240122359">Päivitys alkaa, kun akun lataustaso on <ph name="BATTERY_LEVEL" /> %.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD:tä ei löydy. Varmista, että Chromebook on verkossa, ja yritä uudelleen.</translation>
@@ -555,6 +557,7 @@
 <translation id="1608668830839595724">Lisää toimintoja valituille kohteille</translation>
 <translation id="161042844686301425">Turkoosi</translation>
 <translation id="1611432201750675208">Laitteesi on lukittu</translation>
+<translation id="1612019740169791082">Säilö ei tue levyn koon muuttamista. Jos haluat muuttaa Linuxille varatun tilan määrää, luo varmuuskopio ja palauta se sitten uuteen säilöön.</translation>
 <translation id="1614511179807650956">Olet saattanut käyttää mobiilidatasaldosi loppuun. Käy aktivointiportaalissa (<ph name="NAME" />) ostamassa lisää saldoa.</translation>
 <translation id="161460670679785907">Puhelinta ei havaittu</translation>
 <translation id="1616206807336925449">Tämä laajennus ei vaadi erityisiä käyttöoikeuksia.</translation>
@@ -689,6 +692,7 @@
 <translation id="175772926354468439">Ota teema käyttöön</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Näytä Chrome Web Storessa</translation>
+<translation id="1761845175367251960">Tilit: <ph name="NAME" /></translation>
 <translation id="176193854664720708">Sormenjälkitunnistin on virtapainikkeessa. Kosketa sitä kevyesti millä tahansa sormella.</translation>
 <translation id="1763046204212875858">Luo sovelluspikakuvakkeita</translation>
 <translation id="1763808908432309942">Avautuu uuteen välilehteen</translation>
@@ -898,6 +902,7 @@
 <translation id="1999115740519098545">Käynnistyksessä</translation>
 <translation id="2000419248597011803">Lähettää joitakin osoitekentän ja hakukentän kautta tehtyjä hakuja sekä joitakin evästeitä oletushakukoneellesi</translation>
 <translation id="2002109485265116295">Reaaliaikainen</translation>
+<translation id="200217416291116199">Tiedostojen varmuuskopiointia suositellaan siltä varalta, että päivitystä ei voida suorittaa loppuun. Päivityksen aloittaminen sulkee Linuxin. Tallenna avoinna olevat tiedostot ennen kuin jatkat.</translation>
 <translation id="2003130567827682533">Jos haluat aktivoida dataa (<ph name="NAME" />), muodosta yhteys Wi-Fi-verkkoon.</translation>
 <translation id="2005199804247617997">Muut profiilit</translation>
 <translation id="2006638907958895361">Avaa linkki: <ph name="APP" /></translation>
@@ -1609,6 +1614,7 @@
 <translation id="2807517655263062534">Lataamasi tiedostot näytetään tässä.</translation>
 <translation id="2809586584051668049">ja <ph name="NUMBER_ADDITIONAL_DISABLED" /> muuta</translation>
 <translation id="2810390687497823527">Jos et tunnista laajennusta tai selain ei toimi odotetusti, täällä voit muokata tai asettaa pois päältä laajennuksia.</translation>
+<translation id="2811205483104563968">Tilit</translation>
 <translation id="2812049959647166806">Thunderboltia ei tueta</translation>
 <translation id="2812989263793994277">Älä näytä kuvia</translation>
 <translation id="2813094189969465044">Lapsilukko</translation>
@@ -1647,6 +1653,7 @@
 <translation id="2858138569776157458">Suosituimmat</translation>
 <translation id="2861301611394761800">Järjestelmän päivitys valmis. Käynnistä järjestelmä uudelleen.</translation>
 <translation id="2861941300086904918">Asiakkaan tietosuojahallinnoija</translation>
+<translation id="2862815659905780618">Poista Linux-kehitysympäristö</translation>
 <translation id="2864601841139725659">Määritä profiilikuvasi</translation>
 <translation id="2865919525181940183">Kuvakaappaus ohjelmista, jotka ovat näytöllä tällä hetkellä</translation>
 <translation id="286674810810214575">Tarkistetaan virtalähteitä…</translation>
@@ -1760,6 +1767,7 @@
 <translation id="2989123969927553766">Hiiren vierityksen nopeuttaminen</translation>
 <translation id="2989474696604907455">ei yhdistetty</translation>
 <translation id="2989786307324390836">DER-koodattu binääri, yksittäinen varmenne</translation>
+<translation id="2990313168615879645">Lisää Google-tili</translation>
 <translation id="2992931425024192067">Näytä ilmoitusten koko sisältö</translation>
 <translation id="2993517869960930405">Sovelluksen tiedot</translation>
 <translation id="2996286169319737844">Data salataan Google-salasanallasi. Tämä ei koske Google Payhin tallennettuja maksutapoja tai osoitteita.</translation>
@@ -2371,6 +2379,7 @@
 <translation id="3706463572498736864">Sivuja arkilla</translation>
 <translation id="370649949373421643">Ota Wi-Fi käyttöön</translation>
 <translation id="370665806235115550">Ladataan...</translation>
+<translation id="3707163604290651814"><ph name="NAME" /> on kirjautuneena sisään</translation>
 <translation id="3709244229496787112">Selain suljettiin ennen latauksen päättymistä.</translation>
 <translation id="3711931198657368127">Liitä ja avaa <ph name="URL" /></translation>
 <translation id="3711945201266135623">Tulostinpalvelimelta löytyi <ph name="NUM_PRINTERS" /> tulostinta</translation>
@@ -2874,6 +2883,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kt (<ph name="NUM_KILOBYTES_LIVE" /> kt live)</translation>
 <translation id="4310139701823742692">Tiedostomuoto on virheellinen. Tarkasta PPD-tiedosto ja yritä uudelleen.</translation>
 <translation id="431076611119798497">&amp;Tiedot</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{1 Google-tili}other{<ph name="EXTRA_ACCOUNTS" /> Google-tiliä}}</translation>
 <translation id="4312866146174492540">Estä (oletus)</translation>
 <translation id="4314815835985389558">Synkronointiasetusten muokkaus</translation>
 <translation id="4316850752623536204">Kehittäjän verkkosivusto</translation>
@@ -3253,6 +3263,7 @@
 <translation id="4764368918650455114">Varmista, että kumpikaan laite ei ole lukittuna, että ne ovat lähekkäin ja että Bluetooth on päällä. Jos jaat Chromebookilla, varmista että Lähijakaminen on päällä (avaa tila-alue valitsemalla aika ja sitten Lähijakaminen). <ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Android Messages saa hakea viestejä puhelimesta Chromebookiin</translation>
 <translation id="4768332406694066911">Sinulla on varmenteita seuraavilta sinut tunnistavilta organisaatioilta</translation>
+<translation id="4773112038801431077">Päivitä Linux</translation>
 <translation id="477647109558161443">Luo työpöytäkuvake</translation>
 <translation id="4776917500594043016">Osoitteen <ph name="USER_EMAIL_ADDRESS" /> salasana</translation>
 <translation id="4777825441726637019">Play Kauppa</translation>
@@ -3746,6 +3757,7 @@
 <translation id="5368720394188453070">Puhelimesi on lukittu. Avaa lukitus käyttääksesi sitä.</translation>
 <translation id="5368779022775404937">Kirjaudu sisään kohteeseen <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Ota käyttöön hiiren nopeuttaminen</translation>
+<translation id="5369694795837229225">Ota käyttöön Linux-kehitysympäristö</translation>
 <translation id="5370819323174483825">&amp;Lataa uudelleen</translation>
 <translation id="5372529912055771682">Tämä käyttöjärjestelmän versio ei tue annettua käyttöönottotilaa. Varmista, että käytössä on uusin versio, ja yritä uudelleen.</translation>
 <translation id="5372579129492968947">Irrota laajennus</translation>
@@ -4472,6 +4484,8 @@
 <translation id="6212168817037875041">Sulje näyttö</translation>
 <translation id="6212752530110374741">Lähetä linkki sähköpostitse</translation>
 <translation id="6213230117190778270">Vastaanota</translation>
+<translation id="6215620815501168899">Sulje ponnahdusikkuna, jossa on laitteen EID ja QR-koodi</translation>
+<translation id="6216601812881225442">Säilö ei tue koon muuttamista. Jos haluat muuttaa sen tilan määrää, joka on varattu ennakkoon Linuxille, luo varmuuskopio ja palauta se sitten uuteen säilöön.</translation>
 <translation id="6216696360484424239">Kirjaudu sisään automaattisesti</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> on offline-tilassa. Muodosta internetyhteys ja yritä uudelleen.</translation>
 <translation id="6220413761270491930">Virhe ladattaessa laajennusta</translation>
@@ -4864,6 +4878,7 @@
 <translation id="6680442031740878064">Käytettävissä: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Nopeus</translation>
 <translation id="6681668084120808868">Ota kuva</translation>
+<translation id="6683948477137300040">Näytä ponnahdusikkuna, jossa on laitteen EID ja QR-koodi</translation>
 <translation id="6684827949542560880">Ladataan uusinta päivitystä</translation>
 <translation id="668599234725812620">Avaa Google Play</translation>
 <translation id="6686490380836145850">Sulje välilehdet oikealle</translation>
@@ -5099,6 +5114,7 @@
 <translation id="6955535239952325894">Tämä asetus on poistettu käytöstä ylläpidetyillä selaimilla</translation>
 <translation id="6957044667612803194">Tämä suojausavain ei tue PIN-koodia</translation>
 <translation id="6957231940976260713">Palvelun nimi</translation>
+<translation id="6960507406838246615">Linux-päivitys vaaditaan</translation>
 <translation id="696103774840402661"><ph name="DEVICE_TYPE" /> on tyhjennetty, joten kaikkien käyttäjien tiedostot ja paikallinen data on poistettu pysyvästi.</translation>
 <translation id="6964390816189577014">Sankari</translation>
 <translation id="6964760285928603117">Poista ryhmästä</translation>
@@ -5118,6 +5134,7 @@
 <translation id="697312151395002334">Ponnahdusikkunat tai uudelleenohjaukset sallittu</translation>
 <translation id="6973611239564315524">Päivitys Debian 10:een (Buster) saatavilla</translation>
 <translation id="6974609594866392343">Offline-esittelytila</translation>
+<translation id="697508444536771064">Sammuta Linux</translation>
 <translation id="6977381486153291903">Laiteohjelmiston versio</translation>
 <translation id="6977877318519394148">Asenna Rosetta</translation>
 <translation id="6978121630131642226">Hakukoneet</translation>
@@ -5518,6 +5535,7 @@
 <translation id="7443806024147773267">Käytä salasanojasi kaikkialla ollessasi kirjautuneena Google-tilille</translation>
 <translation id="7444983668544353857">Poista <ph name="NETWORKDEVICE" /> käytöstä </translation>
 <translation id="7448430327655618736">asentaa sovellukset automaattisesti</translation>
+<translation id="7448538354405258275">Asiakaspalvelija voi käyttää EID-numeroa auttaakseen palvelun aktivoinnissa.</translation>
 <translation id="7449752890690775568">Poistetaanko salasana?</translation>
 <translation id="7450761244949417357">Avataan nyt selaimessa <ph name="ALTERNATIVE_BROWSER_NAME" /></translation>
 <translation id="7453008956351770337">Valitsemalla tämän tulostimen annat seuraavalle laajennukselle tulostimesi käyttöoikeuden:</translation>
@@ -6046,6 +6064,7 @@
 <translation id="8032244173881942855">Välilehden suoratoisto ei onnistu</translation>
 <translation id="8033827949643255796">valittu</translation>
 <translation id="8033958968890501070">Aikakatkaisu</translation>
+<translation id="8036049989879571495">Ota käyttöön Linux-kehitysympäristö (beta)</translation>
 <translation id="8037117027592400564">Käyttää kaikkea puhesynteesin avulla luettua tekstiä</translation>
 <translation id="8037357227543935929">Kysy (oletus)</translation>
 <translation id="803771048473350947">Tiedosto</translation>
@@ -6972,6 +6991,7 @@
 <translation id="909108997331068008">Profiili (<ph name="EXISTING_USER" />) on jo kirjattu sisään: <ph name="NEW_USER" /></translation>
 <translation id="9094033019050270033">Päivitä salasana</translation>
 <translation id="9094038138851891550">Virheellinen käyttäjänimi</translation>
+<translation id="9094859731829297286">Haluatko varmasti varata kiinteän kokoisen levyn Linuxille?</translation>
 <translation id="9094982973264386462">Poista</translation>
 <translation id="9095253524804455615">Poista</translation>
 <translation id="909554839118732438">Sulje incognito-ikkunat</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index ef6eb9c..094c184 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -7056,7 +7056,7 @@
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" ઉમેરાયું</translation>
 <translation id="9215742531438648683">Google Play સ્ટોર અનઇન્સ્ટૉલ કરો</translation>
 <translation id="9218430445555521422">ડિફોલ્ટ તરીકે સેટ કરો</translation>
-<translation id="9219103736887031265">છબીઓ</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="9220525904950070496">એકાઉન્ટ દૂર કરો</translation>
 <translation id="9220820413868316583">આંગળી ઉપાડી લો પછી ફરી પ્રયાસ કરો.</translation>
 <translation id="923467487918828349">બધું બતાવો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 46f95ee..c1a5a745 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Chrome में Google स्मार्ट पाएं</translation>
 <translation id="1147322039136785890">अब <ph name="SUPERVISED_USER_NAME" /> इस डिवाइस का इस्तेमाल कर सकते हैं</translation>
 <translation id="1147991416141538220">ऐक्सेस मांगने के लिए, इस डिवाइस के एडमिन से संपर्क करें.</translation>
+<translation id="1148063863818152153">आपके डिवाइस का ईआईडी नंबर</translation>
 <translation id="1149401351239820326">समाप्ति माह</translation>
 <translation id="1149725087019908252"><ph name="FILE_NAME" /> स्कैन हो रही है</translation>
 <translation id="1150490752229770117">इस <ph name="DEVICE_TYPE" /> के लिए अपने-आप होने वाला यह आखिरी साॅफ़्टवेयर और सुरक्षा अपडेट था. आने वाले समय में अपडेट पाने के लिए, नए माॅडल पर अपग्रेड करें. <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
@@ -315,6 +316,7 @@
 <translation id="1343865611738742294">Linux के ऐप्लिकेशन को यूएसबी डिवाइस ऐक्सेस करने की अनुमति दें. यूएसबी डिवाइस को हटाने के बाद Linux उसे याद नहीं रखेगा.</translation>
 <translation id="1346630054604077329">पुष्टि करें और रीस्टार्ट करें</translation>
 <translation id="1347256498747320987">अपडेट और ऐप्लिकेशन इंस्टॉल करें. जारी रखकर, आप सहमति देते हैं कि यह डिवाइस Google, आपको मोबाइल और इंटरनेट सेवा देने वाली कंपनी और आपके डिवाइस के निर्माता से अपडेट और ऐप्लिकेशन अपने आप डाउनलोड और इंस्टॉल भी कर सकता है. इसके लिए मोबाइल डेटा का इस्तेमाल किया जा सकता है. इनमें से कुछ ऐप्लिकेशन इन-ऐप्लिकेशन खरीदारियों की सुविधा दे सकते हैं. <ph name="BEGIN_LINK1" />ज़्यादा जानें<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linux मेमोरी</translation>
 <translation id="1347975661240122359">बैटरी <ph name="BATTERY_LEVEL" />% बचते ही अपडेट शुरू हो जाएगा.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD नहीं मिला. पक्का करें कि आपका Chromebook ऑनलाइन है और दोबारा आज़माएं.</translation>
@@ -556,6 +558,7 @@
 <translation id="1608668830839595724">चुने गए आइटम के लिए और कार्रवाई</translation>
 <translation id="161042844686301425">स्यान</translation>
 <translation id="1611432201750675208">आपका डिवाइस लॉक कर दिया गया है</translation>
+<translation id="1612019740169791082">डिस्क का साइज़ बदलने के लिए आपके कंटेनर को कॉन्फ़िगर नहीं किया गया है. Linux के लिए पहले से तय की गई जगह में बदलाव करने के लिए, उसका बैक अप लें. इसके बाद, उसे नए कंटेनर में फिर से सेव करें.</translation>
 <translation id="1614511179807650956">आपने शायद तय सीमा तक मोबाइल डेटा का इस्तेमाल कर लिया है. और डेटा खरीदने के लिए <ph name="NAME" /> ऐक्टिवेशन पोर्टल पर जाएं</translation>
 <translation id="161460670679785907">आपका फ़ोन नहीं मिल पा रहा है</translation>
 <translation id="1616206807336925449">इस एक्‍सटेंशन को किसी विशेष अनुमति की आवश्‍यकता नहीं है.</translation>
@@ -690,6 +693,7 @@
 <translation id="175772926354468439">थीम चालू करें</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Chrome वेब स्टोर में देखें</translation>
+<translation id="1761845175367251960"><ph name="NAME" /> के खाते</translation>
 <translation id="176193854664720708">पावर बटन में फ़िंगरप्रिंट सेंसर मौजूद होता है. किसी भी उंगली से इसे हल्के से छुएं.</translation>
 <translation id="1763046204212875858">ऐप्स  शॉर्टकट बनाएं</translation>
 <translation id="1763808908432309942">नए टैब में खुलता है</translation>
@@ -899,6 +903,7 @@
 <translation id="1999115740519098545">शुरुआत करने पर</translation>
 <translation id="2000419248597011803">'पता बार' और 'खोज बॉक्स' की कुछ कुकी और खोजों को आपके डिफ़ॉल्ट खोज इंजन पर भेजा जाता है</translation>
 <translation id="2002109485265116295">रीयल-टाइम</translation>
+<translation id="200217416291116199">अपग्रेड पूरा न होने की स्थिति में फ़ाइलों का बैक अप लेने का सुझाव दिया जाता है. अपग्रेड चालू करने से, Linux पूरी तरह शट डाउन हो जाएगा. प्रोसेस शुरू करने से पहले, कृपया खुली हुई फ़ाइलें सेव कर लें.</translation>
 <translation id="2003130567827682533">'<ph name="NAME" />' डेटा चालू करने के लिए, सबसे पहले किसी वाई-फ़ाई नेटवर्क से जुड़ें</translation>
 <translation id="2005199804247617997">अन्य प्रोफ़ाइलें</translation>
 <translation id="2006638907958895361"><ph name="APP" /> में लिंक खोलें</translation>
@@ -1610,6 +1615,7 @@
 <translation id="2807517655263062534">आपकी डाउनलोड की गई फ़ाइलें यहां दिखाई देती हैं</translation>
 <translation id="2809586584051668049">और <ph name="NUMBER_ADDITIONAL_DISABLED" /> और</translation>
 <translation id="2810390687497823527">अगर आप किसी एक्सटेंशन को नहीं पहचानते हैं या आपका ब्राउज़र उम्मीद के मुताबिक काम नहीं कर रहा है, तो आप यहां एक्सटेंशन को बंद कर सकते हैं या उन्हें पसंद के मुताबिक बना सकते हैं.</translation>
+<translation id="2811205483104563968">खाते</translation>
 <translation id="2812049959647166806">Thunderbolt काम नहीं करता</translation>
 <translation id="2812989263793994277">कोई भी चित्र न दिखाएं</translation>
 <translation id="2813094189969465044">माता-पिता के नियंत्रण में</translation>
@@ -1648,6 +1654,7 @@
 <translation id="2858138569776157458">मुख्य साइटें</translation>
 <translation id="2861301611394761800">सिस्टम अपडेट पूरा हुआ. कृपया सिस्टम को रीस्टार्ट करें.</translation>
 <translation id="2861941300086904918">नेटिव क्लाइंट सुरक्षा प्रबंधक</translation>
+<translation id="2862815659905780618">Linux डेवलपमेंट एनवायरमेंट हटाएं</translation>
 <translation id="2864601841139725659">अपना प्रोफ़ाइल चित्र सेट करें</translation>
 <translation id="2865919525181940183">इस समय, स्क्रीन पर मौजूद प्रोग्राम का स्क्रीनशॉट</translation>
 <translation id="286674810810214575">पावर के स्रोतों की जांच की जा रही है...</translation>
@@ -1761,6 +1768,7 @@
 <translation id="2989123969927553766">माउस से स्क्रोल करने की रफ़्तार</translation>
 <translation id="2989474696604907455">अटैचमेंट नहीं</translation>
 <translation id="2989786307324390836">DER-एन्कोड की गई बाइनरी, एकल प्रमाणपत्र</translation>
+<translation id="2990313168615879645">Google खाता जोड़ें</translation>
 <translation id="2992931425024192067">सभी सूचना सामग्री दिखाएं</translation>
 <translation id="2993517869960930405">ऐप्‍लिकेशन की जानकारी</translation>
 <translation id="2996286169319737844">आपका डेटा आपके सिंक लंबे पासवर्ड से सुरक्षित किया गया था. इसमें Google Pay से भुगतान करने के तरीके और पते शामिल नहीं हैं.</translation>
@@ -2372,6 +2380,7 @@
 <translation id="3706463572498736864">हर शीट पर मौजूद पेज की संख्या</translation>
 <translation id="370649949373421643">वाई-फ़ाई  सक्षम करें</translation>
 <translation id="370665806235115550">लोड हो रही हैं...</translation>
+<translation id="3707163604290651814">इस समय <ph name="NAME" /> के रूप में साइन इन किया गया है</translation>
 <translation id="3709244229496787112">डाउनलोड पूरा होने से पहले ही ब्राउज़र बंद हो गया था.</translation>
 <translation id="3711931198657368127">चिपकाएं और <ph name="URL" /> पर जाएं</translation>
 <translation id="3711945201266135623">प्रिंट सर्वर पर <ph name="NUM_PRINTERS" /> प्रिंटर मिले</translation>
@@ -2877,6 +2886,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K लाइव)</translation>
 <translation id="4310139701823742692">फ़ाइल का फ़ॉर्मैट गलत है. PPD फ़ाइल देखें और फिर से कोशिश करें.</translation>
 <translation id="431076611119798497">&amp;विवरण</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{1 Google खाता}one{<ph name="EXTRA_ACCOUNTS" /> Google खाता}other{<ph name="EXTRA_ACCOUNTS" /> Google खाते}}</translation>
 <translation id="4312866146174492540">ब्लॉक करें (डिफ़ॉल्ट)</translation>
 <translation id="4314815835985389558">सिंक प्रबंधित करें</translation>
 <translation id="4316850752623536204">डेवलपर वेबसाइट</translation>
@@ -3256,6 +3266,7 @@
 <translation id="4764368918650455114">पक्का करें कि दोनों डिवाइस को अनलॉक किया गया हो और ये एक-दूसरे के पास रखे हों. साथ ही, ब्लूटूथ चालू हो. अगर आप किसी Chromebook के साथ फ़ाइलें शेयर कर रहे हैं, तो पक्का करें कि उसमें, आस-पास शेयर करने की सुविधा चालू हो (समय चुनकर, स्टेटस बताने वाली जगह खोलें और फिर आस-पास शेयर करने की सुविधा चुनें). <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Android मैसेज को अपने Chromebook से अपने फ़ोन पर लेख भेजने की मंज़ूरी दें</translation>
 <translation id="4768332406694066911">आपके पास इन संगठनों के प्रमाणपत्र हैं जो आपकी पहचान करते हैं</translation>
+<translation id="4773112038801431077">Linux को अपग्रेड करें</translation>
 <translation id="477647109558161443">एक डेस्कटॉप शॉर्टकट बनाएं</translation>
 <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" /> के लिए पासवर्ड</translation>
 <translation id="4777825441726637019">Play स्टोर</translation>
@@ -3749,6 +3760,7 @@
 <translation id="5368720394188453070">आपका फ़ोन लॉक हो गया है. प्रवेश करने के लिए उसे अनलॉक करें.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> में साइन इन करें</translation>
 <translation id="5369491905435686894">माउस की रफ़्तार बढ़ाने की सुविधा चालू करें</translation>
+<translation id="5369694795837229225">Linux डेवलपमेंट एनवायरमेंट सेट अप करें</translation>
 <translation id="5370819323174483825">&amp;पुन: लोड करें</translation>
 <translation id="5372529912055771682">आपूर्ति किया गया नामांकन मोड, ऑपरेटिंग सिस्‍टम के इस वर्शन द्वारा समर्थित नहीं है. कृपया पक्का करें कि आप नवीनतम वर्शन चला रहे हैं और फिर से प्रयास करें.</translation>
 <translation id="5372579129492968947">एक्सटेंशन अनपिन करें</translation>
@@ -4473,6 +4485,8 @@
 <translation id="6212168817037875041">डिसप्ले बंद करें</translation>
 <translation id="6212752530110374741">लिंक ईमेल करें</translation>
 <translation id="6213230117190778270">पाएं</translation>
+<translation id="6215620815501168899">ईआईडी और क्यूआर कोड पॉप-अप बंद करें</translation>
+<translation id="6216601812881225442">आपके कंटेनर में साइज़ बदलने की सुविधा नहीं है. Linux के लिए पहले से तय की गई जगह में बदलाव करने के लिए, उसका बैक अप लें. इसके बाद, उसे नए कंटेनर में फिर से सेव करें.</translation>
 <translation id="6216696360484424239">अपने आप साइन इन करें</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ऑफ़लाइन है. इंटरनेट से कनेक्ट करें और फिर से कोशिश करें.</translation>
 <translation id="6220413761270491930">एक्सटेंशन लोड करने में गड़बड़ी</translation>
@@ -4865,6 +4879,7 @@
 <translation id="6680442031740878064">उपलब्ध: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">दर</translation>
 <translation id="6681668084120808868">फ़ोटो लें</translation>
+<translation id="6683948477137300040">डिवाइस का ईआईडी और क्यूआर कोड पॉप-अप दिखाएं</translation>
 <translation id="6684827949542560880">नए अपडेट को डाउनलोड किया जा रहा है</translation>
 <translation id="668599234725812620">Google Play खोलें</translation>
 <translation id="6686490380836145850">दाईं ओर के टैब बंद करें</translation>
@@ -5100,6 +5115,7 @@
 <translation id="6955535239952325894">यह सेटिंग, प्रबंधित किए गए ब्राउज़र पर काम नहीं करती है</translation>
 <translation id="6957044667612803194">इस सुरक्षा कुंजी में पिन की सुविधा नहीं है</translation>
 <translation id="6957231940976260713">सेवा का नाम</translation>
+<translation id="6960507406838246615">Linux अपडेट करना ज़रूरी है</translation>
 <translation id="696103774840402661"><ph name="DEVICE_TYPE" /> से सभी उपयोगकर्ताओं की सभी फ़ाइलें और स्थानीय डेटा हमेशा के लिए मिटा दिया गया है.</translation>
 <translation id="6964390816189577014">हीरो</translation>
 <translation id="6964760285928603117">समूह से हटाएं</translation>
@@ -5119,6 +5135,7 @@
 <translation id="697312151395002334">पॉप-अप भेजने और दूसरे वेबलिंक पर भेजने वाले यूआरएल का इस्तेमाल करने की अनुमति है</translation>
 <translation id="6973611239564315524">Debian 10 (Buster) के लिए एक अपग्रेड उपलब्ध है</translation>
 <translation id="6974609594866392343">ऑफ़लाइन डेमो मोड</translation>
+<translation id="697508444536771064">Linux को शट डाउन करें</translation>
 <translation id="6977381486153291903">फ़र्मवेयर पुनरीक्षण</translation>
 <translation id="6977877318519394148">Rosetta इंस्टॉल करें</translation>
 <translation id="6978121630131642226">सर्च इंजन</translation>
@@ -5519,6 +5536,7 @@
 <translation id="7443806024147773267">अपने Google खाते में साइन इन करके जब चाहें अपने पासवर्ड को ऐक्सेस करें</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> बंद करें</translation>
 <translation id="7448430327655618736">ऐप्लिकेशन को अपने आप इंस्टॉल करें</translation>
+<translation id="7448538354405258275">ग्राहक सेवा प्रतिनिधि, सेवा को चालू करने में मदद के लिए, ईआईडी नंबर इस्तेमाल कर सकता है.</translation>
 <translation id="7449752890690775568">क्या आप पासवर्ड हटाना चाहते हैं?</translation>
 <translation id="7450761244949417357">अभी <ph name="ALTERNATIVE_BROWSER_NAME" /> में खुल रहा है</translation>
 <translation id="7453008956351770337">इस प्रिंटर को चुनकर, आप नीचे दिए गए एक्सटेंशन को अपने प्रिंटर के लिए एक्सेस करने की अनुमति दे रहे हैं:</translation>
@@ -6047,6 +6065,7 @@
 <translation id="8032244173881942855">टैब कास्ट करने में असमर्थ.</translation>
 <translation id="8033827949643255796">चयनित</translation>
 <translation id="8033958968890501070">समय खत्म</translation>
+<translation id="8036049989879571495">Linux डेवलपमेंट एनवायरमेंट (बीटा वर्शन) सेट अप करना</translation>
 <translation id="8037117027592400564">संश्लेषित बोली का उपयोग करके बोला गया सभी लेख पढ़ें</translation>
 <translation id="8037357227543935929">पूछें (डिफ़ॉल्ट)</translation>
 <translation id="803771048473350947">फ़ाइल</translation>
@@ -6974,6 +6993,7 @@
 <translation id="909108997331068008"><ph name="EXISTING_USER" /> की प्रोफ़ाइल से <ph name="NEW_USER" /> में पहले ही साइन इन किया जा चुका है</translation>
 <translation id="9094033019050270033">पासवर्ड अपडेट करें</translation>
 <translation id="9094038138851891550">उपयोगकर्ता का नाम अमान्य है</translation>
+<translation id="9094859731829297286">क्या आप वाकई Linux के लिए, एक तय साइज़ की डिस्क रिज़र्व करना चाहते हैं?</translation>
 <translation id="9094982973264386462">निकालें</translation>
 <translation id="9095253524804455615">निकालें</translation>
 <translation id="909554839118732438">गुप्त विंडो बंद करें</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 628832f..ecf5d00 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Googleove značajke za Chrome</translation>
 <translation id="1147322039136785890">Sada je na redu: <ph name="SUPERVISED_USER_NAME" /></translation>
 <translation id="1147991416141538220">Da biste zatražili pristup, obratite se administratoru ovog uređaja.</translation>
+<translation id="1148063863818152153">EID vašeg uređaja</translation>
 <translation id="1149401351239820326">Mjesec isteka</translation>
 <translation id="1149725087019908252">Pregled datoteke <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">To je posljednje automatsko ažuriranje softvera i sigurnosno ažuriranje za ovaj <ph name="DEVICE_TYPE" />. Za buduća ažuriranja potrebna je nadogradnja na noviji model. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
@@ -316,6 +317,7 @@
 <translation id="1343865611738742294">Dajte Linux aplikacijama dopuštenje za pristup USB uređajima. Linux neće zapamtiti USB uređaj nakon njegovog uklanjanja.</translation>
 <translation id="1346630054604077329">Potvrdi i ponovo pokreni</translation>
 <translation id="1347256498747320987">Instalirajte ažuriranja i aplikacije. Ako nastavite, pristajete na to da ovaj uređaj također može, između ostalog i mobilnim podatkovnim prijenosom, automatski preuzimati i instalirati ažuriranja i aplikacije koje šalje Google, vaš mobilni operater i proizvođač uređaja. Neke od tih aplikacija mogu nuditi kupnje putem aplikacije. <ph name="BEGIN_LINK1" />Saznajte više<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linux pohrana</translation>
 <translation id="1347975661240122359">Ažuriranje će započeti kada baterija dosegne <ph name="BATTERY_LEVEL" />%.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD nije pronađen. Provjerite je li Chromebook online i pokušajte ponovo.</translation>
@@ -557,6 +559,7 @@
 <translation id="1608668830839595724">Više radnji za odabrane stavke</translation>
 <translation id="161042844686301425">Cijan</translation>
 <translation id="1611432201750675208">Uređaj je zaključan</translation>
+<translation id="1612019740169791082">Vaš spremnik nije konfiguriran za podržavanje promjena veličine diska. Da biste prilagodili količinu prostora koji je rezerviran za Linux, izradite sigurnosnu kopiju i vratite je u novom spremniku.</translation>
 <translation id="1614511179807650956">Vjerojatno ste potrošili dopuštenu količinu mobilnih podataka. Posjetite aktivacijski portal <ph name="NAME" /> kako biste platili dodatni prijenos podataka.</translation>
 <translation id="161460670679785907">Nije moguće otkriti vaš telefon</translation>
 <translation id="1616206807336925449">To proširenje ne zahtijeva nikakva posebna dopuštenja.</translation>
@@ -691,6 +694,7 @@
 <translation id="175772926354468439">Omogućiti temu</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Prikaz u Chrome web-trgovini</translation>
+<translation id="1761845175367251960">Računi korisnika <ph name="NAME" /></translation>
 <translation id="176193854664720708">Senzor otiska prsta nalazi se u tipki za uključivanje/isključivanje. Dodirnite ga lagano bilo kojim prstom.</translation>
 <translation id="1763046204212875858">Stvaranje prečaca aplikacije</translation>
 <translation id="1763808908432309942">Otvara se u novoj kartici</translation>
@@ -900,6 +904,7 @@
 <translation id="1999115740519098545">Prilikom pokretanja</translation>
 <translation id="2000419248597011803">Zadanoj tražilici šalje neke kolačiće i pretraživanja iz adresne trake i okvira za pretraživanje</translation>
 <translation id="2002109485265116295">U stvarnom vremenu</translation>
+<translation id="200217416291116199">Preporučuje se sigurnosno kopiranje datoteka u slučaju nemogućnosti dovršetka nadogradnje. Pokretanjem nadogradnje Linux će se isključiti. Prije nastavka spremite otvorene datoteke.</translation>
 <translation id="2003130567827682533">Da biste aktivirali podatke na usluzi "<ph name="NAME" />", povežite se s Wi-Fi mrežom</translation>
 <translation id="2005199804247617997">Ostali profili</translation>
 <translation id="2006638907958895361">Otvori vezu u aplikaciji <ph name="APP" /></translation>
@@ -1611,6 +1616,7 @@
 <translation id="2807517655263062534">Ovdje se prikazuju datoteke koje ste preuzeli</translation>
 <translation id="2809586584051668049">i još <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
 <translation id="2810390687497823527">Ako ne prepoznajete proširenje ili ako vaš preglednik ne radi kako treba, ovdje možete isključiti proširenja ili ih prilagoditi.</translation>
+<translation id="2811205483104563968">Računi</translation>
 <translation id="2812049959647166806">Thunderbolt nije podržan</translation>
 <translation id="2812989263793994277">Ne prikazuj nikakve slike</translation>
 <translation id="2813094189969465044">Roditeljski nadzor</translation>
@@ -1649,6 +1655,7 @@
 <translation id="2858138569776157458">Najpopularnije web-lokacije</translation>
 <translation id="2861301611394761800">Ažuriranje sustava dovršeno. Ponovno pokrenite sustav.</translation>
 <translation id="2861941300086904918">Sigurnosni upravitelj izvornog klijenta</translation>
+<translation id="2862815659905780618">Uklanjanje razvojnog okruženja za Linux</translation>
 <translation id="2864601841139725659">Postavite profilnu sliku</translation>
 <translation id="2865919525181940183">Snimka zaslona programa koji su trenutačno na zaslonu</translation>
 <translation id="286674810810214575">Provjera izvora napajanja...</translation>
@@ -1762,6 +1769,7 @@
 <translation id="2989123969927553766">Ubrzanje pomicanja mišem</translation>
 <translation id="2989474696604907455">nije povezano</translation>
 <translation id="2989786307324390836">DER-binarno kodirano, jedan certifikat</translation>
+<translation id="2990313168615879645">Dodavanje Google računa</translation>
 <translation id="2992931425024192067">Prikazuje se cijeli sadržaj obavijesti </translation>
 <translation id="2993517869960930405">Informacije o aplikaciji</translation>
 <translation id="2996286169319737844">Podaci su kriptirani vašom šifrom za sinkronzaciju. To ne uključuje načine plaćanja i adrese s Google Paya.</translation>
@@ -2373,6 +2381,7 @@
 <translation id="3706463572498736864">Stranica po listu</translation>
 <translation id="370649949373421643">Omogući Wi-Fi</translation>
 <translation id="370665806235115550">Učitavanje...</translation>
+<translation id="3707163604290651814">Trenutačno ste prijavljeni kao <ph name="NAME" /></translation>
 <translation id="3709244229496787112">Preglednik se isključio prije nego što je preuzimanje dovršeno.</translation>
 <translation id="3711931198657368127">Za&amp;lijepi i otvori <ph name="URL" /></translation>
 <translation id="3711945201266135623">Pronađenih pisača na poslužitelju za ispis: <ph name="NUM_PRINTERS" /></translation>
@@ -2879,6 +2888,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> K (<ph name="NUM_KILOBYTES_LIVE" /> K izravno)</translation>
 <translation id="4310139701823742692">Datoteka ima pogrešan format. Pregledajte PPD datoteku i pokušajte ponovo.</translation>
 <translation id="431076611119798497">&amp;Detalji</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{Jedan Google račun}one{<ph name="EXTRA_ACCOUNTS" /> Google račun}few{<ph name="EXTRA_ACCOUNTS" /> Google računa}other{<ph name="EXTRA_ACCOUNTS" /> Google računa}}</translation>
 <translation id="4312866146174492540">Blokiraj (zadano)</translation>
 <translation id="4314815835985389558">Upravljanje sinkronizacijom</translation>
 <translation id="4316850752623536204">Web-lokacija razvojnog programera</translation>
@@ -3258,6 +3268,7 @@
 <translation id="4764368918650455114">Provjerite jesu li oba uređaja otključana, blizu jedan drugome te imaju li uključen Bluetooth. Ako dijelite s Chromebookom, provjerite je li Dijeljenje s Android uređajima uključeno (otvorite područje statusa tako što ćete odabrati vrijeme, a zatim odaberite Dijeljenje s Android uređajima). <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Omogućuje Android porukama prijenos tekstnih poruka s vašeg telefona na Chromebook</translation>
 <translation id="4768332406694066911">Imate certifikate ovih organizacija koji vas identificiraju</translation>
+<translation id="4773112038801431077">Nadogradnja Linuxa</translation>
 <translation id="477647109558161443">Izradi novi prečac na radnoj površini</translation>
 <translation id="4776917500594043016">Zaporka za adresu <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4777825441726637019">Trgovina Play</translation>
@@ -3751,6 +3762,7 @@
 <translation id="5368720394188453070">Vaš je telefon zaključan. Otključajte ga da biste mu pristupili.</translation>
 <translation id="5368779022775404937">Prijavite se na <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Omogući ubrzanje miša</translation>
+<translation id="5369694795837229225">Postavljanje razvojnog okruženja za Linux</translation>
 <translation id="5370819323174483825">&amp;Ponovo učitaj</translation>
 <translation id="5372529912055771682">Ova verzija operativnog sustava ne podržava uneseni način prijave. Svakako pokrenite najnoviju verziju i pokušajte ponovo.</translation>
 <translation id="5372579129492968947">Otkvači proširenje</translation>
@@ -4475,6 +4487,8 @@
 <translation id="6212168817037875041">Isključi zaslon</translation>
 <translation id="6212752530110374741">Vezu pošalji e-poštom</translation>
 <translation id="6213230117190778270">Prihvati</translation>
+<translation id="6215620815501168899">Zatvori skočni prozor s EID-om ili QR kodom</translation>
+<translation id="6216601812881225442">Vaš spremnik ne podržava promjenu veličine. Da biste prilagodili količinu prostora koji je unaprijed dodijeljen Linuxu, izradite sigurnosnu kopiju i vratite je u novom spremniku.</translation>
 <translation id="6216696360484424239">Automatska prijava</translation>
 <translation id="6218058416316985984">Uređaj <ph name="DEVICE_TYPE" /> nije povezan s internetom. Povežite se s internetom i pokušajte ponovo.</translation>
 <translation id="6220413761270491930">Pogreška prilikom učitavanja proširenja</translation>
@@ -4867,6 +4881,7 @@
 <translation id="6680442031740878064">Dostupno: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Brzina</translation>
 <translation id="6681668084120808868">Snimite fotografiju</translation>
+<translation id="6683948477137300040">Skočni prozor za prikazivanje EID-a ili QR koda</translation>
 <translation id="6684827949542560880">Preuzimanje najnovijeg ažuriranja</translation>
 <translation id="668599234725812620">Otvori Google Play</translation>
 <translation id="6686490380836145850">Zatvori kartice s desne strane</translation>
@@ -5102,6 +5117,7 @@
 <translation id="6955535239952325894">Ta je postavka onemogućena na upravljanim preglednicima</translation>
 <translation id="6957044667612803194">Ovaj sigurnosni ključ ne podržava PIN-ove</translation>
 <translation id="6957231940976260713">Naziv usluge</translation>
+<translation id="6960507406838246615">Potrebno je ažurirati Linux</translation>
 <translation id="696103774840402661">Sve datoteke i svi lokalni podaci za sve korisnike na ovom uređaju <ph name="DEVICE_TYPE" /> trajno su izbrisani.</translation>
 <translation id="6964390816189577014">Junak</translation>
 <translation id="6964760285928603117">Ukloni iz grupe</translation>
@@ -5121,6 +5137,7 @@
 <translation id="697312151395002334">Dopušteno je slanje skočnih prozora i upotreba preusmjeravanja</translation>
 <translation id="6973611239564315524">Dostupna je nadogradnja na Debian 10 (Buster)</translation>
 <translation id="6974609594866392343">Izvanmrežni demo način</translation>
+<translation id="697508444536771064">Isključi Linux</translation>
 <translation id="6977381486153291903">Revizija opreme</translation>
 <translation id="6977877318519394148">Instaliraj Rosettu</translation>
 <translation id="6978121630131642226">Tražilice</translation>
@@ -5521,6 +5538,7 @@
 <translation id="7443806024147773267">Pristupite svojim zaporkama kad god ste prijavljeni u svoj Google račun</translation>
 <translation id="7444983668544353857">Onemogući <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Automatsko instaliranje aplikacija</translation>
+<translation id="7448538354405258275">Predstavnik korisničke službe može upotrijebiti EID broj kako bi vam pomogao da aktivirate uslugu.</translation>
 <translation id="7449752890690775568">Želite li ukloniti zaporku?</translation>
 <translation id="7450761244949417357">Otvara se u pregledniku <ph name="ALTERNATIVE_BROWSER_NAME" /> sad</translation>
 <translation id="7453008956351770337">Odabirom tog pisača sljedećem proširenju dajete dopuštenje za pristup svojem pisaču:</translation>
@@ -6050,6 +6068,7 @@
 <translation id="8032244173881942855">Emitiranje kartice nije moguće.</translation>
 <translation id="8033827949643255796">odabrano</translation>
 <translation id="8033958968890501070">Vrijeme je isteklo</translation>
+<translation id="8036049989879571495">Postavljanje razvojnog okruženja za Linux (Beta)</translation>
 <translation id="8037117027592400564">čitati sve tekstove izgovorene sintetiziranim govorom</translation>
 <translation id="8037357227543935929">Pitaj (zadano)</translation>
 <translation id="803771048473350947">Datoteka</translation>
@@ -6978,6 +6997,7 @@
 <translation id="909108997331068008">Profil korisnika <ph name="EXISTING_USER" /> već je prijavljen na <ph name="NEW_USER" /></translation>
 <translation id="9094033019050270033">Ažuriraj zaporku</translation>
 <translation id="9094038138851891550">Korisničko ime nije važeće</translation>
+<translation id="9094859731829297286">Jeste li sigurni da želite rezervirati disk fiksne veličine za Linux?</translation>
 <translation id="9094982973264386462">Ukloni</translation>
 <translation id="9095253524804455615">Ukloni</translation>
 <translation id="909554839118732438">Zatvori anonimne prozore</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb
index 93027f4..cbbf156 100644
--- a/chrome/app/resources/generated_resources_lo.xtb
+++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">ມີ Google ອັດສະລິຍະໃນ Chrome</translation>
 <translation id="1147322039136785890">ດຽວນີ້ມັນເປັນຜຽນຂອງ <ph name="SUPERVISED_USER_NAME" /></translation>
 <translation id="1147991416141538220">ເພື່ອຂໍສິດເຂົ້າເຖິງ, ກະລຸນາຕິດຕໍ່ຫາຜູ້ເບິ່ງແຍງລະບົບຂອງອຸປະກອນນີ້.</translation>
+<translation id="1148063863818152153">EID ອຸປະກອນຂອງທ່ານ</translation>
 <translation id="1149401351239820326">ເດືອນ​ໝົດອາຍຸ</translation>
 <translation id="1149725087019908252">ກຳລັງສະແກນ <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">ນີ້ແມ່ນການອັບເດດຊອບແວ ແລະ ຄວາມປອດໄພອັດຕະໂນມັດສຸດທ້າຍສຳລັບ <ph name="DEVICE_TYPE" /> ນີ້. ເພື່ອຮັບການອັບເດດໃນອະນາຄົດ, ກະລຸນາອັບເກຣດເປັນຮຸ່ນໃໝ່ກວ່າ. <ph name="LINK_BEGIN" />ສຶກສາເພີ່ມເຕີມ<ph name="LINK_END" /></translation>
@@ -314,6 +315,7 @@
 <translation id="1343865611738742294">ອະນຸຍາດໃຫ້ແອັບ Linux ເຂົ້າເຖິງອຸປະກອນ USB. Linux ຈະບໍ່ຈື່ອຸປະກອນ USB ຫຼັງຈາກທີ່ລຶບມັນອອກແລ້ວ.</translation>
 <translation id="1346630054604077329">ຢືນຢັນ ແລະ ຣີສະຕາດ</translation>
 <translation id="1347256498747320987">ຕິດຕັ້ງການອັບເດດ ແລະ ແອັບ. ໂດຍການສືບຕໍ່, ແມ່ນຖືວ່າທ່ານເຫັນດີວ່າອຸປະກອນນີ້ອາດຈະດາວໂຫຼດ ແລະ ຕິດຕັ້ງການອັບເດດ ແລະ ແອັບໂດຍອັດຕະໂນມັດຈາກ Google, ຜູ້ໃຫ້ບໍລິການຂອງທ່ານ ແລະ ຜູ້ຜະລິດອຸປະກອນຂອງທ່ານໄດ້ເຊັ່ນກັນ, ໂດຍເປັນໄປໄດ້ວ່າອາດຈະໃຊ້ຂໍ້ມູນມືຖື. ບາງແອັບເຫຼົ່ານີ້ອາດມີການຊື້ໃນແອັບ. <ph name="BEGIN_LINK1" />ສຶກສາເພີ່ມເຕີມ<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">ບ່ອນຈັດເກັບຂໍ້ມູນ Linux</translation>
 <translation id="1347975661240122359">ການອັບເດດຈະເລີ່ມຕົ້ນເມື່ອແບັດເຕີຣີຮອດ <ph name="BATTERY_LEVEL" />%.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">ບໍ່ສາມາດຊອກເຫັນ PPD. ກະລຸນາກວດໃຫ້ແນ່ໃຈວ່າ Chromebook ຂອງທ່ານອອນລາຍຢູ່ ແລະ ລອງອີກຄັ້ງ.</translation>
@@ -553,6 +555,7 @@
 <translation id="1608668830839595724">ຄຳສັ່ງເພີ່ມເຕີມສຳລັບລາຍການທີ່ເລືອກ</translation>
 <translation id="161042844686301425">ສີຟ້າຂຽວ</translation>
 <translation id="1611432201750675208">ອຸປະກອນຂອງທ່ານລັອກຢູ່</translation>
+<translation id="1612019740169791082">ກ່ອງບັນຈຸຂອງທ່ານບໍ່ໄດ້ຖືກຕັ້ງຄ່າໃຫ້ຮອງຮັບການປັບຂະໜາດດິສກ໌. ເພື່ອປັບປະລິມານພື້ນທີ່ທີ່ສະຫງວນໄວ້ໃຫ້ Linux, ກະລຸນາສຳຮອງຂໍ້ມູນໄວ້ ແລະ ຈາກນັ້ນກູ້ຄືນໃສ່ກ່ອງບັນຈຸໃໝ່.</translation>
 <translation id="1614511179807650956">ທ່ານອາດໃຊ້ແພັກເກດອິນເຕີເນັດມືຖືຂອງທ່ານໝົດແລ້ວ. ກະລຸນາເຂົ້າຫາໜ້າເວັບການເປີດນຳໃຊ້ <ph name="NAME" /> ເພື່ອຊື້ອິນເຕີເນັດເພີ່ມເຕີມ</translation>
 <translation id="161460670679785907">ບໍ່ສາມາດກວດພົບໂທລະສັບຂອງທ່ານໄດ້</translation>
 <translation id="1616206807336925449">ສ່ວນ​ຂະ​ຫຍາຍ​ນີ້​ບໍ່​ຕ້ອງ​ການ​ໃຫ້​ມີ​ການ​ອະ​ນຸ​ຍາດ​ພິ​ເສດ​ອັນ​ໃດ.</translation>
@@ -687,6 +690,7 @@
 <translation id="175772926354468439">ເປີດໃຊ້ງານເທມ</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">ເບິ່ງໃນ Chrome Web Store</translation>
+<translation id="1761845175367251960">ບັນຊີຂອງ <ph name="NAME" /></translation>
 <translation id="176193854664720708">ເຊັນເຊີລາຍນິ້ວມືຢູ່ໃນປຸ່ມປິດເປີດເຄື່ອງ. ກະລຸນາແຕະມັນເບົາໆດ້ວຍນິ້ວມືໃດໆກໍໄດ້.</translation>
 <translation id="1763046204212875858">ສ້າງ​ທາງ​ລັດ​ແອັບພລິເຄຊັນ</translation>
 <translation id="1763808908432309942">ເປີດໃນແຖບໃໝ່</translation>
@@ -896,6 +900,7 @@
 <translation id="1999115740519098545">ຢູ່ໃນຕອນເລີ່ມຕົ້ນ</translation>
 <translation id="2000419248597011803">ສົ່ງບາງຄຸກກີ້ ແລະ ການຊອກຫາຈາກແຖບທີ່ຢູ່ ແລະ ກ່ອງຊອກຫາໄປໃຫ້ໂປຣແກຣມຊອກຫາເລີ່ມຕົ້ນຂອງທ່ານ</translation>
 <translation id="2002109485265116295">ເວລາຈິງ</translation>
+<translation id="200217416291116199">ຂໍແນະນຳໃຫ້ສຳຮອງຂໍ້ມູນໄຟລ໌ໄວ້ໃນກໍລະນີທີ່ການອັບເກຣດບໍ່ສຳເລັດ. ການເລີ່ມການອັບເກຣດຈະເຮັດໃຫ້ Linux ປິດເຄື່ອງ. ກະລຸນາບັນທຶກໄຟລ໌ທີ່ເປີດກ່ອນທີ່ຈະດຳເນີນຕໍ່.</translation>
 <translation id="2003130567827682533">ເພື່ອເປີດນຳໃຊ້ອິນເຕີເນັດ '<ph name="NAME" />', ກ່ອນອື່ນໃຫ້ເຊື່ອມຕໍ່ກັບເຄືອຂ່າຍ Wi-Fi</translation>
 <translation id="2005199804247617997">ໂປຣໄຟລ໌ອື່ນໆ</translation>
 <translation id="2006638907958895361">ເປີດລິ້ງໃນ <ph name="APP" /></translation>
@@ -1607,6 +1612,7 @@
 <translation id="2807517655263062534">ໄຟລ໌ທີ່ທ່ານດາວໂຫຼດປາກົດຢູ່ບ່ອນນີ້</translation>
 <translation id="2809586584051668049">ແລະ <ph name="NUMBER_ADDITIONAL_DISABLED" /> ເພີ່ມອີກ</translation>
 <translation id="2810390687497823527">ຖ້າທ່ານບໍ່ຮູ້ຈັກສ່ວນຂະຫຍາຍໃດໜຶ່ງ ຫຼື ຖ້າໂປຣແກຣມທ່ອງເວັບຂອງທ່ານບໍ່ເຮັດວຽກຕາມທີ່ຄາດໄວ້, ທ່ານສາມາດປິດ ຫຼື ປັບແຕ່ງສ່ວນຂະຫຍາຍໄດ້ຢູ່ບ່ອນນີ້.</translation>
+<translation id="2811205483104563968">ບັນຊີ</translation>
 <translation id="2812049959647166806">ບໍ່ຮອງຮັບ Thunderbolt</translation>
 <translation id="2812989263793994277">ຢ່າສະແດງຮູບໃດອີກ</translation>
 <translation id="2813094189969465044">ການຄວບຄຸມສຳລັບພໍ່ແມ່</translation>
@@ -1645,6 +1651,7 @@
 <translation id="2858138569776157458">ເວັບໄຊຍອດນິຍົມ</translation>
 <translation id="2861301611394761800">ອັບເດດລະບົບສໍາເລັດ. ກະລຸນາປິດເປີດລະບົບຄືນໃໝ່.</translation>
 <translation id="2861941300086904918">ຕົວຈັດການຄວາມປອດໄພລູກຂ່າຍເດີມ</translation>
+<translation id="2862815659905780618">ລຶບສະພາບແວດລ້ອມການພັດທະນາ Linux ອອກ</translation>
 <translation id="2864601841139725659">ຕັ້ງຄ່າຮູບໂປຣໄຟລ໌ຂອງທ່ານ</translation>
 <translation id="2865919525181940183">ພາບໜ້າຈໍຂອງໂປຣແກຣມທີ່ປັດຈຸບັນຢູ່ໃນໜ້າຈໍ</translation>
 <translation id="286674810810214575">ກຳລັງກວດແຫຼ່ງພະລັງງານ...</translation>
@@ -1758,6 +1765,7 @@
 <translation id="2989123969927553766">ການເລັ່ງຄວາມໄວການເລື່ອນເມົ້າ</translation>
 <translation id="2989474696604907455">ບໍ່ໄດ້ຄັດຕິດ</translation>
 <translation id="2989786307324390836">DER-ສອງດ້ານໃສ່ລະຫັດແລ້ວ, ໃບຢັ້ງຢືນດ່ຽວ</translation>
+<translation id="2990313168615879645">ເພີ່ມບັນຊີ Google</translation>
 <translation id="2992931425024192067">ສະແດງເນື້ອຫາການແຈ້ງເຕືອນທັງໝົດ</translation>
 <translation id="2993517869960930405">ຂໍ້​ມູນ​ແອັບ</translation>
 <translation id="2996286169319737844">ເຂົ້າລະຫັດຂໍ້ມູນໂດຍໃຊ້ລະຫັດຜ່ານການຊິ້ງຂໍ້ມູນຂອງທ່ານ. ນີ້ບໍ່ຮວມເອົາວິທີການຈ່າຍເງິນ ແລະ ທີ່ຢູ່ຈາກ Google Pay.</translation>
@@ -2369,6 +2377,7 @@
 <translation id="3706463572498736864">ໜ້າຕໍ່ແຜ່ນ</translation>
 <translation id="370649949373421643">ເປີດໃຊ້ງານ Wi​-Fi</translation>
 <translation id="370665806235115550">ກໍາລັງໂຫຼດ ...</translation>
+<translation id="3707163604290651814">ໃນປັດຈຸບັນເຂົ້າສູ່ລະບົບເປັນ <ph name="NAME" /></translation>
 <translation id="3709244229496787112">ບຣາວ​ເຊີໄດ້​ປິດ​ລົງ​ກ່ອນ​ທີ່​ຈະ​ດາວ​ໂຫລດ​ໄດ້​ສໍາ​ເລັດ​.</translation>
 <translation id="3711931198657368127">ວາງໃສ່ ແລະ ໄປຫາ <ph name="URL" /></translation>
 <translation id="3711945201266135623">ພົບເຄື່ອງພິມ <ph name="NUM_PRINTERS" /> ເຄື່ອງຈາກເຊີບເວີການພິມ</translation>
@@ -2875,6 +2884,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K ສົດ)</translation>
 <translation id="4310139701823742692">ໄຟລ໌ມີຮູບແບບບໍ່ຖືກຕ້ອງ. ກະລຸນາກວດເບິ່ງໄຟລ໌ PPD ແລະ ລອງອີກຄັ້ງ.</translation>
 <translation id="431076611119798497">ລາຍ​ລະ​ອຽດ</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{ບັນຊີ Google 1 ບັນຊີ}other{ບັນຊີ Google <ph name="EXTRA_ACCOUNTS" /> ບັນຊີ}}</translation>
 <translation id="4312866146174492540">ບລັອກ (ຄ່າເລີ່ມຕົ້ນ)</translation>
 <translation id="4314815835985389558">ຈັດການການຊິ້ງຂໍ້ມູນ</translation>
 <translation id="4316850752623536204">ເວັບ​ໄຊ​ທ​໌ຜູ້ພັດ​ທະ​ນາ​</translation>
@@ -3254,6 +3264,7 @@
 <translation id="4764368918650455114">ກະລຸນາກວດສອບວ່າອຸປະກອນທັງສອງປົດລັອກແລ້ວ, ຢູ່ໃກ້ກັນ ແລະ ເປີດ Bluetooth. ຖ້າທ່ານກຳລັງແບ່ງປັນກັບ Chromebook, ກະລຸນາກວດໃຫ້ແນ່ໃຈວ່າມັນໄດ້ເປີດການແບ່ງປັນໃກ້ຄຽງແລ້ວ (ເປີດພື້ນທີ່ສະຖານະໂດຍການເລືອກເວລາ, ຈາກນັ້ນເລືອກການແບ່ງປັນໃກ້ຄຽງ). <ph name="LINK_BEGIN" />ສຶກສາເພີ່ມເຕີມ<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">ອະນຸຍາດໃຫ້ Android Messages ສົ່ງຕໍ່ຂໍ້ຄວາມຈາກໂທລະສັບຂອງທ່ານໄປໃສ່ Chromebook ທ່ານ</translation>
 <translation id="4768332406694066911">ທ່ານມີໃບຢັ້ງຢືນຈາກ​ໜ່ວຍ​ງານເຫຼົ່ານີ້ທີ່ລະບຸຕົວຕົນຂອງທ່ານ</translation>
+<translation id="4773112038801431077">ອັບເກຣດ Linux</translation>
 <translation id="477647109558161443">ສ້າງທາງລັດເດັສທັອບ</translation>
 <translation id="4776917500594043016">ລະ​ຫັດ​ຜ່ານ​ສໍາ​ລັບ <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4777825441726637019">Play Store</translation>
@@ -3747,6 +3758,7 @@
 <translation id="5368720394188453070">ໂທ​ລະ​ສັບ​ຂອງ​ທ່ານ​ຖືກ​ລັອກ. ປົດ​ລັອກ​ມັນ​ເພື່ອ​ປ້ອນ​ເຂົ້າ.</translation>
 <translation id="5368779022775404937">ເຂົ້າສູ່ລະບົບ <ph name="REALM" /></translation>
 <translation id="5369491905435686894">ເປີດນຳໃຊ້ການເລັ່ງຄວາມໄວເມົ້າ</translation>
+<translation id="5369694795837229225">ຕັ້ງຄ່າສະພາບແວດລ້ອມການພັດທະນາ Linux</translation>
 <translation id="5370819323174483825">ໂຫຼດໃໝ່</translation>
 <translation id="5372529912055771682">ໂໝດການລົງທະບຽນທີ່ຈັດໃຫ້ບໍ່ຮອງຮັບໂດຍລະບົບໃຊ້ງານລຸ້ນນີ້. ເບິ່ງໃຫ້ແນ່ໃຈວ່າ ທ່ານກໍາລັງແລ່ນລຸ້ນໃໝ່ສຸດ ແລະລອງໃໝ່ອີກ.</translation>
 <translation id="5372579129492968947">ຖອນປັກໝຸດສ່ວນຂະຫຍາຍ</translation>
@@ -4470,6 +4482,8 @@
 <translation id="6212168817037875041">ປິດໜ້າຈໍ</translation>
 <translation id="6212752530110374741">ອີເມວລິ້ງ</translation>
 <translation id="6213230117190778270">ຮັບ</translation>
+<translation id="6215620815501168899">ປິດປັອບອັບ EID ແລະ ລະຫັດ QR</translation>
+<translation id="6216601812881225442">ກ່ອງບັນຈຸຂອງທ່ານບໍ່ຮອງຮັບການປັບຂະໜາດ. ເພື່ອປັບປະລິມານພື້ນທີ່ຫວ່າງທີ່ຈັດສັນລ່ວງໜ້າໃຫ້ Linux, ກະລຸນາສຳຮອງຂໍ້ມູນໄວ້ ແລະ ຈາກນັ້ນກູ້ຄືນໃສ່ກ່ອງບັນຈຸໃໝ່.</translation>
 <translation id="6216696360484424239">ເຂົ້າສູ່ລະບົບອັດຕະໂນມັດ</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ອອບລາຍຢູ່. ກະລຸນາເຊື່ອມຕໍ່ອິນເຕີເນັດ ແລ້ວລອງໃໝ່.</translation>
 <translation id="6220413761270491930">ການໂຫຼດສ່ວນຂະຫຍາຍຜິດ​ພາດ</translation>
@@ -4862,6 +4876,7 @@
 <translation id="6680442031740878064">ມີໃຫ້: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">ໃຫ້ຄະແນນ</translation>
 <translation id="6681668084120808868">ຖ່າຍຮູບ</translation>
+<translation id="6683948477137300040">ສະແດງປັອບອັບ EID ອຸປະກອນ ແລະ ລະຫັດ QR</translation>
 <translation id="6684827949542560880">ກຳລັງດາວໂຫຼດການອັບເດດຫຼ້າສຸດ</translation>
 <translation id="668599234725812620">ເປີດ Google Play</translation>
 <translation id="6686490380836145850">ປິດແຖບໄປທາງຂວາ</translation>
@@ -5097,6 +5112,7 @@
 <translation id="6955535239952325894">ການຕັ້ງຄ່ານີ້ຖືກປິດການນຳໃຊ້ໃນໂປຣແກຣມທ່ອງເວັບທີ່ມີການຈັດການ</translation>
 <translation id="6957044667612803194">ກະແຈຄວາມປອດໄພນີ້ບໍ່ຮອງຮັບ PIN</translation>
 <translation id="6957231940976260713">ຊື່ການບໍລິການ</translation>
+<translation id="6960507406838246615">ຈຳເປັນຕ້ອງອັບເດດ Linux</translation>
 <translation id="696103774840402661">ໄຟລ໌ ແລະ ຂໍ້ມູນໃນເຄື່ອງທັງໝົດສຳລັບຜູ້ໃຊ້ທັງໝົດໃນ <ph name="DEVICE_TYPE" /> ໄດ້ຖືກລຶບຖາວອນແລ້ວ.</translation>
 <translation id="6964390816189577014">ພະເອກ</translation>
 <translation id="6964760285928603117">ລຶບອອກຈາກກຸ່ມ</translation>
@@ -5116,6 +5132,7 @@
 <translation id="697312151395002334">ໄດ້ຮັບອະນຸຍາດໃຫ້ສົ່ງປັອບອັບ ແລະ ໃຊ້ການປ່ຽນເສັ້ນທາງ</translation>
 <translation id="6973611239564315524">ມີການອັບເກຣດເປັນ Debian 10 (Buster)</translation>
 <translation id="6974609594866392343">ໂໝດສາທິດແບບອອບລາຍ</translation>
+<translation id="697508444536771064">ປິດເຄື່ອງ Linux</translation>
 <translation id="6977381486153291903">ການດັດແກ້ເຟີມແວ</translation>
 <translation id="6977877318519394148">ຕິດຕັ້ງ Rosetta</translation>
 <translation id="6978121630131642226">ເຄື່ອງ​ຈັກ​ຄົ້ນ​ຫາ</translation>
@@ -5516,6 +5533,7 @@
 <translation id="7443806024147773267">ເຂົ້າເຖິງລະຫັດຜ່ານຂອງທ່ານໄດ້ທຸກເມື່ອທີ່ທ່ານເຂົ້າສູ່ລະບົບບັນຊີ Google ຂອງທ່ານ</translation>
 <translation id="7444983668544353857">ປິດໃຊ້ງານ <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">ຕິດຕັ້ງແອັບໂດຍອັດຕະໂນມັດ</translation>
+<translation id="7448538354405258275">ຕົວແທນຝ່າຍບໍລິການລູກຄ້າສາມາດໃຊ້ໝາຍເລກ EID ເພື່ອຊ່ວຍທ່ານເປີດໃຊ້ບໍລິການໄດ້.</translation>
 <translation id="7449752890690775568">ລຶບລະຫັດຜ່ານອອກບໍ?</translation>
 <translation id="7450761244949417357">ກຳລັງເປີດໃນ <ph name="ALTERNATIVE_BROWSER_NAME" /> ຕອນນີ້</translation>
 <translation id="7453008956351770337">ໂດຍການເລືອກເຄື່ອງພິມນີ້, ທ່ານກຳລັງໃຫ້ການອະນຸຍາດເຂົ້າເຖິງເຄື່ອງພິມຂອງທ່ານແກ່ສ່ວນຂະຫຍາຍຕໍ່ໄປນີ້:</translation>
@@ -6043,6 +6061,7 @@
 <translation id="8032244173881942855">ບໍ່ສາມາດສົ່ງສັນຍານແຖບໄດ້.</translation>
 <translation id="8033827949643255796">ເລືອກແລ້ວ</translation>
 <translation id="8033958968890501070">ໝົດເວລາ</translation>
+<translation id="8036049989879571495">ຕັ້ງຄ່າສະພາບແວດລ້ອມການພັດທະນາ Linux (ເບຕ້າ)</translation>
 <translation id="8037117027592400564">ອ່ານຂໍ້ຄວາມທັງໝົດທີ່ໄດ້ເວົ້າໃນລະຫວ່າງການໃຊ້ຄໍາເວົ້າທີ່ຊິງໂຄຣໄນແລ້ວ</translation>
 <translation id="8037357227543935929">ຖາມ (ຄ່າເລີ່ມຕົ້ນ)</translation>
 <translation id="803771048473350947">ໄຟລ໌</translation>
@@ -6969,6 +6988,7 @@
 <translation id="909108997331068008">ໂປຣໄຟລ໌ຂອງ <ph name="EXISTING_USER" /> ເຂົ້າສູ່ລະບົບ <ph name="NEW_USER" /> ຢູ່ແລ້ວ</translation>
 <translation id="9094033019050270033">ອັບ​ເດດ​ລະ​ຫັດ​ຜ່ານ</translation>
 <translation id="9094038138851891550">ຊື່ຜູ້ໃຊ້ບໍ່ຖືກຕ້ອງ</translation>
+<translation id="9094859731829297286">ທ່ານແນ່ໃຈບໍ່ວ່າທ່ານຕ້ອງການຈອງດິສຂະໜາດຄົງທີ່ສຳລັບ Linux?</translation>
 <translation id="9094982973264386462">ລຶບອອກ</translation>
 <translation id="9095253524804455615">ລຶບອອກ</translation>
 <translation id="909554839118732438">ປິດໂໝດບໍ່ເປີດເຜີຍຕົວຕົນ</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index 79fc991..49af933 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">„Google“ išm. funkc. „Chrome“</translation>
 <translation id="1147322039136785890">Dabar <ph name="SUPERVISED_USER_NAME" /> eilė</translation>
 <translation id="1147991416141538220">Norėdami paprašyti prieigos, susisiekite su šio įrenginio administratoriumi.</translation>
+<translation id="1148063863818152153">Įrenginio EID</translation>
 <translation id="1149401351239820326">Galiojimo laiko pabaigos mėnuo</translation>
 <translation id="1149725087019908252">Nuskaitomas failas „<ph name="FILE_NAME" />“</translation>
 <translation id="1150490752229770117">Tai yra paskutinis automatinis programinės įrangos ir saugos naujinys, skirtas „<ph name="DEVICE_TYPE" />“. Kad gautumėte būsimus naujinius, įsigykite naujesnį modelį. <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation>
@@ -317,6 +318,7 @@
 <translation id="1343865611738742294">„Linux“ programoms suteikiamas leidimas pasiekti USB įrenginius. Pašalinto USB įrenginio „Linux“ neprisimins.</translation>
 <translation id="1346630054604077329">Patvirtinti ir paleisti iš naujo</translation>
 <translation id="1347256498747320987">Įdiekite naujinius ir programas. Tęsdami sutinkate, kad šis įrenginys taip pat gali automatiškai atsisiųsti ir įdiegti naujinius bei programas iš „Google“, operatoriaus ir įrenginio gamintojo (gali būti naudojami mobiliojo ryšio duomenys). Kai kurios programos gali siūlyti įsigyti pirkinių programoje. <ph name="BEGIN_LINK1" />Sužinokite daugiau<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">„Linux“ saugykla</translation>
 <translation id="1347975661240122359">Atnaujinimo procesas prasidės, kai akumuliatoriaus įkrovos lygis bus <ph name="BATTERY_LEVEL" /> %.</translation>
 <translation id="1353686479385938207">„<ph name="PROVIDER_NAME" />“: „<ph name="NETWORK_NAME" />“</translation>
 <translation id="1353980523955420967">Nepavyko rasti PPD. Įsitikinkite, kad „Chromebook“ prijungtas, ir bandykite dar kartą.</translation>
@@ -558,6 +560,7 @@
 <translation id="1608668830839595724">Daugiau veiksmų, skirtų pasirinktiems elementams</translation>
 <translation id="161042844686301425">Žydra</translation>
 <translation id="1611432201750675208">Įrenginys užrakintas</translation>
+<translation id="1612019740169791082">Sudėtinis rodinys nesukonfigūruotas palaikyti disko dydžio keitimą. Jei norite koreguoti, kiek vietos priskiriama „Linux“, sukurkite atsarginę kopiją ir atkurkite naujame sudėtiniame rodinyje.</translation>
 <translation id="1614511179807650956">Gali būti, kad pasiekėte mobiliojo ryšio duomenų apribojimą. Apsilankykite „<ph name="NAME" />“ suaktyvinimo portale, kad įsigytumėte daugiau duomenų</translation>
 <translation id="161460670679785907">Nepavyko aptikti telefono</translation>
 <translation id="1616206807336925449">Šiam plėtiniui nereikalingi jokie specialūs leidimai.</translation>
@@ -692,6 +695,7 @@
 <translation id="175772926354468439">Įgalinti temą</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Žr. „Chrome“ internetinėje parduotuvėje</translation>
+<translation id="1761845175367251960"><ph name="NAME" /> paskyros</translation>
 <translation id="176193854664720708">Piršto antspaudo jutiklis yra maitinimo mygtuko viduje. Lengvai jį palieskite bet kuriuo pirštu.</translation>
 <translation id="1763046204212875858">Kurti programos sparčiuosius mygtukus</translation>
 <translation id="1763808908432309942">Atidaromas naujame skirtuke</translation>
@@ -901,6 +905,7 @@
 <translation id="1999115740519098545">Paleidžiant</translation>
 <translation id="2000419248597011803">Numatytajam paieškos varikliui siunčiami kai kurie slapukai ir į adreso juostą bei paieškos laukelį įvestos paieškos</translation>
 <translation id="2002109485265116295">Realusis laikas</translation>
+<translation id="200217416291116199">Rekomenduojama sukurti atsarginę failų kopiją, jei naujovinimo nepavyktų užbaigti. Pradėjus naujovinti, „Linux“ bus išjungta. Prieš tęsdami išsaugokite atidarytus failus.</translation>
 <translation id="2003130567827682533">Norėdami suaktyvinti „<ph name="NAME" />“ duomenis, pirmiausia prisijunkite prie „Wi-Fi“ tinklo</translation>
 <translation id="2005199804247617997">Kiti profiliai</translation>
 <translation id="2006638907958895361">Atidaryti nuorodą programoje „<ph name="APP" />“</translation>
@@ -1612,6 +1617,7 @@
 <translation id="2807517655263062534">Atsisiųsti failai rodomi čia</translation>
 <translation id="2809586584051668049">ir dar <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
 <translation id="2810390687497823527">Jei neatpažįstate plėtinio arba jei jūsų naršyklė neveikia, kaip numatyta, galite išjungti arba tinkinti plėtinius čia.</translation>
+<translation id="2811205483104563968">Paskyros</translation>
 <translation id="2812049959647166806">„Thunderbolt“ nepalaikoma</translation>
 <translation id="2812989263793994277">Nerodyti jokių vaizdų</translation>
 <translation id="2813094189969465044">Tėvų kontrolė</translation>
@@ -1650,6 +1656,7 @@
 <translation id="2858138569776157458">Popul. svet.</translation>
 <translation id="2861301611394761800">Sistema atnaujinta. Paleiskite ją iš naujo.</translation>
 <translation id="2861941300086904918">„Native Client“ saugos valdytojas</translation>
+<translation id="2862815659905780618">Pašalinti „Linux“ kūrimo aplinką</translation>
 <translation id="2864601841139725659">Profilio nuotraukos nustatymas</translation>
 <translation id="2865919525181940183">Šiuo metu ekrane rodomų programų ekrano kopija</translation>
 <translation id="286674810810214575">Tikrinami maitinimo šaltiniai...</translation>
@@ -1763,6 +1770,7 @@
 <translation id="2989123969927553766">Slinkimo pele spartinimas</translation>
 <translation id="2989474696604907455">neprijungtas</translation>
 <translation id="2989786307324390836">DER užkoduotas dvejetainis, vienas sertifikatas</translation>
+<translation id="2990313168615879645">Pridėti „Google“ paskyrą</translation>
 <translation id="2992931425024192067">Rodyti visą pranešimo turinį</translation>
 <translation id="2993517869960930405">Programos informacija</translation>
 <translation id="2996286169319737844">Duomenys užšifruoti naudojant sinchronizavimo slaptafrazę. Neįtraukiami mokėjimo metodai ir adresai iš „Google Pay“.</translation>
@@ -2374,6 +2382,7 @@
 <translation id="3706463572498736864">Puslapių skaičiuoklėje</translation>
 <translation id="370649949373421643">Įgalinti „Wi-Fi“</translation>
 <translation id="370665806235115550">Įkeliama...</translation>
+<translation id="3707163604290651814">Šiuo metu prisijungta kaip <ph name="NAME" /></translation>
 <translation id="3709244229496787112">Naršyklė buvo išjungta nebaigus atsisiųsti.</translation>
 <translation id="3711931198657368127">Įk&amp;lijuoti ir apsilankyti adresu <ph name="URL" /></translation>
 <translation id="3711945201266135623">Rasta spausdintuvų iš spausdinimo serverio: <ph name="NUM_PRINTERS" /></translation>
@@ -2880,6 +2889,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB tiesiogiai)</translation>
 <translation id="4310139701823742692">Failas netinkamo formato. Patikrinkite PPD failą ir bandykite dar kartą.</translation>
 <translation id="431076611119798497">Išsami informacija</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{Viena „Google“ paskyra}one{<ph name="EXTRA_ACCOUNTS" /> „Google“ paskyra}few{<ph name="EXTRA_ACCOUNTS" /> „Google“ paskyros}many{<ph name="EXTRA_ACCOUNTS" /> „Google“ paskyros}other{<ph name="EXTRA_ACCOUNTS" /> „Google“ paskyrų}}</translation>
 <translation id="4312866146174492540">Užblokuoti (numatytoji parinktis)</translation>
 <translation id="4314815835985389558">Sinchronizavimo tvarkymas</translation>
 <translation id="4316850752623536204">Kūrėjo svetainė</translation>
@@ -3259,6 +3269,7 @@
 <translation id="4764368918650455114">Įsitikinkite, kad abu įrenginiai yra atrakinti, vienas šalia kito ir juose įjungtas „Bluetooth“ ryšys. Bendrindami su „Chromebook“ įsitikinkite, kad jame įjungta Bendrinimo netoliese funkcija (pasirinkdami laiką atidarykite būsenos sritį, tada pasirinkite „Bendrinimas netoliese“). <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Leidžiama „Android Messages“ perduoti tekstus iš telefono į „Chromebook“</translation>
 <translation id="4768332406694066911">Turite jus identifikuojančius sertifikatus iš šių organizacijų</translation>
+<translation id="4773112038801431077">„Linux“ naujovinimas</translation>
 <translation id="477647109558161443">Sukurti darbalaukio šaukinį</translation>
 <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" /> slaptažodis</translation>
 <translation id="4777825441726637019">„Play“ parduotuvė</translation>
@@ -3752,6 +3763,7 @@
 <translation id="5368720394188453070">Telefonas užrakintas. Norėdami įeiti, atrakinkite jį.</translation>
 <translation id="5368779022775404937">Prisijunkite prie <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Įgalinti pelės spartinimą</translation>
+<translation id="5369694795837229225">Nustatyti „Linux“ kūrimo aplinką</translation>
 <translation id="5370819323174483825">&amp;Įkelti iš naujo</translation>
 <translation id="5372529912055771682">Ši operacinė sistema nepalaiko teikiamo registracijos režimo. Įsitikinkite, kad naudojate naujausią versiją ir bandykite dar kartą.</translation>
 <translation id="5372579129492968947">Atsegti plėtinį</translation>
@@ -4477,6 +4489,8 @@
 <translation id="6212168817037875041">Išjungti ekraną</translation>
 <translation id="6212752530110374741">Siųsti nuorodą el. paštu</translation>
 <translation id="6213230117190778270">Gauti</translation>
+<translation id="6215620815501168899">Uždaryti EID ir QR kodo iššokantįjį langą</translation>
+<translation id="6216601812881225442">Negalima pakeisti sudėtinio rodinio dydžio. Jei norite koreguoti, kiek vietos iš anksto priskiriama „Linux“, sukurkite atsarginę kopiją ir atkurkite naujame sudėtiniame rodinyje.</translation>
 <translation id="6216696360484424239">Automatiškai prisijungti</translation>
 <translation id="6218058416316985984">„<ph name="DEVICE_TYPE" />“ įrenginyje neįjungtas internetas. Prisijunkite prie interneto ir bandykite dar kartą.</translation>
 <translation id="6220413761270491930">Klaida įkeliant plėtinį</translation>
@@ -4869,6 +4883,7 @@
 <translation id="6680442031740878064">Pasiekiama: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Sparta</translation>
 <translation id="6681668084120808868">Fotografuoti</translation>
+<translation id="6683948477137300040">Rodyti įrenginio EID ir QR kodo iššokantįjį langą</translation>
 <translation id="6684827949542560880">Atsisiunčiamas naujausias naujinys</translation>
 <translation id="668599234725812620">Atidaryti „Google Play“</translation>
 <translation id="6686490380836145850">Uždaryti dešinėje esančius skirtukus</translation>
@@ -5104,6 +5119,7 @@
 <translation id="6955535239952325894">Šis nustatymas išjungtas tvarkomose naršyklėse</translation>
 <translation id="6957044667612803194">Šis saugos raktas nepalaiko PIN kodų</translation>
 <translation id="6957231940976260713">Paslaugos pavadinimas</translation>
+<translation id="6960507406838246615">Reikia atnaujinti „Linux“</translation>
 <translation id="696103774840402661">Visam laikui ištrinti visų naudotojų bet kurie failai ir vietiniai duomenys, esantys šiame įrenginyje (<ph name="DEVICE_TYPE" />).</translation>
 <translation id="6964390816189577014">Herojus</translation>
 <translation id="6964760285928603117">Pašalinti iš grupės</translation>
@@ -5123,6 +5139,7 @@
 <translation id="697312151395002334">Leidžiama siųsti iššokančiuosius langus ir naudoti peradresavimus</translation>
 <translation id="6973611239564315524">Galima naujovinti į „Debian 10 (Buster)“</translation>
 <translation id="6974609594866392343">Demonstracinis režimas neprisijungus</translation>
+<translation id="697508444536771064">Stabdyti „Linux“</translation>
 <translation id="6977381486153291903">Programinės aparatinės įrangos taisymas</translation>
 <translation id="6977877318519394148">Įdiegti „Rosetta“</translation>
 <translation id="6978121630131642226">Paieškos sistemos</translation>
@@ -5523,6 +5540,7 @@
 <translation id="7443806024147773267">Pasiekite slaptažodžius, kai esate prisijungę prie „Google“ paskyros</translation>
 <translation id="7444983668544353857">Neleisti <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Automatiškai įdiekite programas</translation>
+<translation id="7448538354405258275">Klientų aptarnavimo komandos atstovas, naudodamas EID numerį, gali padėti suaktyvinti paslaugą.</translation>
 <translation id="7449752890690775568">Pašalinti slaptažodį?</translation>
 <translation id="7450761244949417357">Dabar atidaroma naršyklėje „<ph name="ALTERNATIVE_BROWSER_NAME" />“</translation>
 <translation id="7453008956351770337">Pasirinkdami šį spausdintuvą suteikiate nurodytam plėtiniui leidimą pasiekti savo spausdintuvą:</translation>
@@ -6052,6 +6070,7 @@
 <translation id="8032244173881942855">Nepavyko perduoti skirtuko.</translation>
 <translation id="8033827949643255796">pasirinkta</translation>
 <translation id="8033958968890501070">Skirtojo laiko pabaiga</translation>
+<translation id="8036049989879571495">„Linux“ kūrimo aplinkos (beta versijos) nustatymas</translation>
 <translation id="8037117027592400564">Skaityti visą tekstą sintezuota kalba</translation>
 <translation id="8037357227543935929">Klausti (numatytoji parinktis)</translation>
 <translation id="803771048473350947">Failas</translation>
@@ -6981,6 +7000,7 @@
 <translation id="909108997331068008"><ph name="EXISTING_USER" /> profilis jau prijungtas prie <ph name="NEW_USER" /></translation>
 <translation id="9094033019050270033">Atnaujinti slaptažodį</translation>
 <translation id="9094038138851891550">Netinkamas naudotojo vardas</translation>
+<translation id="9094859731829297286">Ar tikrai norite „Linux“ rezervuoti fiksuoto dydžio vietą diske?</translation>
 <translation id="9094982973264386462">Pašalinti</translation>
 <translation id="9095253524804455615">Pašalinti</translation>
 <translation id="909554839118732438">Uždaryti inkognito langus</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb
index e3fe3bf..b611fc9 100644
--- a/chrome/app/resources/generated_resources_my.xtb
+++ b/chrome/app/resources/generated_resources_my.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Chrome တွင် Google ကို ပို၍အဆင့်မြင့်လာအောင် ပြုလုပ်ခြင်း</translation>
 <translation id="1147322039136785890">ယခု <ph name="SUPERVISED_USER_NAME" /> ၏ အလှည့်ပါ</translation>
 <translation id="1147991416141538220">ဝင်ကြည့်ခွင့်တောင်းရန် ဤစက်၏ စီမံခန့်ခွဲသူကို ဆက်သွယ်ပါ။</translation>
+<translation id="1148063863818152153">သင့်စက်၏ EID</translation>
 <translation id="1149401351239820326">သက်တမ်းကုန်ဆုံးမည့်လ</translation>
 <translation id="1149725087019908252"><ph name="FILE_NAME" /> ကို စစ်ဆေးနေသည်</translation>
 <translation id="1150490752229770117">၎င်းက ဤ <ph name="DEVICE_TYPE" /> အတွက် နောက်ဆုံးထုတ် ဆော့ဖ်ဝဲနှင့် လုံခြုံရေးဆိုင်ရာ အလိုအလျောက်အပ်ဒိတ် ဖြစ်သည်။ နောင်လာမည့်အပ်ဒိတ်များ ရယူရန် မော်ဒယ်အသစ်သို့ အဆင့်မြှင့်ပါ။ <ph name="LINK_BEGIN" />ပိုမိုလေ့လာရန်<ph name="LINK_END" /></translation>
@@ -314,6 +315,7 @@
 <translation id="1343865611738742294">USB စက်ပစ္စည်းများကို Linux အက်ပ်များအား အသုံးပြုခွင့်ပေးပါ။ USB စက်ပစ္စည်းကို ဖယ်ရှားလိုက်ပါက Linux က ၎င်းကို မှတ်ထားတော့မည်မဟုတ်ပါ။</translation>
 <translation id="1346630054604077329">အတည်ပြုပြီး ပြန်စရန်</translation>
 <translation id="1347256498747320987">အပ်ဒိတ်နှင့် အက်ပ်များကို စနစ်ထည့်သွင်းပါ။ ရှေ့ဆက်ခြင်းဖြင့် ဤစက်ပစ္စည်းသည် Google၊ သင့်ဝန်ဆောင်မှုပေးသူနှင့် သင်၏ စက်ထုတ်လုပ်သူတို့ထံမှ အပ်ဒိတ်နှင့် အက်ပ်များကို ဆယ်လူလာဒေတာကို အသုံးပြုပြီး အလိုအလျောက် ဒေါင်းလုဒ်လုပ်၍ ထည့်သွင်းသွားမည်ဖြစ်ကြောင်းကို သဘောတူရာရောက်ပါသည်။ အချို့အက်ပ်များတွင် အက်ပ်အတွင်းဝယ်ယူမှုများ ပါဝင်နိုင်သည်။ <ph name="BEGIN_LINK1" />ပိုမို လေ့လာရန်<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linux သိုလှောင်ခန်း</translation>
 <translation id="1347975661240122359">ဘက်ထရီ <ph name="BATTERY_LEVEL" />% သို့ရောက်သည့်အခါ အပ်ဒိတ်စတင်ပါမည်။</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPD ကို ရှာမတွေ့ပါ။ Chromebook ကို အွန်လိုင်းချိတ်ထားခြင်း ရှိမရှိ စစ်ဆေးပြီး ထပ်လုပ်ကြည့်ပါ။</translation>
@@ -555,6 +557,7 @@
 <translation id="1608668830839595724">ရွေးထားသောအရာများအတွက် နောက်ထပ် လုပ်ဆောင်ချက်များ</translation>
 <translation id="161042844686301425">Cyan</translation>
 <translation id="1611432201750675208">သင့်စက်ကို လော့ခ်ချထားပါသည်</translation>
+<translation id="1612019740169791082">ဒစ်ခ်အရွယ်အစားပြင်ပေးနိုင်ရန် သင့်ကွန်တိန်နာကို စီစဉ်သတ်မှတ်မထားပါ။ Linux အတွက် ဖယ်ထားသော နေရာပမာဏကို ချိန်ညှိရန် အရန်သိမ်းပြီး ကွန်တိန်နာအသစ်သို့ ပြန်ယူပါ။</translation>
 <translation id="1614511179807650956">သင်၏ မိုဘိုင်းဒေတာ သတ်မှတ်ပမာဏကို သင်သုံးထားပြီး ဖြစ်နိုင်သည်။ နောက်ထပ် ဒေတာကို ဝယ်ရန် အသုံးပြုရေး စာမျက်နှာ <ph name="NAME" /> သို့ သွားပါ</translation>
 <translation id="161460670679785907">သင်၏ဖုန်းကို ရှာမတွေ့ပါ</translation>
 <translation id="1616206807336925449">ဤတိုးချဲ့လိုင်းသည် အထူးခွင့်ပြုချက် မလိုအပ်ပါ။</translation>
@@ -690,6 +693,7 @@
 <translation id="175772926354468439">အပြင်အဆင်များ အသုံးပြုရန်</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Chrome ဝဘ် စတိုးတွင် ကြည့်ရန်</translation>
+<translation id="1761845175367251960"><ph name="NAME" /> ၏ အကောင့်များ</translation>
 <translation id="176193854664720708">လက်ဗွေ အာရုံခံကိရိယာသည် ဖွင့်ပိတ်ခလုတ်တွင် ရှိသည်။ ၎င်းကို လက်ချောင်းတစ်ချောင်းဖြင့် အသာထိပါ။</translation>
 <translation id="1763046204212875858">အပလီကေးရှင်း ဖြတ်လမ်းများ ဖန်တီးရန်</translation>
 <translation id="1763808908432309942">တဘ်အသစ်တွင် ဖွင့်ပေးသည်</translation>
@@ -899,6 +903,7 @@
 <translation id="1999115740519098545">အစပြုချိန်တွင်</translation>
 <translation id="2000419248597011803">လိပ်စာဘားနှင့် ရှာဖွေမှုအကွက်ထဲရှိ အချို့သော ကွတ်ကီးများနှင့် ရှာဖွေမှုများကို သင်၏မူရင်းရှာဖွေမှုအင်ဂျင်သို့ ပို့သည်</translation>
 <translation id="2002109485265116295">အချိန်နှင့် တစ်ပြေးညီ</translation>
+<translation id="200217416291116199">အဆင့်မြှင့်ခြင်း မပြီးပါက ဖိုင်များကို အရန်သိမ်းရန် အကြံပြုထားသည်။ အဆင့်မြှင့်ခြင်း စတင်သည့်အခါ Linux ကို အပြီးပိတ်လိုက်ပါမည်။ ရှေ့မဆက်မီ ဖွင့်ထားသောဖိုင်များကို သိမ်းပါ။</translation>
 <translation id="2003130567827682533">'<ph name="NAME" />' ဒေတာကို ဖွင့်ရန်၊ Wi-Fi ကွန်ရက်နှင့် အရင်ဆုံး ချိတ်ဆက်ပါ</translation>
 <translation id="2005199804247617997">အခြား ပရိုဖိုင်များ</translation>
 <translation id="2006638907958895361"><ph name="APP" /> တွင် လင့်ခ်ကို ဖွင့်ခြင်း</translation>
@@ -1610,6 +1615,7 @@
 <translation id="2807517655263062534">သင်ဒေါင်းလုဒ်လုပ်သော ဖိုင်များသည် ဤနေရာတွင် ပေါ်ပါသည်</translation>
 <translation id="2809586584051668049">နှင့် <ph name="NUMBER_ADDITIONAL_DISABLED" /> များစွာ</translation>
 <translation id="2810390687497823527">နောက်ဆက်တွဲတစ်ခုကို မမှတ်မိလျှင် သို့မဟုတ် သင့်ဘရောင်ဇာသည် ထင်ထားသည့်အတိုင်း အလုပ်လုပ်ခြင်းမရှိလျှင် ဤနေရာတွင် နောက်ဆက်တွဲများကို ပိတ်ခြင်း သို့မဟုတ် စိတ်ကြိုက်ပြင်ဆင်နိုင်သည်။</translation>
+<translation id="2811205483104563968">အကောင့်များ</translation>
 <translation id="2812049959647166806">Thunderbolt ကို ပံ့ပိုးမထားပါ</translation>
 <translation id="2812989263793994277">ပုံများကို လုံးဝ မပြရန်</translation>
 <translation id="2813094189969465044">မိဘ အထိန်းအချုပ်များ</translation>
@@ -1648,6 +1654,7 @@
 <translation id="2858138569776157458">ထိပ်တန်းဆိုက်များ</translation>
 <translation id="2861301611394761800">စနစ် မွမ်းမံမှု ပြီးဆုံးသွားပြီ။ ကျေးဇူးပြုပြီး စနစ်ကို ပြန်ဖွင့်ပါ။</translation>
 <translation id="2861941300086904918">ဒေသခံ ဖောက်သည်လုံခြုံရေး မန်နေဂျာ</translation>
+<translation id="2862815659905780618">Linux ဆော့ဖ်ဝဲရေးဆွဲမှု ပတ်ဝန်းကျင်ကို ဖယ်ရှားရန်</translation>
 <translation id="2864601841139725659">သင်၏ပရိုဖိုင်ပုံ သတ်မှတ်ပါ</translation>
 <translation id="2865919525181940183">ဖန်သားပြင်ပေါ်တွင် လက်ရှိဖွင့်ထားသော ပရိုဂရမ်များ၏ ဖန်သားပြင်ဓာတ်ပုံ</translation>
 <translation id="286674810810214575">ပါဝါအရင်းအမြစ်ကို စစ်ဆေးနေသည်...</translation>
@@ -1761,6 +1768,7 @@
 <translation id="2989123969927553766">မောက်စ်လှိမ့်သည့် အရှိန်မြှင့်ရန်</translation>
 <translation id="2989474696604907455">ပူးတွဲ မထား</translation>
 <translation id="2989786307324390836">DER-encoded binary၊ အသိမှတ်ပြု လက်မှတ်တစ်ခု</translation>
+<translation id="2990313168615879645">Google Account ထည့်ရန်</translation>
 <translation id="2992931425024192067">အကြောင်းကြားချက်ပါ အကြောင်းအရာအားလုံးကို ပြရန်</translation>
 <translation id="2993517869960930405">အက်ပ်အင်ဖို...</translation>
 <translation id="2996286169319737844">ဒေတာကို သင်၏ စင့်ခ်စကားဝှက်ဖြင့် အသွင်ဝှက်ထားသည်။ ၎င်းတွင် ငွေပေးချေနည်းလမ်းများနှင့် Google Pay မှ လိပ်စာများ မပါဝင်ပါ။</translation>
@@ -2372,6 +2380,7 @@
 <translation id="3706463572498736864">စာရင်းတစ်ခုရှိ စာမျက်နှာများ</translation>
 <translation id="370649949373421643">ကြိုးမဲ့ ဖွင့်ပေးရန်</translation>
 <translation id="370665806235115550">တင်ပေးနေ...</translation>
+<translation id="3707163604290651814">လက်ရှိတွင် <ph name="NAME" /> အဖြစ် လက်မှတ်ထိုးဝင်ထားသည်</translation>
 <translation id="3709244229496787112">ဘရောင်ဇာကို ဒေါင်းလုဒ် မပြီးဆုံးမီတွင် ပိတ်ပစ်ခဲ့သည်။</translation>
 <translation id="3711931198657368127">ကူးထည့်ပြီး <ph name="URL" /> သို့ သွားပါ</translation>
 <translation id="3711945201266135623">ပုံနှိပ်စက်ဆာဗာတွင် ပုံနှိပ်စက် <ph name="NUM_PRINTERS" /> ခု တွေ့သည်</translation>
@@ -2877,6 +2886,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K လိုက်ဖ်)</translation>
 <translation id="4310139701823742692">ဖိုင်၏ စနစ်သည် မမှန်ကန်ပါ။ PPD ဖိုင်ကို စစ်ဆေးပြီး ထပ်လုပ်ကြည့်ပါ။</translation>
 <translation id="431076611119798497">&amp;အသေးစိတ်များ</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{Google Account 1 ခု}other{Google Account <ph name="EXTRA_ACCOUNTS" /> ခု}}</translation>
 <translation id="4312866146174492540">ပိတ်ဆို့ရန် (မူရင်း)</translation>
 <translation id="4314815835985389558">စင့်ခ်ကို စီမံရန်</translation>
 <translation id="4316850752623536204">Developer Website</translation>
@@ -3256,6 +3266,7 @@
 <translation id="4764368918650455114">စက်နှစ်ခုလုံးပွင့်နေပြီး အတူကပ်ထားကာ ဘလူးတုသ်ဖွင့်ထားကြောင်း သေချာပါစေ။ Chromebook ဖြင့် မျှဝေနေပါက ၎င်းတွင် 'အနီးတစ်ဝိုက် မျှဝေခြင်း' ဖွင့်ထားကြောင်း သေချာပါစေ (အချိန်ရွေးချယ်ပြီး အခြေအနေပြနေရာကို ဖွင့်ပါ၊ ထို့နောက် 'အနီးတစ်ဝိုက် မျှဝေခြင်း' ကိုရွေးပါ)။ <ph name="LINK_BEGIN" />ပိုမိုလေ့လာရန်<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">သင့်ဖုန်းမှ သင်၏ Chromebook သို့ စာတိုမက်ဆေ့ဂျ်များ ထပ်ဆင့်ပို့ရန် Android Messages ကို ခွင့်ပြုပါ</translation>
 <translation id="4768332406694066911">ဤအဖွဲ့အစည်းများမှနေ၍ သင်၏ အထောက်အထား အသိအမှတ်ပြုလက်မှတ်များ သင့်ထံတွင်ရှိပါသည်</translation>
+<translation id="4773112038801431077">Linux အဆင့်မြှင့်ခြင်း</translation>
 <translation id="477647109558161443">အမြန်ဖွင့်ဖြတ်လမ်းလင့်ခ်တစ်ခု ပြုလုပ်ရန်</translation>
 <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" />အတွက် စကားဝှက်</translation>
 <translation id="4777825441726637019">Play စတိုး</translation>
@@ -3749,6 +3760,7 @@
 <translation id="5368720394188453070">သင့်ဖုန်း သော့ပိတ်ထားသည်။ ဝင်ရောက်ရန် ၄င်းအား သော့ဖွင့်ပါ။</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> သို့ လက်မှတ်ထိုးဝင်ပါ</translation>
 <translation id="5369491905435686894">မောက်စ်အရှိန်မြှင့်တင်ခြင်းကို ဖွင့်ရန်</translation>
+<translation id="5369694795837229225">Linux ဆော့ဖ်ဝဲရေးဆွဲမှု ပတ်ဝန်းကျင်ကို စနစ်ထည့်သွင်းရန်</translation>
 <translation id="5370819323174483825">&amp;ပြန်တင်ရန်</translation>
 <translation id="5372529912055771682">သုံးနေသည့် စာရင်းပေးသွင်းရေး မုဒ်ကို လက်ရှိ လည်ပတ်မှု စနစ်၏ ဗားရှင်းမှ မပံ့ပိုးပါ။ ကျေးဇူးပြုပြီး သင်သည် နောက်ဆုံး ဗားရှင်း သုံးနေတာကို သေချာအောင် စစ်ကြည့်ပြီး ထပ်စမ်းပါ။</translation>
 <translation id="5372579129492968947">နောက်ဆွဲတွဲကို ပင်ဖြုတ်ရန်</translation>
@@ -4471,6 +4483,8 @@
 <translation id="6212168817037875041">မျက်နှာပြင်ပြသမှုကို ပိတ်ရန်</translation>
 <translation id="6212752530110374741">အီးမေးလ်လင့်ခ်</translation>
 <translation id="6213230117190778270">လက်ခံရန်</translation>
+<translation id="6215620815501168899">EID နှင့် QR ကုဒ် ပေါ့ပ်အပ်ပိတ်ရန်</translation>
+<translation id="6216601812881225442">သင့်ကွန်တိန်နာသည် အရွယ်အစားပြင်ခြင်းကို မပံ့ပိုးပါ။ Linux အတွက် ကြိုတင်သတ်မှတ်ပေးထားသည့် နေရာပမာဏကို ချိန်ညှိရန် အရန်သိမ်းပြီး ကွန်တိန်နာအသစ်သို့ ပြန်ယူပါ။</translation>
 <translation id="6216696360484424239">အလိုအလျောက် လက်မှတ်ထိုးဝင်ရန်</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> သည် အော့ဖ်လိုင်း ဖြစ်နေပါသည်။ အင်တာနက်သို့ ချိတ်ဆက်ပြီး ထပ်စမ်းကြည့်ပါ။</translation>
 <translation id="6220413761270491930">တိုးချဲ့မှု တင်မှု အမှား</translation>
@@ -4862,6 +4876,7 @@
 <translation id="6680442031740878064">ရနိုင်သည့် နေရာလွတ်− <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">အဆင့်သတ်မှတ်ရန်</translation>
 <translation id="6681668084120808868">ဓါတ်ပုံရိုက်</translation>
+<translation id="6683948477137300040">စက်၏ EID နှင့် QR ကုဒ် ပေါ့ပ်အပ်ပြရန်</translation>
 <translation id="6684827949542560880">နောက်ဆုံးအပ်ဒိတ်များကို ဒေါင်းလုဒ်လုပ်နေသည်</translation>
 <translation id="668599234725812620">Google Play ကို ဖွင့်ရန်</translation>
 <translation id="6686490380836145850">ညာဘက်ရှိ တဲဘ်များကို ပိတ်ရန်</translation>
@@ -5097,6 +5112,7 @@
 <translation id="6955535239952325894">ကြီးကြပ်ထားသောဘရောင်ဇာများတွင် ဤဆက်တင်ကို ပိတ်ထားသည်</translation>
 <translation id="6957044667612803194">ဤလုံခြုံရေးကီးက ပင်နံပါတ်များကို မပံ့ပိုးပါ</translation>
 <translation id="6957231940976260713">ဝန်ဆောင်မှုအမည်</translation>
+<translation id="6960507406838246615">Linux အပ်ဒိတ် လိုအပ်သည်</translation>
 <translation id="696103774840402661">ဤ <ph name="DEVICE_TYPE" /> ပေါ်ရှိ အသုံးပြုသူအားလုံးအတွက် ဖိုင်နှင့် စက်တွင်းဒေတာအားလုံးကို အပြီးဖျက်ပါမည်။</translation>
 <translation id="6964390816189577014">သူရဲကောင်း</translation>
 <translation id="6964760285928603117">အဖွဲ့မှ ဖယ်ရှားပါ</translation>
@@ -5116,6 +5132,7 @@
 <translation id="697312151395002334">ပေါ့ပ်အပ်များပို့ရန်နှင့် တစ်ဆင့်ပြန်ညွှန်ပြရန် ခွင့်ပြုထားသည်</translation>
 <translation id="6973611239564315524">Debian 10 (Buster) သို့ အဆင့်မြှင့်တင်နိုင်ပါပြီ</translation>
 <translation id="6974609594866392343">အော့ဖ်လိုင်း သရုပ်ပြမုဒ်</translation>
+<translation id="697508444536771064">Linux ကို အပြီးပိတ်ရန်</translation>
 <translation id="6977381486153291903">ဖာမ်းဝဲ ပြန်လည်စိစစ်ခြင်း</translation>
 <translation id="6977877318519394148">Rosetta ထည့်သွင်းရန်</translation>
 <translation id="6978121630131642226">ရှာဖွေရေး အင်ဂျင်များ</translation>
@@ -5516,6 +5533,7 @@
 <translation id="7443806024147773267">သင်၏ Google အကောင့်သို့ လက်မှတ်ထိုးဝင်သည့်အခါတိုင်း သင့်စကားဝှက်များကို အသုံးပြုနိုင်သည်</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> ပိတ်</translation>
 <translation id="7448430327655618736">အက်ပ်များကို အလိုအလျောက် ထည့်သွင်းနိုင်သည်</translation>
+<translation id="7448538354405258275">ဝန်ဆောင်မှုကို သင်စဖွင့်နိုင်ရန် ဝန်ဆောင်မှုဌာနကိုယ်စားလှယ်က EID နံပါတ်ကို အသုံးပြုနိုင်သည်။</translation>
 <translation id="7449752890690775568">စကားဝှက်ကို ဖယ်မလား။</translation>
 <translation id="7450761244949417357"><ph name="ALTERNATIVE_BROWSER_NAME" /> တွင် ယခု ဖွင့်ပါမည်</translation>
 <translation id="7453008956351770337">ဤပရင်တာအား ရွေးချယ်ခြင်းဖြင့်၊ ဖော်ပြပါ တိုးချဲ့လိုင်းအား သင့်ပရင်တာသို့ ဝင်ရောက်သုံးခွင့်ပြုခြင်းဖြစ်သည်။</translation>
@@ -6044,6 +6062,7 @@
 <translation id="8032244173881942855">တဘ်ကို ကာစ်တ်မလုပ်နိုင်ပါ။</translation>
 <translation id="8033827949643255796">ရွေးထား</translation>
 <translation id="8033958968890501070">အချိန်ကုန်သွားသည်</translation>
+<translation id="8036049989879571495">Linux ဆော့ဖ်ဝဲရေးဆွဲမှု ပတ်ဝန်းကျင် (စမ်းသပ်ဆော့ဖ်ဝဲ) ကို စနစ်ထည့်သွင်းခြင်း</translation>
 <translation id="8037117027592400564">ဖန်တီး နှုတ်စကားကို အသုံးပြုပြီး ပြောကြားခဲ့သည့် စာသား အားလုံးကို ဖတ်ရန်</translation>
 <translation id="8037357227543935929">မေးရန် (မူရင်း)</translation>
 <translation id="803771048473350947">ဖိုင်</translation>
@@ -6970,6 +6989,7 @@
 <translation id="909108997331068008"><ph name="EXISTING_USER" /> ၏ ပရိုဖိုင်ကို <ph name="NEW_USER" /> သို့ လက်မှတ်ထိုးဝင်ပြီး ဖြစ်သည်</translation>
 <translation id="9094033019050270033">စကားဝှက် အပ်ဒိတ် လုပ်ပါ</translation>
 <translation id="9094038138851891550">အသုံးပြုသူအမည် မမှန်ပါ</translation>
+<translation id="9094859731829297286">Linux အတွက် သတ်မှတ်ဒစ်ခ်အရွယ်အစား ဖယ်ထားလိုသည်မှာ သေချာသလား။</translation>
 <translation id="9094982973264386462">ဖယ်ရှားရန်</translation>
 <translation id="9095253524804455615">ဖယ်ရှားရန်</translation>
 <translation id="909554839118732438">ရုပ်ဖျက်မုဒ် ပိတ်ရန်</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index 6dcb5ad..c37605e 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Få Googles smarte funksjoner i Chrome</translation>
 <translation id="1147322039136785890">Nå kan du gi enheten til <ph name="SUPERVISED_USER_NAME" /></translation>
 <translation id="1147991416141538220">For å be om tilgang, kontakt administratoren for denne enheten.</translation>
+<translation id="1148063863818152153">EID-nummeret til enheten din</translation>
 <translation id="1149401351239820326">Utløpsmåned</translation>
 <translation id="1149725087019908252">Skanner <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">Dette er den siste automatiske programvare- og sikkerhetsoppdateringen for denne <ph name="DEVICE_TYPE" />-enheten. For å få fremtidige oppdateringer, oppgrader til en nyere modell. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation>
@@ -314,6 +315,7 @@
 <translation id="1343865611738742294">Gi Linux-apper tilgang til USB-enheter. Linux husker ikke USB-enheter etter at de er fjernet.</translation>
 <translation id="1346630054604077329">Bekreft og start på nytt</translation>
 <translation id="1347256498747320987">Installer oppdateringer og apper. Hvis du fortsetter, godtar du at denne enheten også kan laste ned og installere oppdateringer automatisk fra Google, operatøren din og produsenten av enheten. Dette bruker muligens mobildata. Noen av disse appene kan inneholde kjøp i app-funksjonalitet. <ph name="BEGIN_LINK1" />Finn ut mer<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linux-lagringsplass</translation>
 <translation id="1347975661240122359">Oppdateringen starter når batteriet når <ph name="BATTERY_LEVEL" /> %.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Finner ikke PPD. Sjekk at Chromebooken din er på nettet, og prøv på nytt.</translation>
@@ -552,6 +554,7 @@
 <translation id="1608668830839595724">Flere handlinger for de valgte elementene</translation>
 <translation id="161042844686301425">Cyan</translation>
 <translation id="1611432201750675208">Enheten er låst</translation>
+<translation id="1612019740169791082">Beholderen er ikke konfigurert med støtte for endring av diskstørrelse. For å justere mengden plass som er reservert for Linux, sikkerhetskopiér disken og gjenopprett den i en ny beholder.</translation>
 <translation id="1614511179807650956">Du kan ha brukt opp mobildatakvoten din. Gå til aktiveringsportalen for <ph name="NAME" /> for å kjøpe mer data.</translation>
 <translation id="161460670679785907">Finner ikke telefonen din</translation>
 <translation id="1616206807336925449">Denne utvidelsen krever ingen spesielle tillatelser.</translation>
@@ -686,6 +689,7 @@
 <translation id="175772926354468439">Aktiver temaet</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Se i Chrome Nettmarked</translation>
+<translation id="1761845175367251960">Kontoene til <ph name="NAME" /></translation>
 <translation id="176193854664720708">Fingeravtrykkssensoren er i av/på-knappen. Trykk på den forsiktig.</translation>
 <translation id="1763046204212875858">Opprett snarveier</translation>
 <translation id="1763808908432309942">Åpner en ny fane</translation>
@@ -895,6 +899,7 @@
 <translation id="1999115740519098545">Ved oppstart</translation>
 <translation id="2000419248597011803">Sender noen informasjonskapsler og søk fra adressefeltet og søkefeltet samt noen informasjonskapsler til standardsøkemotoren din</translation>
 <translation id="2002109485265116295">Sanntid</translation>
+<translation id="200217416291116199">Det anbefales å sikkerhetskopiere filer, i tilfelle oppgraderingen ikke kan fullføres. Når oppgraderingen påbegynnes, blir Linux avsluttet. Lagre åpne filer før du fortsetter.</translation>
 <translation id="2003130567827682533">For å aktivere «<ph name="NAME" />»-dataene må du først koble til et Wi-Fi-nettverk</translation>
 <translation id="2005199804247617997">Andre profiler</translation>
 <translation id="2006638907958895361">Åpne linken i <ph name="APP" /></translation>
@@ -1606,6 +1611,7 @@
 <translation id="2807517655263062534">Filer du laster ned, vises her</translation>
 <translation id="2809586584051668049">og <ph name="NUMBER_ADDITIONAL_DISABLED" /> til</translation>
 <translation id="2810390687497823527">Hvis det er utvidelser du ikke kjenner igjen, eller hvis nettleseren ikke fungerer som forventet, kan du slå av eller tilpasse utvidelser her.</translation>
+<translation id="2811205483104563968">Kontoer</translation>
 <translation id="2812049959647166806">Thunderbolt støttes ikke</translation>
 <translation id="2812989263793994277">Ikke vis bilder</translation>
 <translation id="2813094189969465044">Foreldrekontroll</translation>
@@ -1644,6 +1650,7 @@
 <translation id="2858138569776157458">Populært</translation>
 <translation id="2861301611394761800">Systemoppdateringen er fullført. Start på nytt.</translation>
 <translation id="2861941300086904918">Sikkerhetsadministrator for Native Client</translation>
+<translation id="2862815659905780618">Fjern Linux-utviklingsmiljø</translation>
 <translation id="2864601841139725659">Angi profilbildet ditt</translation>
 <translation id="2865919525181940183">Skjermdump av programmene som er på skjermen</translation>
 <translation id="286674810810214575">Sjekker strømkilder …</translation>
@@ -1757,6 +1764,7 @@
 <translation id="2989123969927553766">Rulleakselerasjon for musen</translation>
 <translation id="2989474696604907455">ikke tilkoblet</translation>
 <translation id="2989786307324390836">DER-kodet binært, enkelt sertifikat</translation>
+<translation id="2990313168615879645">Legg til Google-konto</translation>
 <translation id="2992931425024192067">Vis alt innhold i varsler</translation>
 <translation id="2993517869960930405">Appinformasjon</translation>
 <translation id="2996286169319737844">Data er kryptert med passordfrasen din for synkronisering. Dette inkluderer ikke betalingsmåter og adresser fra Google Pay.</translation>
@@ -2368,6 +2376,7 @@
 <translation id="3706463572498736864">Sider per ark</translation>
 <translation id="370649949373421643">Aktiver Wi-Fi</translation>
 <translation id="370665806235115550">Laster inn ...</translation>
+<translation id="3707163604290651814">For øyeblikket logget på som <ph name="NAME" /></translation>
 <translation id="3709244229496787112">Nettleseren ble lukket før nedlastingen var ferdig.</translation>
 <translation id="3711931198657368127">Lim inn og gå til <ph name="URL" /></translation>
 <translation id="3711945201266135623">Fant <ph name="NUM_PRINTERS" /> skrivere på utskriftstjeneren</translation>
@@ -2872,6 +2881,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB ubrukt)</translation>
 <translation id="4310139701823742692">Filen har feil format. Sjekk PPD-filen og prøv på nytt.</translation>
 <translation id="431076611119798497">&amp;Detaljer</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{1 Google-konto}other{<ph name="EXTRA_ACCOUNTS" /> Google-kontoer}}</translation>
 <translation id="4312866146174492540">Blokkér (standard)</translation>
 <translation id="4314815835985389558">Administrer synkronisering</translation>
 <translation id="4316850752623536204">Utviklernettsted</translation>
@@ -3251,6 +3261,7 @@
 <translation id="4764368918650455114">Kontrollér at begge enhetene er låst opp, er i nærheten av hverandre og har Bluetooth påslått. Hvis du deler med en Chromebook, må du sørge for at den har nærdeling påslått (åpne statusfeltet ved å velge tidspunktet, og velg deretter Nærdeling). <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Tillater at Android Messages videresender tekstmeldinger fra telefonen din til Chromebook</translation>
 <translation id="4768332406694066911">Du har sertifikater som identifiserer deg, fra disse organisasjonene</translation>
+<translation id="4773112038801431077">Oppgrader Linux</translation>
 <translation id="477647109558161443">Opprett en snarvei på skrivebordet</translation>
 <translation id="4776917500594043016">Passord for <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4777825441726637019">Play Butikk</translation>
@@ -3744,6 +3755,7 @@
 <translation id="5368720394188453070">Telefonen er låst. Lås den opp for å få tilgang.</translation>
 <translation id="5368779022775404937">Logg på <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Slå på museakselerasjon</translation>
+<translation id="5369694795837229225">Konfigurer Linux-utviklingsmiljø</translation>
 <translation id="5370819323174483825">&amp;Last inn på nytt</translation>
 <translation id="5372529912055771682">Denne versjonen av operativsystemet støtter ikke registreringsmodusen som ble angitt. Kontroller at du kjører den nyeste versjonen, og prøv på nytt.</translation>
 <translation id="5372579129492968947">Løsne utvidelsen</translation>
@@ -4468,6 +4480,8 @@
 <translation id="6212168817037875041">Slå av skjermen</translation>
 <translation id="6212752530110374741">Send linken på e-post</translation>
 <translation id="6213230117190778270">Motta</translation>
+<translation id="6215620815501168899">Lukk forgrunnsvindu med EID-nummer og QR-kode</translation>
+<translation id="6216601812881225442">Beholderen støtter ikke størrelsesendringer. For å justere mengden plass som er forhåndsallokert til Linux, sikkerhetskopiér disken og gjenopprett den deretter i en ny beholder.</translation>
 <translation id="6216696360484424239">Logg på automatisk</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> er uten nett. Koble til Internett og prøv på nytt.</translation>
 <translation id="6220413761270491930">Det oppsto en feil under innlastingen av utvidelsen</translation>
@@ -4860,6 +4874,7 @@
 <translation id="6680442031740878064">Tilgjengelig: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Hastighet</translation>
 <translation id="6681668084120808868">Ta et bilde</translation>
+<translation id="6683948477137300040">Vis forgrunnsvindu med enhetens EID-nummer og QR-kode</translation>
 <translation id="6684827949542560880">Laster ned den nyeste oppdateringen</translation>
 <translation id="668599234725812620">Åpne Google Play</translation>
 <translation id="6686490380836145850">Lukk fanene til høyre</translation>
@@ -5095,6 +5110,7 @@
 <translation id="6955535239952325894">Denne innstillingen er slått av for administrerte nettlesere</translation>
 <translation id="6957044667612803194">Denne sikkerhetsnøkkelen støtter ikke PIN-koder</translation>
 <translation id="6957231940976260713">Tjenestenavn</translation>
+<translation id="6960507406838246615">Linux-oppdatering kreves</translation>
 <translation id="696103774840402661">Alle filer og lokale data for alle brukerne på denne <ph name="DEVICE_TYPE" />-enheten er slettet permanent.</translation>
 <translation id="6964390816189577014">Helt</translation>
 <translation id="6964760285928603117">Fjern fra gruppen</translation>
@@ -5114,6 +5130,7 @@
 <translation id="697312151395002334">Nettsteder som har lov til å sende forgrunnsvinduer og bruke viderekoblinger</translation>
 <translation id="6973611239564315524">En oppgradering for Debian 10 (Buster) er tilgjengelig</translation>
 <translation id="6974609594866392343">Demomodus uten nett</translation>
+<translation id="697508444536771064">Avslutt Linux</translation>
 <translation id="6977381486153291903">Fastvareversjon</translation>
 <translation id="6977877318519394148">Installer Rosetta</translation>
 <translation id="6978121630131642226">Søkemotorer</translation>
@@ -5514,6 +5531,7 @@
 <translation id="7443806024147773267">Få tilgang til passordene dine når du er logget på Google-kontoen</translation>
 <translation id="7444983668544353857">Slå av <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">installere apper automatisk</translation>
+<translation id="7448538354405258275">En kundeservicerepresentant kan bruke EID-nummeret til å hjelpe deg med å aktivere tjenesten.</translation>
 <translation id="7449752890690775568">Vil du fjerne passordet?</translation>
 <translation id="7450761244949417357">Åpnes i <ph name="ALTERNATIVE_BROWSER_NAME" /> nå</translation>
 <translation id="7453008956351770337">Ved å velge denne skriveren gir du følgende utvidelse tillatelse til å bruke skriveren din:</translation>
@@ -6043,6 +6061,7 @@
 <translation id="8032244173881942855">Fanen kunne ikke castes.</translation>
 <translation id="8033827949643255796">valgt</translation>
 <translation id="8033958968890501070">Tidsavbrudd</translation>
+<translation id="8036049989879571495">Konfigurer Linux-utviklingsmiljø (beta)</translation>
 <translation id="8037117027592400564">lese hele teksten med syntetisert tale</translation>
 <translation id="8037357227543935929">Spør (standard)</translation>
 <translation id="803771048473350947">Fil</translation>
@@ -6969,6 +6988,7 @@
 <translation id="909108997331068008">Profilen til <ph name="EXISTING_USER" /> er allerede logget på <ph name="NEW_USER" /></translation>
 <translation id="9094033019050270033">Oppdater passordet</translation>
 <translation id="9094038138851891550">Ugyldig brukernavn</translation>
+<translation id="9094859731829297286">Er du sikker på at du vil reservere en disk med fast størrelse for Linux?</translation>
 <translation id="9094982973264386462">Fjern</translation>
 <translation id="9095253524804455615">Fjern</translation>
 <translation id="909554839118732438">Lukk alle inkognitovinduer</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb
index c2d1fdc..6ce3061 100644
--- a/chrome/app/resources/generated_resources_or.xtb
+++ b/chrome/app/resources/generated_resources_or.xtb
@@ -7062,7 +7062,7 @@
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" ଯୋଗ କରାଗଲା</translation>
 <translation id="9215742531438648683">Google Play Store ଅନଇନଷ୍ଟଲ୍ କରନ୍ତୁ</translation>
 <translation id="9218430445555521422">ଡିଫଲ୍ଟ ଭାବେ ସେଟ୍ କରନ୍ତୁ</translation>
-<translation id="9219103736887031265">ଛବିଗୁଡ଼ିକ</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="9220525904950070496">ଆକାଉଣ୍ଟ କାଢ଼ିଦିଅନ୍ତୁ</translation>
 <translation id="9220820413868316583">ଆଙ୍ଗୁଠି ଉଠାନ୍ତୁ ଏହାପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation>
 <translation id="923467487918828349">ସବୁ ଦେଖାନ୍ତୁ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 70042974e..c58ef30 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Inteligentne rozwiązania Google w Chrome</translation>
 <translation id="1147322039136785890"><ph name="SUPERVISED_USER_NAME" /> może teraz odebrać urządzenie</translation>
 <translation id="1147991416141538220">Aby uzyskać dostęp, skontaktuj się z administratorem tego urządzenia.</translation>
+<translation id="1148063863818152153">Numer EID urządzenia</translation>
 <translation id="1149401351239820326">Miesiąc utraty ważności</translation>
 <translation id="1149725087019908252">Skanuję plik <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">To jest ostatnia automatyczna aktualizacja oprogramowania i zabezpieczeń, którą otrzymuje to urządzenie (<ph name="DEVICE_TYPE" />). Aby otrzymywać aktualizacje w przyszłości, przejdź na nowszy model. <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation>
@@ -316,6 +317,7 @@
 <translation id="1343865611738742294">Przyznaj aplikacjom na Linuksa dostęp do urządzeń USB. Linux nie będzie pamiętać urządzenia USB po jego odłączeniu.</translation>
 <translation id="1346630054604077329">Potwierdź i uruchom ponownie</translation>
 <translation id="1347256498747320987">Instalowanie aktualizacji i aplikacji. Przechodząc dalej, zgadzasz się, że urządzenie może też automatycznie pobierać i instalować aktualizacje oraz aplikacje od Google, Twojego operatora i producenta urządzenia oraz że może się to odbywać z użyciem komórkowej transmisji danych. Niektóre z tych aplikacji mogą oferować zakupy w aplikacji. <ph name="BEGIN_LINK1" />Więcej informacji<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Pamięć – Linux</translation>
 <translation id="1347975661240122359">Aktualizacja się uruchomi, gdy bateria naładuje się do <ph name="BATTERY_LEVEL" />%.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Nie można znaleźć pliku PPD. Upewnij się, że Chromebook jest podłączony do internetu, i spróbuj ponownie.</translation>
@@ -557,6 +559,7 @@
 <translation id="1608668830839595724">Więcej czynności dla wybranych elementów</translation>
 <translation id="161042844686301425">Cyjan</translation>
 <translation id="1611432201750675208">Urządzenie jest zablokowane</translation>
+<translation id="1612019740169791082">Konfiguracja kontenera nie pozwala na zmiany rozmiaru dysku. Aby zmienić ilość miejsca zarezerwowanego dla Linuksa, utwórz kopię zapasową i przywróć ją w nowym kontenerze.</translation>
 <translation id="1614511179807650956">Możliwe, że masz już wykorzystany limit mobilnej transmisji danych. Odwiedź portal aktywacji <ph name="NAME" />, by kupić dodatkowy pakiet danych.</translation>
 <translation id="161460670679785907">Nie można wykryć telefonu</translation>
 <translation id="1616206807336925449">To rozszerzenie nie wymaga specjalnych uprawnień.</translation>
@@ -691,6 +694,7 @@
 <translation id="175772926354468439">Włącz motyw</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Wyświetl w Chrome Web Store</translation>
+<translation id="1761845175367251960">Konta użytkownika <ph name="NAME" /></translation>
 <translation id="176193854664720708">Czytnik linii papilarnych znajduje się na przycisku zasilania. Przyłóż do niego dowolny palec.</translation>
 <translation id="1763046204212875858">Utwórz skróty do aplikacji</translation>
 <translation id="1763808908432309942">Otworzy się na nowej karcie</translation>
@@ -896,6 +900,7 @@
 <translation id="1999115740519098545">Po uruchomieniu</translation>
 <translation id="2000419248597011803">Niektóre pliki cookie oraz zapytania wpisane na pasku adresu i w polu wyszukiwania zostaną wysłane do domyślnej wyszukiwarki</translation>
 <translation id="2002109485265116295">W czasie rzeczywistym</translation>
+<translation id="200217416291116199">Warto utworzyć kopię zapasową plików, by nie utracić danych, jeśli nie uda się przeprowadzić uaktualnienia. Rozpoczęcie uaktualnienia spowoduje wyłączenie Linuksa. Zanim przejdziesz dalej, zapisz otwarte pliki.</translation>
 <translation id="2003130567827682533">Aby włączyć usługę transmisji danych „<ph name="NAME" />”, najpierw połącz się z siecią Wi-Fi</translation>
 <translation id="2005199804247617997">Inne profile</translation>
 <translation id="2006638907958895361">Otwórz link w aplikacji <ph name="APP" /></translation>
@@ -1607,6 +1612,7 @@
 <translation id="2807517655263062534">Tutaj wyświetlają się pobrane pliki</translation>
 <translation id="2809586584051668049">i jeszcze <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
 <translation id="2810390687497823527">Jeśli nie rozpoznajesz jakiegoś rozszerzenia lub przeglądarka nie działa w oczekiwany sposób, tutaj możesz wyłączyć lub dostosować rozszerzenia.</translation>
+<translation id="2811205483104563968">Konta</translation>
 <translation id="2812049959647166806">Standard Thunderbolt nie jest obsługiwany</translation>
 <translation id="2812989263793994277">Nie pokazuj żadnych grafik</translation>
 <translation id="2813094189969465044">Kontrola rodzicielska</translation>
@@ -1645,6 +1651,7 @@
 <translation id="2858138569776157458">Popularne</translation>
 <translation id="2861301611394761800">Aktualizacja systemu zakończona. Uruchom system ponownie.</translation>
 <translation id="2861941300086904918">Menedżer zabezpieczeń klienta rodzimego</translation>
+<translation id="2862815659905780618">Usuń środowisko programistyczne Linuksa</translation>
 <translation id="2864601841139725659">Ustawianie zdjęcia profilowego</translation>
 <translation id="2865919525181940183">Zrzut ekranu z widocznymi na nim teraz programami</translation>
 <translation id="286674810810214575">Sprawdzam źródła zasilania...</translation>
@@ -1758,6 +1765,7 @@
 <translation id="2989123969927553766">Przyspieszenie przewijania myszą</translation>
 <translation id="2989474696604907455">niepodłączone</translation>
 <translation id="2989786307324390836">Plik binarny z kodowaniem DER, jeden certyfikat</translation>
+<translation id="2990313168615879645">Dodaj konto Google</translation>
 <translation id="2992931425024192067">Pokazuj wszystkie powiadomienia</translation>
 <translation id="2993517869960930405">Informacje o aplikacji</translation>
 <translation id="2996286169319737844">Dane są szyfrowane Twoim hasłem synchronizacji. Nie obejmuje to form płatności ani adresów w Google Pay.</translation>
@@ -2369,6 +2377,7 @@
 <translation id="3706463572498736864">Strony na arkusz</translation>
 <translation id="370649949373421643">Włącz Wi-Fi</translation>
 <translation id="370665806235115550">Ładuję...</translation>
+<translation id="3707163604290651814">W tej chwili używasz konta <ph name="NAME" /></translation>
 <translation id="3709244229496787112">Przeglądarka została zamknięta przed zakończeniem pobierania.</translation>
 <translation id="3711931198657368127">&amp;Wklej i otwórz <ph name="URL" /></translation>
 <translation id="3711945201266135623">Wykryto drukarki (<ph name="NUM_PRINTERS" />) na serwerze druku</translation>
@@ -2875,6 +2884,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (aktywne <ph name="NUM_KILOBYTES_LIVE" /> KB)</translation>
 <translation id="4310139701823742692">Plik ma niewłaściwy format. Sprawdź plik PPD i spróbuj ponownie.</translation>
 <translation id="431076611119798497">&amp;Szczegóły</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{1 konto Google}few{<ph name="EXTRA_ACCOUNTS" /> konta Google}many{<ph name="EXTRA_ACCOUNTS" /> kont Google}other{<ph name="EXTRA_ACCOUNTS" /> konta Google}}</translation>
 <translation id="4312866146174492540">Blokuj (domyślnie)</translation>
 <translation id="4314815835985389558">Zarządzanie synchronizacją</translation>
 <translation id="4316850752623536204">Witryna dewelopera</translation>
@@ -3254,6 +3264,7 @@
 <translation id="4764368918650455114">Dopilnuj, by obydwa urządzenia były odblokowane, znajdowały się blisko siebie i miały włączony Bluetooth. Jeśli chcesz coś udostępnić Chromebookowi, upewnij się, że ma włączone Udostępnianie w pobliżu (kliknij godzinę, by otworzyć pasek stanu, a potem wybierz Udostępnianie w pobliżu). <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Zezwala Wiadomościom na Androida przesyłać SMS-y z telefonu na Chromebooka</translation>
 <translation id="4768332406694066911">Masz certyfikaty od tych organizacji potwierdzające Twoją tożsamość</translation>
+<translation id="4773112038801431077">Uaktualnij Linuksa</translation>
 <translation id="477647109558161443">Utwórz skrót na pulpicie</translation>
 <translation id="4776917500594043016">Hasło dla <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4777825441726637019">Sklep Play</translation>
@@ -3747,6 +3758,7 @@
 <translation id="5368720394188453070">Twój telefon jest zablokowany. Aby uzyskać do niego dostęp, odblokuj go.</translation>
 <translation id="5368779022775404937">Zaloguj się na <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Włącz przyspieszenie myszy</translation>
+<translation id="5369694795837229225">Skonfiguruj środowisko programistyczne Linuksa</translation>
 <translation id="5370819323174483825">&amp;Odśwież</translation>
 <translation id="5372529912055771682">Ta wersja systemu operacyjnego nie obsługuje podanego trybu rejestrowania. Upewnij się, że używasz najnowszej wersji i spróbuj ponownie.</translation>
 <translation id="5372579129492968947">Odepnij rozszerzenie</translation>
@@ -4471,6 +4483,8 @@
 <translation id="6212168817037875041">Wyłącz ekran</translation>
 <translation id="6212752530110374741">Prześlij link e-mailem</translation>
 <translation id="6213230117190778270">Odbierz</translation>
+<translation id="6215620815501168899">Zamknij wyskakujące okienko z numerem EID urządzenia i kodem QR</translation>
+<translation id="6216601812881225442">Kontener nie obsługuje zmiany rozmiaru. Aby zmienić ilość miejsca wstępnie przydzielonego dla Linuksa, utwórz kopię zapasową i przywróć ją w nowym kontenerze.</translation>
 <translation id="6216696360484424239">Logowanie automatyczne</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> jest offline. Połącz się z internetem i spróbuj ponownie.</translation>
 <translation id="6220413761270491930">Błąd podczas ładowania rozszerzenia</translation>
@@ -4863,6 +4877,7 @@
 <translation id="6680442031740878064">Dostępne: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Szybkość</translation>
 <translation id="6681668084120808868">Zrób zdjęcie</translation>
+<translation id="6683948477137300040">Pokaż wyskakujące okienko z numerem EID urządzenia i kodem QR</translation>
 <translation id="6684827949542560880">Pobieram najnowszą aktualizację</translation>
 <translation id="668599234725812620">Otwórz Google Play</translation>
 <translation id="6686490380836145850">Zamknij karty po prawej</translation>
@@ -5098,6 +5113,7 @@
 <translation id="6955535239952325894">To ustawienie jest wyłączone w zarządzanych przeglądarkach</translation>
 <translation id="6957044667612803194">Ten klucz bezpieczeństwa nie obsługuje kodów PIN</translation>
 <translation id="6957231940976260713">Nazwa usługi</translation>
+<translation id="6960507406838246615">Wymagana aktualizacja Linuksa</translation>
 <translation id="696103774840402661">Wszystkie pliki i dane lokalne wszystkich użytkowników na tym urządzeniu <ph name="DEVICE_TYPE" /> zostały trwale usunięte.</translation>
 <translation id="6964390816189577014">Bohater</translation>
 <translation id="6964760285928603117">Usuń z grupy</translation>
@@ -5117,6 +5133,7 @@
 <translation id="697312151395002334">Zezwolono na wysyłanie wyskakujących okienek i używanie przekierowań</translation>
 <translation id="6973611239564315524">Dostępne jest uaktualnienie do Debiana 10 (Buster)</translation>
 <translation id="6974609594866392343">Tryb demo offline</translation>
+<translation id="697508444536771064">Wyłącz Linuksa</translation>
 <translation id="6977381486153291903">Wersja oprogramowania</translation>
 <translation id="6977877318519394148">Zainstaluj Rosettę</translation>
 <translation id="6978121630131642226">Wyszukiwarki</translation>
@@ -5517,6 +5534,7 @@
 <translation id="7443806024147773267">Miej dostęp do swoich haseł zawsze wtedy, gdy zalogujesz się na swoje konto Google</translation>
 <translation id="7444983668544353857">Wyłącz – <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Automatyczne instalowanie aplikacji</translation>
+<translation id="7448538354405258275">Pracownik obsługi klienta może użyć numeru EID do aktywowania usługi.</translation>
 <translation id="7449752890690775568">Usunąć hasło?</translation>
 <translation id="7450761244949417357">Otwieram w przeglądarce <ph name="ALTERNATIVE_BROWSER_NAME" /></translation>
 <translation id="7453008956351770337">Wybierając tę drukarkę, zezwalasz na dostęp do niej temu rozszerzeniu:</translation>
@@ -6046,6 +6064,7 @@
 <translation id="8032244173881942855">Nie udało się przesłać karty.</translation>
 <translation id="8033827949643255796">wybrano</translation>
 <translation id="8033958968890501070">Przekroczono limit czasu</translation>
+<translation id="8036049989879571495">Skonfiguruj środowisko programistyczne Linuksa (beta)</translation>
 <translation id="8037117027592400564">Odczyt całego tekstu mówionego przez syntezator mowy</translation>
 <translation id="8037357227543935929">Pytaj (domyślnie)</translation>
 <translation id="803771048473350947">Plik</translation>
@@ -6974,6 +6993,7 @@
 <translation id="909108997331068008">Profil użytkownika <ph name="EXISTING_USER" /> jest już zalogowany na koncie <ph name="NEW_USER" /></translation>
 <translation id="9094033019050270033">Aktualizuj hasło</translation>
 <translation id="9094038138851891550">Nazwa użytkownika jest nieprawidłowa.</translation>
+<translation id="9094859731829297286">Czy na pewno chcesz zarezerwować dysk o stałym rozmiarze dla Linuksa?</translation>
 <translation id="9094982973264386462">Usuń</translation>
 <translation id="9095253524804455615">Usuń</translation>
 <translation id="909554839118732438">Zamknij tryb incognito</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index b993e75..2a996a7 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -433,6 +433,7 @@
 <translation id="1475502736924165259">Você tem certificados no arquivo que não correspondem a nenhuma das outras categorias</translation>
 <translation id="1476088332184200792">Copiar para o dispositivo</translation>
 <translation id="1476607407192946488">&amp;Configurações de idioma</translation>
+<translation id="1477446329585670721"><ph name="DOMAIN" /> requer que você mantenha o cartão inteligente inserido.</translation>
 <translation id="1478340334823509079">Detalhes: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">A instalação não está ativada</translation>
 <translation id="1481537595330271162">Erro ao redimensionar o disco</translation>
@@ -2031,6 +2032,7 @@
 <translation id="3320630259304269485">"Navegação segura" (proteção contra sites perigosos) e outras configurações de segurança</translation>
 <translation id="3323295311852517824">{NUM_FILES,plural, =0{Esses dados têm conteúdo confidencial ou perigoso. Remova o conteúdo e tente novamente.}=1{Esse arquivo tem conteúdo confidencial ou perigoso. Remova o conteúdo e tente novamente.}one{Esse arquivo tem conteúdo confidencial ou perigoso. Remova o conteúdo e tente novamente.}other{Esses arquivos têm conteúdo confidencial ou perigoso. Remova o conteúdo e tente novamente.}}</translation>
 <translation id="3323521181261657960">Bônus! Você ganhou mais tempo de uso</translation>
+<translation id="3325804108816646710">Procurando perfis disponíveis…</translation>
 <translation id="3325910708063135066">A câmera e o microfone estão desativados nas preferências do sistema do Mac</translation>
 <translation id="3327050066667856415">Os Chromebooks são desenvolvidos para serem seguros. Seu dispositivo é automaticamente protegido contra malwares, sem a necessidade de softwares extras.</translation>
 <translation id="3328489342742826322">A restauração de um backup exclui todos os aplicativos e dados da sua pasta de arquivos do Linux.</translation>
@@ -2099,6 +2101,7 @@
 <translation id="3412265149091626468">Ir para a seleção</translation>
 <translation id="3413122095806433232">Emissores de autoridades de certificação: <ph name="LOCATION" /></translation>
 <translation id="3414952576877147120">Tamanho:</translation>
+<translation id="3414966631182382431">Seu <ph name="BEGIN_LINK" />navegador é gerenciado<ph name="END_LINK" /> por <ph name="MANAGER" /></translation>
 <translation id="3416468988018290825">Sempre mostrar URLs completos</translation>
 <translation id="3417835166382867856">Pesquisar guias</translation>
 <translation id="3417836307470882032">Relógio de 24 horas</translation>
@@ -3173,6 +3176,7 @@
 <translation id="4651484272688821107">Não foi possível carregar o componente on-line com recursos do modo de demonstração.</translation>
 <translation id="4652935475563630866">A mudança na configuração da câmera exige que você reinicialize o Parallels Desktop. Faça isso para continuar.</translation>
 <translation id="4653405415038586100">Erro ao configurar o Linux</translation>
+<translation id="4657914796247705218">Velocidade do TrackPoint</translation>
 <translation id="465878909996028221">Apenas os protocolos http, https e file são compatíveis com redirecionamentos do navegador.</translation>
 <translation id="4659077111144409915">Conta principal</translation>
 <translation id="4659126640776004816">Quando você faz login na sua Conta do Google, este recurso é ativado.</translation>
@@ -3833,6 +3837,7 @@
 <translation id="5470735824776589490">Para que seu dispositivo possa ser redefinido com o Powerwash, é necessário reiniciá-lo. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="5471768120198416576">Olá! Eu sou sua voz para conversão de texto em voz.</translation>
 <translation id="5472627187093107397">Salvar senhas para este site</translation>
+<translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{O PIN precisa ter pelo menos 1 caractere}one{O PIN precisa ter pelo menos # caractere}other{O PIN precisa ter pelo menos # caracteres}}</translation>
 <translation id="5473333559083690127">Digite o novo PIN novamente</translation>
 <translation id="5481273127572794904">Bloquear o download automático de vários arquivos</translation>
 <translation id="5481941284378890518">Adicionar impressoras próximas</translation>
@@ -4372,6 +4377,7 @@
 <translation id="6087960857463881712">Rosto maravilhado</translation>
 <translation id="6091761513005122595">Compartilhamento ativado.</translation>
 <translation id="6093888419484831006">Cancelando atualização...</translation>
+<translation id="6095541101974653012">Sua conta foi desconectada.</translation>
 <translation id="6095984072944024315">−</translation>
 <translation id="6096047740730590436">Abrir maximizado</translation>
 <translation id="6096326118418049043">Nome X.500</translation>
@@ -4706,6 +4712,7 @@
 <translation id="6474884162850599008">Desconectar a conta do Google Drive</translation>
 <translation id="6475697075626596525"><ph name="APP_NAME" /> quer compartilhar o conteúdo da sua tela. Escolha o que você quer compartilhar.</translation>
 <translation id="6478248366783946499">Manter arquivo perigoso?</translation>
+<translation id="6480327114083866287">Gerenciado por <ph name="MANAGER" /></translation>
 <translation id="6483485061007832714">Abrir o download</translation>
 <translation id="6483805311199035658">Abrindo <ph name="FILE" />...</translation>
 <translation id="6488384360522318064">Selecionar idioma</translation>
@@ -4894,6 +4901,7 @@
 <translation id="671928215901716392">Bloquear tela</translation>
 <translation id="6721678857435001674">Veja a marca e o modelo da sua chave de segurança</translation>
 <translation id="6721972322305477112">&amp;Arquivo</translation>
+<translation id="672208878794563299">Este site perguntará novamente na próxima vez.</translation>
 <translation id="672213144943476270">Desbloqueie seu perfil antes de navegar como convidado.</translation>
 <translation id="6723661294526996303">Importar favoritos e configurações...</translation>
 <translation id="6723839937902243910">Energia</translation>
@@ -6291,6 +6299,7 @@
 <translation id="8317671367883557781">Adicionar conexão de rede</translation>
 <translation id="8319414634934645341">Uso estendido de chave</translation>
 <translation id="8320459152843401447">A tela inteira</translation>
+<translation id="8321837372750396788">Este <ph name="DEVICE_TYPE" /> será gerenciado por <ph name="MANAGER" />.</translation>
 <translation id="8322814362483282060">Esta página foi impedida de acessar seu microfone.</translation>
 <translation id="8323167517179506834">Digitar URL</translation>
 <translation id="8324784016256120271">Os sites podem usar cookies para ver sua atividade de navegação em diferentes páginas para, por exemplo, personalizar anúncios</translation>
@@ -6598,6 +6607,7 @@
 <translation id="8698269656364382265">Para voltar à tela anterior, deslize do lado esquerdo para o direito.</translation>
 <translation id="869884720829132584">Menu Aplicativos</translation>
 <translation id="869891660844655955">Validade</translation>
+<translation id="8702825062053163569">Seu <ph name="DEVICE_TYPE" /> foi bloqueado.</translation>
 <translation id="8703346390800944767">Pular anúncio</translation>
 <translation id="8705331520020532516">Número de série</translation>
 <translation id="8705580154597116082">Wi-Fi disponível via smartphone</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 55adfd810..ca55012 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Profită de ingeniozitatea Google în Chrome</translation>
 <translation id="1147322039136785890"><ph name="SUPERVISED_USER_NAME" /> poate acum să folosească dispozitivul</translation>
 <translation id="1147991416141538220">Pentru a solicita acces, contactează administratorul dispozitivului.</translation>
+<translation id="1148063863818152153">Numărul EID al dispozitivului</translation>
 <translation id="1149401351239820326">Luna expirării</translation>
 <translation id="1149725087019908252">Se scanează <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">Aceasta este cea mai recentă actualizare automată de software și securitate pentru acest dispozitiv <ph name="DEVICE_TYPE" />. Pentru a primi actualizări viitoare, fă upgrade la un model mai nou. <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation>
@@ -315,6 +316,7 @@
 <translation id="1343865611738742294">Permite aplicațiilor Linux să acceseze dispozitivele USB. Linux nu va păstra un dispozitiv USB după ce este eliminat.</translation>
 <translation id="1346630054604077329">Confirmă și repornește</translation>
 <translation id="1347256498747320987">Instalează actualizări și aplicații. Dacă alegi să continui, ești de acord că este posibil ca dispozitivul să descarce și să instaleze automat actualizări și aplicații de la Google, de la operatorul tău și de la producătorul dispozitivului, eventual folosind datele mobile. Unele dintre aceste aplicații pot oferi achiziții în aplicație. <ph name="BEGIN_LINK1" />Află mai multe<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Stocare Linux</translation>
 <translation id="1347975661240122359">Actualizarea va începe când bateria va ajunge la <ph name="BATTERY_LEVEL" />%.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Nu se poate găsi fișierul PPD. Asigură-te că Chromebookul este online și încearcă din nou.</translation>
@@ -556,6 +558,7 @@
 <translation id="1608668830839595724">Mai multe acțiuni pentru elementele selectate</translation>
 <translation id="161042844686301425">Cyan</translation>
 <translation id="1611432201750675208">Dispozitivul este blocat</translation>
+<translation id="1612019740169791082">Containerul nu este configurat pentru a accepta redimensionarea discului. Pentru a ajusta spațiul rezervat pentru Linux, fă-i backup și restabilește-l într-un container nou.</translation>
 <translation id="1614511179807650956">Este posibil să fi epuizat datele mobile puse la dispoziție. Accesează portalul de activare <ph name="NAME" /> pentru a cumpăra mai multe date.</translation>
 <translation id="161460670679785907">Nu se poate detecta telefonul</translation>
 <translation id="1616206807336925449">Această extensie nu necesită permisiuni speciale.</translation>
@@ -690,6 +693,7 @@
 <translation id="175772926354468439">Activați tema</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Vezi în Magazinul web Chrome</translation>
+<translation id="1761845175367251960">Conturile utilizatorului <ph name="NAME" /></translation>
 <translation id="176193854664720708">Senzorul de amprentă digitală se află în butonul de pornire. Atinge-l ușor cu oricare deget.</translation>
 <translation id="1763046204212875858">Creează comenzi rapide pentru aplicație</translation>
 <translation id="1763808908432309942">Se deschide într-o filă nouă</translation>
@@ -899,6 +903,7 @@
 <translation id="1999115740519098545">La pornire</translation>
 <translation id="2000419248597011803">Trimite anumite cookie-uri și căutări din bara de adrese și din caseta de căutare în motorul de căutare prestabilit</translation>
 <translation id="2002109485265116295">În timp real</translation>
+<translation id="200217416291116199">Backupul fișierelor este recomandat în cazul în care upgrade-ul nu se finalizează. Dacă începi upgrade-ul, sistemul de operare Linux se va opri. Salvează fișierele deschise înainte de a continua.</translation>
 <translation id="2003130567827682533">Pentru a activa datele „<ph name="NAME" />”, conectează-te mai întâi la o rețea Wi-Fi.</translation>
 <translation id="2005199804247617997">Alte profiluri</translation>
 <translation id="2006638907958895361">Deschide linkul în <ph name="APP" /></translation>
@@ -1610,6 +1615,7 @@
 <translation id="2807517655263062534">Fișierele pe care le descarci apar aici</translation>
 <translation id="2809586584051668049">și încă <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
 <translation id="2810390687497823527">Dacă nu recunoști o extensie sau dacă browserul nu funcționează așa cum te așteptai, poți să dezactivezi sau să personalizezi extensiile aici.</translation>
+<translation id="2811205483104563968">Conturi</translation>
 <translation id="2812049959647166806">Thunderbolt nu este acceptat</translation>
 <translation id="2812989263793994277">Nu afișa nicio imagine</translation>
 <translation id="2813094189969465044">Control parental</translation>
@@ -1648,6 +1654,7 @@
 <translation id="2858138569776157458">Site-uri de top</translation>
 <translation id="2861301611394761800">Sistemul a fost actualizat. Repornește-l.</translation>
 <translation id="2861941300086904918">Manager de securitate Client nativ</translation>
+<translation id="2862815659905780618">Elimină mediul de dezvoltare Linux</translation>
 <translation id="2864601841139725659">Setează fotografia de profil</translation>
 <translation id="2865919525181940183">Captură de ecran a programelor afișate pe ecran</translation>
 <translation id="286674810810214575">Se verifică sursele de alimentare…</translation>
@@ -1761,6 +1768,7 @@
 <translation id="2989123969927553766">Accelerarea derulării cu mouse-ul</translation>
 <translation id="2989474696604907455">neconectat</translation>
 <translation id="2989786307324390836">Certificat unic, sub formă de fișier binar cu codificarea DER</translation>
+<translation id="2990313168615879645">Adaugă Contul Google</translation>
 <translation id="2992931425024192067">Afișează integral conținutul notificărilor</translation>
 <translation id="2993517869960930405">Informații despre aplicație</translation>
 <translation id="2996286169319737844">Datele sunt criptate cu expresia ta de acces pentru sincronizare. Acest lucru nu este valabil pentru metodele de plată și adresele din Google Pay.</translation>
@@ -2372,6 +2380,7 @@
 <translation id="3706463572498736864">Pagini pe foaie</translation>
 <translation id="370649949373421643">Activați Wi-Fi</translation>
 <translation id="370665806235115550">Se încarcă…</translation>
+<translation id="3707163604290651814">Te-ai conectat ca <ph name="NAME" /></translation>
 <translation id="3709244229496787112">Browserul a fost oprit înainte de finalizarea descărcării.</translation>
 <translation id="3711931198657368127">In&amp;serează și accesează <ph name="URL" /></translation>
 <translation id="3711945201266135623">S-au găsit <ph name="NUM_PRINTERS" /> imprimante de la serverul de imprimare</translation>
@@ -2878,6 +2887,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB live)</translation>
 <translation id="4310139701823742692">Fișierul are un format incorect. Verifică fișierul PPD și încearcă din nou.</translation>
 <translation id="431076611119798497">&amp;Detalii</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{Un cont Google}few{<ph name="EXTRA_ACCOUNTS" /> conturi Google}other{<ph name="EXTRA_ACCOUNTS" /> de conturi Google}}</translation>
 <translation id="4312866146174492540">Blochează (în mod prestabilit)</translation>
 <translation id="4314815835985389558">Gestionează sincronizarea</translation>
 <translation id="4316850752623536204">Site-ul dezvoltatorului</translation>
@@ -3257,6 +3267,7 @@
 <translation id="4764368918650455114">Asigură-te că ambele dispozitive sunt deblocate, apropiate unul de celălalt și au activată conexiunea Bluetooth. Dacă trimiți fișiere unui Chromebook, asigură-te că are funcția Nearby Share deschisă (deschide zona de stare selectând ora, apoi selectează Nearby Share). <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Permite Android Messages să retransmită mesaje text din telefonul tău în Chromebook</translation>
 <translation id="4768332406694066911">Ai certificate de la aceste organizații care te identifică</translation>
+<translation id="4773112038801431077">Fă upgrade pentru Linux</translation>
 <translation id="477647109558161443">Creează o comandă rapidă pe desktop</translation>
 <translation id="4776917500594043016">Parolă pentru <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4777825441726637019">Magazin Play</translation>
@@ -3750,6 +3761,7 @@
 <translation id="5368720394188453070">Telefonul este blocat. Pentru acces, deblochează-l.</translation>
 <translation id="5368779022775404937">Conectează-te la <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Activează accelerarea mouse-ului</translation>
+<translation id="5369694795837229225">Configurează mediul de dezvoltare Linux</translation>
 <translation id="5370819323174483825">&amp;Reîncarcă</translation>
 <translation id="5372529912055771682">Modul de înscriere furnizat nu este acceptat de această versiune a sistemului de operare. Asigurați-vă că rulați cea mai recentă versiune și încercați din nou.</translation>
 <translation id="5372579129492968947">Anulează fixarea extensiei</translation>
@@ -4474,6 +4486,8 @@
 <translation id="6212168817037875041">Dezactivează ecranul</translation>
 <translation id="6212752530110374741">Trimite linkul prin e-mail</translation>
 <translation id="6213230117190778270">Primește</translation>
+<translation id="6215620815501168899">Închide codul EID și pop-upul cu codul QR</translation>
+<translation id="6216601812881225442">Containerul nu acceptă redimensionarea. Pentru a ajusta spațiul alocat în avans pentru Linux, fă-i backup și restabilește-l într-un container nou.</translation>
 <translation id="6216696360484424239">Conectează-te în mod automat</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> este offline. Conectează-te la internet și încearcă din nou.</translation>
 <translation id="6220413761270491930">Eroare la încărcarea extensiei</translation>
@@ -4866,6 +4880,7 @@
 <translation id="6680442031740878064">Spațiu disponibil: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Ritmul</translation>
 <translation id="6681668084120808868">Fotografiază</translation>
+<translation id="6683948477137300040">Arată codul EID al dispozitivului și un pop-up cu codul QR</translation>
 <translation id="6684827949542560880">Se descarcă ultima actualizare</translation>
 <translation id="668599234725812620">Deschide Google Play</translation>
 <translation id="6686490380836145850">Închide filele de la dreapta</translation>
@@ -5101,6 +5116,7 @@
 <translation id="6955535239952325894">Setarea este dezactivată în browserele gestionate</translation>
 <translation id="6957044667612803194">Această cheie de securitate nu acceptă coduri PIN</translation>
 <translation id="6957231940976260713">Nume serviciu</translation>
+<translation id="6960507406838246615">Este necesară o actualizare Linux</translation>
 <translation id="696103774840402661">Toate fișierele și datele locale pentru utilizatorii de pe acest <ph name="DEVICE_TYPE" /> au fost șterse definitiv.</translation>
 <translation id="6964390816189577014">Erou</translation>
 <translation id="6964760285928603117">Elimină din grup</translation>
@@ -5120,6 +5136,7 @@
 <translation id="697312151395002334">Au permisiunea de a afișa ferestre pop-up și de a folosi redirecționări</translation>
 <translation id="6973611239564315524">Este disponibil un upgrade la Debian 10 (Buster)</translation>
 <translation id="6974609594866392343">Modul demo offline</translation>
+<translation id="697508444536771064">Închide Linux</translation>
 <translation id="6977381486153291903">Versiune firmware</translation>
 <translation id="6977877318519394148">Instalează Rosetta</translation>
 <translation id="6978121630131642226">Motoarele de căutare</translation>
@@ -5520,6 +5537,7 @@
 <translation id="7443806024147773267">Accesează-ți parolele oricând te conectezi la Contul Google</translation>
 <translation id="7444983668544353857">Dezactivează <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Instalează automat aplicații</translation>
+<translation id="7448538354405258275">Un reprezentant al serviciului de asistență pentru clienți poate folosi acest număr EID pentru a te ajuta să activezi serviciul.</translation>
 <translation id="7449752890690775568">Elimini parola?</translation>
 <translation id="7450761244949417357">Se deschide acum în <ph name="ALTERNATIVE_BROWSER_NAME" /></translation>
 <translation id="7453008956351770337">Selectând această imprimantă, acorzi următoarei extensii permisiunea de a accesa imprimanta:</translation>
@@ -6049,6 +6067,7 @@
 <translation id="8032244173881942855">Nu se poate proiecta fila.</translation>
 <translation id="8033827949643255796">selectate</translation>
 <translation id="8033958968890501070">Expirare</translation>
+<translation id="8036049989879571495">Configurează mediul de dezvoltare Linux (Beta)</translation>
 <translation id="8037117027592400564">Citește tot textul rostit folosind vorbirea sintetizată</translation>
 <translation id="8037357227543935929">Solicită (în mod prestabilit)</translation>
 <translation id="803771048473350947">Fișier</translation>
@@ -6976,6 +6995,7 @@
 <translation id="909108997331068008">Te-ai conectat deja la <ph name="NEW_USER" /> cu profilul de utilizator <ph name="EXISTING_USER" /></translation>
 <translation id="9094033019050270033">Actualizează parola</translation>
 <translation id="9094038138851891550">Nume de utilizator nevalid</translation>
+<translation id="9094859731829297286">Sigur vrei să rezervi un disc cu dimensiune fixă pentru Linux?</translation>
 <translation id="9094982973264386462">Elimină</translation>
 <translation id="9095253524804455615">Elimină</translation>
 <translation id="909554839118732438">Închide ferestrele incognito</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index de6e4557f..1ad1372 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -435,6 +435,7 @@
 <translation id="1475502736924165259">У вас имеются сертификаты, которые не попадают ни в одну из других категорий</translation>
 <translation id="1476088332184200792">Копировать на мое устройство</translation>
 <translation id="1476607407192946488">&amp;Язык</translation>
+<translation id="1477446329585670721">По правилам домена <ph name="DOMAIN" /> смарт-карта должна быть вставлена.</translation>
 <translation id="1478340334823509079">Подробные сведения: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Установка не разрешена</translation>
 <translation id="1481537595330271162">При изменении размера диска произошла ошибка.</translation>
@@ -2031,6 +2032,7 @@
 <translation id="3320630259304269485">Безопасный просмотр (защита от опасных сайтов) и другие настройки безопасности</translation>
 <translation id="3323295311852517824">{NUM_FILES,plural, =0{Эти данные содержат конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}=1{Этот файл содержит конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}one{Эти файлы содержат конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}few{Эти файлы содержат конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}many{Эти файлы содержат конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}other{Эти файлы содержат конфиденциальный или опасный контент. Удалите этот контент и повторите попытку.}}</translation>
 <translation id="3323521181261657960">Время использования устройства продлено</translation>
+<translation id="3325804108816646710">Поиск доступных профилей…</translation>
 <translation id="3325910708063135066">Камера и микрофон отключены в системных настройках macOS</translation>
 <translation id="3327050066667856415">Создавая Chromebook, мы уделили большое внимание безопасности. Вам не нужно устанавливать дополнительные программы для защиты от вредоносного ПО.</translation>
 <translation id="3328489342742826322">При восстановлении из резервной копии будут удалены все существующие Linux-приложения и данные в папке "Файлы Linux".</translation>
@@ -2098,6 +2100,7 @@
 <translation id="3412265149091626468">Перейти к выделенному</translation>
 <translation id="3413122095806433232">Издатели центра сертификации: <ph name="LOCATION" /></translation>
 <translation id="3414952576877147120">Размер:</translation>
+<translation id="3414966631182382431">Вашим <ph name="BEGIN_LINK" />браузером управляет<ph name="END_LINK" /> <ph name="MANAGER" />.</translation>
 <translation id="3416468988018290825">Всегда показывать URL полностью</translation>
 <translation id="3417835166382867856">Поиск по вкладкам</translation>
 <translation id="3417836307470882032">24-часовой формат времени</translation>
@@ -3172,6 +3175,7 @@
 <translation id="4651484272688821107">Не удалось загрузить онлайн-компонент с ресурсами демонстрационного режима.</translation>
 <translation id="4652935475563630866">Изменено разрешение на доступ к камере. Чтобы продолжить, перезапустите Parallels Desktop.</translation>
 <translation id="4653405415038586100">Ошибка при настройке Linux</translation>
+<translation id="4657914796247705218">Скорость TrackPoint</translation>
 <translation id="465878909996028221">Для переадресации в браузере поддерживаются только протоколы HTTP, HTTPS и файловые протоколы.</translation>
 <translation id="4659077111144409915">Основной аккаунт</translation>
 <translation id="4659126640776004816">Эта функция включается, когда вы входите в аккаунт Google.</translation>
@@ -3832,6 +3836,7 @@
 <translation id="5470735824776589490">Перед сбросом настроек с помощью функции Powerwash необходимо перезагрузить устройство. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation>
 <translation id="5471768120198416576">Здравствуйте! Я буду озвучивать для вас текст.</translation>
 <translation id="5472627187093107397">Сохранять пароли для этого сайта</translation>
+<translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN-код должен содержать не менее 1 символа.}one{PIN-код должен содержать не менее # символа.}few{PIN-код должен содержать не менее # символов.}many{PIN-код должен содержать не менее # символов.}other{PIN-код должен содержать не менее # символа.}}</translation>
 <translation id="5473333559083690127">Повторно введите новый PIN-код</translation>
 <translation id="5481273127572794904">Запретить сайтам автоматически скачивать несколько файлов</translation>
 <translation id="5481941284378890518">Добавить ближайшие принтеры</translation>
@@ -4370,6 +4375,7 @@
 <translation id="6087960857463881712">Модник</translation>
 <translation id="6091761513005122595">Ресурс подключен.</translation>
 <translation id="6093888419484831006">Отмена обновления...</translation>
+<translation id="6095541101974653012">Вы вышли из аккаунта</translation>
 <translation id="6095984072944024315">−</translation>
 <translation id="6096047740730590436">Развернуть</translation>
 <translation id="6096326118418049043">Имя X.500</translation>
@@ -4703,6 +4709,7 @@
 <translation id="6474884162850599008">Отключить аккаунт Google Диска</translation>
 <translation id="6475697075626596525"><ph name="APP_NAME" /> хочет предоставить доступ к вашему экрану. Выберите окно, которое нужно показать.</translation>
 <translation id="6478248366783946499">Сохранить опасный файл?</translation>
+<translation id="6480327114083866287">Под управлением <ph name="MANAGER" /></translation>
 <translation id="6483485061007832714">Открыть скачанный файл?</translation>
 <translation id="6483805311199035658">Открывается <ph name="FILE" />...</translation>
 <translation id="6488384360522318064">Выбрать язык</translation>
@@ -4891,6 +4898,7 @@
 <translation id="671928215901716392">Блокировать экран</translation>
 <translation id="6721678857435001674">Просмотр производителя и модели Электронного ключа</translation>
 <translation id="6721972322305477112">&amp;Файл</translation>
+<translation id="672208878794563299">В следующий раз этот сайт снова запросит разрешение.</translation>
 <translation id="672213144943476270">Чтобы пользоваться браузером в гостевом режиме, разблокируйте свой профиль.</translation>
 <translation id="6723661294526996303">Импортировать закладки и настройки</translation>
 <translation id="6723839937902243910">Питание</translation>
@@ -6287,6 +6295,7 @@
 <translation id="8317671367883557781">Добавить сетевое подключение</translation>
 <translation id="8319414634934645341">Расширенное использование ключа</translation>
 <translation id="8320459152843401447">Весь экран</translation>
+<translation id="8321837372750396788">Этим устройством <ph name="DEVICE_TYPE" /> будет управлять <ph name="MANAGER" />.</translation>
 <translation id="8322814362483282060">Доступ к вашему микрофону для этой страницы заблокирован.</translation>
 <translation id="8323167517179506834">Введите URL</translation>
 <translation id="8324784016256120271">Сайты могут использовать файлы cookie, чтобы отслеживать ваши действия в браузере, например, для показа персонализированной рекламы.</translation>
@@ -6594,6 +6603,7 @@
 <translation id="8698269656364382265">Чтобы вернуться на предыдущий экран, проведите слева направо.</translation>
 <translation id="869884720829132584">Меню приложений</translation>
 <translation id="869891660844655955">Срок действия</translation>
+<translation id="8702825062053163569">Устройство <ph name="DEVICE_TYPE" /> заблокировано</translation>
 <translation id="8703346390800944767">Пропустить</translation>
 <translation id="8705331520020532516">Серийный номер</translation>
 <translation id="8705580154597116082">Доступно подключение к Wi-Fi через телефон</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index 44bdbe02..0519016 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Prejmite Googlove pametne rešitve v Chromu</translation>
 <translation id="1147322039136785890">Zdaj je na vrsti <ph name="SUPERVISED_USER_NAME" /></translation>
 <translation id="1147991416141538220">Če želite zahtevati dostop, se obrnite na skrbnika naprave.</translation>
+<translation id="1148063863818152153">Številka EID naprave</translation>
 <translation id="1149401351239820326">Mesec poteka</translation>
 <translation id="1149725087019908252">Pregled datoteke <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">To je zadnja samodejna posodobitev programske opreme in varnostna posodobitev za to napravo <ph name="DEVICE_TYPE" />. Če želite v prihodnje prejemati posodobitve, nagradite na novejši model. <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation>
@@ -317,6 +318,7 @@
 <translation id="1343865611738742294">Omogočanje, da aplikacije za Linux dostopajo do naprav USB. Linux si ne zapomni naprave USB, ko jo odstranite.</translation>
 <translation id="1346630054604077329">Potrdi in zaženi znova</translation>
 <translation id="1347256498747320987">Namestitev posodobitev in aplikacij. Če nadaljujete, se strinjate, da lahko ta naprava tudi samodejno prenese in namesti posodobitve ter aplikacije, ki jih zagotavljajo Google, vaš operater in proizvajalec vaše naprave – morda s prenosom podatkov v mobilnih omrežjih. Nekatere od teh aplikacij morda ponujajo nakupe v aplikaciji. <ph name="BEGIN_LINK1" />Več o tem<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Shramba za Linux</translation>
 <translation id="1347975661240122359">Posodobitev se bo začela, ko bo akumulator dosegel <ph name="BATTERY_LEVEL" /> % napolnjenosti.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Datoteke PPD ni mogoče najti. Preverite, ali je Chromebook povezan v splet, in poskusite znova.</translation>
@@ -558,6 +560,7 @@
 <translation id="1608668830839595724">Več dejanj za izbrane elemente</translation>
 <translation id="161042844686301425">Cianova</translation>
 <translation id="1611432201750675208">Naprava je zaklenjena</translation>
+<translation id="1612019740169791082">Vsebnik ni konfiguriran za podporo spreminjanja velikosti diska. Če želite prilagoditi količino prostora, ki je rezerviran za Linux, ustvarite varnostno kopijo in jo nato obnovite v novem vsebniku.</translation>
 <translation id="1614511179807650956">Morda ste porabili dovoljeno količino prenosa podatkov v mobilnem omrežju. Večjo količino podatkov lahko kupite na portalu za aktiviranje <ph name="NAME" />.</translation>
 <translation id="161460670679785907">Ni mogoče zaznati vašega telefona</translation>
 <translation id="1616206807336925449">Za to razširitev so potrebna posebna dovoljenja.</translation>
@@ -692,6 +695,7 @@
 <translation id="175772926354468439">Omogoči temo</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Prikaži v Spletni trgovini Chrome</translation>
+<translation id="1761845175367251960">Računi osebe <ph name="NAME" /></translation>
 <translation id="176193854664720708">Tipalo prstnih odtisov je v gumbu za vklop. Rahlo se ga dotaknite s poljubnim prstom.</translation>
 <translation id="1763046204212875858">Ustvari bližnjice do &amp;programov ...</translation>
 <translation id="1763808908432309942">Odpre se na novem zavihku</translation>
@@ -901,6 +905,7 @@
 <translation id="1999115740519098545">Ob zagonu</translation>
 <translation id="2000419248597011803">Pošilja nekatere piškotke in iskanja iz naslovne vrstice ter iskalnega polja privzetemu iskalniku</translation>
 <translation id="2002109485265116295">Sprotno</translation>
+<translation id="200217416291116199">Priporočamo varnostno kopiranje datotek, če nadgradnje ne bi bilo mogoče dokončati. Če začnete nadgradnjo, se bo Linux zaustavil. Pred nadaljevanjem shranite odprte datoteke.</translation>
 <translation id="2003130567827682533">Če želite aktivirati podatke omrežja »<ph name="NAME" />«, se najprej povežite z omrežjem Wi-Fi.</translation>
 <translation id="2005199804247617997">Drugi profili</translation>
 <translation id="2006638907958895361">Odpiranje povezave v aplikaciji <ph name="APP" /></translation>
@@ -1612,6 +1617,7 @@
 <translation id="2807517655263062534">Tu so prikazane datoteke, ki jih prenesete</translation>
 <translation id="2809586584051668049">in še <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
 <translation id="2810390687497823527">Če razširitve ne prepoznate ali če brskalnik ne deluje po pričakovanjih, lahko tukaj izklopite ali prilagodite razširitve.</translation>
+<translation id="2811205483104563968">Računi</translation>
 <translation id="2812049959647166806">Thunderbolt ni podprt</translation>
 <translation id="2812989263793994277">Ne pokaži slik</translation>
 <translation id="2813094189969465044">Starševski nadzor</translation>
@@ -1650,6 +1656,7 @@
 <translation id="2858138569776157458">Najb. prilj.</translation>
 <translation id="2861301611394761800">Posodobitev sistema je končana. Znova zaženite sistem.</translation>
 <translation id="2861941300086904918">Upravitelj varnosti Native Client</translation>
+<translation id="2862815659905780618">Odstranjevanje razvojnega okolja Linux</translation>
 <translation id="2864601841139725659">Nastavitev slike za profil</translation>
 <translation id="2865919525181940183">Posnetek zaslona s programi, ki so trenutno na zaslon</translation>
 <translation id="286674810810214575">Preverjanje virov napajanja ...</translation>
@@ -1763,6 +1770,7 @@
 <translation id="2989123969927553766">Pospeševanje pomikanja z miško</translation>
 <translation id="2989474696604907455">ni priključeno</translation>
 <translation id="2989786307324390836">DER kodirano dvojiško, enojno potrdilo</translation>
+<translation id="2990313168615879645">Dodaj račun Google</translation>
 <translation id="2992931425024192067">Pokaži vso vsebino obvestil</translation>
 <translation id="2993517869960930405">Podatki o aplikaciji</translation>
 <translation id="2996286169319737844">Podatki so šifrirani z vašim geslom za sinhronizacijo. To ne vključuje plačilnih sredstev in naslovov iz Googla Pay.</translation>
@@ -2374,6 +2382,7 @@
 <translation id="3706463572498736864">Strani na list</translation>
 <translation id="370649949373421643">Omogoči Wi-Fi</translation>
 <translation id="370665806235115550">Nalaganje ...</translation>
+<translation id="3707163604290651814">Trenutno ste prijavljeni kot <ph name="NAME" /></translation>
 <translation id="3709244229496787112">Brskalnik se je zaprl pred dokončanjem prenosa.</translation>
 <translation id="3711931198657368127">&amp;Prilepi in pojdi na <ph name="URL" /></translation>
 <translation id="3711945201266135623">Število najdenih tiskalnikov v tiskalnem strežniku: <ph name="NUM_PRINTERS" />.</translation>
@@ -2880,6 +2889,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> KB (<ph name="NUM_KILOBYTES_LIVE" /> KB dejavno)</translation>
 <translation id="4310139701823742692">Datoteka je v napačni obliki zapisa. Preverite datoteko PPD in poskusite znova.</translation>
 <translation id="431076611119798497">&amp;Podrobnosti</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{1 račun Google}one{<ph name="EXTRA_ACCOUNTS" /> račun Google}two{<ph name="EXTRA_ACCOUNTS" /> računa Google}few{<ph name="EXTRA_ACCOUNTS" /> računi Google}other{<ph name="EXTRA_ACCOUNTS" /> računov Google}}</translation>
 <translation id="4312866146174492540">Blokira (privzeto)</translation>
 <translation id="4314815835985389558">Upravljanje sinhronizacije</translation>
 <translation id="4316850752623536204">Spletno mesto razvijalca</translation>
@@ -3259,6 +3269,7 @@
 <translation id="4764368918650455114">Prepričajte se, da sta obe napravi odklenjeni, blizu druga druge ter imata vklopljen Bluetooth. Če delite s Chromebookom, mora biti v njem vklopljena funkcija Deljenje v bližini (odprite območje stanja tako, da izberete uro, nato izberite Deljenje v bližini). <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Aplikaciji Android Messages omogoča posredovanje sporočil SMS iz telefona v Chromebook</translation>
 <translation id="4768332406694066911">Imate potrdila teh organizacij, ki vas identificirajo</translation>
+<translation id="4773112038801431077">Nadgradnja Linuxa</translation>
 <translation id="477647109558161443">Ustvari bližnjico na namizju</translation>
 <translation id="4776917500594043016">Geslo za <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4777825441726637019">Trgovina Play</translation>
@@ -3752,6 +3763,7 @@
 <translation id="5368720394188453070">Telefon je zaklenjen. Za dostop ga odklenite.</translation>
 <translation id="5368779022775404937">Prijavite se v domeno <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Omogočanje pospeševanja miške</translation>
+<translation id="5369694795837229225">Nastavitev razvojnega okolja Linux</translation>
 <translation id="5370819323174483825">&amp;Znova naloži</translation>
 <translation id="5372529912055771682">Ta različica operacijskega sistema ne podpira navedenega načina včlanitve. Poskrbite, da imate nameščeno najnovejšo različico, in poskusite znova.</translation>
 <translation id="5372579129492968947">Odpenjanje razširitve</translation>
@@ -4478,6 +4490,8 @@
 <translation id="6212168817037875041">Izklop zaslona</translation>
 <translation id="6212752530110374741">Pošlji povezavo po e-pošti</translation>
 <translation id="6213230117190778270">Sprejmi</translation>
+<translation id="6215620815501168899">Zapiranje pojavnega okna s številko EID in kodo QR</translation>
+<translation id="6216601812881225442">Vsebnik ne podpira spreminjanja velikosti. Če želite prilagoditi količino prostora, ki je vnaprej dodeljen Linuxu, ustvarite varnostno kopijo in jo nato obnovite v novem vsebniku.</translation>
 <translation id="6216696360484424239">Samodejna prijava</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> nima povezave. Povežite se v internet in poskusite znova.</translation>
 <translation id="6220413761270491930">Napaka pri nalaganju razširitve</translation>
@@ -4870,6 +4884,7 @@
 <translation id="6680442031740878064">Na voljo: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Hitrost</translation>
 <translation id="6681668084120808868">Posnemi fotografijo</translation>
+<translation id="6683948477137300040">Prikaz pojavnega okna s številko EID in kodo QR</translation>
 <translation id="6684827949542560880">Prenašanje najnovejše posodobitve</translation>
 <translation id="668599234725812620">Odpiranje Googla Play</translation>
 <translation id="6686490380836145850">Zapri zavihke na desni</translation>
@@ -5105,6 +5120,7 @@
 <translation id="6955535239952325894">Ta nastavitev je onemogočena v upravljanih brskalnikih</translation>
 <translation id="6957044667612803194">Ta varnostni ključ ne podpira kod PIN</translation>
 <translation id="6957231940976260713">Ime storitve</translation>
+<translation id="6960507406838246615">Potrebna je posodobitev Linuxa</translation>
 <translation id="696103774840402661">Vse datoteke in lokalni podatki za vse uporabnike v tej napravi <ph name="DEVICE_TYPE" /> so bili trajno izbrisani.</translation>
 <translation id="6964390816189577014">Junak</translation>
 <translation id="6964760285928603117">Odstranitev iz skupine</translation>
@@ -5124,6 +5140,7 @@
 <translation id="697312151395002334">Dovoljeno je pošiljanje pojavnih oken in uporaba preusmeritev</translation>
 <translation id="6973611239564315524">Na voljo je nadgradnja na Debian 10 (Buster)</translation>
 <translation id="6974609594866392343">Predstavitveni način brez povezave</translation>
+<translation id="697508444536771064">Zaustavitev Linuxa</translation>
 <translation id="6977381486153291903">Različica vdelane programske opreme</translation>
 <translation id="6977877318519394148">Namesti program Rosetta</translation>
 <translation id="6978121630131642226">Iskalniki</translation>
@@ -5524,6 +5541,7 @@
 <translation id="7443806024147773267">Dostopajte do svojih gesel, ko ste prijavljeni v račun Google</translation>
 <translation id="7444983668544353857">Onemogoči <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Samodejno nameščanje aplikacij</translation>
+<translation id="7448538354405258275">Zastopnik za pomoč strankam vam lahko na podlagi številke EID pomaga aktivirati storitev.</translation>
 <translation id="7449752890690775568">Želite odstraniti geslo?</translation>
 <translation id="7450761244949417357">Odpiranje v brskalniku <ph name="ALTERNATIVE_BROWSER_NAME" /></translation>
 <translation id="7453008956351770337">Če izberete ta tiskalnik, daste tej razširitvi dovoljenje za dostop do tiskalnika:</translation>
@@ -6053,6 +6071,7 @@
 <translation id="8032244173881942855">Zavihka ni mogoče predvajati.</translation>
 <translation id="8033827949643255796">izbrani</translation>
 <translation id="8033958968890501070">Potek časovne omejitve</translation>
+<translation id="8036049989879571495">Nastavitev razvojnega okna Linux (beta)</translation>
 <translation id="8037117027592400564">Branje in izgovarjava vsega besedila z uporabo sintetiziranega govora</translation>
 <translation id="8037357227543935929">Zahteva (privzeto)</translation>
 <translation id="803771048473350947">Datoteka</translation>
@@ -6982,6 +7001,7 @@
 <translation id="909108997331068008">Profil uporabnika <ph name="EXISTING_USER" /> je že prijavljen tukaj: <ph name="NEW_USER" />.</translation>
 <translation id="9094033019050270033">Posodobi geslo</translation>
 <translation id="9094038138851891550">Neveljavno uporabniško ime</translation>
+<translation id="9094859731829297286">Ali ste prepričani, da želite rezervirati disk fiksne velikosti za Linux?</translation>
 <translation id="9094982973264386462">Odstrani</translation>
 <translation id="9095253524804455615">Odstrani</translation>
 <translation id="909554839118732438">Zapri okna brez beleženja dejavnosti</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb
index ac5b25b..1c3f839 100644
--- a/chrome/app/resources/generated_resources_sr-Latn.xtb
+++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Pametne Google funkcije</translation>
 <translation id="1147322039136785890">Sada je na redu <ph name="SUPERVISED_USER_NAME" /></translation>
 <translation id="1147991416141538220">Da biste zatražili pristup, obratite se administratoru ovog uređaja.</translation>
+<translation id="1148063863818152153">EID uređaja</translation>
 <translation id="1149401351239820326">Mesec isteka</translation>
 <translation id="1149725087019908252">Skenira se <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">Ovo je poslednje automatsko ažuriranje softvera i bezbednosno ažuriranje za ovaj <ph name="DEVICE_TYPE" />. Nadogradite na noviji model da biste dobijali buduća ažuriranja. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
@@ -316,6 +317,7 @@
 <translation id="1343865611738742294">Dajte Linux aplikacijama dozvolu da pristupaju USB uređajima. Linux neće zapamtiti USB uređaj kada ga uklonite.</translation>
 <translation id="1346630054604077329">Potvrdi i restartuj</translation>
 <translation id="1347256498747320987">Instalirajte ažuriranja i aplikacije. Ako nastavite, pristajete da ovaj uređaj može automatski da preuzima i instalira ažuriranja i aplikacije od Google-a, mobilnog operatera i proizvođača uređaja, uz mogućnost korišćenja mobilnih podataka. Neke od ovih aplikacija možda nude kupovine u aplikaciji. <ph name="BEGIN_LINK1" />Saznajte više<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linux memorijski prostor</translation>
 <translation id="1347975661240122359">Ažuriranje će početi kada nivo napunjenosti baterije bude <ph name="BATTERY_LEVEL" />%.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Ne možemo da pronađemo PPD. Proverite da li je Chromebook onlajn i probajte ponovo.</translation>
@@ -554,6 +556,7 @@
 <translation id="1608668830839595724">Još radnji za izabrane stavke</translation>
 <translation id="161042844686301425">Plavozelena</translation>
 <translation id="1611432201750675208">Uređaj je zaključan</translation>
+<translation id="1612019740169791082">Kontejner nije konfigurisan za promene veličine diska. Da biste prilagodili količinu prostora koja se rezerviše za Linux, napravite rezervnu kopiju i vratite je u novi kontejner.</translation>
 <translation id="1614511179807650956">Možda ste iskoristili dozvoljenu količinu podataka za mobilne uređaje. Posetite portal za aktivaciju <ph name="NAME" /> da biste kupili još podataka</translation>
 <translation id="161460670679785907">Nismo uspeli da otkrijemo telefon</translation>
 <translation id="1616206807336925449">Ovaj dodatak ne zahteva nikakve specijalne dozvole.</translation>
@@ -688,6 +691,7 @@
 <translation id="175772926354468439">Omogući temu</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Prikaži u Chrome veb-prodavnici</translation>
+<translation id="1761845175367251960">Nalozi korisnika <ph name="NAME" /></translation>
 <translation id="176193854664720708">Senzor za otisak prsta je u dugmetu za napajanje. Lagano ga dodirnite bilo kojim prstom.</translation>
 <translation id="1763046204212875858">Napravite prečice za aplikacije</translation>
 <translation id="1763808908432309942">Otvara se na novoj kartici</translation>
@@ -897,6 +901,7 @@
 <translation id="1999115740519098545">Pri pokretanju</translation>
 <translation id="2000419248597011803">Podrazumevanom pretraživaču šalje neke kolačiće i pretrage iz trake za adresu i okvira za pretragu</translation>
 <translation id="2002109485265116295">U realnom vremenu</translation>
+<translation id="200217416291116199">Preporučuje se da napravite rezervne kopije u slučaju da nadogradnja ne može da se dovrši. Kada nadogradnja počne, Linux će se isključiti. Sačuvajte otvorene fajlove pre nego što nastavite.</translation>
 <translation id="2003130567827682533">Da biste aktivirali podatke „<ph name="NAME" />“, prvo se povežite sa WiFi mrežom</translation>
 <translation id="2005199804247617997">Drugi profili</translation>
 <translation id="2006638907958895361">Otvori link u <ph name="APP" /></translation>
@@ -1608,6 +1613,7 @@
 <translation id="2807517655263062534">Datoteke koje preuzmete će se pojaviti ovde</translation>
 <translation id="2809586584051668049">i još <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
 <translation id="2810390687497823527">Ako ne prepoznajete dodatak ili ako pregledač ne radi na očekivani način, ovde možete da isključite ili prilagodite dodatke.</translation>
+<translation id="2811205483104563968">Nalozi</translation>
 <translation id="2812049959647166806">Thunderbolt nije podržan</translation>
 <translation id="2812989263793994277">Ne prikazuj nijednu sliku</translation>
 <translation id="2813094189969465044">Roditeljski nadzor</translation>
@@ -1646,6 +1652,7 @@
 <translation id="2858138569776157458">Najbolji sajtovi</translation>
 <translation id="2861301611394761800">Ažuriranje sistema je dovršeno. Restartujte sistem.</translation>
 <translation id="2861941300086904918">Menadžer bezbednosti za Native Client</translation>
+<translation id="2862815659905780618">Uklonite Linux okruženje za programiranje</translation>
 <translation id="2864601841139725659">Podesite sliku profila</translation>
 <translation id="2865919525181940183">Snimak ekrana programa koji su trenutno na ekranu</translation>
 <translation id="286674810810214575">Proveravaju se izvori napajanja...</translation>
@@ -1759,6 +1766,7 @@
 <translation id="2989123969927553766">Ubrzavanje pomeranja mišem</translation>
 <translation id="2989474696604907455">nije priključeno</translation>
 <translation id="2989786307324390836">Binarna datoteka šifrovana metodom „DER“, jedan sertifikat</translation>
+<translation id="2990313168615879645">Dodajte Google nalog</translation>
 <translation id="2992931425024192067">Prikaži sav sadržaj obaveštenja</translation>
 <translation id="2993517869960930405">Informacije o aplikaciji</translation>
 <translation id="2996286169319737844">Podaci se šifruju pomoću pristupne fraze za sinhronizaciju. To ne obuhvata načine plaćanja i adrese iz Google Pay-a.</translation>
@@ -2370,6 +2378,7 @@
 <translation id="3706463572498736864">Stranice po listu</translation>
 <translation id="370649949373421643">Omogući WiFi</translation>
 <translation id="370665806235115550">Učitava se...</translation>
+<translation id="3707163604290651814">Trenutno ste prijavljeni kao <ph name="NAME" /></translation>
 <translation id="3709244229496787112">Pregledač je zatvoren pre nego što je preuzimanje završeno.</translation>
 <translation id="3711931198657368127">Nalepi i idi na <ph name="URL" /></translation>
 <translation id="3711945201266135623">Pronađeni štampači sa servera za štampanje: <ph name="NUM_PRINTERS" /></translation>
@@ -2876,6 +2885,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB uživo)</translation>
 <translation id="4310139701823742692">Format datoteke je pogrešan. Proverite PPD datoteku i probajte ponovo.</translation>
 <translation id="431076611119798497">&amp;Detalji</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{1 Google nalog}one{<ph name="EXTRA_ACCOUNTS" /> Google nalog}few{<ph name="EXTRA_ACCOUNTS" /> Google naloga}other{<ph name="EXTRA_ACCOUNTS" /> Google naloga}}</translation>
 <translation id="4312866146174492540">Blokiraj (podrazumevano)</translation>
 <translation id="4314815835985389558">Upravljajte sinhronizacijom</translation>
 <translation id="4316850752623536204">Veb-sajt programera</translation>
@@ -3255,6 +3265,7 @@
 <translation id="4764368918650455114">Uverite se da su oba uređaja otključana, blizu jedan drugom i da je uključen Bluetooth. Ako delite sa Chromebook-om, uverite se da mu je uključeno Deljenje u blizini (otvorite oblast statusa tako što ćete izabrati vreme, pa izaberite Deljenje u blizini). <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Dozvoljava da Android Messages prenosi SMS-ove sa telefona na Chromebook</translation>
 <translation id="4768332406694066911">Imate sertifikate sledećih organizacija koji vas identifikuju</translation>
+<translation id="4773112038801431077">Nadogradite Linux</translation>
 <translation id="477647109558161443">Napravi prečicu na radnoj površini</translation>
 <translation id="4776917500594043016">Lozinka za <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4777825441726637019">Play prodavnica</translation>
@@ -3748,6 +3759,7 @@
 <translation id="5368720394188453070">Telefon je zaključan. Otključajte ga da biste pristupili.</translation>
 <translation id="5368779022775404937">Prijavite se na <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Omogući ubrzavanje miša</translation>
+<translation id="5369694795837229225">Podesite Linux okruženje za programiranje</translation>
 <translation id="5370819323174483825">&amp;Učitaj ponovo</translation>
 <translation id="5372529912055771682">Ova verzija operativnog sistema ne podržava navedeni režim prijavljivanja. Proverite da li koristite najnoviju verziju i pokušajte ponovo.</translation>
 <translation id="5372579129492968947">Otkačite dodatak</translation>
@@ -4473,6 +4485,8 @@
 <translation id="6212168817037875041">Isključi ekran</translation>
 <translation id="6212752530110374741">Pošalji link imejlom</translation>
 <translation id="6213230117190778270">Primi</translation>
+<translation id="6215620815501168899">Zatvorite iskačući prozor sa EID brojem i QR kodom</translation>
+<translation id="6216601812881225442">Kontejner ne podržava promenu veličine. Da biste prilagodili količinu prostora koja se unapred dodeljuje Linux-u, napravite rezervnu kopiju i vratite je u novom kontejneru.</translation>
 <translation id="6216696360484424239">Prijavite se automatski</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> je oflajn. Povežite se na internet i probajte ponovo.</translation>
 <translation id="6220413761270491930">Greška pri učitavanju dodatka</translation>
@@ -4865,6 +4879,7 @@
 <translation id="6680442031740878064">Dostupno: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Ocenite</translation>
 <translation id="6681668084120808868">Snimite fotografiju</translation>
+<translation id="6683948477137300040">Prikažite iskačući prozor sa EID brojem i QR kodom uređaja</translation>
 <translation id="6684827949542560880">Preuzima se najnovije ažuriranje</translation>
 <translation id="668599234725812620">Otvori Google Play</translation>
 <translation id="6686490380836145850">Zatvori kartice sa desne strane</translation>
@@ -5100,6 +5115,7 @@
 <translation id="6955535239952325894">Ovo podešavanje je onemogućeno u pregledačima kojima se upravlja</translation>
 <translation id="6957044667612803194">Ovaj bezbednosni ključ ne podržava PIN-ove</translation>
 <translation id="6957231940976260713">Naziv usluge</translation>
+<translation id="6960507406838246615">Treba da ažurirate Linux</translation>
 <translation id="696103774840402661">Svi fajlovi i lokalni podaci za sve korisnike na ovom uređaju (<ph name="DEVICE_TYPE" />) trajno su izbrisani.</translation>
 <translation id="6964390816189577014">Heroj</translation>
 <translation id="6964760285928603117">Ukloni iz grupe</translation>
@@ -5119,6 +5135,7 @@
 <translation id="697312151395002334">Dozvoljeno im je da šalju iskačuće prozore i da koriste preusmeravanja</translation>
 <translation id="6973611239564315524">Dostupna je nadogradnja na Debian 10 (Buster)</translation>
 <translation id="6974609594866392343">Oflajn režim demonstracije</translation>
+<translation id="697508444536771064">Isključi Linux</translation>
 <translation id="6977381486153291903">Revizija firmvera</translation>
 <translation id="6977877318519394148">Instaliraj aplikaciju Rosetta</translation>
 <translation id="6978121630131642226">Pretraživači</translation>
@@ -5519,6 +5536,7 @@
 <translation id="7443806024147773267">Pristupajte lozinkama uvek kada ste prijavljeni na Google nalog</translation>
 <translation id="7444983668544353857">Onemogući <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Automatski instalira aplikacije</translation>
+<translation id="7448538354405258275">Predstavnik korisničke podrške može da koristi EID broj da bi vam pomogao da aktivirate uslugu.</translation>
 <translation id="7449752890690775568">Želite da uklonite lozinku?</translation>
 <translation id="7450761244949417357">Sada se otvara u pregledaču <ph name="ALTERNATIVE_BROWSER_NAME" /></translation>
 <translation id="7453008956351770337">Kada izaberete ovaj štampač, dajete dozvolu za pristup štampaču sledećem dodatku:</translation>
@@ -6048,6 +6066,7 @@
 <translation id="8032244173881942855">Nije uspelo prebacivanje kartice.</translation>
 <translation id="8033827949643255796">izabrano</translation>
 <translation id="8033958968890501070">Vreme je isteklo</translation>
+<translation id="8036049989879571495">Podesite Linux okruženje za programiranje (beta)</translation>
 <translation id="8037117027592400564">Čitanje svog teksta izgovorenog pomoću sintetizovanog govora</translation>
 <translation id="8037357227543935929">Pitaj (podrazumevano)</translation>
 <translation id="803771048473350947">Datoteka</translation>
@@ -6976,6 +6995,7 @@
 <translation id="909108997331068008">Profil <ph name="EXISTING_USER" /> je već prijavljen na <ph name="NEW_USER" /></translation>
 <translation id="9094033019050270033">Ažuriraj lozinku</translation>
 <translation id="9094038138851891550">Korisničko ime je nevažeće</translation>
+<translation id="9094859731829297286">Želite li stvarno da rezervišete disk fiksne veličine za Linux?</translation>
 <translation id="9094982973264386462">Ukloni</translation>
 <translation id="9095253524804455615">Ukloni</translation>
 <translation id="909554839118732438">Zatvori prozore bez arhiviranja</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 02d94ea..9e235fb 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Паметне Google функције</translation>
 <translation id="1147322039136785890">Сада је на реду <ph name="SUPERVISED_USER_NAME" /></translation>
 <translation id="1147991416141538220">Да бисте затражили приступ, обратите се администратору овог уређаја.</translation>
+<translation id="1148063863818152153">EID уређаја</translation>
 <translation id="1149401351239820326">Месец истека</translation>
 <translation id="1149725087019908252">Скенира се <ph name="FILE_NAME" /></translation>
 <translation id="1150490752229770117">Ово је последње аутоматско ажурирање софтвера и безбедносно ажурирање за овај <ph name="DEVICE_TYPE" />. Надоградите на новији модел да бисте добијали будућа ажурирања. <ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation>
@@ -316,6 +317,7 @@
 <translation id="1343865611738742294">Дајте Linux апликацијама дозволу да приступају USB уређајима. Linux неће запамтити USB уређај када га уклоните.</translation>
 <translation id="1346630054604077329">Потврди и рестартуј</translation>
 <translation id="1347256498747320987">Инсталирајте ажурирања и апликације. Ако наставите, пристајете да овај уређај може аутоматски да преузима и инсталира ажурирања и апликације од Google-а, мобилног оператера и произвођача уређаја, уз могућност коришћења мобилних података. Неке од ових апликација можда нуде куповине у апликацији. <ph name="BEGIN_LINK1" />Сазнајте више<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linux меморијски простор</translation>
 <translation id="1347975661240122359">Ажурирање ће почети када ниво напуњености батерије буде <ph name="BATTERY_LEVEL" />%.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">Не можемо да пронађемо PPD. Проверите да ли је Chromebook онлајн и пробајте поново.</translation>
@@ -554,6 +556,7 @@
 <translation id="1608668830839595724">Још радњи за изабране ставке</translation>
 <translation id="161042844686301425">Плавозелена</translation>
 <translation id="1611432201750675208">Уређај је закључан</translation>
+<translation id="1612019740169791082">Контејнер није конфигурисан за промене величине диска. Да бисте прилагодили количину простора која се резервише за Linux, направите резервну копију и вратите је у нови контејнер.</translation>
 <translation id="1614511179807650956">Можда сте искористили дозвољену количину података за мобилне уређаје. Посетите портал за активацију <ph name="NAME" /> да бисте купили још података</translation>
 <translation id="161460670679785907">Нисмо успели да откријемо телефон</translation>
 <translation id="1616206807336925449">Овај додатак не захтева никакве специјалне дозволе.</translation>
@@ -688,6 +691,7 @@
 <translation id="175772926354468439">Омогући тему</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Прикажи у Chrome веб-продавници</translation>
+<translation id="1761845175367251960">Налози корисника <ph name="NAME" /></translation>
 <translation id="176193854664720708">Сензор за отисак прста је у дугмету за напајање. Лагано га додирните било којим прстом.</translation>
 <translation id="1763046204212875858">Направите пречице за апликације</translation>
 <translation id="1763808908432309942">Отвара се на новој картици</translation>
@@ -897,6 +901,7 @@
 <translation id="1999115740519098545">При покретању</translation>
 <translation id="2000419248597011803">Подразумеваном претраживачу шаље неке колачиће и претраге из траке за адресу и оквира за претрагу</translation>
 <translation id="2002109485265116295">У реалном времену</translation>
+<translation id="200217416291116199">Препоручује се да направите резервне копије у случају да надоградња не може да се доврши. Када надоградња почне, Linux ће се искључити. Сачувајте отворене фајлове пре него што наставите.</translation>
 <translation id="2003130567827682533">Да бисте активирали податке „<ph name="NAME" />“, прво се повежите са WiFi мрежом</translation>
 <translation id="2005199804247617997">Други профили</translation>
 <translation id="2006638907958895361">Отвори линк у <ph name="APP" /></translation>
@@ -1608,6 +1613,7 @@
 <translation id="2807517655263062534">Датотеке које преузмете ће се појавити овде</translation>
 <translation id="2809586584051668049">и још <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
 <translation id="2810390687497823527">Ако не препознајете додатак или ако прегледач не ради на очекивани начин, овде можете да искључите или прилагодите додатке.</translation>
+<translation id="2811205483104563968">Налози</translation>
 <translation id="2812049959647166806">Thunderbolt није подржан</translation>
 <translation id="2812989263793994277">Не приказуј ниједну слику</translation>
 <translation id="2813094189969465044">Родитељски надзор</translation>
@@ -1646,6 +1652,7 @@
 <translation id="2858138569776157458">Најбољи сајтови</translation>
 <translation id="2861301611394761800">Ажурирање система је довршено. Рестартујте систем.</translation>
 <translation id="2861941300086904918">Менаџер безбедности за Native Client</translation>
+<translation id="2862815659905780618">Уклоните Linux окружење за програмирање</translation>
 <translation id="2864601841139725659">Подесите слику профила</translation>
 <translation id="2865919525181940183">Снимак екрана програма који су тренутно на екрану</translation>
 <translation id="286674810810214575">Проверавају се извори напајања...</translation>
@@ -1759,6 +1766,7 @@
 <translation id="2989123969927553766">Убрзавање померања мишем</translation>
 <translation id="2989474696604907455">није прикључено</translation>
 <translation id="2989786307324390836">Бинарна датотека шифрована методом „DER“, један сертификат</translation>
+<translation id="2990313168615879645">Додајте Google налог</translation>
 <translation id="2992931425024192067">Прикажи сав садржај обавештења</translation>
 <translation id="2993517869960930405">Информације о апликацији</translation>
 <translation id="2996286169319737844">Подаци се шифрују помоћу приступне фразе за синхронизацију. То не обухвата начине плаћања и адресе из Google Pay-а.</translation>
@@ -2370,6 +2378,7 @@
 <translation id="3706463572498736864">Странице по листу</translation>
 <translation id="370649949373421643">Омогући WiFi</translation>
 <translation id="370665806235115550">Учитава се...</translation>
+<translation id="3707163604290651814">Тренутно сте пријављени као <ph name="NAME" /></translation>
 <translation id="3709244229496787112">Прегледач је затворен пре него што је преузимање завршено.</translation>
 <translation id="3711931198657368127">Налепи и иди на <ph name="URL" /></translation>
 <translation id="3711945201266135623">Пронађени штампачи са сервера за штампање: <ph name="NUM_PRINTERS" /></translation>
@@ -2876,6 +2885,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" /> kB (<ph name="NUM_KILOBYTES_LIVE" /> kB уживо)</translation>
 <translation id="4310139701823742692">Формат датотеке је погрешан. Проверите PPD датотеку и пробајте поново.</translation>
 <translation id="431076611119798497">&amp;Детаљи</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{1 Google налог}one{<ph name="EXTRA_ACCOUNTS" /> Google налог}few{<ph name="EXTRA_ACCOUNTS" /> Google налога}other{<ph name="EXTRA_ACCOUNTS" /> Google налога}}</translation>
 <translation id="4312866146174492540">Блокирај (подразумевано)</translation>
 <translation id="4314815835985389558">Управљајте синхронизацијом</translation>
 <translation id="4316850752623536204">Веб-сајт програмера</translation>
@@ -3255,6 +3265,7 @@
 <translation id="4764368918650455114">Уверите се да су оба уређаја откључана, близу један другом и да је укључен Bluetooth. Ако делите са Chromebook-ом, уверите се да му је укључено Дељење у близини (отворите област статуса тако што ћете изабрати време, па изаберите Дељење у близини). <ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">Дозвољава да Android Messages преноси SMS-ове са телефона на Chromebook</translation>
 <translation id="4768332406694066911">Имате сертификате следећих организација који вас идентификују</translation>
+<translation id="4773112038801431077">Надоградите Linux</translation>
 <translation id="477647109558161443">Направи пречицу на радној површини</translation>
 <translation id="4776917500594043016">Лозинка за <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="4777825441726637019">Play продавница</translation>
@@ -3748,6 +3759,7 @@
 <translation id="5368720394188453070">Телефон је закључан. Откључајте га да бисте приступили.</translation>
 <translation id="5368779022775404937">Пријавите се на <ph name="REALM" /></translation>
 <translation id="5369491905435686894">Омогући убрзавање миша</translation>
+<translation id="5369694795837229225">Подесите Linux окружење за програмирање</translation>
 <translation id="5370819323174483825">&amp;Учитај поново</translation>
 <translation id="5372529912055771682">Ова верзија оперативног система не подржава наведени режим пријављивања. Проверите да ли користите најновију верзију и покушајте поново.</translation>
 <translation id="5372579129492968947">Откачите додатак</translation>
@@ -4473,6 +4485,8 @@
 <translation id="6212168817037875041">Искључи екран</translation>
 <translation id="6212752530110374741">Пошаљи линк имејлом</translation>
 <translation id="6213230117190778270">Прими</translation>
+<translation id="6215620815501168899">Затворите искачући прозор са EID бројем и QR кодом</translation>
+<translation id="6216601812881225442">Контејнер не подржава промену величине. Да бисте прилагодили количину простора која се унапред додељује Linux-у, направите резервну копију и вратите је у новом контејнеру.</translation>
 <translation id="6216696360484424239">Пријавите се аутоматски</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> је офлајн. Повежите се на интернет и пробајте поново.</translation>
 <translation id="6220413761270491930">Грешка при учитавању додатка</translation>
@@ -4865,6 +4879,7 @@
 <translation id="6680442031740878064">Доступно: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">Оцените</translation>
 <translation id="6681668084120808868">Снимите фотографију</translation>
+<translation id="6683948477137300040">Прикажите искачући прозор са EID бројем и QR кодом уређаја</translation>
 <translation id="6684827949542560880">Преузима се најновије ажурирање</translation>
 <translation id="668599234725812620">Отвори Google Play</translation>
 <translation id="6686490380836145850">Затвори картице са десне стране</translation>
@@ -5100,6 +5115,7 @@
 <translation id="6955535239952325894">Ово подешавање је онемогућено у прегледачима којима се управља</translation>
 <translation id="6957044667612803194">Овај безбедносни кључ не подржава PIN-ове</translation>
 <translation id="6957231940976260713">Назив услуге</translation>
+<translation id="6960507406838246615">Треба да ажурирате Linux</translation>
 <translation id="696103774840402661">Сви фајлови и локални подаци за све кориснике на овом уређају (<ph name="DEVICE_TYPE" />) трајно су избрисани.</translation>
 <translation id="6964390816189577014">Херој</translation>
 <translation id="6964760285928603117">Уклони из групе</translation>
@@ -5119,6 +5135,7 @@
 <translation id="697312151395002334">Дозвољено им је да шаљу искачуће прозоре и да користе преусмеравања</translation>
 <translation id="6973611239564315524">Доступна је надоградња на Debian 10 (Buster)</translation>
 <translation id="6974609594866392343">Офлајн режим демонстрације</translation>
+<translation id="697508444536771064">Искључи Linux</translation>
 <translation id="6977381486153291903">Ревизија фирмвера</translation>
 <translation id="6977877318519394148">Инсталирај апликацију Rosetta</translation>
 <translation id="6978121630131642226">Претраживачи</translation>
@@ -5519,6 +5536,7 @@
 <translation id="7443806024147773267">Приступајте лозинкама увек када сте пријављени на Google налог</translation>
 <translation id="7444983668544353857">Онемогући <ph name="NETWORKDEVICE" /></translation>
 <translation id="7448430327655618736">Аутоматски инсталира апликације</translation>
+<translation id="7448538354405258275">Представник корисничке подршке може да користи EID број да би вам помогао да активирате услугу.</translation>
 <translation id="7449752890690775568">Желите да уклоните лозинку?</translation>
 <translation id="7450761244949417357">Сада се отвара у прегледачу <ph name="ALTERNATIVE_BROWSER_NAME" /></translation>
 <translation id="7453008956351770337">Када изаберете овај штампач, дајете дозволу за приступ штампачу следећем додатку:</translation>
@@ -6048,6 +6066,7 @@
 <translation id="8032244173881942855">Није успело пребацивање картице.</translation>
 <translation id="8033827949643255796">изабрано</translation>
 <translation id="8033958968890501070">Време је истекло</translation>
+<translation id="8036049989879571495">Подесите Linux окружење за програмирање (бета)</translation>
 <translation id="8037117027592400564">Читање свог текста изговореног помоћу синтетизованог говора</translation>
 <translation id="8037357227543935929">Питај (подразумевано)</translation>
 <translation id="803771048473350947">Датотека</translation>
@@ -6976,6 +6995,7 @@
 <translation id="909108997331068008">Профил <ph name="EXISTING_USER" /> је већ пријављен на <ph name="NEW_USER" /></translation>
 <translation id="9094033019050270033">Ажурирај лозинку</translation>
 <translation id="9094038138851891550">Корисничко име је неважеће</translation>
+<translation id="9094859731829297286">Желите ли стварно да резервишете диск фиксне величине за Linux?</translation>
 <translation id="9094982973264386462">Уклони</translation>
 <translation id="9095253524804455615">Уклони</translation>
 <translation id="909554839118732438">Затвори прозоре без архивирања</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index 1e9c1e5ed..e739175 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -139,6 +139,7 @@
 <translation id="114721135501989771">Chromeలో Google స్మార్ట్‌లను పొందండి</translation>
 <translation id="1147322039136785890">ఇప్పుడు దీనిని <ph name="SUPERVISED_USER_NAME" /> ఉపయోగించవచ్చు</translation>
 <translation id="1147991416141538220">యాక్సెస్‌ను అడగడానికి, ఈ పరికరం యొక్క నిర్వాహకులను సంప్రదించండి.</translation>
+<translation id="1148063863818152153">మీ పరికర EID</translation>
 <translation id="1149401351239820326">గడువు ముగింపు నెల</translation>
 <translation id="1149725087019908252"><ph name="FILE_NAME" />ను స్కాన్ చేస్తోంది</translation>
 <translation id="1150490752229770117">ఈ <ph name="DEVICE_TYPE" />కు ఇదే చివరి ఆటోమేటిక్ సాఫ్ట్‌వేర్ మరియు భద్రతాపరమైన అప్‌డేట్. భవిష్యత్తు అప్‌డేట్‌లను పొందడానికి, సరికొత్త మోడల్‌కు అప్‌గ్రేడ్ చేయండి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
@@ -314,6 +315,7 @@
 <translation id="1343865611738742294">USB పరికరాలను యాక్సెస్ చేయడానికి Linux యాప్‌లకు అనుమతి ఇవ్వండి. USB పరికరాన్ని తీసివేసిన తర్వాత, దానిని Linux గుర్తుంచుకోదు.</translation>
 <translation id="1346630054604077329">నిర్ధారించి, రీస్టార్ట్ చేయి</translation>
 <translation id="1347256498747320987">అప్‌డేట్‌లు &amp; యాప్‌లను ఇన్‌స్టాల్ చేయండి. కొనసాగించడం ద్వారా, ఈ పరికరం Google, మీ క్యారియర్ మరియు మీ పరికర తయారీదారు నుండి అప్‌డేట్‌లు మరియు యాప్‌లను ఆటోమేటిక్‌గా కూడా డౌన్‌లోడ్ మరియు ఇన్‌స్టాల్ చేయవచ్చని మీరు అంగీకరిస్తున్నారు, బహుశా సెల్యులార్ డేటా ఉపయోగించబడవచ్చు. ఈ యాప్‌లలో కొన్ని యాప్‌లో కొనుగోళ్లను అందించవచ్చు. <ph name="BEGIN_LINK1" />మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation>
+<translation id="1347512539447549782">Linux స్టోరేజ్</translation>
 <translation id="1347975661240122359">బ్యాటరీ <ph name="BATTERY_LEVEL" />% ఉన్నప్పుడు అప్‌డేట్ ప్రారంభమవుతుంది.</translation>
 <translation id="1353686479385938207"><ph name="PROVIDER_NAME" />: <ph name="NETWORK_NAME" /></translation>
 <translation id="1353980523955420967">PPDని కనుగొనడం సాధ్యం కాదు. మీ Chromebook ఇంటర్నెట్‌కు కనెక్ట్ అయ్యి ఉందని నిర్ధారించుకుని, ఆపై మళ్లీ ప్రయత్నించండి.</translation>
@@ -555,6 +557,7 @@
 <translation id="1608668830839595724">ఎంపిక చేసిన అంశాల కోసం మరిన్ని చర్యలు</translation>
 <translation id="161042844686301425">నీలి ఆకుపచ్చ</translation>
 <translation id="1611432201750675208">మీ పరికరం లాక్ చేయబడింది</translation>
+<translation id="1612019740169791082">మీ కంటైనర్, డిస్క్ పరిమాణ మార్పులను సపోర్ట్ చేయడానికి కాన్ఫిగర్ చేయబడలేదు. Linux కోసం రిజర్వ్ చేయబడిన స్పేస్‌ను సర్దుబాటు చేయడానికి, బ్యాకప్ చేసి, కొత్త కంటైనర్‌లో రీస్టోర్ చేయండి.</translation>
 <translation id="1614511179807650956">మీరు మీకు అనుమతించిన మొబైల్ డేటాను పూర్తిగా ఉపయోగించి ఉండవచ్చు. మరింత డేటాను కొనుగోలు చేయడానికి <ph name="NAME" /> యాక్టివేషన్ పోర్టల్‌ను సందర్శించండి</translation>
 <translation id="161460670679785907">మీ ఫోన్‌ను గుర్తించడం సాధ్యపడలేదు</translation>
 <translation id="1616206807336925449">ఈ పొడిగింపుకు ప్రత్యేక అనుమతులు ఏవీ అవసరం లేదు.</translation>
@@ -689,6 +692,7 @@
 <translation id="175772926354468439">థీమ్‌ను ప్రారంభించు</translation>
 <translation id="1758018619400202187">EAP-TLS</translation>
 <translation id="17584710573359123">Chrome వెబ్ స్టోర్‌లో చూడండి</translation>
+<translation id="1761845175367251960"><ph name="NAME" /> యొక్క ఖాతాలు</translation>
 <translation id="176193854664720708">వేలిముద్ర సెన్సార్ పవర్ బటన్‌లో ఉంది. ఏదైనా వేలితో మెల్లిగా దానిని తాకండి.</translation>
 <translation id="1763046204212875858">అప్లికేషన్ షార్ట్‌కట్‌లను సృష్టించు</translation>
 <translation id="1763808908432309942">కొత్త ట్యాబ్‌లో తెరవబడుతుంది</translation>
@@ -898,6 +902,7 @@
 <translation id="1999115740519098545">ప్రారంభించిన తరువాత</translation>
 <translation id="2000419248597011803">అడ్రస్ బార్, సెర్చ్ బాక్స్‌లలో చేసే సెర్చ్‌లు, కొన్ని కుక్కీలను మీరు ఆటోమేటిక్ ఆప్షన్‌గా సెట్ చేసిన సెర్చ్ ఇంజిన్‌కు పంపుతుంది</translation>
 <translation id="2002109485265116295">నిజ-సమయం</translation>
+<translation id="200217416291116199">అప్‌గ్రేడ్ పూర్తి కాని సందర్భంలో, ఫైల్‌లను బ్యాకప్ చేయడం అనేది సిఫార్సు చేయబడుతుంది. అప్‌గ్రేడ్ ప్రారంభించడం వలన Linux షట్ డౌన్ అవుతుంది. కొనసాగడానికి ముందు దయచేసి తెరిచి ఉన్న ఫైల్‌లను సేవ్ చేయండి.</translation>
 <translation id="2003130567827682533">'<ph name="NAME" />' డేటాను యాక్టివేట్ చేయడానికి, ముందుగా ఒక Wi-Fi నెట్‌వర్క్‌కు కనెక్ట్ చేయండి</translation>
 <translation id="2005199804247617997">ఇతర ప్రొఫైల్‌లు</translation>
 <translation id="2006638907958895361">లింక్‌ను <ph name="APP" />లో తెరువు</translation>
@@ -1609,6 +1614,7 @@
 <translation id="2807517655263062534">మీరు డౌన్‌లోడ్ చేసిన ఫైల్‌లు ఇక్కడ కనిపిస్తాయి</translation>
 <translation id="2809586584051668049">ఇంకా మరో <ph name="NUMBER_ADDITIONAL_DISABLED" /></translation>
 <translation id="2810390687497823527">మీరు ఎక్స్‌టెన్షన్‌ను గుర్తించకపోతే, లేదా మీ బ్రౌజర్ ఊహించిన విధంగా పని చేయకపోతే, మీరు ఇక్కడ ఆపివేయవచ్చు లేదా ఎక్స్‌టెన్షన్‌లను అనుకూలీకరించవచ్చు.</translation>
+<translation id="2811205483104563968">ఖాతాలు</translation>
 <translation id="2812049959647166806">Thunderboltలో మద్దతు లేదు</translation>
 <translation id="2812989263793994277">ఏ చిత్రాలనూ చూపించవద్దు</translation>
 <translation id="2813094189969465044">తల్లిదండ్రుల నియంత్రణలు</translation>
@@ -1647,6 +1653,7 @@
 <translation id="2858138569776157458">టాప్ సైట్‌లు</translation>
 <translation id="2861301611394761800">సిస్టమ్ అప్‌డేట్ పూర్తయ్యింది. దయచేసి సిస్టమ్‌ని పునఃప్రారంభించండి.</translation>
 <translation id="2861941300086904918">స్థానిక‌ క్లయింట్ భద్రతా మేనేజ‌ర్‌</translation>
+<translation id="2862815659905780618">Linux డెవలప్‌మెంట్ ఎన్విరాన్మెంట్‌ను తీసివేయండి</translation>
 <translation id="2864601841139725659">మీ ప్రొఫైల్ చిత్రాన్ని సెట్ చేయండి</translation>
 <translation id="2865919525181940183">ప్రస్తుతం స్క్రీన్‌పై ఉన్న ప్రోగ్రామ్‌ల స్క్రీన్‌షాట్</translation>
 <translation id="286674810810214575">పవర్ మూలాలను తనిఖీ చేస్తోంది...</translation>
@@ -1760,6 +1767,7 @@
 <translation id="2989123969927553766">మౌస్ స్క్రోల్ యాక్సిలరేషన్</translation>
 <translation id="2989474696604907455">జోడించబడలేదు</translation>
 <translation id="2989786307324390836">DER-ఎన్‌కోడ్ చేసిన బైనరీ, ఒక సర్టిఫికెట్</translation>
+<translation id="2990313168615879645">Google ఖాతాను జోడించు</translation>
 <translation id="2992931425024192067">మొత్తం నోటిఫికేషన్ కంటెంట్‌ను చూపు</translation>
 <translation id="2993517869960930405">యాప్‌ సమాచారం</translation>
 <translation id="2996286169319737844">మీ సమకాలీకరణ రహస్య పదబంధంతో డేటా ఎన్‌క్రిప్ట్ చేయబడింది. Google Payకి చెందిన చెల్లింపు పద్ధతులు మరియు చిరునామాలు ఇందులో ఉండవు.</translation>
@@ -2371,6 +2379,7 @@
 <translation id="3706463572498736864">ఒక షీట్‌కు పేజీల సంఖ్య</translation>
 <translation id="370649949373421643">Wi-fiని ప్రారంభించు</translation>
 <translation id="370665806235115550">లోడ్ అవుతోంది...</translation>
+<translation id="3707163604290651814">ప్రస్తుతం <ph name="NAME" />గా సైన్ ఇన్ చేయబడి ఉన్నారు</translation>
 <translation id="3709244229496787112">డౌన్‌లోడ్ పూర్తి కావడానికి ముందే బ్రౌజర్ షట్‌డౌన్ చేయబడింది.</translation>
 <translation id="3711931198657368127">అతికించి <ph name="URL" />కు వెళ్ళండి</translation>
 <translation id="3711945201266135623">ప్రింట్ సర్వర్‌లో <ph name="NUM_PRINTERS" /> ప్రింటర్‌లు కనుగొనబడ్డాయి</translation>
@@ -2877,6 +2886,7 @@
 <translation id="4309420042698375243"><ph name="NUM_KILOBYTES" />K (<ph name="NUM_KILOBYTES_LIVE" />K ప్రత్యక్షంగా)</translation>
 <translation id="4310139701823742692">ఫైల్ తప్పు ఫార్మాట్‌లో ఉంది. PPD ఫైల్‌ని తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
 <translation id="431076611119798497">&amp;వివరాలు</translation>
+<translation id="4312701113286993760">{COUNT,plural, =1{1 Google ఖాతా}other{<ph name="EXTRA_ACCOUNTS" /> Google ఖాతాలు}}</translation>
 <translation id="4312866146174492540">బ్లాక్ చేయి (డిఫాల్ట్)</translation>
 <translation id="4314815835985389558">సింక్‌ను నిర్వహించండి</translation>
 <translation id="4316850752623536204">డెవలపర్ వెబ్‌సైట్</translation>
@@ -3256,6 +3266,7 @@
 <translation id="4764368918650455114">పరికరాలు రెండూ అన్‌లాక్ చేయబడి ఉన్నాయని, ఒకదానికొకటి దగ్గరగా ఉన్నాయని, బ్లూటూత్ ఆన్ చేసి ఉందని నిర్ధారించుకోండి. మీరు Chromebookతో షేర్ చేస్తుంటే, దానిలో సమీప షేరింగ్ ఫీచర్ ఆన్‌లో ఉందని నిర్ధారించుకోండి (సమయాన్ని ఎంచుకోవడం ద్వారా స్టేటస్ ప్రాంతాన్ని తెరిచి, ఆపై సమీప షేరింగ్‌ను ఎంచుకోండి). <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
 <translation id="4765582662863429759">మీ ఫోన్‌లో ఉన్న వచనాన్ని మీ Chromebookలో చూపడానికి Android సందేశాలుని అనుమతిస్తుంది</translation>
 <translation id="4768332406694066911">మిమ్మల్ని గుర్తించే ఈ సంస్థల నుండి మీకు ప్రమాణపత్రాలు ఉన్నాయి</translation>
+<translation id="4773112038801431077">Linuxను అప్‌గ్రేడ్ చేయండి</translation>
 <translation id="477647109558161443">డెస్క్‌టాప్ షార్ట్‌కట్‍ను క్రియేట్ చేయండి</translation>
 <translation id="4776917500594043016"><ph name="USER_EMAIL_ADDRESS" /> కోసం పాస్‌వర్డ్</translation>
 <translation id="4777825441726637019">Play స్టోర్</translation>
@@ -3749,6 +3760,7 @@
 <translation id="5368720394188453070">మీ ఫోన్ లాక్ చేయబడింది. దానిని తెరవడానికి, అన్‌లాక్ చేయండి.</translation>
 <translation id="5368779022775404937"><ph name="REALM" />కు సైన్ ఇన్ చేయండి</translation>
 <translation id="5369491905435686894">మౌస్ యాక్సిలరేషన్‌ను ప్రారంభించండి</translation>
+<translation id="5369694795837229225">Linux డెవలప్‌మెంట్ ఎన్విరాన్మెంట్‌ను సెటప్ చేయండి</translation>
 <translation id="5370819323174483825">&amp;మళ్లీ లోడ్ చేయి</translation>
 <translation id="5372529912055771682">సరఫరా చేయబడిన నమోదు మోడ్‌ను, ఆపరేటింగ్ సిస్టమ్ యొక్క ఈ వెర్షన్ మద్దతివ్వదు. మీరు తాజా వెర్షన్‌ను అమలు చేస్తున్నారని దయచేసి నిర్ధారించుకుని, మళ్లీ ప్రయత్నించండి.</translation>
 <translation id="5372579129492968947">ఎక్స్‌టెన్ష‌న్‌‍‌ పిన్‌ను తీసివేయండి</translation>
@@ -4473,6 +4485,8 @@
 <translation id="6212168817037875041">ప్రదర్శనను ఆఫ్ చేయండి</translation>
 <translation id="6212752530110374741">లింక్‌ను ఇమెయిల్ చేయి</translation>
 <translation id="6213230117190778270">స్వీకరించు</translation>
+<translation id="6215620815501168899">EID, QR కోడ్ పాప్‌అప్‌ను మూసివేయండి</translation>
+<translation id="6216601812881225442">పరిమాణం మార్చబడటానికి మీ కంటైనర్ సపోర్ట్ చేయదు. Linuxకు ముందుగానే కేటాయించిన స్పేస్‌ను సర్దుబాటు చేయడానికి, బ్యాకప్ చేసి, ఆపై కొత్త కంటైనర్‌లో రీస్టోర్ చేయండి.</translation>
 <translation id="6216696360484424239">ఆటోమేటిక్‌గా సైన్ ఇన్ చేయండి</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> ఆఫ్‌లైన్‌లో ఉంది. ఇంటర్నెట్‌కు కనెక్ట్ చేసి, మళ్లీ ప్రయత్నించండి.</translation>
 <translation id="6220413761270491930">ఎక్స్‌టెన్షన్‌ను లోడ్ చేయడంలో ఎర్రర్</translation>
@@ -4865,6 +4879,7 @@
 <translation id="6680442031740878064">అందుబాటులో ఉంది: <ph name="AVAILABLE_SPACE" /></translation>
 <translation id="6680650203439190394">రేట్</translation>
 <translation id="6681668084120808868">ఫోటోను తీయి</translation>
+<translation id="6683948477137300040">పరికర EID, QR కోడ్ పాప్‌అప్‌ను చూపండి</translation>
 <translation id="6684827949542560880">తాజా అప్‌డేట్‌ను డౌన్‌లోడ్ చేస్తోంది</translation>
 <translation id="668599234725812620">Google Playని తెరువు</translation>
 <translation id="6686490380836145850">కుడివైపు ట్యాబ్‌లను మూసివేయి</translation>
@@ -5100,6 +5115,7 @@
 <translation id="6955535239952325894">మేనేజ్ అవుతోన్న బ్రౌజర్‌లలో ఈ సెట్టింగ్ డిజేబుల్ చేయబడింది.</translation>
 <translation id="6957044667612803194">ఈ సెక్యూరిటీ కీ, పిన్‌లకు మద్దతు ఇవ్వడం లేదు</translation>
 <translation id="6957231940976260713">సేవ పేరు</translation>
+<translation id="6960507406838246615">Linux అప్‌డేట్ అవసరం</translation>
 <translation id="696103774840402661">ఈ <ph name="DEVICE_TYPE" />లో యూజర్‌లందరికీ సంబంధించిన అన్ని ఫైల్‌లు, లోకల్ డేటా శాశ్వతంగా తొలగించబడ్డాయి.</translation>
 <translation id="6964390816189577014">వీరుడు</translation>
 <translation id="6964760285928603117">గుంపు నుండి తీసివేయి</translation>
@@ -5119,6 +5135,7 @@
 <translation id="697312151395002334">పాప్-అప్‌లను పంపడానికి, అలాగే మళ్లింపులను ఉపయోగించడానికి అనుమతించబడింది</translation>
 <translation id="6973611239564315524">Debian 10 (Buster)కు అప్‌గ్రేడ్ అందుబాటులో ఉంది</translation>
 <translation id="6974609594866392343">ఆఫ్‌లైన్ డెమో మోడ్</translation>
+<translation id="697508444536771064">Linuxను షట్ డౌన్ చేయండి</translation>
 <translation id="6977381486153291903">ఫర్మ్‌వేర్ పునర్విమర్శ</translation>
 <translation id="6977877318519394148">Rosettaను ఇన్‌స్టాల్ చేయి</translation>
 <translation id="6978121630131642226">శోధన ఇంజిన్‌లు</translation>
@@ -5519,6 +5536,7 @@
 <translation id="7443806024147773267">మీ Google ఖాతాలో ఎప్పుడు సైన్ ఇన్ చేసినా, మీ పాస్‌వర్డ్‌లను యాక్సెస్ చేయండి</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" />ను నిలిపివేయి</translation>
 <translation id="7448430327655618736">యాప్‌లను ఆటోమేటిక్‌గా ఇన్‌స్టాల్ చేస్తుంది</translation>
+<translation id="7448538354405258275">మీకు సర్వీస్‌ను యాక్టివేట్ చేయడంలో సహాయం చేయడానికి, కస్టమర్ సర్వీస్ ప్రతినిధి EID నంబర్‌ను ఉపయోగించవచ్చు.</translation>
 <translation id="7449752890690775568">పాస్‌వర్డ్‌ను తీసివేయాలా?</translation>
 <translation id="7450761244949417357">ఇప్పుడు <ph name="ALTERNATIVE_BROWSER_NAME" />లో తెరుస్తోంది</translation>
 <translation id="7453008956351770337">ఈ ప్రింటర్‌ను ఎంచుకోవడం ద్వారా, మీరు మీ ప్రింటర్‌ని యాక్సెస్ చేయడానికి క్రింది ఎక్సటెన్షన్‌కు అనుమతి ఇస్తున్నారు:</translation>
@@ -6044,6 +6062,7 @@
 <translation id="8032244173881942855">ట్యాబ్‌ను ప్రసారం చేయడం సాధ్యపడలేదు.</translation>
 <translation id="8033827949643255796">ఎంచుకోబడ్డాయి</translation>
 <translation id="8033958968890501070">సమయం ముగిసింది</translation>
+<translation id="8036049989879571495">Linux డెవలప్‌మెంట్ ఎన్విరాన్మెంట్ (బీటా)ను సెటప్ చేయండి</translation>
 <translation id="8037117027592400564">సంశ్లేషణ ప్రసంగాన్ని ఉపయోగించి మాట్లాడిన మొత్తం వచనాన్ని చదవడం</translation>
 <translation id="8037357227543935929">అడగాలి (డిఫాల్ట్)</translation>
 <translation id="803771048473350947">ఫైల్</translation>
@@ -6970,6 +6989,7 @@
 <translation id="909108997331068008"><ph name="EXISTING_USER" /> ప్రొఫైల్, ఇప్పటికే <ph name="NEW_USER" />కు సైన్ ఇన్ చేయబడి ఉంది</translation>
 <translation id="9094033019050270033">పాస్‌వర్డ్‌ను అప్‌డేట్ చేయి</translation>
 <translation id="9094038138851891550">వినియోగదారు పేరు చెల్లదు</translation>
+<translation id="9094859731829297286">మీరు ఖచ్చితంగా Linux కోసం ఒక స్థిర పరిమాణం గల డిస్క్‌ను రిజర్వ్ చేయాలనుకుంటున్నారా?</translation>
 <translation id="9094982973264386462">తీసివేయి</translation>
 <translation id="9095253524804455615">తీసివేయి</translation>
 <translation id="909554839118732438">అజ్ఞాత విండోలన్నింటినీ మూసివేయండి</translation>
@@ -7068,7 +7088,7 @@
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" జోడించబడింది</translation>
 <translation id="9215742531438648683">Google Play స్టోర్‌ను అన్ఇన్‌స్టాల్ చేయండి</translation>
 <translation id="9218430445555521422">ఆటోమేటిక్ ఆప్షన్‌లా సెట్ చేయండి</translation>
-<translation id="9219103736887031265">చిత్రాలు</translation>
+<translation id="9219103736887031265">ఇమేజ్‌లు</translation>
 <translation id="9220525904950070496">ఖాతాను తీసివేయండి</translation>
 <translation id="9220820413868316583">వేలిని తీసివేసి, మళ్లీ పెట్టండి.</translation>
 <translation id="923467487918828349">అన్నీ చూపు</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index ea9f568..a73c54d 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -432,6 +432,7 @@
 <translation id="1475502736924165259">Dosyanızda diğer kategorilerin hiçbirine uymayan sertifikalar var</translation>
 <translation id="1476088332184200792">Cihazıma Kopyala</translation>
 <translation id="1476607407192946488">&amp;Dil Ayarları</translation>
+<translation id="1477446329585670721"><ph name="DOMAIN" />, akıllı kartınızın takılı kalmasını gerektiriyor.</translation>
 <translation id="1478340334823509079">Ayrıntılar: <ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">Yükleme etkin değil</translation>
 <translation id="1481537595330271162">Disk yeniden boyutlandırılırken hata oluştu</translation>
@@ -2030,6 +2031,7 @@
 <translation id="3320630259304269485">Güvenli Tarama (tehlikeli sitelere karşı koruma) ve diğer güvenlik ayarları</translation>
 <translation id="3323295311852517824">{NUM_FILES,plural, =0{Bu veriler, hassas veya tehlikeli içeriğe sahip. Bu içeriği kaldırıp tekrar deneyin.}=1{Bu dosya, hassas veya tehlikeli içeriğe sahip. Bu içeriği kaldırıp tekrar deneyin.}other{Bu dosyalar, hassas veya tehlikeli içeriğe sahip. Bu içeriği kaldırıp tekrar deneyin.}}</translation>
 <translation id="3323521181261657960">Bonus! Ekran süreniz arttı</translation>
+<translation id="3325804108816646710">Mevcut profiller aranıyor...</translation>
 <translation id="3325910708063135066">Kamera ve mikrofon, Mac Sistem Tercihleri'nde kapatıldı</translation>
 <translation id="3327050066667856415">Chromebook'lar güvenlik için tasarlanmıştır. Cihazınız kötü amaçlı yazılımlara karşı otomatik olarak korunur. Bunun için başka yazılım gerekmez.</translation>
 <translation id="3328489342742826322">Yedekten yapılan geri yükleme işlemi, Linux dosyalarınızın bulunduğu klasördeki mevcut Linux uygulamalarının ve verilerinin silinmesine neden olacaktır.</translation>
@@ -2097,6 +2099,7 @@
 <translation id="3412265149091626468">Seçim'e Atla</translation>
 <translation id="3413122095806433232">CA Verenler: <ph name="LOCATION" /></translation>
 <translation id="3414952576877147120">Boyut:</translation>
+<translation id="3414966631182382431"><ph name="BEGIN_LINK" />Tarayıcınız<ph name="END_LINK" /> <ph name="MANAGER" /> tarafından yönetiliyor</translation>
 <translation id="3416468988018290825">Her zaman URL'leri tam olarak göster</translation>
 <translation id="3417835166382867856">Sekme ara</translation>
 <translation id="3417836307470882032">Askeri saat gösterme biçimi</translation>
@@ -3171,6 +3174,7 @@
 <translation id="4651484272688821107">Demo modu kaynakları olan online bileşen yüklenemedi.</translation>
 <translation id="4652935475563630866">Kamera ayarında yapılan değişiklik, Parallels Desktop'ın yeniden başlatılmasını gerektirir. Devam etmek için Parallels Desktop'ı yeniden başlatın.</translation>
 <translation id="4653405415038586100">Linux yapılandırılırken hata oluştu</translation>
+<translation id="4657914796247705218">TrackPoint hızı</translation>
 <translation id="465878909996028221">Yalnızca http, https ve dosya protokolleri tarayıcı yönlendirmeleri için desteklenir.</translation>
 <translation id="4659077111144409915">Birincil hesap</translation>
 <translation id="4659126640776004816">Google Hesabınızda oturum açtığınızda bu özellik devreye girer.</translation>
@@ -3831,6 +3835,7 @@
 <translation id="5470735824776589490">Cihazınızın Powerwash ile sıfırlanabilmesi için yeniden başlatılması gerekir. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="5471768120198416576">Merhaba! Ben sizin metin okuma sesinizim.</translation>
 <translation id="5472627187093107397">Bu site için şifreleri kaydet</translation>
+<translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN en az bir karakter olmalıdır}other{PIN en az # karakter olmalıdır}}</translation>
 <translation id="5473333559083690127">Yeni PIN'i tekrar girin</translation>
 <translation id="5481273127572794904">Birden fazla dosyayı otomatik olarak indirmesine izin verilmeyen siteler</translation>
 <translation id="5481941284378890518">Yakınlardaki Yazıcıları Ekle</translation>
@@ -4370,6 +4375,7 @@
 <translation id="6087960857463881712">Çok beğenen</translation>
 <translation id="6091761513005122595">Paylaşım başarıyla eklendi.</translation>
 <translation id="6093888419484831006">Güncelleme iptal ediliyor...</translation>
+<translation id="6095541101974653012">Çıkış yaptınız.</translation>
 <translation id="6095984072944024315">−</translation>
 <translation id="6096047740730590436">Ekranı kaplayacak şekilde aç</translation>
 <translation id="6096326118418049043">X.500 Adı</translation>
@@ -4703,6 +4709,7 @@
 <translation id="6474884162850599008">Google Drive hesabının bağlantısını kes</translation>
 <translation id="6475697075626596525"><ph name="APP_NAME" />, ekranınızın içeriğini paylaşmak istiyor. Neleri paylaşmak istediğinizi seçin.</translation>
 <translation id="6478248366783946499">Tehlikeli dosya tutulsun mu?</translation>
+<translation id="6480327114083866287"><ph name="MANAGER" /> tarafından yönetiliyor</translation>
 <translation id="6483485061007832714">İndirilen dosyayı aç</translation>
 <translation id="6483805311199035658"><ph name="FILE" /> açılıyor...</translation>
 <translation id="6488384360522318064">Dil seçin</translation>
@@ -4891,6 +4898,7 @@
 <translation id="671928215901716392">Kilit ekranı</translation>
 <translation id="6721678857435001674">Güvenlik Anahtarınızın markasını ve modelini görme</translation>
 <translation id="6721972322305477112">&amp;Dosya</translation>
+<translation id="672208878794563299">Bu site bir dahaki sefer tekrar soracak.</translation>
 <translation id="672213144943476270">Lütfen misafir olarak göz atmadan önce profilinizin kilidini açın.</translation>
 <translation id="6723661294526996303">Yer işaretlerini ve ayarları içe aktar...</translation>
 <translation id="6723839937902243910">Güç</translation>
@@ -6287,6 +6295,7 @@
 <translation id="8317671367883557781">Ağ bağlantısı ekle</translation>
 <translation id="8319414634934645341">Uzatılmış Anahtar Kullanımı</translation>
 <translation id="8320459152843401447">Ekranınızın Tamamı</translation>
+<translation id="8321837372750396788">Bu <ph name="DEVICE_TYPE" /> cihaz, <ph name="MANAGER" /> tarafından yönetilecek.</translation>
 <translation id="8322814362483282060">Bu sayfanın mikrofonunuza erişimi engellenmiştir.</translation>
 <translation id="8323167517179506834">URL yaz</translation>
 <translation id="8324784016256120271">Siteler, örneğin reklamları kişiselleştirmek amacıyla farklı sitelerde tarama etkinliğinizi görmek için çerez kullanabilir</translation>
@@ -6594,6 +6603,7 @@
 <translation id="8698269656364382265">Önceki ekrana dönmek için sol kenardan kaydırın.</translation>
 <translation id="869884720829132584">Uygulamalar menüsü</translation>
 <translation id="869891660844655955">Son kullanma tarihi</translation>
+<translation id="8702825062053163569"><ph name="DEVICE_TYPE" /> cihazınız kilitlendi.</translation>
 <translation id="8703346390800944767">Reklamı Atla</translation>
 <translation id="8705331520020532516">Seri Numarası</translation>
 <translation id="8705580154597116082">Kablosuz bağlantı telefon üzerinden kullanılabilir</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index fb5fe6e..b976faa 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -5597,7 +5597,7 @@
 <translation id="7556033326131260574">Smart Lock 无法验证您的帐号,您需要输入密码才能进入。</translation>
 <translation id="7556242789364317684">抱歉,“<ph name="SHORT_PRODUCT_NAME" />”无法恢复您的设置。要更正此错误,“<ph name="SHORT_PRODUCT_NAME" />”必须使用 Powerwash 重置您的设备。</translation>
 <translation id="7557194624273628371">Linux 端口转发</translation>
-<translation id="7559269329306630685">系统会仅在您的 <ph name="DEVICE_TYPE" /> 上妥善存储您的指纹数据,绝不会外泄。</translation>
+<translation id="7559269329306630685">您的指纹数据会安全存储在您的 <ph name="DEVICE_TYPE" /> 上,绝不会外泄。</translation>
 <translation id="7559719679815339381">请稍候…自助服务终端应用正在更新。请不要拔下 U 盘。</translation>
 <translation id="7561196759112975576">永远</translation>
 <translation id="756445078718366910">打开浏览器窗口</translation>
@@ -7108,7 +7108,7 @@
 <translation id="971774202801778802">书签网址</translation>
 <translation id="973473557718930265">退出</translation>
 <translation id="975893173032473675">要翻译成的语言</translation>
-<translation id="976499800099896273">系统会显示用于撤消自动更正的对话框,以便将“<ph name="TYPED_WORD" />”更正为“<ph name="CORRECTED_WORD" />”。若要访问此对话框,请按向上键;若要忽略,请按 Esc 键。</translation>
+<translation id="976499800099896273">系统会显示用于撤消自动更正的对话框,以便撤销将“<ph name="TYPED_WORD" />”更正为“<ph name="CORRECTED_WORD" />”的操作。若要访问此对话框,请按向上键;若要忽略,请按 Esc 键。</translation>
 <translation id="978146274692397928">初始标点符号用全角</translation>
 <translation id="97905529126098460">此窗口将在取消安装完成后关闭。</translation>
 <translation id="980731642137034229">操作菜单按钮</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index 62f6e8e..cd51a4f7 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -85,7 +85,7 @@
 <translation id="1091767800771861448">按下 ESCAPE 鍵可略過 (僅限非官方版本)。</translation>
 <translation id="1093457606523402488">可偵測到的網路:</translation>
 <translation id="1094607894174825014">在以下裝置上要求的讀取或寫入作業使用了無效的偏移:「<ph name="DEVICE_NAME" />」。</translation>
-<translation id="1095761715416917775">請確認你可以隨時存取同步處理的資料</translation>
+<translation id="1095761715416917775">確保你可以隨時存取同步處理的資料</translation>
 <translation id="109647177154844434">解除安裝 Parallels Desktop 時,系統將刪除 Windows 映像檔,包含其應用程式、設定和資料。確定要繼續嗎?</translation>
 <translation id="1097515232094183876">{COUNT,plural, =1{1 個連結}other{# 個連結}}</translation>
 <translation id="1097658378307015415">請在登入前以訪客身分進入,啟用網路 <ph name="NETWORK_ID" /></translation>
@@ -432,6 +432,7 @@
 <translation id="1475502736924165259">您儲存的這些憑證不屬於任何其他類別</translation>
 <translation id="1476088332184200792">複製到你的裝置</translation>
 <translation id="1476607407192946488">語言設定(&amp;L)</translation>
+<translation id="1477446329585670721"><ph name="DOMAIN" /> 需要你插入智慧型卡片,不得拔出。</translation>
 <translation id="1478340334823509079">詳細資料:<ph name="FILE_NAME" /></translation>
 <translation id="1478607704480248626">未啟用安裝功能</translation>
 <translation id="1481537595330271162">調整磁碟大小時發生錯誤</translation>
@@ -2029,6 +2030,7 @@
 <translation id="3320630259304269485">安全瀏覽功能 (可防範不安全的網站) 和其他安全性設定</translation>
 <translation id="3323295311852517824">{NUM_FILES,plural, =0{這項資料含有敏感內容或危險內容。請移除這類內容,然後再試一次。}=1{這個檔案含有敏感內容或危險內容。請移除這類內容,然後再試一次。}other{這些檔案含有敏感內容或危險內容。請移除這類內容,然後再試一次。}}</translation>
 <translation id="3323521181261657960">恭喜!你的裝置使用時間增加了</translation>
+<translation id="3325804108816646710">正在尋找可用的設定檔…</translation>
 <translation id="3325910708063135066">已關閉 Mac 系統偏好設定中的攝影機和麥克風</translation>
 <translation id="3327050066667856415">Chromebook 的設計可確保安全性。你的裝置會自動防範惡意軟體,無須安裝額外軟體。</translation>
 <translation id="3328489342742826322">還原備份內容時,系統將會刪除 Linux 檔案資料夾中的現有 Linux 應用程式和資料。</translation>
@@ -2096,6 +2098,7 @@
 <translation id="3412265149091626468">跳至所選範圍</translation>
 <translation id="3413122095806433232">CA 發行者:<ph name="LOCATION" /></translation>
 <translation id="3414952576877147120">空間大小:</translation>
+<translation id="3414966631182382431">你的<ph name="BEGIN_LINK" />瀏覽器是由 <ph name="MANAGER" /> 管理<ph name="END_LINK" /></translation>
 <translation id="3416468988018290825">一律顯示完整網址</translation>
 <translation id="3417835166382867856">搜尋分頁</translation>
 <translation id="3417836307470882032">24 小時制</translation>
@@ -3169,6 +3172,7 @@
 <translation id="4651484272688821107">無法使用示範模式的資源載入線上元件。</translation>
 <translation id="4652935475563630866">必須重新啟動 Parallels Desktop,攝影機設定的變更才會生效。請重新啟動 Parallels Desktop 以繼續操作。</translation>
 <translation id="4653405415038586100">設定 Linux 時發生錯誤</translation>
+<translation id="4657914796247705218">TrackPoint 速度</translation>
 <translation id="465878909996028221">瀏覽器重新導向僅支援 http、https 和 file 通訊協定。</translation>
 <translation id="4659077111144409915">主要帳戶</translation>
 <translation id="4659126640776004816">當你登入 Google 帳戶時,系統會啟用這項功能。</translation>
@@ -3829,6 +3833,7 @@
 <translation id="5470735824776589490">你必須先重新啟動裝置,才能透過 Powerwash 重設裝置。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="5471768120198416576">你好!這是文字轉語音的語音。</translation>
 <translation id="5472627187093107397">儲存這個網站的密碼</translation>
+<translation id="5473156705047072749">{NUM_CHARACTERS,plural, =1{PIN 碼必須包含至少一個字元}other{PIN 碼必須包含至少 # 個字元}}</translation>
 <translation id="5473333559083690127">再次輸入新的 PIN 碼</translation>
 <translation id="5481273127572794904">不得自動下載多個檔案</translation>
 <translation id="5481941284378890518">新增附近的印表機</translation>
@@ -4367,6 +4372,7 @@
 <translation id="6087960857463881712">好看的臉蛋</translation>
 <translation id="6091761513005122595">已成功共用掛接的裝置。</translation>
 <translation id="6093888419484831006">正在取消更新...</translation>
+<translation id="6095541101974653012">系統已將你登出帳戶。</translation>
 <translation id="6095984072944024315">−</translation>
 <translation id="6096047740730590436">最大化開啟</translation>
 <translation id="6096326118418049043">X.500 姓名</translation>
@@ -4700,6 +4706,7 @@
 <translation id="6474884162850599008">取消連結 Google 雲端硬碟帳戶</translation>
 <translation id="6475697075626596525">「<ph name="APP_NAME" />」要求分享畫面內容,請選擇你要分享的內容。</translation>
 <translation id="6478248366783946499">要保留不安全的檔案嗎?</translation>
+<translation id="6480327114083866287">由 <ph name="MANAGER" /> 管理</translation>
 <translation id="6483485061007832714">開啟下載檔案</translation>
 <translation id="6483805311199035658">正在開啟「<ph name="FILE" />」...</translation>
 <translation id="6488384360522318064">選取語言</translation>
@@ -4888,6 +4895,7 @@
 <translation id="671928215901716392">鎖定螢幕</translation>
 <translation id="6721678857435001674">查看安全金鑰的製造商和型號</translation>
 <translation id="6721972322305477112">檔案(&amp;F)</translation>
+<translation id="672208878794563299">這個網站下次會再詢問你。</translation>
 <translation id="672213144943476270">以訪客身分瀏覽之前,請先取消鎖定您的個人資料。</translation>
 <translation id="6723661294526996303">匯入書籤和設定...</translation>
 <translation id="6723839937902243910">電源</translation>
@@ -6284,6 +6292,7 @@
 <translation id="8317671367883557781">新增網路連線</translation>
 <translation id="8319414634934645341">擴充金鑰使用方法</translation>
 <translation id="8320459152843401447">您的整個畫面</translation>
+<translation id="8321837372750396788">這部 <ph name="DEVICE_TYPE" /> 將由 <ph name="MANAGER" /> 管理。</translation>
 <translation id="8322814362483282060">系統已封鎖這個網頁存取你的麥克風。</translation>
 <translation id="8323167517179506834">輸入網址</translation>
 <translation id="8324784016256120271">網站可使用 Cookie 查看你在各網站的瀏覽活動,並提供個人化廣告等服務</translation>
@@ -6591,6 +6600,7 @@
 <translation id="8698269656364382265">如要返回上一個畫面,請從左側向右側滑動。</translation>
 <translation id="869884720829132584">應用程式選單</translation>
 <translation id="869891660844655955">到期日</translation>
+<translation id="8702825062053163569">系統已鎖定你的 <ph name="DEVICE_TYPE" />。</translation>
 <translation id="8703346390800944767">略過廣告</translation>
 <translation id="8705331520020532516">序號</translation>
 <translation id="8705580154597116082">可透過手機使用 Wi-Fi</translation>
@@ -6734,7 +6744,7 @@
 <translation id="8830796635868321089">無法以目前的 Proxy 設定啟動更新檢查,請調整 <ph name="PROXY_SETTINGS_LINK_START" />Proxy 設定<ph name="PROXY_SETTINGS_LINK_END" />。</translation>
 <translation id="8831140208248705279">將你的 <ph name="DEVICE_TYPE" /> 與 Android 手機搭配使用,可發揮更大效益。只要連結這兩個裝置,你就能透過電腦收發簡訊、分享網際網路連線,以及使用手機解鎖 <ph name="DEVICE_TYPE" />。<ph name="FOOTNOTE_POINTER" /><ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="8834039744648160717">網路設定由 <ph name="USER_EMAIL" /> 控制。</translation>
-<translation id="8835786707922974220">請確認你可以隨時存取已儲存的密碼</translation>
+<translation id="8835786707922974220">確保你可以隨時存取已儲存的密碼</translation>
 <translation id="8838601485495657486">不透明</translation>
 <translation id="8838770651474809439">漢堡</translation>
 <translation id="883911313571074303">為圖片加註</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 8139ccb9..76fbb92 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -1081,8 +1081,6 @@
     "password_manager/password_store_factory.h",
     "password_manager/password_store_utils.cc",
     "password_manager/password_store_utils.h",
-    "payments/payment_handler_permission_context.cc",
-    "payments/payment_handler_permission_context.h",
     "performance_hints/performance_hints_features.cc",
     "performance_hints/performance_hints_features.h",
     "performance_hints/performance_hints_observer.cc",
@@ -1219,6 +1217,12 @@
     "policy/messaging_layer/public/report_queue.h",
     "policy/messaging_layer/public/report_queue_configuration.cc",
     "policy/messaging_layer/public/report_queue_configuration.h",
+    "policy/messaging_layer/storage/resources/disk_resource_impl.cc",
+    "policy/messaging_layer/storage/resources/disk_resource_impl.h",
+    "policy/messaging_layer/storage/resources/memory_resource_impl.cc",
+    "policy/messaging_layer/storage/resources/memory_resource_impl.h",
+    "policy/messaging_layer/storage/resources/resource_interface.cc",
+    "policy/messaging_layer/storage/resources/resource_interface.h",
     "policy/messaging_layer/storage/storage.cc",
     "policy/messaging_layer/storage/storage.h",
     "policy/messaging_layer/storage/storage_configuration.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 7f9b782..80768d8 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2415,6 +2415,27 @@
      base::size(kPrerender2DisableActivation), nullptr},
 };
 
+const FeatureEntry::FeatureParam kSubresourceRedirectPublicImageHints[] = {
+    {"enable_public_image_hints_based_compression", "true"},
+    {"enable_subresource_server_redirect", "true"},
+    {"enable_login_robots_based_compression", "false"},
+};
+
+const FeatureEntry::FeatureParam
+    kSubresourceRedirectLoginRobotsBasedCompression[] = {
+        {"enable_login_robots_based_compression", "true"},
+        {"enable_subresource_server_redirect", "true"},
+        {"enable_public_image_hints_based_compression", "false"},
+};
+
+const FeatureEntry::FeatureVariation kSubresourceRedirectVariations[] = {
+    {"Public image hints based compression",
+     kSubresourceRedirectPublicImageHints,
+     base::size(kSubresourceRedirectPublicImageHints), nullptr},
+    {"robots.txt allowed image compression in non logged-in pages",
+     kSubresourceRedirectLoginRobotsBasedCompression,
+     base::size(kSubresourceRedirectLoginRobotsBasedCompression), nullptr}};
+
 // RECORDING USER METRICS FOR FLAGS:
 // -----------------------------------------------------------------------------
 // The first line of the entry is the internal name.
@@ -3191,7 +3212,9 @@
     {"enable-subresource-redirect",
      flag_descriptions::kEnableSubresourceRedirectName,
      flag_descriptions::kEnableSubresourceRedirectDescription, kOsAll,
-     FEATURE_VALUE_TYPE(blink::features::kSubresourceRedirect)},
+     FEATURE_WITH_PARAMS_VALUE_TYPE(blink::features::kSubresourceRedirect,
+                                    kSubresourceRedirectVariations,
+                                    "SubresourceRedirect")},
 #if defined(OS_ANDROID)
     {"enable-offline-previews", flag_descriptions::kEnableOfflinePreviewsName,
      flag_descriptions::kEnableOfflinePreviewsDescription, kOsAndroid,
@@ -6781,7 +6804,13 @@
      flag_descriptions::kPrerender2Description, kOsAll,
      FEATURE_WITH_PARAMS_VALUE_TYPE(blink::features::kPrerender2,
                                     kPrerender2Variations,
-                                    "Prerender2")}
+                                    "Prerender2")},
+
+#if defined(OS_ANDROID)
+    {"enable-swipe-to-move-cursor", flag_descriptions::kSwipeToMoveCursorName,
+     flag_descriptions::kSwipeToMoveCursorDescription, kOsAndroid,
+     FEATURE_VALUE_TYPE(features::kSwipeToMoveCursor)},
+#endif  // defined(OS_ANDROID)
 
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
diff --git a/chrome/browser/browser_switcher/browser_switcher_browsertest.cc b/chrome/browser/browser_switcher/browser_switcher_browsertest.cc
index 9079f77..b9595fc 100644
--- a/chrome/browser/browser_switcher/browser_switcher_browsertest.cc
+++ b/chrome/browser/browser_switcher/browser_switcher_browsertest.cc
@@ -136,8 +136,10 @@
   }
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   }
 
@@ -146,7 +148,7 @@
 
  private:
   base::ScopedTempDir temp_dir_;
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 };
 
 IN_PROC_BROWSER_TEST_F(BrowserSwitcherBrowserTest, RunsExternalCommand) {
diff --git a/chrome/browser/browser_switcher/browser_switcher_prefs_unittest.cc b/chrome/browser/browser_switcher/browser_switcher_prefs_unittest.cc
index b571232..b74b2ef8 100644
--- a/chrome/browser/browser_switcher/browser_switcher_prefs_unittest.cc
+++ b/chrome/browser/browser_switcher/browser_switcher_prefs_unittest.cc
@@ -55,10 +55,12 @@
  public:
   void SetUp() override {
     BrowserSwitcherPrefs::RegisterProfilePrefs(prefs_backend_.registry());
-    policy_provider_ =
-        std::make_unique<policy::MockConfigurationPolicyProvider>();
-    EXPECT_CALL(*policy_provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    policy_provider_ = std::make_unique<
+        testing::NiceMock<policy::MockConfigurationPolicyProvider>>();
+    ON_CALL(*policy_provider_, IsInitializationComplete(_))
+        .WillByDefault(Return(true));
+    ON_CALL(*policy_provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     std::vector<policy::ConfigurationPolicyProvider*> providers = {
         policy_provider_.get()};
     policy_service_ = std::make_unique<policy::PolicyServiceImpl>(providers);
diff --git a/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc b/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc
index d498242..b9e4f64c 100644
--- a/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc
+++ b/chrome/browser/browser_switcher/browser_switcher_service_browsertest.cc
@@ -98,8 +98,10 @@
   ~BrowserSwitcherServiceTest() override = default;
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
     BrowserSwitcherService::SetRefreshDelayForTesting(base::TimeDelta());
   }
@@ -197,7 +199,7 @@
 #endif
 
  private:
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 
 #if defined(OS_WIN)
   base::FilePath fake_appdata_dir_;
diff --git a/chrome/browser/chrome_browser_field_trials.cc b/chrome/browser/chrome_browser_field_trials.cc
index ef916bf..2d6772e0 100644
--- a/chrome/browser/chrome_browser_field_trials.cc
+++ b/chrome/browser/chrome_browser_field_trials.cc
@@ -26,6 +26,8 @@
 #include "components/version_info/version_info.h"
 
 #if defined(OS_ANDROID)
+#include "base/android/build_info.h"
+#include "base/android/bundle_utils.h"
 #include "chrome/browser/chrome_browser_field_trials_mobile.h"
 #include "chrome/browser/flags/android/cached_feature_flags.h"
 #include "chrome/common/chrome_features.h"
@@ -133,6 +135,18 @@
   static constexpr char kEarlyLibraryLoadTrial[] = "EarlyLibraryLoadSynthetic";
   ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
       kEarlyLibraryLoadTrial, group_name);
+
+  // If isolated splits are enabled at build time, Monochrome and Trichrome will
+  // have a different bundle layout, so measure N+ even though isolated splits
+  // are only supported by Android in O+.
+  if (base::android::BuildInfo::GetInstance()->sdk_int() >=
+      base::android::SDK_VERSION_NOUGAT) {
+    static constexpr char kIsolatedSplitsTrial[] = "IsolatedSplitsSynthetic";
+    ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
+        kIsolatedSplitsTrial,
+        base::android::BundleUtils::IsolatedSplitsEnabled() ? "Enabled"
+                                                            : "Disabled");
+  }
 #endif  // defined(OS_ANDROID)
 }
 
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 811b87352..02d1670 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -1387,6 +1387,10 @@
     "fileapi/external_file_url_util.h",
     "fileapi/file_access_permissions.cc",
     "fileapi/file_access_permissions.h",
+    "fileapi/file_change_service.cc",
+    "fileapi/file_change_service.h",
+    "fileapi/file_change_service_factory.cc",
+    "fileapi/file_change_service_factory.h",
     "fileapi/file_system_backend.cc",
     "fileapi/file_system_backend.h",
     "fileapi/file_system_backend_delegate.h",
@@ -3518,6 +3522,7 @@
     "fileapi/external_file_url_loader_factory_unittest.cc",
     "fileapi/external_file_url_util_unittest.cc",
     "fileapi/file_access_permissions_unittest.cc",
+    "fileapi/file_change_service_unittest.cc",
     "fileapi/file_system_backend_unittest.cc",
     "fileapi/recent_arc_media_source_unittest.cc",
     "fileapi/recent_disk_source_unittest.cc",
diff --git a/chrome/browser/chromeos/accessibility/switch_access_browsertest.cc b/chrome/browser/chromeos/accessibility/switch_access_browsertest.cc
index c2e21f55..7b2d094 100644
--- a/chrome/browser/chromeos/accessibility/switch_access_browsertest.cc
+++ b/chrome/browser/chromeos/accessibility/switch_access_browsertest.cc
@@ -3,6 +3,9 @@
 // found in the LICENSE file.
 
 #include "ash/public/cpp/accessibility_controller.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/path_service.h"
 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/common/extensions/extension_constants.h"
@@ -17,6 +20,12 @@
 
 namespace chromeos {
 
+namespace {
+constexpr char kTestSupportPath[] =
+    "chrome/browser/resources/chromeos/accessibility/switch_access/"
+    "test_support.js";
+}
+
 class SwitchAccessTest : public InProcessBrowserTest {
  public:
   void SendVirtualKeyPress(ui::KeyboardCode key) {
@@ -52,75 +61,13 @@
   ~SwitchAccessTest() override = default;
 
   void InjectFocusRingWatcher() {
-    std::string script = R"JS(
-      let focusRingState = {
-        'primary': {
-          'role': '',
-          'name': ''
-        },
-        'preview': {
-          'role': '',
-          'name': ''
-        }
-      };
-      let expectedType = '';
-      let expectedRole = '';
-      let expectedName = '';
-      let successCallback = null;
-      let transcript = [];
-
-      function checkFocusRingState() {
-        if (expectedType != '' &&
-            focusRingState[expectedType].role == expectedRole &&
-            focusRingState[expectedType].name == expectedName) {
-          if (successCallback) {
-            transcript.push(`Success type=${expectedType} ` +
-                            `role=${expectedRole} name=${expectedName}`);
-            successCallback();
-            successCallback = null;
-          }
-        }
-      }
-
-      function waitForFocusRing(type, role, name, callback) {
-        transcript.push(`Waiting for type=${type} role=${role} name=${name}`);
-        expectedType = type;
-        expectedRole = role;
-        expectedName = name;
-        successCallback = callback;
-        checkFocusRingState();
-      }
-
-      FocusRingManager.setObserver((primary, preview) => {
-        if (primary && primary instanceof BackButtonNode) {
-          focusRingState['primary']['role'] = 'back';
-          focusRingState['primary']['name'] = '';
-        } else if (primary && primary.automationNode) {
-          let node = primary.automationNode;
-          focusRingState['primary']['role'] = node.role;
-          focusRingState['primary']['name'] = node.name;
-        } else {
-          focusRingState['primary']['role'] = '';
-          focusRingState['primary']['name'] = '';
-        }
-        if (preview && preview.automationNode) {
-          let node = preview.automationNode;
-          focusRingState['preview']['role'] = node.role;
-          focusRingState['preview']['name'] = node.name;
-        } else {
-          focusRingState['preview']['role'] = '';
-          focusRingState['preview']['name'] = '';
-        }
-        transcript.push(`Focus ring state: ${JSON.stringify(focusRingState)}`);
-        checkFocusRingState();
-      });
-      window.domAutomationController.send('ready');
-
-      setInterval(() => {
-        console.error('Test still running. Transcript so far:\n' +
-                      transcript.join('\n'));
-      }, 5000);
-      )JS";
+    base::ScopedAllowBlockingForTesting allow_blocking;
+    base::FilePath source_dir;
+    CHECK(base::PathService::Get(base::DIR_SOURCE_ROOT, &source_dir));
+    auto test_support_path = source_dir.AppendASCII(kTestSupportPath);
+    std::string script;
+    ASSERT_TRUE(base::ReadFileToString(test_support_path, &script))
+        << test_support_path;
 
     // Wait for the extension to load.
     base::RunLoop loop;
diff --git a/chrome/browser/chromeos/android_sms/android_sms_service.cc b/chrome/browser/chromeos/android_sms/android_sms_service.cc
index 2a53a3c2..aa5dd96 100644
--- a/chrome/browser/chromeos/android_sms/android_sms_service.cc
+++ b/chrome/browser/chromeos/android_sms/android_sms_service.cc
@@ -67,13 +67,18 @@
 }
 
 void AndroidSmsService::OnSessionStateChanged() {
-  // At most one ConnectionManager should be created.
-  if (connection_manager_)
-    return;
-
   // ConnectionManager should not be created for blocked sessions.
-  if (session_manager::SessionManager::Get()->IsUserSessionBlocked())
+  if (session_manager::SessionManager::Get()->IsUserSessionBlocked()) {
     return;
+  }
+
+  // Start Connection if connection manager already exists.
+  // This ensures that the service worker connects again and
+  // continues to receive messages after unlock.
+  if (connection_manager_) {
+    connection_manager_->StartConnection();
+    return;
+  }
 
   std::unique_ptr<ConnectionEstablisher> connection_establisher;
   connection_establisher = std::make_unique<FcmConnectionEstablisher>(
diff --git a/chrome/browser/chromeos/android_sms/connection_manager.cc b/chrome/browser/chromeos/android_sms/connection_manager.cc
index 2243adb..056c641 100644
--- a/chrome/browser/chromeos/android_sms/connection_manager.cc
+++ b/chrome/browser/chromeos/android_sms/connection_manager.cc
@@ -66,6 +66,18 @@
     GetCurrentServiceWorkerContext()->RemoveObserver(this);
 }
 
+void ConnectionManager::StartConnection() {
+  if (!enabled_pwa_url_) {
+    return;
+  }
+  PA_LOG(INFO) << "ConnectionManager::StartConnection(): Establishing "
+               << "connection to PWA at " << *enabled_pwa_url_ << ".";
+  connection_establisher_->EstablishConnection(
+      *enabled_pwa_url_,
+      ConnectionEstablisher::ConnectionMode::kStartConnection,
+      GetCurrentServiceWorkerContext());
+}
+
 void ConnectionManager::OnVersionActivated(int64_t version_id,
                                            const GURL& scope) {
   if (!enabled_pwa_url_ || !scope.EqualsIgnoringRef(*enabled_pwa_url_))
@@ -146,13 +158,8 @@
   if (!enabled_pwa_url_)
     return;
 
-  PA_LOG(INFO) << "ConnectionManager::UpdateConnectionStatus(): Establishing "
-               << "connection to PWA at " << *enabled_pwa_url_ << ".";
   GetCurrentServiceWorkerContext()->AddObserver(this);
-  connection_establisher_->EstablishConnection(
-      *enabled_pwa_url_,
-      ConnectionEstablisher::ConnectionMode::kStartConnection,
-      GetCurrentServiceWorkerContext());
+  StartConnection();
 }
 
 base::Optional<GURL> ConnectionManager::GenerateEnabledPwaUrl() {
diff --git a/chrome/browser/chromeos/android_sms/connection_manager.h b/chrome/browser/chromeos/android_sms/connection_manager.h
index 76b27f7..5ea9b0e 100644
--- a/chrome/browser/chromeos/android_sms/connection_manager.h
+++ b/chrome/browser/chromeos/android_sms/connection_manager.h
@@ -54,6 +54,9 @@
       multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client);
   ~ConnectionManager() override;
 
+  // Sends a start connection message to the service worker.
+  void StartConnection();
+
  private:
   friend class ConnectionManagerTest;
 
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service_browsertest.cc b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service_browsertest.cc
index 352c6bd..d8b6129b 100644
--- a/chrome/browser/chromeos/arc/intent_helper/arc_settings_service_browsertest.cc
+++ b/chrome/browser/chromeos/arc/intent_helper/arc_settings_service_browsertest.cc
@@ -225,8 +225,9 @@
   }
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   }
 
@@ -336,7 +337,7 @@
                                      base::Value(kUserProfilePath));
   }
 
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 
   DISALLOW_COPY_AND_ASSIGN(ArcSettingsServiceTest);
 };
diff --git a/chrome/browser/chromeos/attestation/platform_verification_flow.cc b/chrome/browser/chromeos/attestation/platform_verification_flow.cc
index 9a93ba5..17917c5 100644
--- a/chrome/browser/chromeos/attestation/platform_verification_flow.cc
+++ b/chrome/browser/chromeos/attestation/platform_verification_flow.cc
@@ -332,9 +332,9 @@
   }
   VLOG(1) << "Platform verification successful.";
   UMA_HISTOGRAM_ENUMERATION(kAttestationResultHistogram, SUCCESS, RESULT_MAX);
-  std::move(context).callback.Run(SUCCESS, signed_data_pb.data(),
-                                  signed_data_pb.signature(),
-                                  certificate_chain);
+  std::move(context.callback)
+      .Run(SUCCESS, signed_data_pb.data(), signed_data_pb.signature(),
+           certificate_chain);
   if (is_expiring_soon && renewals_in_progress_.count(certificate_chain) == 0) {
     renewals_in_progress_.insert(certificate_chain);
     // Fire off a certificate request so next time we'll have a new one.
diff --git a/chrome/browser/chromeos/browser_context_keyed_service_factories.cc b/chrome/browser/chromeos/browser_context_keyed_service_factories.cc
index 217e10a8..f6b7c0b 100644
--- a/chrome/browser/chromeos/browser_context_keyed_service_factories.cc
+++ b/chrome/browser/chromeos/browser_context_keyed_service_factories.cc
@@ -17,6 +17,7 @@
 #include "chrome/browser/chromeos/extensions/printing_metrics/print_job_finished_event_dispatcher.h"
 #include "chrome/browser/chromeos/file_manager/volume_manager_factory.h"
 #include "chrome/browser/chromeos/file_system_provider/service_factory.h"
+#include "chrome/browser/chromeos/fileapi/file_change_service_factory.h"
 #include "chrome/browser/chromeos/guest_os/guest_os_registry_service_factory.h"
 #include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h"
 #include "chrome/browser/chromeos/launcher_search_provider/launcher_search_provider_service_factory.h"
@@ -70,6 +71,7 @@
   extensions::PrintJobFinishedEventDispatcher::GetFactoryInstance();
 #endif
   extensions::SessionStateChangedEventDispatcher::GetFactoryInstance();
+  FileChangeServiceFactory::GetInstance();
   file_manager::EventRouterFactory::GetInstance();
   file_manager::VolumeManagerFactory::GetInstance();
   file_system_provider::ServiceFactory::GetInstance();
diff --git a/chrome/browser/chromeos/extensions/extensions_permissions_tracker_unittest.cc b/chrome/browser/chromeos/extensions/extensions_permissions_tracker_unittest.cc
index e651a85..02907745 100644
--- a/chrome/browser/chromeos/extensions/extensions_permissions_tracker_unittest.cc
+++ b/chrome/browser/chromeos/extensions/extensions_permissions_tracker_unittest.cc
@@ -307,14 +307,14 @@
 
   dict.RemoveKey(kExtensionId1);
   prefs_->SetManagedPref(pref_names::kInstallForceList,
-                         base::Value::ToUniquePtrValue(std::move(dict)));
+                         base::Value::ToUniquePtrValue(dict.Clone()));
 
   EXPECT_TRUE(testing_local_state_.Get()->GetBoolean(
       prefs::kManagedSessionUseFullLoginWarning));
 
   dict.RemoveKey(kExtensionId2);
   prefs_->SetManagedPref(pref_names::kInstallForceList,
-                         base::Value::ToUniquePtrValue(std::move(dict)));
+                         base::Value::ToUniquePtrValue(dict.Clone()));
 
   EXPECT_FALSE(testing_local_state_.Get()->GetBoolean(
       prefs::kManagedSessionUseFullLoginWarning));
diff --git a/chrome/browser/chromeos/extensions/printing_metrics/print_job_finished_event_dispatcher_apitest.cc b/chrome/browser/chromeos/extensions/printing_metrics/print_job_finished_event_dispatcher_apitest.cc
index 5f935ae3..d88d536c 100644
--- a/chrome/browser/chromeos/extensions/printing_metrics/print_job_finished_event_dispatcher_apitest.cc
+++ b/chrome/browser/chromeos/extensions/printing_metrics/print_job_finished_event_dispatcher_apitest.cc
@@ -45,8 +45,10 @@
  protected:
   void SetUpInProcessBrowserTestFixture() override {
     // Init the user policy provider.
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy_provider_.SetAutoRefresh();
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
@@ -59,7 +61,7 @@
     ExtensionApiTest::SetUpInProcessBrowserTestFixture();
   }
 
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 
  private:
   void OnWillCreateBrowserContextServices(content::BrowserContext* context) {
diff --git a/chrome/browser/chromeos/extensions/printing_metrics/printing_metrics_apitest.cc b/chrome/browser/chromeos/extensions/printing_metrics/printing_metrics_apitest.cc
index a210ced8..2df8f71 100644
--- a/chrome/browser/chromeos/extensions/printing_metrics/printing_metrics_apitest.cc
+++ b/chrome/browser/chromeos/extensions/printing_metrics/printing_metrics_apitest.cc
@@ -48,8 +48,10 @@
  protected:
   void SetUpInProcessBrowserTestFixture() override {
     // Init the user policy provider.
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy_provider_.SetAutoRefresh();
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
@@ -61,7 +63,7 @@
     ExtensionApiTest::SetUpInProcessBrowserTestFixture();
   }
 
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 
  private:
   void OnWillCreateBrowserContextServices(content::BrowserContext* context) {
diff --git a/chrome/browser/chromeos/file_manager/web_file_tasks_unittest.cc b/chrome/browser/chromeos/file_manager/web_file_tasks_unittest.cc
index a18f9766..c1b2ba1 100644
--- a/chrome/browser/chromeos/file_manager/web_file_tasks_unittest.cc
+++ b/chrome/browser/chromeos/file_manager/web_file_tasks_unittest.cc
@@ -47,7 +47,8 @@
     auto os_integration_manager =
         std::make_unique<web_app::TestOsIntegrationManager>(
             profile_.get(), /*app_shortcut_manager=*/nullptr,
-            std::move(file_handler_manager));
+            std::move(file_handler_manager),
+            /*protocol_handler_manager=*/nullptr);
     app_provider_->SetOsIntegrationManager(std::move(os_integration_manager));
 
     app_provider_->Start();
diff --git a/chrome/browser/chromeos/fileapi/file_change_service.cc b/chrome/browser/chromeos/fileapi/file_change_service.cc
new file mode 100644
index 0000000..d3e82fa
--- /dev/null
+++ b/chrome/browser/chromeos/fileapi/file_change_service.cc
@@ -0,0 +1,54 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/fileapi/file_change_service.h"
+
+namespace chromeos {
+
+FileChangeService::FileChangeService() = default;
+
+FileChangeService::~FileChangeService() {
+  DCHECK(!observer_list_.might_have_observers());
+}
+
+void FileChangeService::AddObserver(storage::FileChangeObserver* observer) {
+  observer_list_.AddObserver(observer);
+}
+
+void FileChangeService::RemoveObserver(storage::FileChangeObserver* observer) {
+  observer_list_.RemoveObserver(observer);
+}
+
+void FileChangeService::OnCreateFile(const storage::FileSystemURL& url) {
+  for (storage::FileChangeObserver& observer : observer_list_)
+    observer.OnCreateFile(url);
+}
+
+void FileChangeService::OnCreateFileFrom(const storage::FileSystemURL& url,
+                                         const storage::FileSystemURL& src) {
+  for (storage::FileChangeObserver& observer : observer_list_)
+    observer.OnCreateFileFrom(url, src);
+}
+
+void FileChangeService::OnRemoveFile(const storage::FileSystemURL& url) {
+  for (storage::FileChangeObserver& observer : observer_list_)
+    observer.OnRemoveFile(url);
+}
+
+void FileChangeService::OnModifyFile(const storage::FileSystemURL& url) {
+  for (storage::FileChangeObserver& observer : observer_list_)
+    observer.OnModifyFile(url);
+}
+
+void FileChangeService::OnCreateDirectory(const storage::FileSystemURL& url) {
+  for (storage::FileChangeObserver& observer : observer_list_)
+    observer.OnCreateDirectory(url);
+}
+
+void FileChangeService::OnRemoveDirectory(const storage::FileSystemURL& url) {
+  for (storage::FileChangeObserver& observer : observer_list_)
+    observer.OnRemoveDirectory(url);
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/fileapi/file_change_service.h b/chrome/browser/chromeos/fileapi/file_change_service.h
new file mode 100644
index 0000000..91d7147
--- /dev/null
+++ b/chrome/browser/chromeos/fileapi/file_change_service.h
@@ -0,0 +1,44 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_FILEAPI_FILE_CHANGE_SERVICE_H_
+#define CHROME_BROWSER_CHROMEOS_FILEAPI_FILE_CHANGE_SERVICE_H_
+
+#include "base/observer_list.h"
+#include "components/keyed_service/core/keyed_service.h"
+#include "storage/browser/file_system/file_observers.h"
+
+namespace chromeos {
+
+// A service which notifies observers of file change events from external file
+// systems. This serves as a bridge to allow for observation of file system
+// changes across all file system contexts within a browser context.
+class FileChangeService : public KeyedService,
+                          public storage::FileChangeObserver {
+ public:
+  FileChangeService();
+  FileChangeService(const FileChangeService& other) = delete;
+  FileChangeService& operator=(const FileChangeService& other) = delete;
+  ~FileChangeService() override;
+
+  // Adds/removes the specified `observer` for file change events.
+  void AddObserver(storage::FileChangeObserver* observer);
+  void RemoveObserver(storage::FileChangeObserver* observer);
+
+ private:
+  // storage::FileChangeObserver:
+  void OnCreateFile(const storage::FileSystemURL& url) override;
+  void OnCreateFileFrom(const storage::FileSystemURL& url,
+                        const storage::FileSystemURL& src) override;
+  void OnRemoveFile(const storage::FileSystemURL& url) override;
+  void OnModifyFile(const storage::FileSystemURL& url) override;
+  void OnCreateDirectory(const storage::FileSystemURL& url) override;
+  void OnRemoveDirectory(const storage::FileSystemURL& url) override;
+
+  base::ObserverList<storage::FileChangeObserver>::Unchecked observer_list_;
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_FILEAPI_FILE_CHANGE_SERVICE_H_
diff --git a/chrome/browser/chromeos/fileapi/file_change_service_factory.cc b/chrome/browser/chromeos/fileapi/file_change_service_factory.cc
new file mode 100644
index 0000000..f1fae927
--- /dev/null
+++ b/chrome/browser/chromeos/fileapi/file_change_service_factory.cc
@@ -0,0 +1,40 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/fileapi/file_change_service_factory.h"
+
+#include "chrome/browser/chromeos/fileapi/file_change_service.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+
+namespace chromeos {
+
+// static
+FileChangeServiceFactory* FileChangeServiceFactory::GetInstance() {
+  static base::NoDestructor<FileChangeServiceFactory> instance;
+  return instance.get();
+}
+
+FileChangeService* FileChangeServiceFactory::GetService(
+    content::BrowserContext* context) {
+  return static_cast<FileChangeService*>(
+      GetInstance()->GetServiceForBrowserContext(context, /*create=*/true));
+}
+
+FileChangeServiceFactory::FileChangeServiceFactory()
+    : BrowserContextKeyedServiceFactory(
+          "FileChangeService",
+          BrowserContextDependencyManager::GetInstance()) {}
+
+FileChangeServiceFactory::~FileChangeServiceFactory() = default;
+
+KeyedService* FileChangeServiceFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  return new FileChangeService();
+}
+
+bool FileChangeServiceFactory::ServiceIsCreatedWithBrowserContext() const {
+  return true;
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/fileapi/file_change_service_factory.h b/chrome/browser/chromeos/fileapi/file_change_service_factory.h
new file mode 100644
index 0000000..df554f7d
--- /dev/null
+++ b/chrome/browser/chromeos/fileapi/file_change_service_factory.h
@@ -0,0 +1,47 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_FILEAPI_FILE_CHANGE_SERVICE_FACTORY_H_
+#define CHROME_BROWSER_CHROMEOS_FILEAPI_FILE_CHANGE_SERVICE_FACTORY_H_
+
+#include "base/no_destructor.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+
+namespace content {
+class BrowserContext;
+}  // namespace content
+
+namespace chromeos {
+
+class FileChangeService;
+
+// A factory which creates the service which notifies observers of file change
+// events from external file systems. There will exist at most one service
+// instance per browser context.
+class FileChangeServiceFactory : public BrowserContextKeyedServiceFactory {
+ public:
+  // Returns the singleton factory instance.
+  static FileChangeServiceFactory* GetInstance();
+
+  // Returns the service instance for the specified browser `context`. Note that
+  // this will create the service if an instance does not already exist.
+  FileChangeService* GetService(content::BrowserContext* context);
+
+ private:
+  friend class base::NoDestructor<FileChangeServiceFactory>;
+
+  FileChangeServiceFactory();
+  FileChangeServiceFactory(const FileChangeServiceFactory&) = delete;
+  FileChangeServiceFactory& operator=(const FileChangeServiceFactory&) = delete;
+  ~FileChangeServiceFactory() override;
+
+  // BrowserContextKeyedServiceFactory:
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* context) const override;
+  bool ServiceIsCreatedWithBrowserContext() const override;
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_FILEAPI_FILE_CHANGE_SERVICE_FACTORY_H_
diff --git a/chrome/browser/chromeos/fileapi/file_change_service_unittest.cc b/chrome/browser/chromeos/fileapi/file_change_service_unittest.cc
new file mode 100644
index 0000000..a37704a
--- /dev/null
+++ b/chrome/browser/chromeos/fileapi/file_change_service_unittest.cc
@@ -0,0 +1,61 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/fileapi/file_change_service.h"
+
+#include "chrome/browser/chromeos/fileapi/file_change_service_factory.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
+#include "chrome/test/base/testing_profile_manager.h"
+
+namespace chromeos {
+
+namespace {
+
+// FileChangeServiceTest -------------------------------------------------------
+
+class FileChangeServiceTest : public BrowserWithTestWindowTest {
+ public:
+  FileChangeServiceTest() = default;
+  FileChangeServiceTest(const FileChangeServiceTest& other) = delete;
+  FileChangeServiceTest& operator=(const FileChangeServiceTest& other) = delete;
+  ~FileChangeServiceTest() override = default;
+
+  // Creates and returns a new profile for the specified `name`.
+  TestingProfile* CreateProfileWithName(const std::string& name) {
+    return profile_manager()->CreateTestingProfile(name);
+  }
+
+ private:
+  // BrowserWithTestWindowTest:
+  TestingProfile* CreateProfile() override {
+    constexpr char kPrimaryProfileName[] = "primary_profile";
+    return CreateProfileWithName(kPrimaryProfileName);
+  }
+};
+
+}  // namespace
+
+// Tests -----------------------------------------------------------------------
+
+// Verifies service instances are created on a per-profile basis.
+TEST_F(FileChangeServiceTest, CreatesServiceInstancesPerProfile) {
+  auto* factory = FileChangeServiceFactory::GetInstance();
+  ASSERT_TRUE(factory);
+
+  // `FileChangeService` should exist for the primary profile.
+  auto* primary_profile = GetProfile();
+  auto* primary_profile_service = factory->GetService(primary_profile);
+  ASSERT_TRUE(primary_profile_service);
+
+  // `FileChangeService` should be created as needed for additional profiles.
+  constexpr char kSecondaryProfileName[] = "secondary_profile";
+  auto* secondary_profile = CreateProfileWithName(kSecondaryProfileName);
+  auto* secondary_profile_service = factory->GetService(secondary_profile);
+  ASSERT_TRUE(secondary_profile_service);
+
+  // Per-profile services should be unique.
+  ASSERT_NE(primary_profile_service, secondary_profile_service);
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/guest_os/guest_os_share_path.cc b/chrome/browser/chromeos/guest_os/guest_os_share_path.cc
index 690a1e80..d8a8289 100644
--- a/chrome/browser/chromeos/guest_os/guest_os_share_path.cc
+++ b/chrome/browser/chromeos/guest_os/guest_os_share_path.cc
@@ -671,7 +671,10 @@
   file_watcher_task_runner_->PostTask(
       FROM_HERE,
       base::BindOnce(
-          base::IgnoreResult(&base::FilePathWatcher::Watch),
+          base::IgnoreResult(static_cast<bool (base::FilePathWatcher::*)(
+                                 const base::FilePath&, bool,
+                                 const base::FilePathWatcher::Callback&)>(
+              &base::FilePathWatcher::Watch)),
           base::Unretained(watcher.get()), path, false,
           base::BindRepeating(std::move(changed), std::move(deleted))));
   shared_paths_.emplace(path, SharedPathInfo(std::move(watcher), vm_name));
diff --git a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc
index c3cfdcee..b1b20b5a 100644
--- a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc
+++ b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc
@@ -867,8 +867,10 @@
     chromeos::CryptohomeClient::InitializeFake();
 
     RefreshDevicePolicy();
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(_))
+        .WillByDefault(Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
   }
@@ -978,7 +980,7 @@
   }
 
  private:
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 };
 
 class ExistingUserControllerActiveDirectoryUserAllowlistTest
diff --git a/chrome/browser/chromeos/login/saml/saml_browsertest.cc b/chrome/browser/chromeos/login/saml/saml_browsertest.cc
index 5e8cd85a..ab48044 100644
--- a/chrome/browser/chromeos/login/saml/saml_browsertest.cc
+++ b/chrome/browser/chromeos/login/saml/saml_browsertest.cc
@@ -1301,7 +1301,7 @@
  protected:
   policy::DevicePolicyCrosTestHelper test_helper_;
   policy::DevicePolicyBuilder* device_policy_;
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
   net::CookieList cookie_list_;
 
   // Add a fake user so the login screen does not show GAIA auth by default.
@@ -1339,8 +1339,10 @@
       &test_helper_, device_affiliation_ids)));
 
   // Initialize user policy.
-  EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-      .WillRepeatedly(testing::Return(true));
+  ON_CALL(provider_, IsInitializationComplete(testing::_))
+      .WillByDefault(testing::Return(true));
+  ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+      .WillByDefault(testing::Return(true));
   policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
 }
 
diff --git a/chrome/browser/chromeos/login/screens/app_downloading_screen.cc b/chrome/browser/chromeos/login/screens/app_downloading_screen.cc
index e638e431..4e9fc9d 100644
--- a/chrome/browser/chromeos/login/screens/app_downloading_screen.cc
+++ b/chrome/browser/chromeos/login/screens/app_downloading_screen.cc
@@ -28,7 +28,8 @@
 }
 
 AppDownloadingScreen::~AppDownloadingScreen() {
-  view_->Bind(nullptr);
+  if (view_)
+    view_->Bind(nullptr);
 }
 
 void AppDownloadingScreen::ShowImpl() {
diff --git a/chrome/browser/chromeos/login/screens/fingerprint_setup_screen.cc b/chrome/browser/chromeos/login/screens/fingerprint_setup_screen.cc
index 21a6ded..5a9ab33d 100644
--- a/chrome/browser/chromeos/login/screens/fingerprint_setup_screen.cc
+++ b/chrome/browser/chromeos/login/screens/fingerprint_setup_screen.cc
@@ -112,7 +112,8 @@
 }
 
 FingerprintSetupScreen::~FingerprintSetupScreen() {
-  view_->Bind(nullptr);
+  if (view_)
+    view_->Bind(nullptr);
 }
 
 bool FingerprintSetupScreen::MaybeSkip(WizardContext* context) {
diff --git a/chrome/browser/chromeos/login/screens/marketing_opt_in_screen.cc b/chrome/browser/chromeos/login/screens/marketing_opt_in_screen.cc
index bd08810..657227f 100644
--- a/chrome/browser/chromeos/login/screens/marketing_opt_in_screen.cc
+++ b/chrome/browser/chromeos/login/screens/marketing_opt_in_screen.cc
@@ -97,7 +97,8 @@
 }
 
 MarketingOptInScreen::~MarketingOptInScreen() {
-  view_->Bind(nullptr);
+  if (view_)
+    view_->Bind(nullptr);
 }
 
 bool MarketingOptInScreen::MaybeSkip(WizardContext* context) {
diff --git a/chrome/browser/chromeos/login/screens/pin_setup_screen.cc b/chrome/browser/chromeos/login/screens/pin_setup_screen.cc
index 9b5c3817..8a02123 100644
--- a/chrome/browser/chromeos/login/screens/pin_setup_screen.cc
+++ b/chrome/browser/chromeos/login/screens/pin_setup_screen.cc
@@ -57,7 +57,8 @@
 }
 
 PinSetupScreen::~PinSetupScreen() {
-  view_->Bind(nullptr);
+  if (view_)
+    view_->Bind(nullptr);
 }
 
 bool PinSetupScreen::MaybeSkip(WizardContext* context) {
diff --git a/chrome/browser/chromeos/login/screens/sync_consent_screen.cc b/chrome/browser/chromeos/login/screens/sync_consent_screen.cc
index 34b2050..d460cf8c 100644
--- a/chrome/browser/chromeos/login/screens/sync_consent_screen.cc
+++ b/chrome/browser/chromeos/login/screens/sync_consent_screen.cc
@@ -101,7 +101,8 @@
 }
 
 SyncConsentScreen::~SyncConsentScreen() {
-  view_->Bind(NULL);
+  if (view_)
+    view_->Bind(nullptr);
 }
 
 void SyncConsentScreen::Init() {
diff --git a/chrome/browser/chromeos/platform_keys/key_permissions/arc_key_permissions_manager_delegate_unittest.cc b/chrome/browser/chromeos/platform_keys/key_permissions/arc_key_permissions_manager_delegate_unittest.cc
index 266970b3..03df4d31 100644
--- a/chrome/browser/chromeos/platform_keys/key_permissions/arc_key_permissions_manager_delegate_unittest.cc
+++ b/chrome/browser/chromeos/platform_keys/key_permissions/arc_key_permissions_manager_delegate_unittest.cc
@@ -56,10 +56,12 @@
   ~ArcKeyPermissionsManagerDelegateTest() override = default;
 
   void SetUp() override {
-    policy_provider_ =
-        std::make_unique<policy::MockConfigurationPolicyProvider>();
-    EXPECT_CALL(*policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    policy_provider_ = std::make_unique<
+        testing::NiceMock<policy::MockConfigurationPolicyProvider>>();
+    ON_CALL(*policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(*policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     std::vector<policy::ConfigurationPolicyProvider*> providers = {
         policy_provider_.get()};
     auto policy_service_ =
diff --git a/chrome/browser/chromeos/policy/cloud_external_data_policy_observer_unittest.cc b/chrome/browser/chromeos/policy/cloud_external_data_policy_observer_unittest.cc
index b8298e1..c6347326 100644
--- a/chrome/browser/chromeos/policy/cloud_external_data_policy_observer_unittest.cc
+++ b/chrome/browser/chromeos/policy/cloud_external_data_policy_observer_unittest.cc
@@ -150,7 +150,7 @@
       device_local_account_policy_provider_;
 
   MockCloudExternalDataManager external_data_manager_;
-  MockConfigurationPolicyProvider user_policy_provider_;
+  testing::NiceMock<MockConfigurationPolicyProvider> user_policy_provider_;
 
   std::unique_ptr<TestingProfile> profile_;
 
@@ -195,8 +195,10 @@
           base::ThreadTaskRunnerHandle::Get(),
           base::ThreadTaskRunnerHandle::Get(), shared_url_loader_factory_));
 
-  EXPECT_CALL(user_policy_provider_, IsInitializationComplete(_))
-      .WillRepeatedly(Return(true));
+  ON_CALL(user_policy_provider_, IsInitializationComplete(_))
+      .WillByDefault(Return(true));
+  ON_CALL(user_policy_provider_, IsFirstPolicyLoadComplete(_))
+      .WillByDefault(Return(true));
   user_policy_provider_.Init();
 
   ConstructAvatarPolicy("avatar1.jpg",
diff --git a/chrome/browser/chromeos/policy/device_cloud_policy_browsertest.cc b/chrome/browser/chromeos/policy/device_cloud_policy_browsertest.cc
index 6a06d68..14f7e1b 100644
--- a/chrome/browser/chromeos/policy/device_cloud_policy_browsertest.cc
+++ b/chrome/browser/chromeos/policy/device_cloud_policy_browsertest.cc
@@ -13,6 +13,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "base/optional.h"
+#include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
@@ -27,6 +28,7 @@
 #include "chrome/browser/chromeos/settings/device_settings_service.h"
 #include "chrome/browser/extensions/chrome_test_extension_loader.h"
 #include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/policy/extension_force_install_mixin.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/common/chrome_constants.h"
@@ -48,6 +50,7 @@
 #include "components/policy/proto/chrome_extension_policy.pb.h"
 #include "components/policy/proto/device_management_backend.pb.h"
 #include "content/public/test/browser_test.h"
+#include "content/public/test/test_launcher.h"
 #include "crypto/rsa_private_key.h"
 #include "crypto/sha2.h"
 #include "extensions/browser/extension_registry.h"
@@ -267,28 +270,21 @@
 
 // Tests how component policy is handled for extensions installed on the sign-in
 // screen.
-class SigninExtensionsDeviceCloudPolicyBrowserTest
-    : public DevicePolicyCrosBrowserTest {
+class DeviceComponentPolicyBrowserTest : public DevicePolicyCrosBrowserTest {
  public:
   static constexpr const char* kTestExtensionId =
       "hifnmfgfdfhmoaponfpmnlpeahiomjim";
   static constexpr const char* kTestExtensionPath =
-      "extensions/signin_screen_managed_storage/extension.crx";
-  static constexpr const char* kTestExtensionUpdateManifestPath =
-      "/extensions/signin_screen_managed_storage/update_manifest.xml";
-  static constexpr const char* kTestExtensionUpdateManifest =
-      R"(<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
-           <app appid='$1'>
-             <updatecheck codebase='http://$2/$3' version='1.0' />
-           </app>
-         </gupdate>)";
+      "extensions/signin_screen_managed_storage/extension/";
+  static constexpr const char* kTestExtensionPemPath =
+      "extensions/signin_screen_managed_storage/extension.pem";
   static constexpr const char* kFakePolicyPath = "/test-policy.json";
   static constexpr const char* kFakePolicy =
       "{\"string-policy\": {\"Value\": \"value\"}}";
   static constexpr int kFakePolicyPublicKeyVersion = 1;
 
-  SigninExtensionsDeviceCloudPolicyBrowserTest() = default;
-  ~SigninExtensionsDeviceCloudPolicyBrowserTest() override = default;
+  DeviceComponentPolicyBrowserTest() = default;
+  ~DeviceComponentPolicyBrowserTest() override = default;
 
   void SetUp() override {
     ASSERT_TRUE(embedded_test_server()->InitializeAndListen());
@@ -318,57 +314,51 @@
   void SetUpOnMainThread() override {
     DevicePolicyCrosBrowserTest::SetUpOnMainThread();
 
+    StartTestServer();
+
+    extension_result_catcher_ = std::make_unique<extensions::ResultCatcher>();
+
+    extension_force_install_mixin_.InitWithDevicePolicyCrosTestHelper(
+        chromeos::ProfileHelper::GetSigninProfile(), policy_helper());
+    ASSERT_TRUE(extension_force_install_mixin_.ForceInstallFromSourceDir(
+        base::PathService::CheckedGet(chrome::DIR_TEST_DATA)
+            .Append(kTestExtensionPath),
+        base::PathService::CheckedGet(chrome::DIR_TEST_DATA)
+            .Append(kTestExtensionPemPath),
+        ExtensionForceInstallMixin::WaitMode::kNone));
+
     BrowserPolicyConnectorChromeOS* connector =
         g_browser_process->platform_part()->browser_policy_connector_chromeos();
     connector->device_management_service()->ScheduleInitialization(0);
   }
 
-  // |hang_component_policy_fetch| - whether requests for the component policy
-  // download should be hung indefinitely.
-  void StartTestServer(bool hang_component_policy_fetch) {
+  void TearDownOnMainThread() override {
+    extension_result_catcher_.reset();
+    DevicePolicyCrosBrowserTest::TearDownOnMainThread();
+  }
+
+  extensions::ResultCatcher* extension_result_catcher() {
+    return extension_result_catcher_.get();
+  }
+
+ private:
+  void StartTestServer() {
     embedded_test_server()->RegisterRequestHandler(base::BindRepeating(
-        &SigninExtensionsDeviceCloudPolicyBrowserTest::InterceptComponentPolicy,
-        base::Unretained(this), hang_component_policy_fetch));
-    embedded_test_server()->RegisterRequestHandler(base::BindRepeating(
-        &SigninExtensionsDeviceCloudPolicyBrowserTest::InterceptUpdateManifest,
+        &DeviceComponentPolicyBrowserTest::InterceptComponentPolicy,
         base::Unretained(this)));
     embedded_test_server()->StartAcceptingConnections();
   }
 
- private:
-  // Intercepts the request for the test extension update manifest.
-  std::unique_ptr<net::test_server::HttpResponse> InterceptUpdateManifest(
-      const net::test_server::HttpRequest& request) {
-    if (request.GetURL().path() != kTestExtensionUpdateManifestPath)
-      return nullptr;
-
-    // Create update manifest for the test extension, setting the extension URL
-    // with a test server URL pointing to the extension under the test data
-    // path.
-    std::string manifest_response = base::ReplaceStringPlaceholders(
-        kTestExtensionUpdateManifest,
-        {kTestExtensionId, embedded_test_server()->host_port_pair().ToString(),
-         kTestExtensionPath},
-        nullptr);
-
-    auto response = std::make_unique<net::test_server::BasicHttpResponse>();
-    response->set_content_type("text/xml");
-    response->set_content(manifest_response);
-    return response;
-  }
-
   // Intercepts the component policy requests.
-  // |hang| - if set, this will return a hung response, thus preventing the
-  //     policy download. Otherwise, the response will contain the test policy.
   std::unique_ptr<net::test_server::HttpResponse> InterceptComponentPolicy(
-      bool hang,
       const net::test_server::HttpRequest& request) {
     if (request.relative_url != kFakePolicyPath)
       return nullptr;
-
-    if (hang)
+    if (!content::IsPreTest()) {
+      // Intentionally hang the request in the non-PRE_ test.
       return std::make_unique<net::test_server::HungResponse>();
-
+    }
+    // Respond with the fake policy in the PRE_ test.
     auto response = std::make_unique<net::test_server::BasicHttpResponse>();
     response->set_content(kFakePolicy);
     return response;
@@ -377,28 +367,19 @@
   void SetFakeDevicePolicy() {
     device_policy()->policy_data().set_public_key_version(
         kFakePolicyPublicKeyVersion);
-
-    const GURL update_manifest_url =
-        embedded_test_server()->GetURL(kTestExtensionUpdateManifestPath);
-    const std::string policy_item_value = base::ReplaceStringPlaceholders(
-        "$1;$2", {kTestExtensionId, update_manifest_url.spec()}, nullptr);
-
-    device_policy()
-        ->payload()
-        .mutable_device_login_screen_extensions()
-        ->add_device_login_screen_extensions(policy_item_value);
-
     device_policy()->Build();
     session_manager_client()->set_device_policy(device_policy()->GetBlob());
   }
 
-  enterprise_management::ExternalPolicyData BuildTestComponentPolicyPayload() {
+  enterprise_management::ExternalPolicyData BuildTestComponentPolicyPayload()
+      const {
     ComponentCloudPolicyBuilder builder;
     MakeTestComponentPolicyBuilder(&builder);
     return builder.payload();
   }
 
-  void MakeTestComponentPolicyBuilder(ComponentCloudPolicyBuilder* builder) {
+  void MakeTestComponentPolicyBuilder(
+      ComponentCloudPolicyBuilder* builder) const {
     builder->policy_data().set_policy_type(
         dm_protocol::kChromeSigninExtensionPolicyType);
     builder->policy_data().set_settings_entity_id(kTestExtensionId);
@@ -410,8 +391,10 @@
   }
 
   chromeos::LocalPolicyTestServerMixin local_policy_mixin_{&mixin_host_};
+  ExtensionForceInstallMixin extension_force_install_mixin_{&mixin_host_};
+  std::unique_ptr<extensions::ResultCatcher> extension_result_catcher_;
 
-  DISALLOW_COPY_AND_ASSIGN(SigninExtensionsDeviceCloudPolicyBrowserTest);
+  DISALLOW_COPY_AND_ASSIGN(DeviceComponentPolicyBrowserTest);
 };
 
 }  // namespace
@@ -423,29 +406,16 @@
 //     extension installed into the sign-in profile can access the component
 //     policy downloaded during the first step.
 // PRE_ManagedStorage test handles the first step.
-IN_PROC_BROWSER_TEST_F(SigninExtensionsDeviceCloudPolicyBrowserTest,
-                       PRE_ManagedStorage) {
-  // The test app will be installed via policy, at which point its
-  // background page will be loaded.
-  extensions::ResultCatcher result_catcher;
-  StartTestServer(false /*hang_component_policy_fetch*/);
-  EXPECT_TRUE(result_catcher.GetNextResult());
+IN_PROC_BROWSER_TEST_F(DeviceComponentPolicyBrowserTest, PRE_ManagedStorage) {
+  EXPECT_TRUE(extension_result_catcher()->GetNextResult());
 }
 
 // The second step of the ManagedStorage test, which blocks component policy
 // download and verifies that a cached component policy is available to the test
 // extenion.
 // See PRE_ManagedStorage test.
-IN_PROC_BROWSER_TEST_F(SigninExtensionsDeviceCloudPolicyBrowserTest,
-                       ManagedStorage) {
-  // The test app will be installed via policy, at which point its
-  // background page will be loaded. Note that the app will not be installed
-  // before the test server is started, even if the app is installed from the
-  // extension cache - the server will be pinged at least to check whether the
-  // cached app version is the latest.
-  extensions::ResultCatcher result_catcher;
-  StartTestServer(true /*hang_component_policy_fetch*/);
-  EXPECT_TRUE(result_catcher.GetNextResult());
+IN_PROC_BROWSER_TEST_F(DeviceComponentPolicyBrowserTest, ManagedStorage) {
+  EXPECT_TRUE(extension_result_catcher()->GetNextResult());
 }
 
 }  // namespace policy
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_manager.cc
index 79b9ec14c..539d22f 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager.cc
@@ -6,12 +6,14 @@
 
 #include <vector>
 
+#include "ash/public/cpp/ash_features.h"
 #include "ash/public/cpp/privacy_screen_dlp_helper.h"
 #include "base/bind.h"
 #include "base/stl_util.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_notification_helper.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
+#include "chrome/browser/ui/ash/chrome_capture_mode_delegate.h"
 #include "content/public/browser/visibility.h"
 #include "content/public/browser/web_contents.h"
 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
@@ -113,19 +115,18 @@
   return false;
 }
 
-void DlpContentManager::OnVideoCaptureStarted(const ScreenshotArea& area,
-                                              base::OnceClosure stop_callback) {
+void DlpContentManager::OnVideoCaptureStarted(const ScreenshotArea& area) {
   if (IsVideoCaptureRestricted(area)) {
-    std::move(stop_callback).Run();
+    if (ash::features::IsCaptureModeEnabled())
+      ChromeCaptureModeDelegate::Get()->InterruptVideoRecordingIfAny();
     return;
   }
-  DCHECK(!running_video_capture_.has_value());
-  running_video_capture_.emplace(
-      std::make_pair(area, std::move(stop_callback)));
+  DCHECK(!running_video_capture_area_.has_value());
+  running_video_capture_area_.emplace(area);
 }
 
 void DlpContentManager::OnVideoCaptureStopped() {
-  running_video_capture_.reset();
+  running_video_capture_area_.reset();
 }
 
 bool DlpContentManager::IsCaptureModeInitRestricted() const {
@@ -369,13 +370,13 @@
 }
 
 void DlpContentManager::CheckRunningVideoCapture() {
-  if (!running_video_capture_.has_value())
+  if (!running_video_capture_area_.has_value())
     return;
-  const auto& area = running_video_capture_->first;
-  auto& stop_callback = running_video_capture_->second;
-  if (IsAreaRestricted(area, DlpContentRestriction::kVideoCapture)) {
-    std::move(stop_callback).Run();
-    running_video_capture_.reset();
+  if (IsAreaRestricted(*running_video_capture_area_,
+                       DlpContentRestriction::kVideoCapture)) {
+    if (ash::features::IsCaptureModeEnabled())
+      ChromeCaptureModeDelegate::Get()->InterruptVideoRecordingIfAny();
+    running_video_capture_area_.reset();
   }
 }
 
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager.h b/chrome/browser/chromeos/policy/dlp/dlp_content_manager.h
index 95d6a418..99200b38 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager.h
+++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager.h
@@ -70,9 +70,7 @@
       const content::DesktopMediaID& media_id) const;
 
   // Called when video capturing for |area| is started.
-  // |stop_callback| will be called when restricted content will appear there.
-  void OnVideoCaptureStarted(const ScreenshotArea& area,
-                             base::OnceClosure stop_callback);
+  void OnVideoCaptureStarted(const ScreenshotArea& area);
 
   // Called when video capturing is stopped.
   void OnVideoCaptureStopped();
@@ -203,9 +201,8 @@
   // Set of restriction applied to the currently visible content.
   DlpContentRestrictionSet on_screen_restrictions_;
 
-  // The currently running video capture are and callback to stop, if any.
-  base::Optional<std::pair<ScreenshotArea, base::OnceClosure>>
-      running_video_capture_;
+  // The currently running video capture area if any.
+  base::Optional<ScreenshotArea> running_video_capture_area_;
 
   // List of the currently running screen captures.
   std::vector<ScreenCaptureInfo> running_screen_captures_;
diff --git a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc
index 2375204..7e936b31 100644
--- a/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc
+++ b/chrome/browser/chromeos/policy/dlp/dlp_content_manager_browsertest.cc
@@ -4,11 +4,14 @@
 
 #include "chrome/browser/chromeos/policy/dlp/dlp_content_manager.h"
 
+#include "ash/public/cpp/ash_features.h"
+#include "base/test/scoped_feature_list.h"
 #include "base/values.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_rules_manager_test_utils.h"
 #include "chrome/browser/notifications/notification_display_service_tester.h"
 #include "chrome/browser/policy/policy_test_utils.h"
+#include "chrome/browser/ui/ash/chrome_capture_mode_delegate.h"
 #include "chrome/browser/ui/ash/screenshot_area.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
@@ -45,7 +48,17 @@
 
 class DlpContentManagerBrowserTest : public InProcessBrowserTest {
  public:
-  DlpContentManagerBrowserTest() {}
+  DlpContentManagerBrowserTest() = default;
+  ~DlpContentManagerBrowserTest() override = default;
+
+  // InProcessBrowserTest:
+  void SetUp() override {
+    scoped_feature_list_.InitAndEnableFeature(ash::features::kCaptureMode);
+    InProcessBrowserTest::SetUp();
+  }
+
+ private:
+  base::test::ScopedFeatureList scoped_feature_list_;
 };
 
 IN_PROC_BROWSER_TEST_F(DlpContentManagerBrowserTest, ScreenshotsRestricted) {
@@ -104,8 +117,6 @@
   DlpContentManager* manager = DlpContentManager::Get();
   aura::Window* root_window =
       browser()->window()->GetNativeWindow()->GetRootWindow();
-  ScreenshotArea fullscreen = ScreenshotArea::CreateForPartialWindow(
-      root_window, root_window->bounds());
 
   // Open first browser window.
   Browser* browser1 = browser();
@@ -130,7 +141,9 @@
 
   // Start capture of the whole screen.
   base::RunLoop run_loop;
-  manager->OnVideoCaptureStarted(fullscreen, run_loop.QuitClosure());
+  auto* capture_mode_delegate = ChromeCaptureModeDelegate::Get();
+  capture_mode_delegate->StartObservingRestrictedContent(
+      root_window, root_window->bounds(), run_loop.QuitClosure());
 
   // Move first window with confidential content to make it visible.
   browser1->window()->SetBounds(gfx::Rect(100, 100, 700, 700));
@@ -138,7 +151,7 @@
   // Check that capture was requested to be stopped via callback.
   run_loop.Run();
 
-  manager->OnVideoCaptureStopped();
+  capture_mode_delegate->StopObservingRestrictedContent();
   browser2->window()->Close();
 }
 
@@ -147,8 +160,6 @@
   DlpContentManager* manager = DlpContentManager::Get();
   aura::Window* root_window =
       browser()->window()->GetNativeWindow()->GetRootWindow();
-  ScreenshotArea fullscreen = ScreenshotArea::CreateForPartialWindow(
-      root_window, root_window->bounds());
 
   // Open first browser window.
   Browser* browser1 = browser();
@@ -173,7 +184,9 @@
 
   // Start capture of the whole screen.
   base::RunLoop run_loop;
-  manager->OnVideoCaptureStarted(fullscreen, run_loop.QuitClosure());
+  auto* capture_mode_delegate = ChromeCaptureModeDelegate::Get();
+  capture_mode_delegate->StartObservingRestrictedContent(
+      root_window, root_window->bounds(), run_loop.QuitClosure());
 
   // Move second window to make first window with confidential content visible.
   browser2->window()->SetBounds(gfx::Rect(150, 150, 700, 700));
@@ -181,7 +194,7 @@
   // Check that capture was requested to be stopped via callback.
   run_loop.Run();
 
-  manager->OnVideoCaptureStopped();
+  capture_mode_delegate->StopObservingRestrictedContent();
   browser2->window()->Close();
 }
 
@@ -190,8 +203,6 @@
   DlpContentManager* manager = DlpContentManager::Get();
   aura::Window* root_window =
       browser()->window()->GetNativeWindow()->GetRootWindow();
-  ScreenshotArea fullscreen = ScreenshotArea::CreateForPartialWindow(
-      root_window, root_window->bounds());
 
   // Open first browser window.
   Browser* browser1 = browser();
@@ -216,8 +227,9 @@
 
   // Start capture of the whole screen.
   base::RunLoop run_loop;
-  manager->OnVideoCaptureStarted(
-      fullscreen, base::BindOnce([] {
+  auto* capture_mode_delegate = ChromeCaptureModeDelegate::Get();
+  capture_mode_delegate->StartObservingRestrictedContent(
+      root_window, root_window->bounds(), base::BindOnce([] {
         FAIL() << "Video capture stop callback shouldn't be called";
       }));
 
@@ -225,8 +237,8 @@
   browser1->window()->SetBounds(gfx::Rect(150, 150, 500, 500));
 
   // Check that capture was not requested to be stopped via callback.
-  manager->OnVideoCaptureStopped();
   run_loop.RunUntilIdle();
+  capture_mode_delegate->StopObservingRestrictedContent();
 
   browser2->window()->Close();
 }
diff --git a/chrome/browser/chromeos/policy/network_policy_application_browsertest.cc b/chrome/browser/chromeos/policy/network_policy_application_browsertest.cc
index 48d9885..0097b1e2 100644
--- a/chrome/browser/chromeos/policy/network_policy_application_browsertest.cc
+++ b/chrome/browser/chromeos/policy/network_policy_application_browsertest.cc
@@ -133,8 +133,10 @@
  protected:
   // InProcessBrowserTest:
   void SetUp() override {
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
 
@@ -218,7 +220,7 @@
   AccountId test_account_id_;
 
  private:
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
   policy::PolicyMap current_policy_;
 
   DISALLOW_COPY_AND_ASSIGN(NetworkPolicyApplicationTest);
diff --git a/chrome/browser/chromeos/policy/policy_certs_browsertest.cc b/chrome/browser/chromeos/policy/policy_certs_browsertest.cc
index eb95531..c4ee2291 100644
--- a/chrome/browser/chromeos/policy/policy_certs_browsertest.cc
+++ b/chrome/browser/chromeos/policy/policy_certs_browsertest.cc
@@ -330,6 +330,8 @@
     // browser initialization.
     EXPECT_CALL(policy_for_profile_1_, IsInitializationComplete(testing::_))
         .WillRepeatedly(testing::Return(true));
+    EXPECT_CALL(policy_for_profile_1_, IsFirstPolicyLoadComplete(testing::_))
+        .WillRepeatedly(testing::Return(true));
     policy::PushProfilePolicyConnectorProviderForTesting(
         &policy_for_profile_1_);
   }
@@ -353,6 +355,8 @@
     // Prepare policy provider for second profile.
     EXPECT_CALL(policy_for_profile_2_, IsInitializationComplete(testing::_))
         .WillRepeatedly(testing::Return(true));
+    EXPECT_CALL(policy_for_profile_2_, IsFirstPolicyLoadComplete(testing::_))
+        .WillRepeatedly(testing::Return(true));
     policy::PushProfilePolicyConnectorProviderForTesting(
         &policy_for_profile_2_);
 
@@ -707,6 +711,8 @@
     // Set up the mock policy provider.
     EXPECT_CALL(user_policy_provider_, IsInitializationComplete(testing::_))
         .WillRepeatedly(testing::Return(true));
+    EXPECT_CALL(user_policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillRepeatedly(testing::Return(true));
     BrowserPolicyConnector::SetPolicyProviderForTesting(&user_policy_provider_);
 
     device_policy()->policy_data().set_public_key_version(1);
@@ -891,6 +897,8 @@
     // Set up the mock policy provider.
     EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
         .WillRepeatedly(testing::Return(true));
+    EXPECT_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillRepeatedly(testing::Return(true));
     BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
 
     DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture();
diff --git a/chrome/browser/chromeos/policy/system_proxy_manager_browsertest.cc b/chrome/browser/chromeos/policy/system_proxy_manager_browsertest.cc
index 74d435d..45bbc133 100644
--- a/chrome/browser/chromeos/policy/system_proxy_manager_browsertest.cc
+++ b/chrome/browser/chromeos/policy/system_proxy_manager_browsertest.cc
@@ -350,8 +350,9 @@
     ASSERT_NO_FATAL_FAILURE((affiliation_helper.SetDeviceAffiliationIDs(
         &policy_helper_, device_affiliation_ids)));
 
-    EXPECT_CALL(provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   }
 
@@ -469,7 +470,7 @@
       &mixin_host_, chromeos::DeviceStateMixin::State::OOBE_COMPLETED_UNOWNED};
 
   chromeos::ScopedStubInstallAttributes test_install_attributes_;
-  MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<MockConfigurationPolicyProvider> provider_;
   DevicePolicyCrosTestHelper policy_helper_;
 };
 
diff --git a/chrome/browser/chromeos/policy/user_policy_manager_builder_chromeos.cc b/chrome/browser/chromeos/policy/user_policy_manager_builder_chromeos.cc
index 44ab761..cf077cd 100644
--- a/chrome/browser/chromeos/policy/user_policy_manager_builder_chromeos.cc
+++ b/chrome/browser/chromeos/policy/user_policy_manager_builder_chromeos.cc
@@ -12,8 +12,6 @@
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/memory/ref_counted.h"
-#include "base/metrics/histogram_functions.h"
-#include "base/metrics/histogram_macros.h"
 #include "base/path_service.h"
 #include "base/sequenced_task_runner.h"
 #include "base/task/post_task.h"
@@ -41,7 +39,6 @@
 #include "components/policy/core/browser/browser_policy_connector.h"
 #include "components/policy/core/common/cloud/cloud_external_data_manager.h"
 #include "components/policy/core/common/cloud/device_management_service.h"
-#include "components/policy/core/common/cloud/enterprise_metrics.h"
 #include "components/policy/core/common/configuration_policy_provider.h"
 #include "components/policy/policy_constants.h"
 #include "components/user_manager/known_user.h"
@@ -75,12 +72,7 @@
 
 // Called when the user policy loading fails with a fatal error, and the user
 // session has to be terminated.
-void OnUserPolicyFatalError(
-    const AccountId& account_id,
-    MetricUserPolicyChromeOSSessionAbortType metric_value) {
-  base::UmaHistogramEnumeration(
-      kMetricUserPolicyChromeOSSessionAbort, metric_value,
-      MetricUserPolicyChromeOSSessionAbortType::kCount);
+void OnUserPolicyFatalError(const AccountId& account_id) {
   user_manager::UserManager::Get()->SaveForceOnlineSignin(
       account_id, true /* force_online_signin */);
   chrome::AttemptUserExit();
@@ -186,13 +178,6 @@
   if (policy_check_required && force_immediate_load) {
     LOG(ERROR) << "Exiting non-stub session because browser restarted before"
                << " profile was initialized.";
-    base::UmaHistogramEnumeration(
-        kMetricUserPolicyChromeOSSessionAbort,
-        is_active_directory ? MetricUserPolicyChromeOSSessionAbortType::
-                                  kBlockingInitWithActiveDirectoryManagement
-                            : MetricUserPolicyChromeOSSessionAbortType::
-                                  kBlockingInitWithGoogleCloudManagement,
-        MetricUserPolicyChromeOSSessionAbortType::kCount);
     chrome::AttemptUserExit();
     return;
   }
@@ -288,10 +273,8 @@
   if (is_active_directory) {
     auto manager = std::make_unique<UserActiveDirectoryPolicyManager>(
         account_id, policy_required, policy_refresh_timeout,
-        base::BindOnce(&OnUserPolicyFatalError, account_id,
-                       MetricUserPolicyChromeOSSessionAbortType::
-                           kInitWithActiveDirectoryManagement),
-        std::move(store), std::move(external_data_manager));
+        base::BindOnce(&OnUserPolicyFatalError, account_id), std::move(store),
+        std::move(external_data_manager));
     manager->Init(profile->GetPolicySchemaRegistryService()->registry());
     *active_directory_policy_manager_out = std::move(manager);
   } else {
@@ -300,10 +283,8 @@
             profile, std::move(store), std::move(external_data_manager),
             component_policy_cache_dir, enforcement_type,
             policy_refresh_timeout,
-            base::BindOnce(&OnUserPolicyFatalError, account_id,
-                           MetricUserPolicyChromeOSSessionAbortType::
-                               kInitWithGoogleCloudManagement),
-            account_id, base::ThreadTaskRunnerHandle::Get());
+            base::BindOnce(&OnUserPolicyFatalError, account_id), account_id,
+            base::ThreadTaskRunnerHandle::Get());
 
     bool wildcard_match = false;
     if (connector->IsEnterpriseManaged() &&
diff --git a/chrome/browser/chromeos/scanning/scan_service.cc b/chrome/browser/chromeos/scanning/scan_service.cc
index 26e75ed..dca4c84 100644
--- a/chrome/browser/chromeos/scanning/scan_service.cc
+++ b/chrome/browser/chromeos/scanning/scan_service.cc
@@ -116,8 +116,10 @@
     const base::UnguessableToken& scanner_id,
     GetScannerCapabilitiesCallback callback) {
   const std::string scanner_name = GetScannerName(scanner_id);
-  if (scanner_name.empty())
+  if (scanner_name.empty()) {
     std::move(callback).Run(mojo_ipc::ScannerCapabilities::New());
+    return;
+  }
 
   lorgnette_scanner_manager_->GetScannerCapabilities(
       scanner_name,
diff --git a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
index df92340..bde0c9f 100644
--- a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
+++ b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
@@ -156,8 +156,9 @@
 
   void SetUpInProcessBrowserTestFixture() override {
     InProcessBrowserTest::SetUpInProcessBrowserTestFixture();
-    EXPECT_CALL(provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   }
 
@@ -204,7 +205,7 @@
   // Disable animations so that tray icons hide immediately.
   ui::ScopedAnimationDurationScaleMode disable_animations_;
 
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
   std::unique_ptr<ash::SystemTrayTestApi> tray_test_api_;
 };
 
diff --git a/chrome/browser/chromeos/system_logs/single_log_file_log_source.cc b/chrome/browser/chromeos/system_logs/single_log_file_log_source.cc
index 8c445856..58d702c 100644
--- a/chrome/browser/chromeos/system_logs/single_log_file_log_source.cc
+++ b/chrome/browser/chromeos/system_logs/single_log_file_log_source.cc
@@ -21,8 +21,15 @@
 using SupportedSource = SingleLogFileLogSource::SupportedSource;
 
 constexpr char kDefaultSystemLogDirPath[] = "/var/log";
+constexpr char kLogTruncated[] = "<earlier logs truncated>\n<partial line>";
 constexpr int kMaxNumAllowedLogRotationsDuringFileRead = 3;
 
+// We set a per-read limit of 5 MiB to avoid running out of memory. Clients are
+// responsible for further bundling and truncating.
+//  * This cap is applied to the read buffer before dropping trailing incomplete
+//    lines.
+constexpr int64_t kMaxReadSize = 5 * 1024 * 1024;
+
 // A custom timestamp for when the current Chrome session started. Used during
 // testing to override the actual time.
 const base::Time* g_chrome_start_time_for_test = nullptr;
@@ -82,7 +89,8 @@
     : SystemLogsSource(GetLogFileSourceRelativeFilePathValue(source_type)),
       source_type_(source_type),
       log_file_dir_path_(kDefaultSystemLogDirPath),
-      num_bytes_read_(0),
+      max_read_size_(kMaxReadSize),
+      file_cursor_position_(0),
       file_inode_(0) {}
 
 SingleLogFileLogSource::~SingleLogFileLogSource() {}
@@ -99,6 +107,7 @@
 
   auto response = std::make_unique<SystemLogsResponse>();
   auto* response_ptr = response.get();
+
   base::ThreadPool::PostTaskAndReply(
       FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
       base::BindOnce(&SingleLogFileLogSource::ReadFile,
@@ -107,12 +116,29 @@
       base::BindOnce(std::move(callback), std::move(response)));
 }
 
+void SingleLogFileLogSource::SetMaxReadSizeForTesting(
+    const int64_t max_read_size) {
+  max_read_size_ = max_read_size;
+}
+
 base::FilePath SingleLogFileLogSource::GetLogFilePath() const {
   return log_file_dir_path_.Append(source_name());
 }
 
 void SingleLogFileLogSource::ReadFile(size_t num_rotations_allowed,
-                                      SystemLogsResponse* result) {
+                                      SystemLogsResponse* response) {
+  auto result_string = std::make_unique<std::string>();
+  // No bytes have been skipped yet, because the read hasn't started.
+  constexpr bool bytes_skipped = false;
+  ContinueReadFile(std::move(result_string), bytes_skipped,
+                   num_rotations_allowed, response);
+}
+
+void SingleLogFileLogSource::ContinueReadFile(
+    std::unique_ptr<std::string> result_string,
+    bool bytes_skipped,
+    size_t num_rotations_allowed,
+    SystemLogsResponse* response) {
   // Attempt to open the file if it was not previously opened.
   if (!file_.IsValid()) {
     file_.Initialize(GetLogFilePath(),
@@ -120,23 +146,42 @@
     if (!file_.IsValid())
       return;
 
-    num_bytes_read_ = 0;
+    file_cursor_position_ = 0;
     file_inode_ = GetInodeValue(GetLogFilePath());
   }
 
   // Check for file size reset.
   const size_t length = file_.GetLength();
-  if (length < num_bytes_read_) {
-    num_bytes_read_ = 0;
+  if (length < file_cursor_position_) {
+    file_cursor_position_ = 0;
     file_.Seek(base::File::FROM_BEGIN, 0);
   }
 
+  // Check for large read and skip forward to avoid out-of-memory conditions.
+  if (length - file_cursor_position_ > max_read_size_) {
+    bytes_skipped = true;
+    file_.Seek(base::File::FROM_END, -max_read_size_);
+    // Update |file_cursor_position_| to support the file size reset check.
+    file_cursor_position_ = length - max_read_size_;
+  }
+
+  // The calculated amount of data to read, after adjusting for
+  // |max_read_size_|.
+  const size_t size_to_read = length - file_cursor_position_;
+
+  // Trim down the previously read data before starting a new read.
+  const size_t available_previous_read_size = max_read_size_ - size_to_read;
+  if (available_previous_read_size < result_string->size()) {
+    result_string->erase(0,
+                         result_string->size() - available_previous_read_size);
+  }
+
   // Read from file until end.
-  const size_t size_to_read = length - num_bytes_read_;
-  std::string result_string;
-  result_string.resize(size_to_read);
-  size_t size_read = file_.ReadAtCurrentPos(&result_string[0], size_to_read);
-  result_string.resize(size_read);
+  std::string new_result_string;
+  new_result_string.resize(size_to_read);
+  size_t size_read =
+      file_.ReadAtCurrentPos(&new_result_string[0], size_to_read);
+  new_result_string.resize(size_read);
 
   const bool file_was_rotated = file_inode_ != GetInodeValue(GetLogFilePath());
   const bool should_handle_file_rotation =
@@ -145,38 +190,44 @@
   // The reader may only read complete lines. The exception is when there is a
   // rotation, in which case all the remaining contents of the old log file
   // should be read before moving on to read the new log file.
-  if ((result_string.empty() || result_string.back() != '\n') &&
+  if ((new_result_string.empty() || new_result_string.back() != '\n') &&
       !should_handle_file_rotation) {
-    // If an incomplete line was read, return only the part that includes whole
-    // lines.
-    size_t last_newline_pos = result_string.find_last_of('\n');
-    if (last_newline_pos == std::string::npos) {
-      file_.Seek(base::File::FROM_CURRENT, -size_read);
-      AppendToSystemLogsResponse(result, source_name(), "");
-      return;
-    }
-    // The part of the string that will be returned includes the newline itself.
-    size_t adjusted_size_read = last_newline_pos + 1;
+    // If an incomplete line was read, return only the part that includes
+    // whole lines.
+    size_t last_newline_pos = new_result_string.find_last_of('\n');
+
+    // The part of the string that will be returned includes the newline
+    // itself.
+    size_t adjusted_size_read =
+        last_newline_pos == std::string::npos ? 0 : last_newline_pos + 1;
     file_.Seek(base::File::FROM_CURRENT, -size_read + adjusted_size_read);
-    result_string.resize(adjusted_size_read);
+    new_result_string.resize(adjusted_size_read);
 
     // Update |size_read| to reflect that the read was only up to the last
     // newline.
     size_read = adjusted_size_read;
   }
 
-  num_bytes_read_ += size_read;
+  file_cursor_position_ += size_read;
 
-  // Pass it back to the callback.
-  AppendToSystemLogsResponse(result, source_name(), result_string);
+  result_string->append(new_result_string);
 
   // If the file was rotated, close the file handle and call this function
   // again, to read from the new file.
   if (should_handle_file_rotation) {
     file_.Close();
-    num_bytes_read_ = 0;
+    file_cursor_position_ = 0;
     file_inode_ = 0;
-    ReadFile(num_rotations_allowed - 1, result);
+    ContinueReadFile(std::move(result_string), bytes_skipped,
+                     num_rotations_allowed - 1, response);
+  } else {
+    // Only write the log truncated sentinel value once we have something to
+    // go after it, and any accumulation and rollover has been handled.
+    if (bytes_skipped && result_string->size() > 0) {
+      AppendToSystemLogsResponse(response, source_name(), kLogTruncated);
+    }
+    // Pass it back to the callback.
+    AppendToSystemLogsResponse(response, source_name(), *result_string.get());
   }
 }
 
diff --git a/chrome/browser/chromeos/system_logs/single_log_file_log_source.h b/chrome/browser/chromeos/system_logs/single_log_file_log_source.h
index 18cf3c68..e3c0473 100644
--- a/chrome/browser/chromeos/system_logs/single_log_file_log_source.h
+++ b/chrome/browser/chromeos/system_logs/single_log_file_log_source.h
@@ -59,6 +59,8 @@
   // system_logs::SystemLogsSource:
   void Fetch(SysLogsSourceCallback callback) override;
 
+  void SetMaxReadSizeForTesting(int64_t max_read_size);
+
  private:
   friend class SingleLogFileLogSourceTest;
 
@@ -66,7 +68,7 @@
   base::FilePath GetLogFilePath() const;
 
   // Reads all available content from |file_| that has not already been read.
-  // Stores results as a single entry in |result|, with |source_name()| as key
+  // Stores results as a single entry in |response|, with |source_name()| as key
   // and the read log contents as value.
   //
   // Handles rotation of underlying log file by reading all remaining contents
@@ -78,7 +80,22 @@
   // during a call, ReadFile() stops checking for log file rotation for the
   // remainder of its execution. Any further rotation could result in missed log
   // data.
-  void ReadFile(size_t num_rotations_allowed, SystemLogsResponse* result);
+  void ReadFile(size_t num_rotations_allowed, SystemLogsResponse* response);
+
+  // Continues an in-progress file read.
+  //
+  // |result_string| stores accumulated logs read across file rotations to
+  // ensure at most |max_read_size_| bytes are read when combining data from
+  // multiple rotations for a log file into a single read.
+  //
+  // |bytes_skipped| is true when some bytes in the current read were skipped
+  // to avoid exceeding |max_read_size_|.
+  //
+  // See |ReadFile| for |num_rotations_allowed| and |response|.
+  void ContinueReadFile(std::unique_ptr<std::string> result_string,
+                        bool bytes_skipped,
+                        size_t num_rotations_allowed,
+                        SystemLogsResponse* response);
 
   // The source type.
   const SupportedSource source_type_;
@@ -86,8 +103,11 @@
   // Path to system log file directory.
   base::FilePath log_file_dir_path_;
 
-  // Keeps track of how much data has been read from |file_|.
-  size_t num_bytes_read_;
+  // The maximum size of a read from |file_|.
+  int64_t max_read_size_;
+
+  // Keeps track of how much data has been read or skipped from |file_|.
+  size_t file_cursor_position_;
 
   // Handle for reading the log file that is source of logging data.
   base::File file_;
diff --git a/chrome/browser/chromeos/system_logs/single_log_file_log_source_unittest.cc b/chrome/browser/chromeos/system_logs/single_log_file_log_source_unittest.cc
index 036f7590..6df6c5d 100644
--- a/chrome/browser/chromeos/system_logs/single_log_file_log_source_unittest.cc
+++ b/chrome/browser/chromeos/system_logs/single_log_file_log_source_unittest.cc
@@ -58,6 +58,11 @@
     ASSERT_TRUE(base::PathExists(log_file_path_)) << log_file_path_.value();
   }
 
+  // Overrides the max read size for testing.
+  void SetMaxReadSize(int64_t max_read_size) {
+    source_->SetMaxReadSizeForTesting(max_read_size);
+  }
+
   // Writes/appends (respectively) a string |input| to file indicated by
   // |relative_path| under |log_dir_|.
   bool WriteFile(const base::FilePath& relative_path,
@@ -298,4 +303,158 @@
   EXPECT_EQ("Also no newline here...yet\n", latest_response());
 }
 
+TEST_F(SingleLogFileLogSourceTest, ReadAtMaxReadSizeNotLimited) {
+  // Technically other tests exercise this case as well, but this is to be
+  // explicit and test the edge case.
+  InitializeSource(SingleLogFileLogSource::SupportedSource::kUiLatest);
+  SetMaxReadSize(5);
+
+  EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), "1234\n"));
+  FetchFromSource();
+
+  EXPECT_EQ(1, num_callback_calls());
+  EXPECT_EQ("1234\n", latest_response());
+}
+
+TEST_F(SingleLogFileLogSourceTest, ReadOverMaxReadSizeLimitedToTail) {
+  InitializeSource(SingleLogFileLogSource::SupportedSource::kUiLatest);
+  SetMaxReadSize(20);
+
+  EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), "Line 1\n"));
+  EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), "Line 2\n"));
+  EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), "Line 3\n"));
+  EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), "Line 4\n"));
+  FetchFromSource();
+
+  EXPECT_EQ(1, num_callback_calls());
+  EXPECT_EQ(
+      "<earlier logs truncated>\n<partial line>ine 2\n"
+      "Line 3\n"
+      "Line 4\n",
+      latest_response());
+}
+
+TEST_F(SingleLogFileLogSourceTest, ReadOverMaxReadSizeBeforeRotate) {
+  InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
+  SetMaxReadSize(14);
+
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "1st log file\n"));
+  EXPECT_TRUE(
+      AppendToFile(base::FilePath("messages"), "Exceeds max read size\n"));
+  FetchFromSource();
+  EXPECT_EQ(1, num_callback_calls());
+  EXPECT_EQ("<earlier logs truncated>\n<partial line>max read size\n",
+            latest_response());
+
+  // Rotate file. Make sure the rest of the old file and the contents of the new
+  // file are both read.
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "More\n"));
+  EXPECT_TRUE(
+      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "2nd file\n"));
+
+  FetchFromSource();
+  EXPECT_EQ(2, num_callback_calls());
+  EXPECT_EQ("More\n2nd file\n", latest_response());
+
+  // Rotate again, but this time omit the newline before rotating.
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"),
+                           "Long line without a newline ... "));
+  EXPECT_TRUE(
+      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "ended\n"));
+  // Partial line counted against max read size.
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "partial"));
+
+  FetchFromSource();
+  EXPECT_EQ(3, num_callback_calls());
+  EXPECT_EQ("<earlier logs truncated>\n<partial line> ended\n",
+            latest_response());
+}
+
+TEST_F(SingleLogFileLogSourceTest, ReadOverMaxReadSizeAfterRotate) {
+  InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
+  SetMaxReadSize(14);
+
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "1st\n"));
+  FetchFromSource();
+  EXPECT_EQ(1, num_callback_calls());
+  EXPECT_EQ("1st\n", latest_response());
+
+  // Rotate file. Make sure the rest of the old file and the contents of the new
+  // file are both read.
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "More\n"));
+  EXPECT_TRUE(
+      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "2nd file\n"));
+  EXPECT_TRUE(
+      AppendToFile(base::FilePath("messages"), "More data in 2nd file\n"));
+
+  FetchFromSource();
+  EXPECT_EQ(2, num_callback_calls());
+  EXPECT_EQ("<earlier logs truncated>\n<partial line>a in 2nd file\n",
+            latest_response());
+
+  // Rotate again, but this time omit the newline before rotating.
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "Start ... "));
+  EXPECT_TRUE(
+      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"),
+                           "ended here but is a long line\n"));
+  // Partial line counted against max read size.
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "partial"));
+
+  FetchFromSource();
+  EXPECT_EQ(3, num_callback_calls());
+  EXPECT_EQ("<earlier logs truncated>\n<partial line>g line\n",
+            latest_response());
+}
+
+TEST_F(SingleLogFileLogSourceTest, ReadOverMaxReadSizeBeforeAndAfterRotate) {
+  InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
+  SetMaxReadSize(14);
+
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "1st log file\n"));
+  FetchFromSource();
+  EXPECT_EQ(1, num_callback_calls());
+  EXPECT_EQ("1st log file\n", latest_response());
+
+  EXPECT_TRUE(
+      AppendToFile(base::FilePath("messages"), "Exceeds max read size 1\n"));
+  EXPECT_TRUE(
+      RotateFile(base::FilePath("messages"), base::FilePath("messages.1")));
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "2nd file\n"));
+  EXPECT_TRUE(
+      AppendToFile(base::FilePath("messages"), "Exceeds max read size 2\n"));
+  FetchFromSource();
+  EXPECT_EQ(2, num_callback_calls());
+  EXPECT_EQ("<earlier logs truncated>\n<partial line>x read size 2\n",
+            latest_response());
+}
+
+TEST_F(SingleLogFileLogSourceTest, LongPartialLineEventuallySkipped) {
+  InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
+  SetMaxReadSize(14);
+
+  // A partial line shorter than the max read size.
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "Start ... "));
+  FetchFromSource();
+  EXPECT_EQ(1, num_callback_calls());
+  EXPECT_EQ("", latest_response());
+
+  // The partial line is now longer than max read size.
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"),
+                           "someone is still writing this long line ... "));
+  FetchFromSource();
+  EXPECT_EQ(2, num_callback_calls());
+  EXPECT_EQ("", latest_response());
+
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "end\n"));
+  EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "Line 2\n"));
+  FetchFromSource();
+  EXPECT_EQ(3, num_callback_calls());
+  EXPECT_EQ("<earlier logs truncated>\n<partial line>.. end\nLine 2\n",
+            latest_response());
+}
+
 }  // namespace system_logs
diff --git a/chrome/browser/conversions/conversions_usage_restriction_trial_browsertest.cc b/chrome/browser/conversions/conversions_usage_restriction_trial_browsertest.cc
new file mode 100644
index 0000000..1a86c1d
--- /dev/null
+++ b/chrome/browser/conversions/conversions_usage_restriction_trial_browsertest.cc
@@ -0,0 +1,121 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <memory>
+
+#include "base/bind.h"
+#include "base/strings/strcat.h"
+#include "base/test/scoped_feature_list.h"
+#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/embedder_support/origin_trials/features.h"
+#include "components/embedder_support/switches.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_features.h"
+#include "content/public/test/browser_test.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/url_loader_interceptor.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace {
+constexpr char kBaseDataDir[] = "content/test/data/conversions";
+constexpr char kOriginTrialTestPublicKey[] =
+    "dRCs+TocuKkocNKa0AtZ4awrt9XKH2SQCI6o4FY6BNA=";
+}  // namespace
+
+// Chrome layer equivalent to
+// content/browser/conversion_origin_trial_browsertest.cc. Usage restrictions
+// are not implemented within content/shell.
+class ConversionsUsageRestrictionTrialBrowserTestBase
+    : public InProcessBrowserTest {
+ public:
+  ConversionsUsageRestrictionTrialBrowserTestBase() = default;
+
+  void SetUpOnMainThread() override {
+    // We use a URLLoaderInterceptor, rather than the EmbeddedTestServer, since
+    // the origin trial token in the response is associated with a fixed
+    // origin, whereas EmbeddedTestServer serves content on a random port.
+    url_loader_interceptor_ =
+        std::make_unique<content::URLLoaderInterceptor>(base::BindRepeating(
+            [](content::URLLoaderInterceptor::RequestParams* params) -> bool {
+              if (params->url_request.url.path_piece() !=
+                      "/impression_with_third_party_trial.html" &&
+                  params->url_request.url.path_piece() !=
+                      "/third_party_token_injector.js") {
+                return false;
+              }
+
+              content::URLLoaderInterceptor::WriteResponse(
+                  base::StrCat(
+                      {kBaseDataDir, params->url_request.url.path_piece()}),
+                  params->client.get());
+              return true;
+            }));
+  }
+
+  void TearDownOnMainThread() override { url_loader_interceptor_.reset(); }
+
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    command_line->AppendSwitchASCII(embedder_support::kOriginTrialPublicKey,
+                                    kOriginTrialTestPublicKey);
+  }
+
+ private:
+  std::unique_ptr<content::URLLoaderInterceptor> url_loader_interceptor_;
+};
+
+class ConversionsOriginTrialSubsetExclusionBrowserTest
+    : public ConversionsUsageRestrictionTrialBrowserTestBase {
+ public:
+  ConversionsOriginTrialSubsetExclusionBrowserTest() {
+    // Disable the alternative usage feature, this should prevent the OT token
+    // from enabling the API.
+    feature_list_.InitWithFeatures(
+        {features::kConversionMeasurement},
+        {embedder_support::kConversionMeasurementAPIAlternativeUsage});
+  }
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(ConversionsOriginTrialSubsetExclusionBrowserTest,
+                       InSubsetExclusion_TrialDisabled) {
+  EXPECT_TRUE(ui_test_utils::NavigateToURL(
+      browser(),
+      GURL("https://example.test/impression_with_third_party_trial.html")));
+
+  EXPECT_EQ(false, EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
+                          "document.featurePolicy.features().includes('"
+                          "conversion-measurement')"));
+}
+
+class ConversionsOriginTrialNoSubsetExclusionBrowserTest
+    : public ConversionsUsageRestrictionTrialBrowserTestBase {
+ public:
+  ConversionsOriginTrialNoSubsetExclusionBrowserTest() {
+    // Enable the alternative usage feature, this should allow the OT token to
+    // enable the API.
+    feature_list_.InitWithFeatures(
+        {features::kConversionMeasurement,
+         embedder_support::kConversionMeasurementAPIAlternativeUsage},
+        {});
+  }
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+IN_PROC_BROWSER_TEST_F(ConversionsOriginTrialNoSubsetExclusionBrowserTest,
+                       OutOfSubsetExclusion_TrialEnabled) {
+  EXPECT_TRUE(ui_test_utils::NavigateToURL(
+      browser(),
+      GURL("https://example.test/impression_with_third_party_trial.html")));
+
+  EXPECT_EQ(true, EvalJs(browser()->tab_strip_model()->GetActiveWebContents(),
+                         "document.featurePolicy.features().includes('"
+                         "conversion-measurement')"));
+}
diff --git a/chrome/browser/devtools/devtools_sanity_browsertest.cc b/chrome/browser/devtools/devtools_sanity_browsertest.cc
index e20b0d2..62c9b9a 100644
--- a/chrome/browser/devtools/devtools_sanity_browsertest.cc
+++ b/chrome/browser/devtools/devtools_sanity_browsertest.cc
@@ -2524,14 +2524,16 @@
 class DevToolsPolicyTest : public InProcessBrowserTest {
  protected:
   DevToolsPolicyTest() {
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
   }
 
   void SetUpInProcessBrowserTestFixture() override {
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   }
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 };
 
 IN_PROC_BROWSER_TEST_F(DevToolsPolicyTest, OpenBlackListedDevTools) {
diff --git a/chrome/browser/extensions/api/certificate_provider/certificate_provider_apitest.cc b/chrome/browser/extensions/api/certificate_provider/certificate_provider_apitest.cc
index d91554b..6bf0e285 100644
--- a/chrome/browser/extensions/api/certificate_provider/certificate_provider_apitest.cc
+++ b/chrome/browser/extensions/api/certificate_provider/certificate_provider_apitest.cc
@@ -175,8 +175,9 @@
   CertificateProviderApiTest() {}
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
 
     extensions::ExtensionApiTest::SetUpInProcessBrowserTestFixture();
@@ -261,7 +262,7 @@
   }
 
  protected:
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
   chromeos::CertificateProviderService* cert_provider_service_ = nullptr;
 
  private:
diff --git a/chrome/browser/extensions/api/force_installed_affiliated_extension_apitest.cc b/chrome/browser/extensions/api/force_installed_affiliated_extension_apitest.cc
index 3b57f43..d01b415f 100644
--- a/chrome/browser/extensions/api/force_installed_affiliated_extension_apitest.cc
+++ b/chrome/browser/extensions/api/force_installed_affiliated_extension_apitest.cc
@@ -58,34 +58,15 @@
 ForceInstalledAffiliatedExtensionApiTest::
     ~ForceInstalledAffiliatedExtensionApiTest() = default;
 
-void ForceInstalledAffiliatedExtensionApiTest::SetUp() {
-  mixin_host_.SetUp();
-  ExtensionApiTest::SetUp();
-}
-
 void ForceInstalledAffiliatedExtensionApiTest::SetUpCommandLine(
     base::CommandLine* command_line) {
-  mixin_host_.SetUpCommandLine(command_line);
   policy::AffiliationTestHelper::AppendCommandLineSwitchesForLoginManager(
       command_line);
-  ExtensionApiTest::SetUpCommandLine(command_line);
-}
-
-void ForceInstalledAffiliatedExtensionApiTest::SetUpDefaultCommandLine(
-    base::CommandLine* command_line) {
-  mixin_host_.SetUpDefaultCommandLine(command_line);
-  ExtensionApiTest::SetUpDefaultCommandLine(command_line);
-}
-
-bool ForceInstalledAffiliatedExtensionApiTest::SetUpUserDataDirectory() {
-  return mixin_host_.SetUpUserDataDirectory() &&
-         ExtensionApiTest::SetUpUserDataDirectory();
+  MixinBasedExtensionApiTest::SetUpCommandLine(command_line);
 }
 
 void ForceInstalledAffiliatedExtensionApiTest::
     SetUpInProcessBrowserTestFixture() {
-  mixin_host_.SetUpInProcessBrowserTestFixture();
-
   // Initialize clients here so they are available during setup. They will be
   // shutdown in ChromeBrowserMain.
   chromeos::SessionManagerClient::InitializeFakeInMemory();
@@ -113,6 +94,8 @@
   // Init the user policy provider.
   EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
       .WillRepeatedly(testing::Return(true));
+  EXPECT_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+      .WillRepeatedly(testing::Return(true));
   policy_provider_.SetAutoRefresh();
   policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
       &policy_provider_);
@@ -120,17 +103,10 @@
   // Set retry delay to prevent timeouts.
   policy::DeviceManagementService::SetRetryDelayForTesting(0);
 
-  ExtensionApiTest::SetUpInProcessBrowserTestFixture();
-}
-
-void ForceInstalledAffiliatedExtensionApiTest::CreatedBrowserMainParts(
-    content::BrowserMainParts* browser_main_parts) {
-  mixin_host_.CreatedBrowserMainParts(browser_main_parts);
-  ExtensionApiTest::CreatedBrowserMainParts(browser_main_parts);
+  MixinBasedExtensionApiTest::SetUpInProcessBrowserTestFixture();
 }
 
 void ForceInstalledAffiliatedExtensionApiTest::SetUpOnMainThread() {
-  mixin_host_.SetUpOnMainThread();
   // Log in user that was created with
   // policy::AffiliationTestHelper::PreLoginUser() in the PRE_ test.
   const base::ListValue* users =
@@ -140,23 +116,8 @@
   }
 
   force_install_mixin_.InitWithMockPolicyProvider(profile(), &policy_provider_);
-  ExtensionApiTest::SetUpOnMainThread();
-}
 
-void ForceInstalledAffiliatedExtensionApiTest::TearDownOnMainThread() {
-  mixin_host_.TearDownOnMainThread();
-  ExtensionApiTest::TearDownOnMainThread();
-}
-
-void ForceInstalledAffiliatedExtensionApiTest::
-    TearDownInProcessBrowserTestFixture() {
-  mixin_host_.TearDownInProcessBrowserTestFixture();
-  ExtensionApiTest::TearDownInProcessBrowserTestFixture();
-}
-
-void ForceInstalledAffiliatedExtensionApiTest::TearDown() {
-  mixin_host_.TearDown();
-  ExtensionApiTest::TearDown();
+  MixinBasedExtensionApiTest::SetUpOnMainThread();
 }
 
 const extensions::Extension*
diff --git a/chrome/browser/extensions/api/force_installed_affiliated_extension_apitest.h b/chrome/browser/extensions/api/force_installed_affiliated_extension_apitest.h
index 3f3c6ed..5f327a57 100644
--- a/chrome/browser/extensions/api/force_installed_affiliated_extension_apitest.h
+++ b/chrome/browser/extensions/api/force_installed_affiliated_extension_apitest.h
@@ -9,7 +9,7 @@
 
 #include "base/values.h"
 #include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h"
-#include "chrome/browser/extensions/extension_apitest.h"
+#include "chrome/browser/extensions/mixin_based_extension_apitest.h"
 #include "chrome/browser/policy/extension_force_install_mixin.h"
 #include "chrome/test/base/mixin_based_in_process_browser_test.h"
 #include "chromeos/tpm/stub_install_attributes.h"
@@ -31,30 +31,19 @@
 // TODO(https://crbug.com/1082195) Create user affiliation test mixin to use in
 // this class.
 
-// TODO(https://crbug.com/1129486) This class is duplicating mixin functionality
-// from MixinBasedInProcessBrowserTest. Move this into its own class and inherit
-// from it instead.
-
 // Helper class to test force-installed extensions in a
 // affiliated/non-affiliated user profile.
-class ForceInstalledAffiliatedExtensionApiTest : public ExtensionApiTest {
+class ForceInstalledAffiliatedExtensionApiTest
+    : public MixinBasedExtensionApiTest {
  public:
   explicit ForceInstalledAffiliatedExtensionApiTest(bool is_affiliated);
   ~ForceInstalledAffiliatedExtensionApiTest() override;
 
  protected:
-  // ExtensionApiTest
-  void SetUp() override;
+  // MixinBasedExtensionApiTest
   void SetUpCommandLine(base::CommandLine* command_line) override;
-  void SetUpDefaultCommandLine(base::CommandLine* command_line) override;
-  bool SetUpUserDataDirectory() override;
   void SetUpInProcessBrowserTestFixture() override;
-  void CreatedBrowserMainParts(
-      content::BrowserMainParts* browser_main_parts) override;
   void SetUpOnMainThread() override;
-  void TearDownOnMainThread() override;
-  void TearDownInProcessBrowserTestFixture() override;
-  void TearDown() override;
 
   const extensions::Extension* ForceInstallExtension(
       const std::string& extension_path,
@@ -74,7 +63,6 @@
   policy::MockConfigurationPolicyProvider policy_provider_;
   chromeos::ScopedStubInstallAttributes test_install_attributes_;
   policy::DevicePolicyCrosTestHelper test_helper_;
-  InProcessBrowserTestMixinHost mixin_host_;
   ExtensionForceInstallMixin force_install_mixin_{&mixin_host_};
 };
 
diff --git a/chrome/browser/extensions/api/management/management_browsertest.cc b/chrome/browser/extensions/api/management/management_browsertest.cc
index c36df89..87159b8 100644
--- a/chrome/browser/extensions/api/management/management_browsertest.cc
+++ b/chrome/browser/extensions/api/management/management_browsertest.cc
@@ -110,8 +110,10 @@
 class ExtensionManagementTest : public extensions::ExtensionBrowserTest {
  public:
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(_))
+        .WillByDefault(Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
   }
@@ -157,7 +159,7 @@
   }
 
  private:
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
   extensions::ScopedInstallVerifierBypassForTest install_verifier_bypass_;
 };
 
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc b/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc
index 0cec008..2c51b4b 100644
--- a/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_chromeos_apitest.cc
@@ -199,8 +199,9 @@
   }
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
 
     extensions::ExtensionApiTest::SetUpInProcessBrowserTestFixture();
@@ -493,7 +494,7 @@
   ShillProfileClient::TestInterface* profile_test_;
   ShillServiceClient::TestInterface* service_test_;
   ShillDeviceClient::TestInterface* device_test_;
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
   sync_preferences::TestingPrefServiceSyncable user_prefs_;
   TestingPrefServiceSimple local_state_;
   std::string userhash_;
diff --git a/chrome/browser/extensions/api/platform_keys/platform_keys_test_base.cc b/chrome/browser/extensions/api/platform_keys/platform_keys_test_base.cc
index db30f30d..8ca3c1f 100644
--- a/chrome/browser/extensions/api/platform_keys/platform_keys_test_base.cc
+++ b/chrome/browser/extensions/api/platform_keys/platform_keys_test_base.cc
@@ -120,8 +120,10 @@
         &user_policy, account_id_, user_affiliation_ids));
   }
 
-  EXPECT_CALL(mock_policy_provider_, IsInitializationComplete(testing::_))
-      .WillRepeatedly(testing::Return(true));
+  ON_CALL(mock_policy_provider_, IsInitializationComplete(testing::_))
+      .WillByDefault(testing::Return(true));
+  ON_CALL(mock_policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+      .WillByDefault(testing::Return(true));
   mock_policy_provider_.SetAutoRefresh();
   policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
       &mock_policy_provider_);
diff --git a/chrome/browser/extensions/api/settings_private/settings_private_apitest.cc b/chrome/browser/extensions/api/settings_private/settings_private_apitest.cc
index 1cfd98b..8e29fae 100644
--- a/chrome/browser/extensions/api/settings_private/settings_private_apitest.cc
+++ b/chrome/browser/extensions/api/settings_private/settings_private_apitest.cc
@@ -50,8 +50,9 @@
   ~SettingsPrivateApiTest() override {}
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
     ExtensionApiTest::SetUpInProcessBrowserTestFixture();
   }
@@ -73,7 +74,7 @@
   }
 
  private:
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 
 #if defined(OS_CHROMEOS)
   chromeos::ScopedTestingCrosSettings scoped_testing_cros_settings_;
diff --git a/chrome/browser/extensions/api/storage/settings_apitest.cc b/chrome/browser/extensions/api/storage/settings_apitest.cc
index 2d5893d..e1049db 100644
--- a/chrome/browser/extensions/api/storage/settings_apitest.cc
+++ b/chrome/browser/extensions/api/storage/settings_apitest.cc
@@ -78,8 +78,10 @@
   void SetUpInProcessBrowserTestFixture() override {
     ExtensionApiTest::SetUpInProcessBrowserTestFixture();
 
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(_))
+        .WillByDefault(Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy_provider_.SetAutoRefresh();
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
@@ -232,7 +234,7 @@
   }
 
  protected:
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 };
 
 IN_PROC_BROWSER_TEST_F(ExtensionSettingsApiTest, SimpleTest) {
diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc
index c54a2ed..6a4a5b09 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_api.cc
@@ -1832,8 +1832,10 @@
     }
     tab_indices.push_back(tab_index);
   }
-  // Sort these indices for processing in the tabstrip.
+  // Sort and dedupe these indices for processing in the tabstrip.
   std::sort(tab_indices.begin(), tab_indices.end());
+  tab_indices.erase(std::unique(tab_indices.begin(), tab_indices.end()),
+                    tab_indices.end());
 
   // Get the remaining group metadata and add the tabs to the group.
   // At this point, we assume this is a valid action due to the checks above.
diff --git a/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc b/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc
index ac30f9a3..69a7e13 100644
--- a/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_api_unittest.cc
@@ -594,6 +594,59 @@
   browser()->tab_strip_model()->CloseAllTabs();
 }
 
+// Test that the tabs.group() function correctly groups tabs even when given
+// out-of-order or duplicate tab IDs.
+TEST_F(TabsApiUnitTest, TabsGroupMixedTabIds) {
+  scoped_refptr<const Extension> extension =
+      ExtensionBuilder("GroupMixedTabIdsTest").Build();
+
+  // Add several web contents to the browser and get their tab IDs.
+  constexpr int kNumTabs = 5;
+  std::vector<int> tab_ids;
+  std::vector<content::WebContents*> web_contentses;
+  for (int i = 0; i < kNumTabs; ++i) {
+    std::unique_ptr<content::WebContents> contents(
+        content::WebContentsTester::CreateTestWebContents(profile(), nullptr));
+
+    CreateSessionServiceTabHelper(contents.get());
+    tab_ids.push_back(
+        sessions::SessionTabHelper::IdForTab(contents.get()).id());
+    web_contentses.push_back(contents.get());
+
+    browser()->tab_strip_model()->AppendWebContents(std::move(contents),
+                                                    /* foreground */ true);
+  }
+  ASSERT_EQ(kNumTabs, browser()->tab_strip_model()->count());
+
+  // Use the TabsGroupFunction to group tab 1 twice, along with tabs 3 and 2.
+  auto function = base::MakeRefCounted<TabsGroupFunction>();
+  function->set_extension(extension);
+  constexpr char kFormatArgs[] = R"([{"tabIds": [%d, %d, %d, %d]}])";
+  const std::string args = base::StringPrintf(
+      kFormatArgs, tab_ids[1], tab_ids[1], tab_ids[3], tab_ids[2]);
+  ASSERT_TRUE(extension_function_test_utils::RunFunction(
+      function.get(), args, browser(), api_test_utils::NONE));
+
+  TabStripModel* tab_strip_model = browser()->tab_strip_model();
+  EXPECT_EQ(tab_strip_model->GetWebContentsAt(0), web_contentses[0]);
+  EXPECT_EQ(tab_strip_model->GetWebContentsAt(1), web_contentses[1]);
+  EXPECT_EQ(tab_strip_model->GetWebContentsAt(2), web_contentses[2]);
+  EXPECT_EQ(tab_strip_model->GetWebContentsAt(3), web_contentses[3]);
+  EXPECT_EQ(tab_strip_model->GetWebContentsAt(4), web_contentses[4]);
+
+  base::Optional<tab_groups::TabGroupId> group =
+      tab_strip_model->GetTabGroupForTab(1);
+  EXPECT_TRUE(group.has_value());
+  EXPECT_FALSE(tab_strip_model->GetTabGroupForTab(0));
+  EXPECT_EQ(group, tab_strip_model->GetTabGroupForTab(1));
+  EXPECT_EQ(group, tab_strip_model->GetTabGroupForTab(2));
+  EXPECT_EQ(group, tab_strip_model->GetTabGroupForTab(3));
+  EXPECT_FALSE(tab_strip_model->GetTabGroupForTab(4));
+
+  // Clean up.
+  browser()->tab_strip_model()->CloseAllTabs();
+}
+
 // Test that the tabs.group() function throws an error if both createProperties
 // and groupId are specified.
 TEST_F(TabsApiUnitTest, TabsGroupParamsError) {
diff --git a/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc b/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc
index a4ddb8c9..f0b4942 100644
--- a/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc
+++ b/chrome/browser/extensions/api/tabs/tabs_util_chromeos.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/extensions/api/tabs/tabs_util.h"
 
+#include "ash/public/cpp/ash_features.h"
 #include "ash/public/cpp/assistant/assistant_state.h"
 #include "base/metrics/histogram_macros.h"
 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
@@ -11,6 +12,7 @@
 #include "chrome/browser/chromeos/arc/session/arc_session_manager.h"
 #include "chrome/browser/chromeos/assistant/assistant_util.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_content_manager.h"
+#include "chrome/browser/ui/ash/chrome_capture_mode_delegate.h"
 #include "chrome/browser/ui/ash/chrome_screenshot_grabber.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_command_controller.h"
@@ -42,6 +44,11 @@
   // Disallow screenshots in locked fullscreen mode.
   ChromeScreenshotGrabber::Get()->set_screenshots_allowed(!locked);
 
+  // Disable both screenshots and video screen captures via the capture mode
+  // feature.
+  if (ash::features::IsCaptureModeEnabled())
+    ChromeCaptureModeDelegate::Get()->SetIsScreenCaptureLocked(locked);
+
   // Reset the clipboard and kill dev tools when entering or exiting locked
   // fullscreen (security concerns).
   ui::Clipboard::GetForCurrentThread()->Clear(ui::ClipboardBuffer::kCopyPaste);
diff --git a/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_apitest.cc b/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_apitest.cc
index 15c9a171..476d82f 100644
--- a/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_apitest.cc
+++ b/chrome/browser/extensions/api/webrtc_logging_private/webrtc_logging_private_apitest.cc
@@ -697,8 +697,10 @@
   }
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
 
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
     policy::PolicyMap values;
@@ -720,7 +722,7 @@
   virtual bool WebRtcEventLogCollectionPolicy() const = 0;
 
  private:
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 };
 
 // Test StartEventLogging's behavior when the feature is active (kill-switch
diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc
index be0344e..1070063 100644
--- a/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc
+++ b/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc
@@ -14,10 +14,10 @@
 #include "build/build_config.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/extensions/api/webstore_private/webstore_private_api.h"
-#include "chrome/browser/extensions/extension_apitest.h"
 #include "chrome/browser/extensions/extension_function_test_utils.h"
 #include "chrome/browser/extensions/extension_install_prompt.h"
 #include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/mixin_based_extension_apitest.h"
 #include "chrome/browser/extensions/webstore_installer.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
@@ -128,20 +128,20 @@
 }  // namespace
 
 // A base class for tests below.
-class ExtensionWebstorePrivateApiTest : public ExtensionApiTest {
+class ExtensionWebstorePrivateApiTest : public MixinBasedExtensionApiTest {
  public:
   ExtensionWebstorePrivateApiTest() {}
   ~ExtensionWebstorePrivateApiTest() override {}
 
   void SetUpCommandLine(base::CommandLine* command_line) override {
-    ExtensionApiTest::SetUpCommandLine(command_line);
+    MixinBasedExtensionApiTest::SetUpCommandLine(command_line);
     command_line->AppendSwitchASCII(
         switches::kAppsGalleryURL,
         "http://www.example.com/extensions/api_test");
   }
 
   void SetUpOnMainThread() override {
-    ExtensionApiTest::SetUpOnMainThread();
+    MixinBasedExtensionApiTest::SetUpOnMainThread();
 
     // Start up the test server and get us ready for calling the install
     // API functions.
@@ -381,13 +381,7 @@
     set_chromeos_user_ = false;
   }
 
-  void SetUp() override {
-    mixin_host_.SetUp();
-    ExtensionWebstorePrivateApiTest::SetUp();
-  }
-
   void SetUpCommandLine(base::CommandLine* command_line) override {
-    mixin_host_.SetUpCommandLine(command_line);
     ExtensionWebstorePrivateApiTest::SetUpCommandLine(command_line);
     // Shortens the merge session timeout from 20 to 1 seconds to speed up the
     // test by about 19 seconds.
@@ -396,28 +390,6 @@
     command_line->AppendSwitch(switches::kShortMergeSessionTimeoutForTest);
   }
 
-  void SetUpDefaultCommandLine(base::CommandLine* command_line) override {
-    mixin_host_.SetUpDefaultCommandLine(command_line);
-    ExtensionWebstorePrivateApiTest::SetUpDefaultCommandLine(command_line);
-  }
-
-  bool SetUpUserDataDirectory() override {
-    return mixin_host_.SetUpUserDataDirectory() &&
-           ExtensionWebstorePrivateApiTest::SetUpUserDataDirectory();
-  }
-
-  void SetUpInProcessBrowserTestFixture() override {
-    mixin_host_.SetUpInProcessBrowserTestFixture();
-    ExtensionWebstorePrivateApiTest::SetUpInProcessBrowserTestFixture();
-  }
-
-  void CreatedBrowserMainParts(
-      content::BrowserMainParts* browser_main_parts) override {
-    mixin_host_.CreatedBrowserMainParts(browser_main_parts);
-    ExtensionWebstorePrivateApiTest::CreatedBrowserMainParts(
-        browser_main_parts);
-  }
-
   void InitializeFamilyData() {
     // Set up the child user's custodians (i.e. parents).
     ASSERT_TRUE(browser());
@@ -433,7 +405,6 @@
   }
 
   void SetUpOnMainThread() override {
-    mixin_host_.SetUpOnMainThread();
     logged_in_user_mixin_.LogInUser(true /* issue_any_scope_token */);
     ExtensionWebstorePrivateApiTest::SetUpOnMainThread();
 
@@ -444,21 +415,6 @@
         true);
   }
 
-  void TearDownOnMainThread() override {
-    mixin_host_.TearDownOnMainThread();
-    ExtensionWebstorePrivateApiTest::TearDownOnMainThread();
-  }
-
-  void TearDownInProcessBrowserTestFixture() override {
-    mixin_host_.TearDownInProcessBrowserTestFixture();
-    ExtensionWebstorePrivateApiTest::TearDownInProcessBrowserTestFixture();
-  }
-
-  void TearDown() override {
-    mixin_host_.TearDown();
-    ExtensionWebstorePrivateApiTest::TearDown();
-  }
-
   chromeos::LoggedInUserMixin* GetLoggedInUserMixin() {
     return &logged_in_user_mixin_;
   }
@@ -475,9 +431,6 @@
   std::unique_ptr<signin::IdentityTestEnvironment> identity_test_env_;
 
  private:
-  // Replicate what MixinBasedInProcessBrowserTest does since inheriting from
-  // that class is inconvenient here.
-  InProcessBrowserTestMixinHost mixin_host_;
   // Create another embedded test server to avoid starting the same one twice.
   std::unique_ptr<net::EmbeddedTestServer> embedded_test_server_;
   chromeos::LoggedInUserMixin logged_in_user_mixin_;
diff --git a/chrome/browser/extensions/content_script_apitest.cc b/chrome/browser/extensions/content_script_apitest.cc
index fd8ca91c..d5ddb85 100644
--- a/chrome/browser/extensions/content_script_apitest.cc
+++ b/chrome/browser/extensions/content_script_apitest.cc
@@ -520,8 +520,10 @@
   void SetUpInProcessBrowserTestFixture() override {
     ExtensionApiTest::SetUpInProcessBrowserTestFixture();
 
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
 
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
@@ -539,7 +541,7 @@
   }
 
  private:
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 };
 
 // Regression test for: https://crbug.com/954215.
diff --git a/chrome/browser/extensions/content_verifier_browsertest.cc b/chrome/browser/extensions/content_verifier_browsertest.cc
index 37355a0..ff434e6 100644
--- a/chrome/browser/extensions/content_verifier_browsertest.cc
+++ b/chrome/browser/extensions/content_verifier_browsertest.cc
@@ -554,8 +554,10 @@
   void SetUpInProcessBrowserTestFixture() override {
     ContentVerifierTest::SetUpInProcessBrowserTestFixture();
 
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
 
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
@@ -577,7 +579,7 @@
   std::string id_ = "dkjgfphccejbobpbljnpjcmhmagkdoia";
 
  private:
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 };
 
 // We want to test what happens at startup with a corroption-disabled policy
diff --git a/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc b/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc
index 86b8849bd..d4fe18e1 100644
--- a/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc
+++ b/chrome/browser/extensions/corb_and_cors_extension_browsertest.cc
@@ -231,8 +231,10 @@
   }
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy_provider_.SetAutoRefresh();
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
@@ -557,7 +559,7 @@
   }
 
  protected:
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 
  private:
   // Executes |regular_script| in |web_contents|.
diff --git a/chrome/browser/extensions/extension_samesite_cookies_browsertest.cc b/chrome/browser/extensions/extension_samesite_cookies_browsertest.cc
index 66f3fd0..f365a9a 100644
--- a/chrome/browser/extensions/extension_samesite_cookies_browsertest.cc
+++ b/chrome/browser/extensions/extension_samesite_cookies_browsertest.cc
@@ -8,16 +8,21 @@
 #include <vector>
 
 #include "base/command_line.h"
+#include "base/path_service.h"
 #include "base/strings/strcat.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/test/scoped_feature_list.h"
 #include "chrome/browser/extensions/chrome_test_extension_loader.h"
+#include "chrome/browser/extensions/extension_action_runner.h"
 #include "chrome/browser/extensions/extension_browsertest.h"
+#include "chrome/common/chrome_paths.h"
 #include "chrome/common/extensions/extension_test_util.h"
 #include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
 #include "components/network_session_configurator/common/network_switches.h"
 #include "content/public/test/browser_test.h"
 #include "content/public/test/browser_test_utils.h"
+#include "content/public/test/test_navigation_observer.h"
 #include "content/public/test/test_utils.h"
 #include "extensions/browser/browsertest_util.h"
 #include "extensions/common/permissions/permissions_data.h"
@@ -96,14 +101,21 @@
       delete;
 
   void SetUpOnMainThread() override {
+    constexpr int kMaxNumberOfCookieRequestsFromSingleTest = 6;
+
     ExtensionBrowserTest::SetUpOnMainThread();
     extension_dir_ = std::make_unique<TestExtensionDir>();
     extension_ = MakeExtension();
-    http_response_ =
-        std::make_unique<net::test_server::ControllableHttpResponse>(
-            test_server(), kFetchCookiesPath);
+    for (int i = 0; i < kMaxNumberOfCookieRequestsFromSingleTest; i++) {
+      http_responses_.push_back(
+          std::make_unique<net::test_server::ControllableHttpResponse>(
+              test_server(), kFetchCookiesPath));
+    }
     host_resolver()->AddRule("*", "127.0.0.1");
     net::test_server::RegisterDefaultHandlers(test_server());
+    base::FilePath test_data_dir;
+    ASSERT_TRUE(base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir));
+    test_server()->ServeFilesFromDirectory(test_data_dir);
     ASSERT_TRUE(test_server()->Start());
   }
 
@@ -194,7 +206,7 @@
           .then((data) => window.domAutomationController.send(data));)";
     std::string fetch_cookies_script =
         content::JsReplace(kFetchCookiesScriptTemplate, cookie_url.spec());
-    content::DOMMessageQueue messages(web_contents());
+    content::DOMMessageQueue messages(frame);
     ExecuteScriptAsync(frame, fetch_cookies_script);
 
     url::Origin initiator = frame->GetLastCommittedOrigin();
@@ -213,7 +225,9 @@
   // Access-Control-Allow-Credentials headers (which are required for this to
   // work since we are making cross-origin requests in these tests).
   void WaitForRequestAndRespondWithCookies(const url::Origin& initiator) {
-    http_response_->WaitForRequest();
+    net::test_server::ControllableHttpResponse& http_response =
+        GetNextCookieResponse();
+    http_response.WaitForRequest();
 
     // Remove the trailing slash from the URL.
     std::string origin = initiator.GetURL().spec();
@@ -221,9 +235,9 @@
 
     // Get the 'Cookie' header that was sent in the request.
     std::string cookie_header;
-    auto cookie_header_it = http_response_->http_request()->headers.find(
+    auto cookie_header_it = http_response.http_request()->headers.find(
         net::HttpRequestHeaders::kCookie);
-    if (cookie_header_it == http_response_->http_request()->headers.end()) {
+    if (cookie_header_it == http_response.http_request()->headers.end()) {
       cookie_header = "No cookie header!";
     } else {
       cookie_header = cookie_header_it->second;
@@ -231,7 +245,7 @@
     std::string content_length = base::NumberToString(cookie_header.length());
 
     // clang-format off
-    http_response_->Send(
+    http_response.Send(
         base::StrCat({
         "HTTP/1.1 200 OK\r\n",
         "Content-Type: text/plain; charset=utf-8\r\n",
@@ -241,6 +255,8 @@
         "\r\n",
         cookie_header}));
     // clang-format on
+
+    http_response.Done();
   }
 
   const Extension* MakeExtension() {
@@ -277,7 +293,18 @@
     return browser()->tab_strip_model()->GetActiveWebContents();
   }
 
-  std::unique_ptr<net::test_server::ControllableHttpResponse> http_response_;
+  net::test_server::ControllableHttpResponse& GetNextCookieResponse() {
+    // If the DCHECK below fails, consider increasing the value of the
+    // kMaxNumberOfCookieRequestsFromSingleTest constant above.
+    DCHECK_LT(index_of_active_http_response_, http_responses_.size());
+
+    return *http_responses_[index_of_active_http_response_++];
+  }
+
+  std::vector<std::unique_ptr<net::test_server::ControllableHttpResponse>>
+      http_responses_;
+  size_t index_of_active_http_response_ = 0;
+
   net::EmbeddedTestServer test_server_;
   base::test::ScopedFeatureList feature_list_;
   std::unique_ptr<TestExtensionDir> extension_dir_;
@@ -480,6 +507,121 @@
   ExpectSameSiteCookies(cookies);
 }
 
+// SameSite-cookies-flavoured copy of the ExtensionActiveTabTest.ActiveTab test.
+// In this test, the effective extension permissions are changing at runtime
+// - the test verifies that the changing permissions are correctly propagated
+// into the SameSite cookie decisions.
+IN_PROC_BROWSER_TEST_P(ExtensionSameSiteCookiesTest, ActiveTabPermissions) {
+  TestExtensionDir extension_dir;
+  constexpr char kManifest[] = R"(
+      {
+        "name": "ActiveTab permissions vs SameSite cookies",
+        "version": "1.0",
+        "manifest_version": 2,
+        "browser_action": {
+          "default_title": "activeTab"
+        },
+        "permissions": ["activeTab"],
+        "background": {
+          "scripts": ["background.js"]
+        },
+        "web_accessible_resources": ["subframe.html"]
+      } )";
+  extension_dir.WriteManifest(kManifest);
+  extension_dir.WriteFile(FILE_PATH_LITERAL("background.js"), "");
+  extension_dir.WriteFile(FILE_PATH_LITERAL("subframe.html"),
+                          "<p>Extension frame</p>");
+  const Extension* extension = LoadExtension(extension_dir.UnpackedPath());
+  ASSERT_TRUE(extension);
+  content::RenderFrameHost* background_page =
+      ProcessManager::Get(profile())
+          ->GetBackgroundHostForExtension(extension->id())
+          ->host_contents()
+          ->GetMainFrame();
+
+  // Set up a test scenario:
+  // - top-level frame: kActiveTabHost
+  // - subframe: extension
+  constexpr char kActiveTabHost[] = "active-tab.example";
+  ui_test_utils::NavigateToURL(
+      browser(), test_server()->GetURL(kActiveTabHost, "/title1.html"));
+  SetCookies(kActiveTabHost);
+  content::RenderFrameHost* extension_subframe = nullptr;
+  {
+    content::TestNavigationObserver subframe_nav_observer(web_contents());
+    constexpr char kSubframeInjectionScriptTemplate[] = R"(
+        var f = document.createElement('iframe');
+        f.src = $1;
+        document.body.appendChild(f);
+    )";
+    ASSERT_TRUE(content::ExecJs(
+        web_contents(),
+        content::JsReplace(kSubframeInjectionScriptTemplate,
+                           extension->GetResourceURL("subframe.html"))));
+    subframe_nav_observer.Wait();
+    ASSERT_EQ(2u, web_contents()->GetAllFrames().size());
+    extension_subframe = web_contents()->GetAllFrames()[1];
+    ASSERT_EQ(extension->origin(),
+              extension_subframe->GetLastCommittedOrigin());
+  }
+
+  // Shouldn't be initially granted based on activeTab.
+  {
+    SCOPED_TRACE(
+        "TEST STEP 1a: Extension background page: "
+        "Initial fetch.");
+    std::string cookies = FetchCookies(background_page, kActiveTabHost);
+    ExpectNoSameSiteCookies(cookies);
+  }
+  {
+    SCOPED_TRACE(
+        "TEST STEP 1b: Extension subframe: "
+        "Initial fetch.");
+    std::string cookies = FetchCookies(extension_subframe, kActiveTabHost);
+    ExpectNoSameSiteCookies(cookies);
+  }
+
+  // Do one pass of BrowserAction without granting activeTab permission,
+  // extension shouldn't have access to tab.url.
+  ExtensionActionRunner::GetForWebContents(web_contents())
+      ->RunAction(extension, false);
+  {
+    SCOPED_TRACE(
+        "TEST STEP 2a: Extension background page: "
+        "After BrowserAction without granting access.");
+    std::string cookies = FetchCookies(background_page, kActiveTabHost);
+    ExpectNoSameSiteCookies(cookies);
+  }
+  {
+    SCOPED_TRACE(
+        "TEST STEP 2b: Extension subframe: "
+        "After BrowserAction without granting access.");
+    std::string cookies = FetchCookies(extension_subframe, kActiveTabHost);
+    ExpectNoSameSiteCookies(cookies);
+  }
+
+  // Granting to the extension should give it access to page.html.
+  ExtensionActionRunner::GetForWebContents(web_contents())
+      ->RunAction(extension, true);
+  {
+    // ActiveTab access shouldn't extend to the background page.
+    SCOPED_TRACE(
+        "TEST STEP 3a: Extension background page: "
+        "After granting ActiveTab access.");
+    std::string cookies = FetchCookies(background_page, kActiveTabHost);
+    ExpectNoSameSiteCookies(cookies);
+  }
+  {
+    // ActiveTab should grant access to SameSite cookies to the
+    // `extension_subframe`.
+    SCOPED_TRACE(
+        "TEST STEP 3b: Extension subframe: "
+        "After granting ActiveTab access.");
+    std::string cookies = FetchCookies(extension_subframe, kActiveTabHost);
+    ExpectSameSiteCookies(cookies);
+  }
+}
+
 INSTANTIATE_TEST_SUITE_P(All,
                          ExtensionSameSiteCookiesTest,
                          ::testing::Bool());
diff --git a/chrome/browser/extensions/extension_with_management_policy_apitest.cc b/chrome/browser/extensions/extension_with_management_policy_apitest.cc
index 83c2f71..4d6186d 100644
--- a/chrome/browser/extensions/extension_with_management_policy_apitest.cc
+++ b/chrome/browser/extensions/extension_with_management_policy_apitest.cc
@@ -16,8 +16,10 @@
   embedded_test_server()->RegisterRequestMonitor(
       base::Bind(&ExtensionApiTestWithManagementPolicy::MonitorRequestHandler,
                  base::Unretained(this)));
-  EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-      .WillRepeatedly(testing::Return(true));
+  ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+      .WillByDefault(testing::Return(true));
+  ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+      .WillByDefault(testing::Return(true));
   policy_provider_.SetAutoRefresh();
   policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
       &policy_provider_);
diff --git a/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc b/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc
index b613330..25abd55b 100644
--- a/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc
+++ b/chrome/browser/extensions/forced_extensions/force_installed_test_base.cc
@@ -39,8 +39,10 @@
 ForceInstalledTestBase::~ForceInstalledTestBase() = default;
 
 void ForceInstalledTestBase::SetUp() {
-  EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-      .WillRepeatedly(testing::Return(false));
+  ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+      .WillByDefault(testing::Return(false));
+  ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+      .WillByDefault(testing::Return(false));
 
   auto policy_service = std::make_unique<policy::PolicyServiceImpl>(
       std::vector<policy::ConfigurationPolicyProvider*>{&policy_provider_});
@@ -80,6 +82,8 @@
 
   EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
       .WillRepeatedly(testing::Return(true));
+  EXPECT_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+      .WillRepeatedly(testing::Return(true));
 
   policy::PolicyMap map;
   map.Set("ExtensionInstallForcelist", policy::POLICY_LEVEL_MANDATORY,
@@ -95,6 +99,8 @@
 
   EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
       .WillRepeatedly(testing::Return(true));
+  EXPECT_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+      .WillRepeatedly(testing::Return(true));
 
   policy::PolicyMap map;
   policy_provider_.UpdateChromePolicy(std::move(map));
diff --git a/chrome/browser/extensions/mixin_based_extension_apitest.cc b/chrome/browser/extensions/mixin_based_extension_apitest.cc
new file mode 100644
index 0000000..5957210
--- /dev/null
+++ b/chrome/browser/extensions/mixin_based_extension_apitest.cc
@@ -0,0 +1,68 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/mixin_based_extension_apitest.h"
+
+#include "chrome/browser/extensions/extension_apitest.h"
+
+namespace extensions {
+
+MixinBasedExtensionApiTest::MixinBasedExtensionApiTest() = default;
+
+MixinBasedExtensionApiTest::~MixinBasedExtensionApiTest() = default;
+
+void MixinBasedExtensionApiTest::SetUp() {
+  mixin_host_.SetUp();
+  ExtensionApiTest::SetUp();
+}
+
+void MixinBasedExtensionApiTest::SetUpCommandLine(
+    base::CommandLine* command_line) {
+  mixin_host_.SetUpCommandLine(command_line);
+  ExtensionApiTest::SetUpCommandLine(command_line);
+}
+
+void MixinBasedExtensionApiTest::SetUpDefaultCommandLine(
+    base::CommandLine* command_line) {
+  mixin_host_.SetUpDefaultCommandLine(command_line);
+  ExtensionApiTest::SetUpDefaultCommandLine(command_line);
+}
+
+bool MixinBasedExtensionApiTest::SetUpUserDataDirectory() {
+  return mixin_host_.SetUpUserDataDirectory() &&
+         ExtensionApiTest::SetUpUserDataDirectory();
+}
+
+void MixinBasedExtensionApiTest::SetUpInProcessBrowserTestFixture() {
+  mixin_host_.SetUpInProcessBrowserTestFixture();
+  ExtensionApiTest::SetUpInProcessBrowserTestFixture();
+}
+
+void MixinBasedExtensionApiTest::CreatedBrowserMainParts(
+    content::BrowserMainParts* browser_main_parts) {
+  mixin_host_.CreatedBrowserMainParts(browser_main_parts);
+  ExtensionApiTest::CreatedBrowserMainParts(browser_main_parts);
+}
+
+void MixinBasedExtensionApiTest::SetUpOnMainThread() {
+  mixin_host_.SetUpOnMainThread();
+  ExtensionApiTest::SetUpOnMainThread();
+}
+
+void MixinBasedExtensionApiTest::TearDownOnMainThread() {
+  mixin_host_.TearDownOnMainThread();
+  ExtensionApiTest::TearDownOnMainThread();
+}
+
+void MixinBasedExtensionApiTest::TearDownInProcessBrowserTestFixture() {
+  mixin_host_.TearDownInProcessBrowserTestFixture();
+  ExtensionApiTest::TearDownInProcessBrowserTestFixture();
+}
+
+void MixinBasedExtensionApiTest::TearDown() {
+  mixin_host_.TearDown();
+  ExtensionApiTest::TearDown();
+}
+
+}  // namespace extensions
diff --git a/chrome/browser/extensions/mixin_based_extension_apitest.h b/chrome/browser/extensions/mixin_based_extension_apitest.h
new file mode 100644
index 0000000..8faa1ad
--- /dev/null
+++ b/chrome/browser/extensions/mixin_based_extension_apitest.h
@@ -0,0 +1,46 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_MIXIN_BASED_EXTENSION_APITEST_H_
+#define CHROME_BROWSER_EXTENSIONS_MIXIN_BASED_EXTENSION_APITEST_H_
+
+#include "chrome/browser/extensions/extension_apitest.h"
+#include "chrome/test/base/mixin_based_in_process_browser_test.h"
+
+namespace base {
+class CommandLine;
+}  // namespace base
+
+namespace content {
+class BrowserMainParts;
+}  // namespace content
+
+namespace extensions {
+
+// Base class for extension API test fixtures that are using mixins.
+class MixinBasedExtensionApiTest : public ExtensionApiTest {
+ public:
+  MixinBasedExtensionApiTest();
+  ~MixinBasedExtensionApiTest() override;
+
+  // ExtensionApiTest:
+  void SetUp() override;
+  void SetUpCommandLine(base::CommandLine* command_line) override;
+  void SetUpDefaultCommandLine(base::CommandLine* command_line) override;
+  bool SetUpUserDataDirectory() override;
+  void SetUpInProcessBrowserTestFixture() override;
+  void CreatedBrowserMainParts(
+      content::BrowserMainParts* browser_main_parts) override;
+  void SetUpOnMainThread() override;
+  void TearDownOnMainThread() override;
+  void TearDownInProcessBrowserTestFixture() override;
+  void TearDown() override;
+
+ protected:
+  InProcessBrowserTestMixinHost mixin_host_;
+};
+
+}  // namespace extensions
+
+#endif  // CHROME_BROWSER_EXTENSIONS_MIXIN_BASED_EXTENSION_APITEST_H_
diff --git a/chrome/browser/extensions/updater/update_service_browsertest.cc b/chrome/browser/extensions/updater/update_service_browsertest.cc
index 54a94fd..83556d64 100644
--- a/chrome/browser/extensions/updater/update_service_browsertest.cc
+++ b/chrome/browser/extensions/updater/update_service_browsertest.cc
@@ -387,8 +387,10 @@
   void SetUpInProcessBrowserTestFixture() override {
     ExtensionUpdateClientBaseTest::SetUpInProcessBrowserTestFixture();
 
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
 
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
@@ -468,7 +470,7 @@
   std::string id_ = "aohghmighlieiainnegkcijnfilokake";
 
  private:
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
   content_verifier_test::DownloaderTestDelegate downloader_;
 };
 
diff --git a/chrome/browser/federated_learning/floc_id_provider.h b/chrome/browser/federated_learning/floc_id_provider.h
index 81ad104b..bc5a1fe 100644
--- a/chrome/browser/federated_learning/floc_id_provider.h
+++ b/chrome/browser/federated_learning/floc_id_provider.h
@@ -13,7 +13,9 @@
 namespace federated_learning {
 
 // KeyedService which computes the floc id regularly, and notifies relevant
-// components about the updated id.
+// components about the updated id. The floc id represents a cohort of people
+// with similar browsing habits. For more context, see the explainer at
+// https://github.com/jkarlin/floc/blob/master/README.md.
 class FlocIdProvider : public KeyedService {
  public:
   // Get the interest cohort. Use |requesting_origin| and first-party
diff --git a/chrome/browser/federated_learning/floc_id_provider_impl.cc b/chrome/browser/federated_learning/floc_id_provider_impl.cc
index 8e255b5..cdd08f2 100644
--- a/chrome/browser/federated_learning/floc_id_provider_impl.cc
+++ b/chrome/browser/federated_learning/floc_id_provider_impl.cc
@@ -17,6 +17,7 @@
 #include "chrome/common/chrome_features.h"
 #include "components/content_settings/core/browser/cookie_settings.h"
 #include "components/history/core/browser/history_service.h"
+#include "components/prefs/pref_service.h"
 #include "components/sync/driver/profile_sync_service.h"
 #include "components/sync_user_events/user_event_service.h"
 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
@@ -26,13 +27,15 @@
 namespace {
 
 constexpr size_t kMinHistoryDomainSizeToReportFlocId = 1;
-constexpr base::TimeDelta kFlocScheduledUpdateInterval =
-    base::TimeDelta::FromDays(1);
 constexpr int kQueryHistoryWindowInDays = 7;
 
 // The placeholder sorting-lsh version when the sorting-lsh feature is disabled.
 constexpr uint32_t kSortingLshVersionPlaceholder = 0;
 
+base::TimeDelta GetFlocIdScheduledUpdateInterval() {
+  return features::kFlocIdScheduledUpdateInterval.Get();
+}
+
 }  // namespace
 
 FlocIdProviderImpl::FlocIdProviderImpl(
@@ -50,6 +53,23 @@
   sync_service_->AddObserver(this);
   g_browser_process->floc_sorting_lsh_clusters_service()->AddObserver(this);
 
+  PrefService* local_state = g_browser_process->local_state();
+  base::Time last_compute_time = FlocId::ReadComputeTimeFromPrefs(local_state);
+
+  if (!last_compute_time.is_null()) {
+    first_floc_computed_ = true;
+
+    base::TimeDelta time_since_last_compute =
+        base::Time::Now() - last_compute_time;
+    if (time_since_last_compute < GetFlocIdScheduledUpdateInterval()) {
+      // Keep using the last floc. Schedule a recompute event when it's
+      // |GetFlocIdScheduledUpdateInterval()| from the last compute time.
+      floc_id_ = FlocId::ReadFromPrefs(local_state);
+      ScheduleFlocComputation(GetFlocIdScheduledUpdateInterval() -
+                              time_since_last_compute);
+    }
+  }
+
   OnStateChanged(sync_service);
 
   if (g_browser_process->floc_sorting_lsh_clusters_service()
@@ -98,12 +118,11 @@
   LogFlocComputedEvent(trigger, result);
   floc_id_ = result.floc_id;
 
-  // Abandon the scheduled task if any, and schedule a new compute-floc task
-  // that is |kFlocScheduledUpdateInterval| from now.
-  compute_floc_timer_.Start(
-      FROM_HERE, kFlocScheduledUpdateInterval,
-      base::BindOnce(&FlocIdProviderImpl::OnComputeFlocScheduledUpdate,
-                     weak_ptr_factory_.GetWeakPtr()));
+  PrefService* local_state = g_browser_process->local_state();
+  floc_id_.SaveToPrefs(local_state);
+  FlocId::SaveComputeTimeToPrefs(base::Time::Now(), local_state);
+
+  ScheduleFlocComputation(GetFlocIdScheduledUpdateInterval());
 }
 
 void FlocIdProviderImpl::LogFlocComputedEvent(ComputeFlocTrigger trigger,
@@ -115,7 +134,7 @@
   // is likely due to sync just gets enabled but some floc permission settings
   // are disabled. We don't want to mess up with the initial user event
   // messagings (and some sync integration tests would fail otherwise).
-  if (trigger == ComputeFlocTrigger::kBrowserStart && !result.sim_hash_computed)
+  if (trigger == ComputeFlocTrigger::kFirstCompute && !result.sim_hash_computed)
     return;
 
   auto specifics = std::make_unique<sync_pb::UserEventSpecifics>();
@@ -127,7 +146,7 @@
 
   sync_pb::UserEventSpecifics_FlocIdComputed_EventTrigger event_trigger;
   switch (trigger) {
-    case ComputeFlocTrigger::kBrowserStart:
+    case ComputeFlocTrigger::kFirstCompute:
       event_trigger =
           sync_pb::UserEventSpecifics_FlocIdComputed_EventTrigger_NEW;
       break;
@@ -168,7 +187,6 @@
   // immediately after the in-progress one finishes, so as to avoid potential
   // data races.
   if (floc_computation_in_progress_) {
-    DCHECK(first_floc_computation_triggered_);
     need_recompute_ = true;
     return;
   }
@@ -192,6 +210,7 @@
   // history-delete.
   LogFlocComputedEvent(ComputeFlocTrigger::kHistoryDelete, ComputeFlocResult());
   floc_id_ = FlocId();
+  floc_id_.SaveToPrefs(g_browser_process->local_state());
 }
 
 void FlocIdProviderImpl::OnSortingLshClustersFileReady() {
@@ -200,7 +219,7 @@
 
   first_sorting_lsh_file_ready_seen_ = true;
 
-  MaybeTriggerFirstFlocComputation();
+  MaybeTriggerImmediateComputation();
 }
 
 void FlocIdProviderImpl::OnStateChanged(syncer::SyncService* sync_service) {
@@ -212,11 +231,14 @@
 
   first_sync_history_enabled_seen_ = true;
 
-  MaybeTriggerFirstFlocComputation();
+  MaybeTriggerImmediateComputation();
 }
 
-void FlocIdProviderImpl::MaybeTriggerFirstFlocComputation() {
-  if (first_floc_computation_triggered_)
+void FlocIdProviderImpl::MaybeTriggerImmediateComputation() {
+  // If the floc computation is neither in progress nor scheduled, it means we
+  // want to trigger an immediate computation as soon as when the sync &
+  // sync-history is enabled and sorting-lsh file is loaded.
+  if (floc_computation_in_progress_ || compute_floc_timer_.IsRunning())
     return;
 
   bool sorting_lsh_ready_or_not_required =
@@ -227,7 +249,10 @@
   if (!first_sync_history_enabled_seen_ || !sorting_lsh_ready_or_not_required)
     return;
 
-  ComputeFloc(ComputeFlocTrigger::kBrowserStart);
+  ComputeFlocTrigger trigger = first_floc_computed_
+                                   ? ComputeFlocTrigger::kScheduledUpdate
+                                   : ComputeFlocTrigger::kFirstCompute;
+  ComputeFloc(trigger);
 }
 
 void FlocIdProviderImpl::OnComputeFlocScheduledUpdate() {
@@ -236,14 +261,11 @@
 }
 
 void FlocIdProviderImpl::ComputeFloc(ComputeFlocTrigger trigger) {
-  DCHECK(trigger == ComputeFlocTrigger::kBrowserStart ||
-         (trigger == ComputeFlocTrigger::kScheduledUpdate &&
-          first_floc_computation_triggered_));
+  DCHECK_NE(trigger, ComputeFlocTrigger::kHistoryDelete);
 
   DCHECK(!floc_computation_in_progress_);
 
   floc_computation_in_progress_ = true;
-  first_floc_computation_triggered_ = true;
 
   auto compute_floc_completed_callback =
       base::BindOnce(&FlocIdProviderImpl::OnComputeFlocCompleted,
@@ -405,4 +427,11 @@
                        version.components().front())));
 }
 
+void FlocIdProviderImpl::ScheduleFlocComputation(base::TimeDelta delay) {
+  compute_floc_timer_.Start(
+      FROM_HERE, delay,
+      base::BindOnce(&FlocIdProviderImpl::OnComputeFlocScheduledUpdate,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
 }  // namespace federated_learning
diff --git a/chrome/browser/federated_learning/floc_id_provider_impl.h b/chrome/browser/federated_learning/floc_id_provider_impl.h
index 91303344..e345b235 100644
--- a/chrome/browser/federated_learning/floc_id_provider_impl.h
+++ b/chrome/browser/federated_learning/floc_id_provider_impl.h
@@ -35,24 +35,44 @@
 // 4) Supplemental Ad Personalization is enabled.
 // 5) The account type is NOT a child account.
 //
-// When all the prerequisites are met, the floc will be computed by sim-hashing
-// navigation URL domains in the last 7 days; otherwise, an invalid floc will be
-// given. The floc can be further translated or blocked with the SortingLSH
-// post-processing.
+// When all the prerequisites are met, the floc will be computed by:
+// Step 1: sim-hashing navigation URL domains in the last 7 days. This step aims
+// to group together users with similar browsing habit.
+// Step 2: applying the sorting-lsh post processing to the sim-hash value. The
+// sorting-lsh technique groups similar sim-hash values together to ensure the
+// smallest group size / K-anonymity. The mappings / group-size is computed
+// server side in chrome-sync, based on logged sim-hash data, and is pushed to
+// Chrome on a regular basis through the component updater.
 //
-// The floc will be first computed after sync & sync-history are enabled. After
-// each computation, another computation will be scheduled 24 hours later. In
-// the event of history deletion, the floc will be invalidated immediately
-// if the time range of the deletion overlaps with the time range used to
-// compute the existing floc.
+// If some prerequisites are not met, an invalid floc will be given.
+//
+// For the first browser session of a profile, we'll compute the floc after sync
+// & sync-history are enabled and the sorting-lsh file is loaded, and another
+// computation will be scheduled every X days. When the browser shuts down and
+// starts up again, it can remember the last state and can still schedule the
+// computation at X days after the last compute time. If we've missed a
+// scheduled update due to browser not being alive, it'll compute after the next
+// session starts, using sync-history-enabled & sorting-lsh-file-loaded as the
+// first compute triggering condition.
+
+// In the event of history deletion, the floc will be invalidated immediately if
+// the time range of the deletion overlaps with the time range used to compute
+// the existing floc.
 class FlocIdProviderImpl : public FlocIdProvider,
                            public FlocSortingLshClustersService::Observer,
                            public history::HistoryServiceObserver,
                            public syncer::SyncServiceObserver {
  public:
+  // TODO(crbug/1148358): Consider removing this. For event logging, we are not
+  // really interested in the trigger.
   enum class ComputeFlocTrigger {
-    kBrowserStart,
+    // When the first browser session of a profile starts.
+    kFirstCompute,
+
+    // A long period of time has passed since the last computation.
     kScheduledUpdate,
+
+    // History is deleted.
     kHistoryDelete,
   };
 
@@ -110,8 +130,8 @@
 
   // history::HistoryServiceObserver
   //
-  // On history deletion, recompute the floc if the current floc is speculated
-  // to be derived from the deleted history.
+  // On history deletion, we'll either invalidate or keep using the floc. This
+  // will depend on the deletion type and the time range.
   void OnURLsDeleted(history::HistoryService* history_service,
                      const history::DeletionInfo& deletion_info) override;
 
@@ -121,7 +141,13 @@
   // syncer::SyncServiceObserver:
   void OnStateChanged(syncer::SyncService* sync_service) override;
 
-  void MaybeTriggerFirstFlocComputation();
+  void MaybeComputeOnInitialSetupReady();
+
+  // This function will be called whenever the sync setting has changed or the
+  // sorting-lsh file is loaded. It'll trigger an immediate floc computation if
+  // the floc was never computed before, or if the floc already expired when the
+  // browser session starts.
+  void MaybeTriggerImmediateComputation();
 
   void OnComputeFlocScheduledUpdate();
 
@@ -154,11 +180,17 @@
                                         base::Optional<uint64_t> final_hash,
                                         base::Version version);
 
+  // Abandon any scheduled task, and schedule a new compute-floc task with
+  // |delay|.
+  void ScheduleFlocComputation(base::TimeDelta delay);
+
   // The id to be exposed to the JS API.
   FlocId floc_id_;
 
   bool floc_computation_in_progress_ = false;
-  bool first_floc_computation_triggered_ = false;
+
+  // Whether the floc has ever been computed.
+  bool first_floc_computed_ = false;
 
   // True if history-delete occurs during an in-progress computation. When the
   // in-progress one finishes, we would disregard the result (i.e. no loggings
diff --git a/chrome/browser/federated_learning/floc_id_provider_unittest.cc b/chrome/browser/federated_learning/floc_id_provider_unittest.cc
index 499e6bf..7ae8c0c 100644
--- a/chrome/browser/federated_learning/floc_id_provider_unittest.cc
+++ b/chrome/browser/federated_learning/floc_id_provider_unittest.cc
@@ -204,6 +204,10 @@
   ~FlocIdProviderUnitTest() override = default;
 
   void SetUp() override {
+    FlocId::RegisterPrefs(pref_service_.registry());
+    InitializeFlocPrefs();
+    TestingBrowserProcess::GetGlobal()->SetLocalState(&pref_service_);
+
     EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
 
     content_settings::ContentSettingsRegistry::GetInstance()->ResetForTest();
@@ -221,6 +225,7 @@
     history_service_ = std::make_unique<history::HistoryService>();
     history_service_->Init(
         history::TestHistoryDatabaseParamsForPath(temp_dir_.GetPath()));
+    InitializeHistory();
 
     test_sync_service_ = std::make_unique<syncer::TestSyncService>();
     test_sync_service_->SetTransportState(
@@ -243,7 +248,11 @@
     task_environment_.RunUntilIdle();
   }
 
+  virtual void InitializeFlocPrefs() {}
+  virtual void InitializeHistory() {}
+
   void TearDown() override {
+    TestingBrowserProcess::GetGlobal()->SetLocalState(nullptr);
     settings_map_->ShutdownOnUIThread();
     history_service_->RemoveObserver(floc_id_provider_.get());
   }
@@ -303,12 +312,12 @@
         floc_computation_in_progress;
   }
 
-  bool first_floc_computation_triggered() const {
-    return floc_id_provider_->first_floc_computation_triggered_;
+  bool first_floc_computed() const {
+    return floc_id_provider_->first_floc_computed_;
   }
 
-  void set_first_floc_computation_triggered(bool triggered) {
-    floc_id_provider_->first_floc_computation_triggered_ = triggered;
+  bool floc_computation_scheduled() const {
+    return floc_id_provider_->compute_floc_timer_.IsRunning();
   }
 
   void set_floc_id(const FlocId& floc_id) {
@@ -331,6 +340,7 @@
   content::BrowserTaskEnvironment task_environment_;
 
   sync_preferences::TestingPrefServiceSyncable prefs_;
+  TestingPrefServiceSimple pref_service_;
   scoped_refptr<HostContentSettingsMap> settings_map_;
 
   std::unique_ptr<history::HistoryService> history_service_;
@@ -348,7 +358,86 @@
   DISALLOW_COPY_AND_ASSIGN(FlocIdProviderUnitTest);
 };
 
-TEST_F(FlocIdProviderUnitTest, QualifiedInitialHistory) {
+TEST_F(FlocIdProviderUnitTest, DefaultScheduledUpdateInterval) {
+  // Add a history entry with a timestamp exactly 7 days back from now.
+  std::string domain1 = "foo.com";
+  const base::Time kSevenDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(7);
+
+  history::HistoryAddPageArgs add_page_args;
+  add_page_args.url = GURL(base::StrCat({"https://www.", domain1}));
+  add_page_args.time = kSevenDaysBeforeStart;
+  add_page_args.publicly_routable = true;
+  history_service_->AddPage(add_page_args);
+
+  task_environment_.RunUntilIdle();
+
+  // Expect that the floc computation hasn't started, as the floc_id_provider
+  // hasn't been notified about state of the sync_service.
+  EXPECT_EQ(0u, floc_id_provider_->compute_floc_completed_count());
+  EXPECT_EQ(0u, floc_id_provider_->log_event_count());
+  EXPECT_FALSE(floc_id().IsValid());
+  EXPECT_FALSE(first_floc_computed());
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_FALSE(floc_computation_scheduled());
+
+  // Trigger the 1st floc computation.
+  test_sync_service_->SetTransportState(
+      syncer::SyncService::TransportState::ACTIVE);
+  test_sync_service_->FireStateChanged();
+
+  task_environment_.RunUntilIdle();
+
+  // Expect that the 1st computation has completed.
+  EXPECT_EQ(1u, floc_id_provider_->compute_floc_completed_count());
+  EXPECT_EQ(1u, floc_id_provider_->log_event_count());
+  EXPECT_EQ(FlocId(FlocId::SimHashHistory({domain1}), kSevenDaysBeforeStart,
+                   kSevenDaysBeforeStart, 0),
+            floc_id());
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_TRUE(floc_computation_scheduled());
+
+  // Advance the clock by 6 days.
+  task_environment_.FastForwardBy(base::TimeDelta::FromDays(6));
+
+  // Add a history entry.
+  std::string domain2 = "bar.com";
+  const base::Time kSixDaysAfterStart = base::Time::Now();
+
+  add_page_args.url = GURL(base::StrCat({"https://www.", domain2}));
+  add_page_args.time = kSixDaysAfterStart;
+  history_service_->AddPage(add_page_args);
+
+  task_environment_.RunUntilIdle();
+
+  // Advance the clock by 23 hours. Expect no more computation, as the floc id
+  // refresh interval is 7 days.
+  task_environment_.FastForwardBy(base::TimeDelta::FromHours(23));
+
+  EXPECT_EQ(1u, floc_id_provider_->compute_floc_completed_count());
+  EXPECT_EQ(1u, floc_id_provider_->log_event_count());
+
+  // Advance the clock by 1 hour. Expect one more computation.
+  task_environment_.FastForwardBy(base::TimeDelta::FromHours(1));
+
+  EXPECT_EQ(2u, floc_id_provider_->compute_floc_completed_count());
+  EXPECT_EQ(2u, floc_id_provider_->log_event_count());
+  EXPECT_EQ(FlocId(FlocId::SimHashHistory({domain2}), kSixDaysAfterStart,
+                   kSixDaysAfterStart, 0),
+            floc_id());
+}
+
+class FlocIdProviderOneDayUpdateIntervalUnitTest
+    : public FlocIdProviderUnitTest {
+ public:
+  FlocIdProviderOneDayUpdateIntervalUnitTest() {
+    feature_list_.Reset();
+    feature_list_.InitAndEnableFeatureWithParameters(
+        features::kFlocIdScheduledUpdate, {{"update_interval", "24h"}});
+  }
+};
+
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest, QualifiedInitialHistory) {
   // Add a history entry with a timestamp exactly 7 days back from now.
   std::string domain = "foo.com";
   const base::Time kTime = base::Time::Now() - base::TimeDelta::FromDays(7);
@@ -366,7 +455,9 @@
   EXPECT_EQ(0u, floc_id_provider_->compute_floc_completed_count());
   EXPECT_EQ(0u, floc_id_provider_->log_event_count());
   EXPECT_FALSE(floc_id().IsValid());
-  EXPECT_FALSE(first_floc_computation_triggered());
+  EXPECT_FALSE(first_floc_computed());
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_FALSE(floc_computation_scheduled());
 
   // Trigger the 1st floc computation.
   test_sync_service_->SetTransportState(
@@ -380,7 +471,8 @@
   EXPECT_EQ(1u, floc_id_provider_->log_event_count());
   EXPECT_EQ(FlocId(FlocId::SimHashHistory({domain}), kTime, kTime, 0),
             floc_id());
-  EXPECT_TRUE(first_floc_computation_triggered());
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_TRUE(floc_computation_scheduled());
 
   // Advance the clock by 1 day. Expect a computation, as there's no history in
   // the last 7 days so the id has been reset to empty.
@@ -391,7 +483,7 @@
   EXPECT_FALSE(floc_id().IsValid());
 }
 
-TEST_F(FlocIdProviderUnitTest, UnqualifiedInitialHistory) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest, UnqualifiedInitialHistory) {
   std::string domain = "foo.com";
 
   // Add a history entry with a timestamp 8 days back from now.
@@ -408,7 +500,8 @@
   EXPECT_EQ(0u, floc_id_provider_->compute_floc_completed_count());
   EXPECT_EQ(0u, floc_id_provider_->log_event_count());
   EXPECT_FALSE(floc_id().IsValid());
-  EXPECT_FALSE(first_floc_computation_triggered());
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_FALSE(floc_computation_scheduled());
 
   // Trigger the 1st floc computation.
   test_sync_service_->SetTransportState(
@@ -420,7 +513,8 @@
   // Expect that the 1st computation has completed.
   EXPECT_EQ(1u, floc_id_provider_->compute_floc_completed_count());
   EXPECT_EQ(1u, floc_id_provider_->log_event_count());
-  EXPECT_TRUE(first_floc_computation_triggered());
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_TRUE(floc_computation_scheduled());
 
   // Add a history entry with a timestamp 6 days back from now.
   const base::Time kTime = base::Time::Now() - base::TimeDelta::FromDays(6);
@@ -445,22 +539,25 @@
             floc_id());
 }
 
-TEST_F(FlocIdProviderUnitTest, HistoryDeleteAndScheduledUpdate) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
+       HistoryDeleteAndScheduledUpdate) {
   std::string domain1 = "foo.com";
   std::string domain2 = "bar.com";
 
   // Add a history entry with a timestamp exactly 7 days back from now.
   history::HistoryAddPageArgs add_page_args;
-  const base::Time kTime1 = base::Time::Now() - base::TimeDelta::FromDays(7);
+  const base::Time kSevenDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(7);
   add_page_args.url = GURL(base::StrCat({"https://www.", domain1}));
-  add_page_args.time = kTime1;
+  add_page_args.time = kSevenDaysBeforeStart;
   add_page_args.publicly_routable = true;
   history_service_->AddPage(add_page_args);
 
   // Add a history entry with a timestamp exactly 6 days back from now.
+  const base::Time kSixDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(6);
   add_page_args.url = GURL(base::StrCat({"https://www.", domain2}));
-  const base::Time kTime2 = base::Time::Now() - base::TimeDelta::FromDays(6);
-  add_page_args.time = kTime2;
+  add_page_args.time = kSixDaysBeforeStart;
   history_service_->AddPage(add_page_args);
 
   task_environment_.RunUntilIdle();
@@ -475,9 +572,9 @@
   // Expect that the 1st computation has completed.
   EXPECT_EQ(1u, floc_id_provider_->compute_floc_completed_count());
   EXPECT_EQ(1u, floc_id_provider_->log_event_count());
-  EXPECT_EQ(
-      FlocId(FlocId::SimHashHistory({domain1, domain2}), kTime1, kTime2, 0),
-      floc_id());
+  EXPECT_EQ(FlocId(FlocId::SimHashHistory({domain1, domain2}),
+                   kSevenDaysBeforeStart, kSixDaysBeforeStart, 0),
+            floc_id());
 
   // Advance the clock by 12 hours. Expect no more computation.
   task_environment_.FastForwardBy(base::TimeDelta::FromHours(12));
@@ -485,7 +582,7 @@
   EXPECT_EQ(1u, floc_id_provider_->log_event_count());
 
   // Expire the oldest history entry.
-  ExpireHistoryBeforeUninclusive(kTime2);
+  ExpireHistoryBeforeUninclusive(kSixDaysBeforeStart);
   task_environment_.RunUntilIdle();
 
   // Expect that the floc has been invalidated. Expect no more floc computation,
@@ -500,11 +597,12 @@
   task_environment_.FastForwardBy(base::TimeDelta::FromHours(12));
   EXPECT_EQ(2u, floc_id_provider_->compute_floc_completed_count());
   EXPECT_EQ(3u, floc_id_provider_->log_event_count());
-  EXPECT_EQ(FlocId(FlocId::SimHashHistory({domain2}), kTime2, kTime2, 0),
+  EXPECT_EQ(FlocId(FlocId::SimHashHistory({domain2}), kSixDaysBeforeStart,
+                   kSixDaysBeforeStart, 0),
             floc_id());
 }
 
-TEST_F(FlocIdProviderUnitTest, ScheduledUpdateSameFloc) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest, ScheduledUpdateSameFloc) {
   std::string domain = "foo.com";
   const base::Time kTime = base::Time::Now() - base::TimeDelta::FromDays(2);
 
@@ -540,7 +638,8 @@
             floc_id());
 }
 
-TEST_F(FlocIdProviderUnitTest, CheckCanComputeFloc_Success) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
+       CheckCanComputeFloc_Success) {
   test_sync_service_->SetTransportState(
       syncer::SyncService::TransportState::ACTIVE);
 
@@ -551,7 +650,8 @@
   task_environment_.RunUntilIdle();
 }
 
-TEST_F(FlocIdProviderUnitTest, CheckCanComputeFloc_Failure_SyncDisabled) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
+       CheckCanComputeFloc_Failure_SyncDisabled) {
   base::OnceCallback<void(bool)> cb = base::BindOnce(
       [](bool can_compute_floc) { EXPECT_FALSE(can_compute_floc); });
 
@@ -559,7 +659,7 @@
   task_environment_.RunUntilIdle();
 }
 
-TEST_F(FlocIdProviderUnitTest,
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
        CheckCanComputeFloc_Failure_BlockThirdPartyCookies) {
   test_sync_service_->SetTransportState(
       syncer::SyncService::TransportState::ACTIVE);
@@ -573,7 +673,7 @@
   task_environment_.RunUntilIdle();
 }
 
-TEST_F(FlocIdProviderUnitTest,
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
        CheckCanComputeFloc_Failure_SwaaNacAccountDisabled) {
   test_sync_service_->SetTransportState(
       syncer::SyncService::TransportState::ACTIVE);
@@ -587,13 +687,13 @@
   task_environment_.RunUntilIdle();
 }
 
-TEST_F(FlocIdProviderUnitTest, EventLogging) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest, EventLogging) {
   const base::Time kTime1 = base::Time::FromTimeT(1);
   const base::Time kTime2 = base::Time::FromTimeT(2);
 
   // Event logging for browser start.
   floc_id_provider_->LogFlocComputedEvent(
-      ComputeFlocTrigger::kBrowserStart,
+      ComputeFlocTrigger::kFirstCompute,
       ComputeFlocResult(12345ULL, FlocId(123ULL, kTime1, kTime1, 999)));
 
   EXPECT_EQ(1u, fake_user_event_service_->GetRecordedUserEvents().size());
@@ -687,19 +787,19 @@
   EXPECT_EQ(87654ULL, event5.floc_id());
 }
 
-TEST_F(FlocIdProviderUnitTest, HistoryDelete_AllHistory) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest, HistoryDelete_AllHistory) {
   const base::Time kTime1 = base::Time::FromTimeT(1);
   const base::Time kTime2 = base::Time::FromTimeT(2);
 
   set_floc_id(FlocId(123, kTime1, kTime2, 0));
-  set_first_floc_computation_triggered(true);
 
   OnURLsDeleted(history_service_.get(), history::DeletionInfo::ForAllHistory());
 
   EXPECT_FALSE(floc_id().IsValid());
 }
 
-TEST_F(FlocIdProviderUnitTest, HistoryDelete_InvalidTimeRange) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
+       HistoryDelete_InvalidTimeRange) {
   const base::Time kTime1 = base::Time::FromTimeT(1);
   const base::Time kTime2 = base::Time::FromTimeT(2);
 
@@ -715,7 +815,6 @@
       FlocId(FlocId::SimHashHistory({"a.test"}), kTime1, kTime2, 0);
 
   set_floc_id(expected_floc);
-  set_first_floc_computation_triggered(true);
 
   OnURLsDeleted(history_service_.get(),
                 history::DeletionInfo::ForUrls(
@@ -724,7 +823,8 @@
   EXPECT_EQ(expected_floc, floc_id());
 }
 
-TEST_F(FlocIdProviderUnitTest, HistoryDelete_TimeRangeNoOverlap) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
+       HistoryDelete_TimeRangeNoOverlap) {
   const base::Time kTime1 = base::Time::FromTimeT(1);
   const base::Time kTime2 = base::Time::FromTimeT(2);
   const base::Time kTime3 = base::Time::FromTimeT(3);
@@ -734,7 +834,6 @@
       FlocId(FlocId::SimHashHistory({"a.test"}), kTime1, kTime2, 0);
 
   set_floc_id(expected_floc);
-  set_first_floc_computation_triggered(true);
 
   history::DeletionInfo deletion_info(
       history::DeletionTimeRange(kTime3, kTime4),
@@ -745,7 +844,8 @@
   EXPECT_EQ(expected_floc, floc_id());
 }
 
-TEST_F(FlocIdProviderUnitTest, HistoryDelete_TimeRangePartialOverlap) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
+       HistoryDelete_TimeRangePartialOverlap) {
   const base::Time kTime1 = base::Time::FromTimeT(1);
   const base::Time kTime2 = base::Time::FromTimeT(2);
   const base::Time kTime3 = base::Time::FromTimeT(3);
@@ -754,7 +854,6 @@
       FlocId(FlocId::SimHashHistory({"a.test"}), kTime1, kTime2, 0);
 
   set_floc_id(expected_floc);
-  set_first_floc_computation_triggered(true);
 
   history::DeletionInfo deletion_info(
       history::DeletionTimeRange(kTime2, kTime3),
@@ -765,7 +864,8 @@
   EXPECT_FALSE(floc_id().IsValid());
 }
 
-TEST_F(FlocIdProviderUnitTest, HistoryDelete_TimeRangeFullOverlap) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
+       HistoryDelete_TimeRangeFullOverlap) {
   const base::Time kTime1 = base::Time::FromTimeT(1);
   const base::Time kTime2 = base::Time::FromTimeT(2);
 
@@ -773,7 +873,6 @@
       FlocId(FlocId::SimHashHistory({"a.test"}), kTime1, kTime2, 0);
 
   set_floc_id(expected_floc);
-  set_first_floc_computation_triggered(true);
 
   history::DeletionInfo deletion_info(
       history::DeletionTimeRange(kTime1, kTime2),
@@ -784,22 +883,22 @@
   EXPECT_FALSE(floc_id().IsValid());
 }
 
-TEST_F(FlocIdProviderUnitTest, HistoryEntriesWithPrivateIP) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
+       HistoryEntriesWithPrivateIP) {
   history::QueryResults query_results;
   query_results.SetURLResults(
       {history::URLResult(GURL("https://a.test"),
                           base::Time::Now() - base::TimeDelta::FromDays(1))});
 
-  set_first_floc_computation_triggered(true);
   set_floc_computation_in_progress(true);
 
-  OnGetRecentlyVisitedURLsCompleted(ComputeFlocTrigger::kBrowserStart,
+  OnGetRecentlyVisitedURLsCompleted(ComputeFlocTrigger::kFirstCompute,
                                     std::move(query_results));
 
   EXPECT_FALSE(floc_id().IsValid());
 }
 
-TEST_F(FlocIdProviderUnitTest, MultipleHistoryEntries) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest, MultipleHistoryEntries) {
   const base::Time kTime1 = base::Time::FromTimeT(1);
   const base::Time kTime2 = base::Time::FromTimeT(2);
   const base::Time kTime3 = base::Time::FromTimeT(3);
@@ -818,10 +917,9 @@
   history::QueryResults query_results;
   query_results.SetURLResults(std::move(url_results));
 
-  set_first_floc_computation_triggered(true);
   set_floc_computation_in_progress(true);
 
-  OnGetRecentlyVisitedURLsCompleted(ComputeFlocTrigger::kBrowserStart,
+  OnGetRecentlyVisitedURLsCompleted(ComputeFlocTrigger::kFirstCompute,
                                     std::move(query_results));
 
   EXPECT_EQ(
@@ -829,7 +927,7 @@
       floc_id());
 }
 
-TEST_F(FlocIdProviderUnitTest, TurnSyncOffAndOn) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest, TurnSyncOffAndOn) {
   std::string domain = "foo.com";
   const base::Time kTime = base::Time::Now() - base::TimeDelta::FromDays(1);
 
@@ -879,7 +977,8 @@
             floc_id());
 }
 
-TEST_F(FlocIdProviderUnitTest, GetInterestCohortForJsApiMethod) {
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
+       GetInterestCohortForJsApiMethod) {
   test_sync_service_->SetTransportState(
       syncer::SyncService::TransportState::ACTIVE);
   const base::Time kTime = base::Time::Now() - base::TimeDelta::FromDays(1);
@@ -892,7 +991,7 @@
                 /*requesting_origin=*/{}, /*site_for_cookies=*/{}));
 }
 
-TEST_F(FlocIdProviderUnitTest,
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
        GetInterestCohortForJsApiMethod_SyncHistoryDisabled) {
   const base::Time kTime = base::Time::Now() - base::TimeDelta::FromDays(1);
 
@@ -903,7 +1002,7 @@
                 /*requesting_origin=*/{}, /*site_for_cookies=*/{}));
 }
 
-TEST_F(FlocIdProviderUnitTest,
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
        GetInterestCohortForJsApiMethod_ThirdPartyCookiesDisabled) {
   test_sync_service_->SetTransportState(
       syncer::SyncService::TransportState::ACTIVE);
@@ -918,7 +1017,7 @@
                 /*requesting_origin=*/{}, /*site_for_cookies=*/{}));
 }
 
-TEST_F(FlocIdProviderUnitTest,
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
        GetInterestCohortForJsApiMethod_CookiesContentSettingsDisallowed) {
   test_sync_service_->SetTransportState(
       syncer::SyncService::TransportState::ACTIVE);
@@ -933,7 +1032,7 @@
                 /*requesting_origin=*/{}, /*site_for_cookies=*/{}));
 }
 
-TEST_F(FlocIdProviderUnitTest,
+TEST_F(FlocIdProviderOneDayUpdateIntervalUnitTest,
        GetInterestCohortForJsApiMethod_FlocUnavailable) {
   test_sync_service_->SetTransportState(
       syncer::SyncService::TransportState::ACTIVE);
@@ -943,33 +1042,45 @@
                 /*requesting_origin=*/{}, /*site_for_cookies=*/{}));
 }
 
-TEST_F(FlocIdProviderUnitTest, HistoryDeleteDuringInProgressComputation) {
-  base::test::ScopedFeatureList feature_list;
-  feature_list.InitWithFeatures({features::kFlocIdSortingLshBasedComputation},
-                                {});
+class FlocIdProviderUnitTestSortingLshEnabled
+    : public FlocIdProviderOneDayUpdateIntervalUnitTest {
+ public:
+  FlocIdProviderUnitTestSortingLshEnabled() {
+    feature_list_.Reset();
+    feature_list_.InitWithFeaturesAndParameters(
+        {{features::kFlocIdScheduledUpdate, {{"update_interval", "24h"}}},
+         {features::kFlocIdSortingLshBasedComputation, {}}},
+        {});
+  }
+};
 
+TEST_F(FlocIdProviderUnitTestSortingLshEnabled,
+       HistoryDeleteDuringInProgressComputation) {
   std::string domain1 = "foo.com";
   std::string domain2 = "bar.com";
   std::string domain3 = "baz.com";
-  const base::Time kTime1 = base::Time::Now() - base::TimeDelta::FromDays(7);
-  const base::Time kTime2 = base::Time::Now() - base::TimeDelta::FromDays(6);
-  const base::Time kTime3 = base::Time::Now() - base::TimeDelta::FromDays(5);
+  const base::Time kSevenDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(7);
+  const base::Time kSixDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(6);
+  const base::Time kFiveDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(5);
 
   // Add a history entry with a timestamp exactly 7 days back from now.
   history::HistoryAddPageArgs add_page_args;
   add_page_args.url = GURL(base::StrCat({"https://www.", domain1}));
-  add_page_args.time = kTime1;
+  add_page_args.time = kSevenDaysBeforeStart;
   add_page_args.publicly_routable = true;
   history_service_->AddPage(add_page_args);
 
   // Add a history entry with a timestamp exactly 6 days back from now.
   add_page_args.url = GURL(base::StrCat({"https://www.", domain2}));
-  add_page_args.time = kTime2;
+  add_page_args.time = kSixDaysBeforeStart;
   history_service_->AddPage(add_page_args);
 
   // Add a history entry with a timestamp exactly 5 days back from now.
   add_page_args.url = GURL(base::StrCat({"https://www.", domain3}));
-  add_page_args.time = kTime3;
+  add_page_args.time = kFiveDaysBeforeStart;
   history_service_->AddPage(add_page_args);
 
   // Map SimHashHistory({domain1, domain2, domain3}) to 123.
@@ -994,7 +1105,8 @@
   EXPECT_EQ(1u, floc_id_provider_->compute_floc_completed_count());
   EXPECT_EQ(1u, floc_id_provider_->log_event_count());
   EXPECT_TRUE(floc_id().IsValid());
-  EXPECT_EQ(FlocId(123, kTime1, kTime3, 999), floc_id());
+  EXPECT_EQ(FlocId(123, kSevenDaysBeforeStart, kFiveDaysBeforeStart, 999),
+            floc_id());
 
   // Advance the clock by 1 day. The "domain1" should expire. However, we pause
   // before the computation completes.
@@ -1003,8 +1115,9 @@
 
   EXPECT_TRUE(floc_computation_in_progress());
   EXPECT_FALSE(need_recompute());
-  EXPECT_EQ(FlocId(123, kTime1, kTime3, 999), floc_id());
-  EXPECT_EQ(FlocId(456, kTime2, kTime3, 999),
+  EXPECT_EQ(FlocId(123, kSevenDaysBeforeStart, kFiveDaysBeforeStart, 999),
+            floc_id());
+  EXPECT_EQ(FlocId(456, kSixDaysBeforeStart, kFiveDaysBeforeStart, 999),
             floc_id_provider_->paused_result().floc_id);
   EXPECT_EQ(ComputeFlocTrigger::kScheduledUpdate,
             floc_id_provider_->paused_trigger());
@@ -1012,7 +1125,7 @@
   // Expire the "domain2" history entry right before the floc computation
   // completes. Since the computation is still considered to be in-progress, we
   // will recompute right after this computation completes.
-  ExpireHistoryBeforeUninclusive(kTime3);
+  ExpireHistoryBeforeUninclusive(kFiveDaysBeforeStart);
 
   EXPECT_TRUE(need_recompute());
 
@@ -1032,17 +1145,10 @@
 
   // The final floc should be derived from "domain3".
   EXPECT_TRUE(floc_id().IsValid());
-  EXPECT_EQ(FlocId(789, kTime3, kTime3, 999), floc_id());
+  EXPECT_EQ(FlocId(789, kFiveDaysBeforeStart, kFiveDaysBeforeStart, 999),
+            floc_id());
 }
 
-class FlocIdProviderUnitTestSortingLshEnabled : public FlocIdProviderUnitTest {
- public:
-  FlocIdProviderUnitTestSortingLshEnabled() {
-    feature_list_.InitAndEnableFeature(
-        features::kFlocIdSortingLshBasedComputation);
-  }
-};
-
 TEST_F(FlocIdProviderUnitTestSortingLshEnabled,
        SyncHistoryEnabledFollowedBySortingLshLoaded) {
   // Turn on sync & sync-history. The 1st floc computation should not be
@@ -1051,14 +1157,16 @@
       syncer::SyncService::TransportState::ACTIVE);
   test_sync_service_->FireStateChanged();
 
-  EXPECT_FALSE(first_floc_computation_triggered());
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_FALSE(floc_computation_scheduled());
 
   // Trigger the sorting-lsh ready event. The 1st floc computation should be
   // triggered now as sync & sync-history are enabled the sorting-lsh is ready.
   sorting_lsh_service_->OnSortingLshClustersFileReady(base::FilePath(),
                                                       base::Version());
 
-  EXPECT_TRUE(first_floc_computation_triggered());
+  EXPECT_TRUE(floc_computation_in_progress());
+  EXPECT_FALSE(floc_computation_scheduled());
 }
 
 TEST_F(FlocIdProviderUnitTestSortingLshEnabled,
@@ -1068,7 +1176,8 @@
   sorting_lsh_service_->OnSortingLshClustersFileReady(base::FilePath(),
                                                       base::Version());
 
-  EXPECT_FALSE(first_floc_computation_triggered());
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_FALSE(floc_computation_scheduled());
 
   // Turn on sync & sync-history. The 1st floc computation should be triggered
   // now as sync & sync-history are enabled the sorting-lsh is loaded.
@@ -1076,7 +1185,8 @@
       syncer::SyncService::TransportState::ACTIVE);
   test_sync_service_->FireStateChanged();
 
-  EXPECT_TRUE(first_floc_computation_triggered());
+  EXPECT_TRUE(floc_computation_in_progress());
+  EXPECT_FALSE(floc_computation_scheduled());
 }
 
 TEST_F(FlocIdProviderUnitTestSortingLshEnabled,
@@ -1153,10 +1263,14 @@
       syncer::SyncService::TransportState::ACTIVE);
   test_sync_service_->FireStateChanged();
 
-  EXPECT_TRUE(first_floc_computation_triggered());
+  EXPECT_TRUE(floc_computation_in_progress());
+  EXPECT_FALSE(floc_computation_scheduled());
 
   task_environment_.RunUntilIdle();
 
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_TRUE(floc_computation_scheduled());
+
   // Expect a computation. The floc should be equal to 12345.
   EXPECT_EQ(1u, floc_id_provider_->compute_floc_completed_count());
   EXPECT_EQ(1u, floc_id_provider_->log_event_count());
@@ -1207,4 +1321,214 @@
   EXPECT_EQ(FlocId(6789, kTime, kTime, 999), floc_id());
 }
 
+class FlocIdProviderUnitTestLastFlocUnexpired
+    : public FlocIdProviderOneDayUpdateIntervalUnitTest {
+ public:
+  void InitializeFlocPrefs() override {
+    const base::Time kFourDaysBeforeStart =
+        base::Time::Now() - base::TimeDelta::FromDays(4);
+    const base::Time kThreeDaysBeforeStart =
+        base::Time::Now() - base::TimeDelta::FromDays(3);
+
+    FlocId floc_id =
+        FlocId(123, kFourDaysBeforeStart, kThreeDaysBeforeStart, 999);
+    base::Time last_compute_time =
+        base::Time::Now() - base::TimeDelta::FromHours(12);
+
+    floc_id.SaveToPrefs(&pref_service_);
+    FlocId::SaveComputeTimeToPrefs(last_compute_time, &pref_service_);
+  }
+
+  void InitializeHistory() override {
+    const base::Time kFourDaysBeforeStart =
+        base::Time::Now() - base::TimeDelta::FromDays(4);
+    const base::Time kThreeDaysBeforeStart =
+        base::Time::Now() - base::TimeDelta::FromDays(3);
+
+    history::HistoryAddPageArgs add_page_args;
+    add_page_args.url = GURL("https://domain1.com");
+    add_page_args.time = kFourDaysBeforeStart;
+    add_page_args.publicly_routable = true;
+    history_service_->AddPage(add_page_args);
+
+    add_page_args.url = GURL("https://domain2.com");
+    add_page_args.time = kThreeDaysBeforeStart;
+    history_service_->AddPage(add_page_args);
+  }
+};
+
+TEST_F(FlocIdProviderUnitTestLastFlocUnexpired, NextScheduledUpdate) {
+  const base::Time kFourDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(4);
+  const base::Time kThreeDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(3);
+  const base::Time kTwoDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(2);
+
+  // Initially the floc is set to the entry from the prefs. No computation has
+  // occurred for this session.
+  EXPECT_EQ(floc_id(),
+            FlocId(123, kFourDaysBeforeStart, kThreeDaysBeforeStart, 999));
+  EXPECT_TRUE(first_floc_computed());
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_TRUE(floc_computation_scheduled());
+  EXPECT_EQ(0u, floc_id_provider_->compute_floc_completed_count());
+
+  // Add a history entry with a timestamp 2 days back from now.
+  history::HistoryAddPageArgs add_page_args;
+  add_page_args.url = GURL("https://www.foo.com");
+  add_page_args.time = kTwoDaysBeforeStart;
+  add_page_args.publicly_routable = true;
+  history_service_->AddPage(add_page_args);
+
+  // Turn on sync-history.
+  test_sync_service_->SetTransportState(
+      syncer::SyncService::TransportState::ACTIVE);
+  test_sync_service_->FireStateChanged();
+
+  task_environment_.RunUntilIdle();
+
+  // Expect that the floc prefs hasn't changed at this stage.
+  EXPECT_EQ(floc_id(), FlocId::ReadFromPrefs(&pref_service_));
+
+  // Fast forward by 12 hours. This should trigger a scheduled update.
+  task_environment_.FastForwardBy(base::TimeDelta::FromHours(12));
+
+  // Expect a compute, an event logging with trigger FlocIdComputed::REFRESHED,
+  // and an update to the local prefs.
+  EXPECT_EQ(1u, floc_id_provider_->compute_floc_completed_count());
+  EXPECT_EQ(
+      floc_id(),
+      FlocId(FlocId::SimHashHistory({"foo.com", "domain1.com", "domain2.com"}),
+             kFourDaysBeforeStart, kTwoDaysBeforeStart, 0));
+
+  EXPECT_EQ(1u, fake_user_event_service_->GetRecordedUserEvents().size());
+  const sync_pb::UserEventSpecifics_FlocIdComputed& event =
+      fake_user_event_service_->GetRecordedUserEvents()[0]
+          .floc_id_computed_event();
+  EXPECT_EQ(sync_pb::UserEventSpecifics::FlocIdComputed::REFRESHED,
+            event.event_trigger());
+  EXPECT_EQ(FlocId::SimHashHistory({"foo.com", "domain1.com", "domain2.com"}),
+            event.floc_id());
+
+  EXPECT_EQ(floc_id(), FlocId::ReadFromPrefs(&pref_service_));
+  EXPECT_EQ(base::Time::Now(),
+            FlocId::ReadComputeTimeFromPrefs(&pref_service_));
+}
+
+TEST_F(FlocIdProviderUnitTestLastFlocUnexpired, HistoryDelete) {
+  const base::Time kFourDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(4);
+  const base::Time kThreeDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(3);
+
+  // Initially the floc is set to the entry from the prefs. No computation has
+  // occurred for this session.
+  EXPECT_EQ(floc_id(),
+            FlocId(123, kFourDaysBeforeStart, kThreeDaysBeforeStart, 999));
+  EXPECT_TRUE(first_floc_computed());
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_TRUE(floc_computation_scheduled());
+  EXPECT_EQ(0u, floc_id_provider_->compute_floc_completed_count());
+
+  // Expire all previous history.
+  ExpireHistoryBeforeUninclusive(base::Time::Now());
+
+  // Expect no explicit recompute, but the floc has been invalidated and is
+  // written to the local prefs. The last floc compute time in the pref hasn't
+  // changed.
+  EXPECT_EQ(0u, floc_id_provider_->compute_floc_completed_count());
+  EXPECT_FALSE(floc_id().IsValid());
+  EXPECT_FALSE(FlocId::ReadFromPrefs(&pref_service_).IsValid());
+  EXPECT_EQ(base::Time::Now() - base::TimeDelta::FromHours(12),
+            FlocId::ReadComputeTimeFromPrefs(&pref_service_));
+}
+
+class FlocIdProviderUnitTestLastFlocExpired
+    : public FlocIdProviderOneDayUpdateIntervalUnitTest {
+ public:
+  void InitializeFlocPrefs() override {
+    const base::Time kTwentyDaysBeforeStart =
+        base::Time::Now() - base::TimeDelta::FromDays(20);
+    const base::Time kNineteenDaysBeforeStart =
+        base::Time::Now() - base::TimeDelta::FromDays(19);
+
+    FlocId floc_id =
+        FlocId(123, kTwentyDaysBeforeStart, kNineteenDaysBeforeStart, 888);
+    base::Time last_compute_time =
+        base::Time::Now() - base::TimeDelta::FromHours(25);
+
+    floc_id.SaveToPrefs(&pref_service_);
+    FlocId::SaveComputeTimeToPrefs(last_compute_time, &pref_service_);
+  }
+
+  void InitializeHistory() override {
+    const base::Time kTwentyDaysBeforeStart =
+        base::Time::Now() - base::TimeDelta::FromDays(20);
+    const base::Time kNineteenDaysBeforeStart =
+        base::Time::Now() - base::TimeDelta::FromDays(19);
+
+    history::HistoryAddPageArgs add_page_args;
+    add_page_args.url = GURL("https://domain1.com");
+    add_page_args.time = kTwentyDaysBeforeStart;
+    add_page_args.publicly_routable = true;
+    history_service_->AddPage(add_page_args);
+
+    add_page_args.url = GURL("https://domain2.com");
+    add_page_args.time = kNineteenDaysBeforeStart;
+    history_service_->AddPage(add_page_args);
+  }
+};
+
+TEST_F(FlocIdProviderUnitTestLastFlocExpired, ComputeOnInitialSetupReady) {
+  // Initially the floc is invalid as the last floc has expired. No computation
+  // has occurred for this session.
+  EXPECT_FALSE(floc_id().IsValid());
+  EXPECT_TRUE(first_floc_computed());
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_FALSE(floc_computation_scheduled());
+  EXPECT_EQ(0u, floc_id_provider_->compute_floc_completed_count());
+
+  // Add a history entry with a timestamp 2 days back from now.
+  const base::Time kTwoDaysBeforeStart =
+      base::Time::Now() - base::TimeDelta::FromDays(2);
+
+  history::HistoryAddPageArgs add_page_args;
+  add_page_args.url = GURL("https://www.foo.com");
+  add_page_args.time = kTwoDaysBeforeStart;
+  add_page_args.publicly_routable = true;
+  history_service_->AddPage(add_page_args);
+
+  // Turn on sync-history. This should trigger the computation.
+  test_sync_service_->SetTransportState(
+      syncer::SyncService::TransportState::ACTIVE);
+  test_sync_service_->FireStateChanged();
+
+  EXPECT_TRUE(floc_computation_in_progress());
+  EXPECT_FALSE(floc_computation_scheduled());
+
+  task_environment_.RunUntilIdle();
+
+  EXPECT_FALSE(floc_computation_in_progress());
+  EXPECT_TRUE(floc_computation_scheduled());
+
+  // Expect a compute, an event logging with trigger FlocIdComputed::REFRESHED,
+  // and an update to the local prefs.
+  EXPECT_EQ(1u, floc_id_provider_->compute_floc_completed_count());
+  EXPECT_EQ(floc_id(), FlocId(FlocId::SimHashHistory({"foo.com"}),
+                              kTwoDaysBeforeStart, kTwoDaysBeforeStart, 0));
+
+  EXPECT_EQ(1u, fake_user_event_service_->GetRecordedUserEvents().size());
+  const sync_pb::UserEventSpecifics_FlocIdComputed& event =
+      fake_user_event_service_->GetRecordedUserEvents()[0]
+          .floc_id_computed_event();
+  EXPECT_EQ(sync_pb::UserEventSpecifics::FlocIdComputed::REFRESHED,
+            event.event_trigger());
+  EXPECT_EQ(FlocId::SimHashHistory({"foo.com"}), event.floc_id());
+
+  EXPECT_EQ(floc_id(), FlocId::ReadFromPrefs(&pref_service_));
+  EXPECT_EQ(base::Time::Now(),
+            FlocId::ReadComputeTimeFromPrefs(&pref_service_));
+}
+
 }  // namespace federated_learning
diff --git a/chrome/browser/first_run/first_run.cc b/chrome/browser/first_run/first_run.cc
index 208e803..b377bd5 100644
--- a/chrome/browser/first_run/first_run.cc
+++ b/chrome/browser/first_run/first_run.cc
@@ -412,7 +412,7 @@
       return EULA_EXIT_NOW;
 
     std::unique_ptr<base::DictionaryValue> initial_dictionary =
-        initial_prefs->master_dictionary().CreateDeepCopy();
+        initial_prefs->initial_dictionary().CreateDeepCopy();
     // The distribution dictionary (and any prefs below it) are never registered
     // for use in Chrome's PrefService. Strip them from the initial dictionary
     // before mapping it to prefs.
diff --git a/chrome/browser/first_run/first_run_internal_linux.cc b/chrome/browser/first_run/first_run_internal_linux.cc
index dad055b2..bb0cbe2 100644
--- a/chrome/browser/first_run/first_run_internal_linux.cc
+++ b/chrome/browser/first_run/first_run_internal_linux.cc
@@ -22,7 +22,7 @@
   base::FilePath initial_prefs;
   if (!base::PathService::Get(base::DIR_EXE, &initial_prefs))
     return base::FilePath();
-  return initial_prefs.AppendASCII(installer::kDefaultMasterPrefs);
+  return initial_prefs.AppendASCII(installer::kDefaultInitialPrefs);
 }
 
 }  // namespace internal
diff --git a/chrome/browser/first_run/first_run_internal_win.cc b/chrome/browser/first_run/first_run_internal_win.cc
index 7228a82a1..118d0fe 100644
--- a/chrome/browser/first_run/first_run_internal_win.cc
+++ b/chrome/browser/first_run/first_run_internal_win.cc
@@ -157,7 +157,7 @@
   base::FilePath initial_prefs;
   if (!base::PathService::Get(base::DIR_EXE, &initial_prefs))
     return base::FilePath();
-  return initial_prefs.AppendASCII(installer::kDefaultMasterPrefs);
+  return initial_prefs.AppendASCII(installer::kDefaultInitialPrefs);
 }
 
 }  // namespace internal
diff --git a/chrome/browser/first_run/first_run_unittest.cc b/chrome/browser/first_run/first_run_unittest.cc
index f4173186..71c47bd 100644
--- a/chrome/browser/first_run/first_run_unittest.cc
+++ b/chrome/browser/first_run/first_run_unittest.cc
@@ -35,7 +35,7 @@
 
 TEST_F(FirstRunTest, SetupInitialPrefsFromInstallPrefs_NoVariationsSeed) {
   installer::InitialPreferences install_prefs("{ }");
-  EXPECT_TRUE(install_prefs.master_dictionary().empty());
+  EXPECT_TRUE(install_prefs.initial_dictionary().empty());
 
   EXPECT_TRUE(install_prefs.GetCompressedVariationsSeed().empty());
   EXPECT_TRUE(install_prefs.GetVariationsSeedSignature().empty());
@@ -46,12 +46,12 @@
   installer::InitialPreferences install_prefs(
       "{\"variations_compressed_seed\":\"xyz\","
       " \"variations_seed_signature\":\"abc\"}");
-  EXPECT_EQ(2U, install_prefs.master_dictionary().size());
+  EXPECT_EQ(2U, install_prefs.initial_dictionary().size());
 
   EXPECT_EQ("xyz", install_prefs.GetCompressedVariationsSeed());
   EXPECT_EQ("abc", install_prefs.GetVariationsSeedSignature());
   // Variations prefs should have been extracted (removed) from the dictionary.
-  EXPECT_TRUE(install_prefs.master_dictionary().empty());
+  EXPECT_TRUE(install_prefs.initial_dictionary().empty());
 }
 
 // No switches and no sentinel present. This is the standard case for first run.
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index b75fb8e..565ae33 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -2167,7 +2167,7 @@
   {
     "name": "enable-subresource-redirect",
     "owners": [ "rajendrant", "mcrouse", "tbansal" ],
-    "expiry_milestone": 87
+    "expiry_milestone": 92
   },
   {
     "name": "enable-suggested-files",
@@ -2185,6 +2185,11 @@
     "expiry_milestone": 90
   },
   {
+    "name": "enable-swipe-to-move-cursor",
+    "owners": [ "ctzsm", "changwan"],
+    "expiry_milestone": 90
+  },
+  {
     "name": "enable-switch-access-point-scanning",
     "owners": ["anastasi@google.com", "//ui/accessibility/OWNERS"],
     "expiry_milestone": 92
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index c6d28c48..9401136 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -993,9 +993,9 @@
 const char kEnableUseZoomForDsfChoiceDisabled[] = "Disabled";
 
 const char kEnableSubresourceRedirectName[] =
-    "Enable Render Level Data Use Optimization";
+    "Enable Subresource Redirect Compression";
 const char kEnableSubresourceRedirectDescription[] =
-    "Allow Render Level Data Use Optimization";
+    "Allow subresource compression for data savings";
 
 const char kEnableWebAuthenticationCableV2SupportName[] =
     "Web Authentication caBLE v2 support";
@@ -3220,6 +3220,10 @@
     "If enabled, when the user changes themes the current tabs are reparented "
     "instead of reloaded.";
 
+const char kSwipeToMoveCursorName[] = "Swipe to move cursor";
+const char kSwipeToMoveCursorDescription[] =
+    "Allows user to use touch gestures to move the text cursor around.";
+
 const char kTabbedAppOverflowMenuIconsName[] =
     "Android tabbed app overflow menu icons";
 const char kTabbedAppOverflowMenuIconsDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 8fadd35..73d53fa 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1859,6 +1859,9 @@
 extern const char kAndroidNightModeTabReparentingName[];
 extern const char kAndroidNightModeTabReparentingDescription[];
 
+extern const char kSwipeToMoveCursorName[];
+extern const char kSwipeToMoveCursorDescription[];
+
 extern const char kTabbedAppOverflowMenuIconsName[];
 extern const char kTabbedAppOverflowMenuIconsDescription[];
 
diff --git a/chrome/browser/loader/signed_exchange_policy_browsertest.cc b/chrome/browser/loader/signed_exchange_policy_browsertest.cc
index 08bf3af7..dc18c8a 100644
--- a/chrome/browser/loader/signed_exchange_policy_browsertest.cc
+++ b/chrome/browser/loader/signed_exchange_policy_browsertest.cc
@@ -29,13 +29,15 @@
 
   void SetUpInProcessBrowserTestFixture() override {
     CertVerifierBrowserTest::SetUpInProcessBrowserTestFixture();
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
   }
 
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 
  private:
   void SetUp() override {
diff --git a/chrome/browser/media/history/media_history_browsertest.cc b/chrome/browser/media/history/media_history_browsertest.cc
index 4c35053..a636b62e 100644
--- a/chrome/browser/media/history/media_history_browsertest.cc
+++ b/chrome/browser/media/history/media_history_browsertest.cc
@@ -843,7 +843,14 @@
             GetPlaybackSessionsSync(GetOTRMediaHistoryService(browser), 2));
 }
 
-IN_PROC_BROWSER_TEST_P(MediaHistoryBrowserTest, RecordWatchtime_AudioVideo) {
+#if defined(OS_MAC) && !defined(NDEBUG)
+// TODO(crbug.com/1152073): This test has flaky timeouts on Mac Debug.
+#define MAYBE_RecordWatchtime_AudioVideo DISABLED_RecordWatchtime_AudioVideo
+#else
+#define MAYBE_RecordWatchtime_AudioVideo RecordWatchtime_AudioVideo
+#endif
+IN_PROC_BROWSER_TEST_P(MediaHistoryBrowserTest,
+                       MAYBE_RecordWatchtime_AudioVideo) {
   auto* browser = CreateBrowserFromParam();
 
   // Start a page and wait for significant playback so we record watchtime.
diff --git a/chrome/browser/net/errorpage_browsertest.cc b/chrome/browser/net/errorpage_browsertest.cc
index 0005ffb..776ca58 100644
--- a/chrome/browser/net/errorpage_browsertest.cc
+++ b/chrome/browser/net/errorpage_browsertest.cc
@@ -837,6 +837,8 @@
     // Sets up a mock policy provider for user and device policies.
     EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
         .WillRepeatedly(testing::Return(true));
+    EXPECT_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillRepeatedly(testing::Return(true));
 
     policy::PolicyMap policy_map;
 #if defined(OS_CHROMEOS)
@@ -903,7 +905,7 @@
 #endif
 
   // Mock policy provider for both user and device policies.
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
   std::unique_ptr<content::URLLoaderInterceptor> url_loader_interceptor_;
 };
 
diff --git a/chrome/browser/net/network_context_configuration_browsertest.cc b/chrome/browser/net/network_context_configuration_browsertest.cc
index accbdb2..362a180 100644
--- a/chrome/browser/net/network_context_configuration_browsertest.cc
+++ b/chrome/browser/net/network_context_configuration_browsertest.cc
@@ -240,8 +240,10 @@
   ~NetworkContextConfigurationBrowserTest() override {}
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   }
 
@@ -774,7 +776,7 @@
   std::unique_ptr<net::test_server::ControllableHttpResponse>
       controllable_http_response_;
 
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
   // Used in tests that need a live request during browser shutdown.
   std::unique_ptr<network::SimpleURLLoader> live_during_shutdown_simple_loader_;
   std::unique_ptr<content::SimpleURLLoaderTestHelper>
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
index 5bd6fd9..a8304735 100644
--- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.cc
@@ -475,6 +475,23 @@
   builder.Record(ukm::UkmRecorder::Get());
 }
 
+void UkmPageLoadMetricsObserver::OnFirstContentfulPaintInPage(
+    const page_load_metrics::mojom::PageLoadTiming& timing) {
+  if (is_portal_)
+    return;
+
+  if (!page_load_metrics::WasStartedInForegroundOptionalEventInForeground(
+          timing.paint_timing->first_contentful_paint, GetDelegate()))
+    return;
+
+  DCHECK(timing.paint_timing->first_contentful_paint.has_value());
+
+  ukm::builders::PageLoad builder(GetDelegate().GetPageUkmSourceId());
+  builder.SetPaintTiming_NavigationToFirstContentfulPaint(
+      timing.paint_timing->first_contentful_paint.value().InMilliseconds());
+  builder.Record(ukm::UkmRecorder::Get());
+}
+
 void UkmPageLoadMetricsObserver::RecordTimingMetrics(
     const page_load_metrics::mojom::PageLoadTiming& timing) {
   ukm::builders::PageLoad builder(GetDelegate().GetPageUkmSourceId());
@@ -515,10 +532,9 @@
     builder.SetPaintTiming_NavigationToFirstPaint(
         timing.paint_timing->first_paint.value().InMilliseconds());
   }
-  if (timing.paint_timing->first_contentful_paint) {
-    builder.SetPaintTiming_NavigationToFirstContentfulPaint(
-        timing.paint_timing->first_contentful_paint.value().InMilliseconds());
-  }
+
+  // FCP is reported in OnFirstContentfulPaintInPage.
+
   if (timing.paint_timing->first_meaningful_paint) {
     builder.SetExperimental_PaintTiming_NavigationToFirstMeaningfulPaint(
         timing.paint_timing->first_meaningful_paint.value().InMilliseconds());
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.h
index 291d7b6..25467899 100644
--- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer.h
@@ -108,6 +108,9 @@
 
   void DidActivatePortal(base::TimeTicks activation_time) override;
 
+  void OnFirstContentfulPaintInPage(
+      const page_load_metrics::mojom::PageLoadTiming& timing) override;
+
   // Whether the current page load is an Offline Preview. Must be called from
   // OnCommit. Virtual for testing.
   virtual bool IsOfflinePreview(content::WebContents* web_contents) const;
diff --git a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc
index d76d934..f5fe4e6 100644
--- a/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/core/ukm_page_load_metrics_observer_unittest.cc
@@ -1809,6 +1809,36 @@
   TestNoLCP(LargestContentState::kNotFound);
 }
 
+TEST_F(UkmPageLoadMetricsObserverTest, FCPHiddenWhileFlushing) {
+  NavigateAndCommit(GURL(kTestUrl1));
+
+  // Simulate hiding the tab.
+  web_contents()->WasHidden();
+
+  page_load_metrics::mojom::PageLoadTiming timing;
+  page_load_metrics::InitPageLoadTimingForTest(&timing);
+  timing.parse_timing->parse_start = base::TimeDelta();
+  timing.navigation_start = base::Time::FromDoubleT(1);
+  timing.paint_timing->first_contentful_paint =
+      tester()->GetDelegateForCommittedLoad().GetFirstBackgroundTime();
+  PopulateRequiredTimingFields(&timing);
+
+  // Simulate FCP at the same time as the hide (but reported after).
+  tester()->SimulateTimingUpdate(timing);
+
+  const auto& ukm_recorder = tester()->test_ukm_recorder();
+  std::map<ukm::SourceId, ukm::mojom::UkmEntryPtr> merged_entries =
+      ukm_recorder.GetMergedEntriesByName(PageLoad::kEntryName);
+  EXPECT_EQ(1ul, merged_entries.size());
+
+  // Check that we reported the FCP UKM.
+  for (const auto& kv : merged_entries) {
+    EXPECT_TRUE(tester()->test_ukm_recorder().EntryHasMetric(
+        kv.second.get(),
+        PageLoad::kPaintTiming_NavigationToFirstContentfulPaintName));
+  }
+}
+
 class TestOfflinePreviewsUkmPageLoadMetricsObserver
     : public UkmPageLoadMetricsObserver {
  public:
diff --git a/chrome/browser/payments/payment_handler_permission_context_unittest.cc b/chrome/browser/payments/payment_handler_permission_context_unittest.cc
index 588c91b9..c472990 100644
--- a/chrome/browser/payments/payment_handler_permission_context_unittest.cc
+++ b/chrome/browser/payments/payment_handler_permission_context_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/payments/payment_handler_permission_context.h"
+#include "components/permissions/contexts/payment_handler_permission_context.h"
 
 #include <string>
 
diff --git a/chrome/browser/permissions/abusive_origin_permission_revocation_request.cc b/chrome/browser/permissions/abusive_origin_permission_revocation_request.cc
index 19ce845..a229fa2e 100644
--- a/chrome/browser/permissions/abusive_origin_permission_revocation_request.cc
+++ b/chrome/browser/permissions/abusive_origin_permission_revocation_request.cc
@@ -16,6 +16,8 @@
 #include "components/permissions/permission_result.h"
 #include "components/permissions/permission_uma_util.h"
 #include "components/permissions/permissions_client.h"
+#include "components/prefs/pref_service.h"
+#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
 #include "components/safe_browsing/core/db/database_manager.h"
 
 namespace {
@@ -111,12 +113,9 @@
   DCHECK(profile_);
   DCHECK(callback_);
 
-  if (!AbusiveOriginNotificationsPermissionRevocationConfig::IsEnabled()) {
-    std::move(callback_).Run(Outcome::PERMISSION_NOT_REVOKED);
-    return;
-  }
-
-  if (IsOriginExemptedFromFutureRevocations(profile_, origin_)) {
+  if (!AbusiveOriginNotificationsPermissionRevocationConfig::IsEnabled() ||
+      !safe_browsing::IsSafeBrowsingEnabled(*profile_->GetPrefs()) ||
+      IsOriginExemptedFromFutureRevocations(profile_, origin_)) {
     std::move(callback_).Run(Outcome::PERMISSION_NOT_REVOKED);
     return;
   }
diff --git a/chrome/browser/permissions/abusive_origin_permission_revocation_request_unittests.cc b/chrome/browser/permissions/abusive_origin_permission_revocation_request_unittests.cc
index 5fa1908..1e910edb 100644
--- a/chrome/browser/permissions/abusive_origin_permission_revocation_request_unittests.cc
+++ b/chrome/browser/permissions/abusive_origin_permission_revocation_request_unittests.cc
@@ -17,6 +17,7 @@
 #include "chrome/test/base/testing_browser_process.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/content_settings/core/browser/host_content_settings_map.h"
+#include "components/prefs/pref_service.h"
 #include "content/public/test/browser_task_environment.h"
 
 class AbusiveOriginPermissionRevocationRequestTestBase : public testing::Test {
@@ -306,6 +307,35 @@
   VerifyNotificationsPermission(origin_to_revoke, CONTENT_SETTING_ASK);
 }
 
+TEST_F(AbusiveOriginPermissionRevocationRequestTest, SafeBrowsingDisabledTest) {
+  const GURL origin_to_revoke = GURL("https://origin.com/");
+
+  SetPermission(origin_to_revoke, CONTENT_SETTING_ALLOW);
+
+  AddToSafeBrowsingBlocklist(origin_to_revoke);
+  AddToPreloadDataBlocklist(origin_to_revoke, SiteReputation::ABUSIVE_CONTENT,
+                            /*has_warning=*/false);
+  QueryAndExpectDecisionForUrl(origin_to_revoke,
+                               Outcome::PERMISSION_REVOKED_DUE_TO_ABUSE);
+
+  GetTestingProfile()->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled,
+                                              false);
+
+  // Permission should not be revoked because Safe Browsing is disabled.
+  const GURL origin_to_not_revoke = GURL("https://origin-not_revoked.com/");
+
+  SetPermission(origin_to_not_revoke, CONTENT_SETTING_ALLOW);
+
+  AddToSafeBrowsingBlocklist(origin_to_not_revoke);
+  AddToPreloadDataBlocklist(origin_to_not_revoke,
+                            SiteReputation::ABUSIVE_CONTENT,
+                            /*has_warning=*/false);
+
+  QueryAndExpectDecisionForUrl(origin_to_not_revoke,
+                               Outcome::PERMISSION_NOT_REVOKED);
+  VerifyNotificationsPermission(origin_to_not_revoke, CONTENT_SETTING_ALLOW);
+}
+
 class AbusiveOriginPermissionRevocationRequestDisabledTest
     : public AbusiveOriginPermissionRevocationRequestTestBase {
  public:
diff --git a/chrome/browser/permissions/permission_manager_factory.cc b/chrome/browser/permissions/permission_manager_factory.cc
index fde2dcb..f09b93a 100644
--- a/chrome/browser/permissions/permission_manager_factory.cc
+++ b/chrome/browser/permissions/permission_manager_factory.cc
@@ -18,7 +18,6 @@
 #include "chrome/browser/media/webrtc/camera_pan_tilt_zoom_permission_context.h"
 #include "chrome/browser/media/webrtc/media_stream_device_permission_context.h"
 #include "chrome/browser/notifications/notification_permission_context.h"
-#include "chrome/browser/payments/payment_handler_permission_context.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search_engines/ui_thread_search_terms_data.h"
@@ -33,6 +32,7 @@
 #include "components/background_sync/background_sync_permission_context.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/permissions/contexts/font_access_permission_context.h"
+#include "components/permissions/contexts/payment_handler_permission_context.h"
 #include "components/permissions/contexts/webxr_permission_context.h"
 #include "components/permissions/permission_manager.h"
 #include "ppapi/buildflags/buildflags.h"
diff --git a/chrome/browser/policy/extension_policy_browsertest.cc b/chrome/browser/policy/extension_policy_browsertest.cc
index e56116b..9aa34d83 100644
--- a/chrome/browser/policy/extension_policy_browsertest.cc
+++ b/chrome/browser/policy/extension_policy_browsertest.cc
@@ -2074,8 +2074,10 @@
 
   void SetUpInProcessBrowserTestFixture() override {
     PolicyTest::SetUpInProcessBrowserTestFixture();
-    EXPECT_CALL(profile1_policy_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(profile1_policy_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(profile1_policy_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::PushProfilePolicyConnectorProviderForTesting(&profile1_policy_);
   }
 
@@ -2158,8 +2160,10 @@
   // The policy for the profile has to be passed via policy_for_profile.
   // This method is called from SetUp and only from there.
   Profile* CreateProfile(MockConfigurationPolicyProvider* policy_for_profile) {
-    EXPECT_CALL(*policy_for_profile, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(*policy_for_profile, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(*policy_for_profile, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     Profile* profile = nullptr;
     policy::PushProfilePolicyConnectorProviderForTesting(policy_for_profile);
 
diff --git a/chrome/browser/policy/messaging_layer/storage/resources/disk_resource_impl.cc b/chrome/browser/policy/messaging_layer/storage/resources/disk_resource_impl.cc
new file mode 100644
index 0000000..482433f
--- /dev/null
+++ b/chrome/browser/policy/messaging_layer/storage/resources/disk_resource_impl.cc
@@ -0,0 +1,54 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/policy/messaging_layer/storage/resources/disk_resource_impl.h"
+
+#include <atomic>
+#include <cstdint>
+
+#include "base/check_op.h"
+#include "base/no_destructor.h"
+
+namespace reporting {
+
+// TODO(b/159361496): Set total disk allowance based on the platform
+// (or policy?).
+DiskResourceImpl::DiskResourceImpl()
+    : total_(256u * 1024LLu * 1024LLu),  // 256 MiB
+      used_(0) {}
+
+DiskResourceImpl::~DiskResourceImpl() = default;
+
+bool DiskResourceImpl::Reserve(uint64_t size) {
+  uint64_t old_used = used_.fetch_add(size);
+  if (old_used + size > total_) {
+    used_.fetch_sub(size);
+    return false;
+  }
+  return true;
+}
+
+void DiskResourceImpl::Discard(uint64_t size) {
+  DCHECK_LE(size, used_.load());
+  used_.fetch_sub(size);
+}
+
+uint64_t DiskResourceImpl::GetTotal() {
+  return total_;
+}
+
+uint64_t DiskResourceImpl::GetUsed() {
+  return used_.load();
+}
+
+void DiskResourceImpl::Test_SetTotal(uint64_t test_total) {
+  total_ = test_total;
+}
+
+ResourceInterface* GetDiskResource() {
+  static base::NoDestructor<DiskResourceImpl> disk;
+  return disk.get();
+}
+
+}  // namespace reporting
diff --git a/chrome/browser/policy/messaging_layer/storage/resources/disk_resource_impl.h b/chrome/browser/policy/messaging_layer/storage/resources/disk_resource_impl.h
new file mode 100644
index 0000000..6e0e4ea
--- /dev/null
+++ b/chrome/browser/policy/messaging_layer/storage/resources/disk_resource_impl.h
@@ -0,0 +1,37 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_POLICY_MESSAGING_LAYER_STORAGE_RESOURCES_DISK_RESOURCE_IMPL_H_
+#define CHROME_BROWSER_POLICY_MESSAGING_LAYER_STORAGE_RESOURCES_DISK_RESOURCE_IMPL_H_
+
+#include <atomic>
+#include <cstdint>
+
+#include "chrome/browser/policy/messaging_layer/storage/resources/resource_interface.h"
+
+namespace reporting {
+
+// Interface to resources management by Storage module.
+// Must be implemented by the caller base on the platform limitations.
+// All APIs are non-blocking.
+class DiskResourceImpl : public ResourceInterface {
+ public:
+  DiskResourceImpl();
+  ~DiskResourceImpl() override;
+
+  // Implementation of ResourceInterface methods.
+  bool Reserve(uint64_t size) override;
+  void Discard(uint64_t size) override;
+  uint64_t GetTotal() override;
+  uint64_t GetUsed() override;
+  void Test_SetTotal(uint64_t test_total) override;
+
+ private:
+  uint64_t total_;
+  std::atomic<uint64_t> used_;
+};
+
+}  // namespace reporting
+
+#endif  // CHROME_BROWSER_POLICY_MESSAGING_LAYER_STORAGE_RESOURCES_DISK_RESOURCE_IMPL_H_
diff --git a/chrome/browser/policy/messaging_layer/storage/resources/memory_resource_impl.cc b/chrome/browser/policy/messaging_layer/storage/resources/memory_resource_impl.cc
new file mode 100644
index 0000000..41c1e13
--- /dev/null
+++ b/chrome/browser/policy/messaging_layer/storage/resources/memory_resource_impl.cc
@@ -0,0 +1,54 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/policy/messaging_layer/storage/resources/memory_resource_impl.h"
+
+#include <atomic>
+#include <cstdint>
+
+#include "base/check_op.h"
+#include "base/no_destructor.h"
+
+namespace reporting {
+
+// TODO(b/159361496): Set total memory allowance based on the platform
+// (or policy?).
+MemoryResourceImpl::MemoryResourceImpl()
+    : total_(16u * 1024LLu * 1024LLu),  // 16 MiB
+      used_(0) {}
+
+MemoryResourceImpl::~MemoryResourceImpl() = default;
+
+bool MemoryResourceImpl::Reserve(uint64_t size) {
+  uint64_t old_used = used_.fetch_add(size);
+  if (old_used + size > total_) {
+    used_.fetch_sub(size);
+    return false;
+  }
+  return true;
+}
+
+void MemoryResourceImpl::Discard(uint64_t size) {
+  DCHECK_LE(size, used_.load());
+  used_.fetch_sub(size);
+}
+
+uint64_t MemoryResourceImpl::GetTotal() {
+  return total_;
+}
+
+uint64_t MemoryResourceImpl::GetUsed() {
+  return used_.load();
+}
+
+void MemoryResourceImpl::Test_SetTotal(uint64_t test_total) {
+  total_ = test_total;
+}
+
+ResourceInterface* GetMemoryResource() {
+  static base::NoDestructor<MemoryResourceImpl> memory;
+  return memory.get();
+}
+
+}  // namespace reporting
diff --git a/chrome/browser/policy/messaging_layer/storage/resources/memory_resource_impl.h b/chrome/browser/policy/messaging_layer/storage/resources/memory_resource_impl.h
new file mode 100644
index 0000000..db927f0
--- /dev/null
+++ b/chrome/browser/policy/messaging_layer/storage/resources/memory_resource_impl.h
@@ -0,0 +1,37 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_POLICY_MESSAGING_LAYER_STORAGE_RESOURCES_MEMORY_RESOURCE_IMPL_H_
+#define CHROME_BROWSER_POLICY_MESSAGING_LAYER_STORAGE_RESOURCES_MEMORY_RESOURCE_IMPL_H_
+
+#include <atomic>
+#include <cstdint>
+
+#include "chrome/browser/policy/messaging_layer/storage/resources/resource_interface.h"
+
+namespace reporting {
+
+// Interface to resources management by Storage module.
+// Must be implemented by the caller base on the platform limitations.
+// All APIs are non-blocking.
+class MemoryResourceImpl : public ResourceInterface {
+ public:
+  MemoryResourceImpl();
+  ~MemoryResourceImpl() override;
+
+  // Implementation of ResourceInterface methods.
+  bool Reserve(uint64_t size) override;
+  void Discard(uint64_t size) override;
+  uint64_t GetTotal() override;
+  uint64_t GetUsed() override;
+  void Test_SetTotal(uint64_t test_total) override;
+
+ private:
+  uint64_t total_;
+  std::atomic<uint64_t> used_;
+};
+
+}  // namespace reporting
+
+#endif  // CHROME_BROWSER_POLICY_MESSAGING_LAYER_STORAGE_RESOURCES_MEMORY_RESOURCE_IMPL_H_
diff --git a/chrome/browser/policy/messaging_layer/storage/resources/resource_interface.cc b/chrome/browser/policy/messaging_layer/storage/resources/resource_interface.cc
new file mode 100644
index 0000000..54acd04f8
--- /dev/null
+++ b/chrome/browser/policy/messaging_layer/storage/resources/resource_interface.cc
@@ -0,0 +1,34 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <cstdint>
+
+#include "chrome/browser/policy/messaging_layer/storage/resources/resource_interface.h"
+
+namespace reporting {
+
+ScopedReservation::ScopedReservation(uint64_t size,
+                                     ResourceInterface* resource_interface)
+    : resource_interface_(resource_interface) {
+  if (!resource_interface->Reserve(size)) {
+    return;
+  }
+  size_ = size;
+}
+
+ScopedReservation::ScopedReservation(ScopedReservation&& other)
+    : resource_interface_(other.resource_interface_),
+      size_(std::move(other.size_)) {}
+
+bool ScopedReservation::reserved() const {
+  return size_.has_value();
+}
+
+ScopedReservation::~ScopedReservation() {
+  if (reserved()) {
+    resource_interface_->Reserve(size_.value());
+  }
+}
+
+}  // namespace reporting
diff --git a/chrome/browser/policy/messaging_layer/storage/resources/resource_interface.h b/chrome/browser/policy/messaging_layer/storage/resources/resource_interface.h
new file mode 100644
index 0000000..3e1840b
--- /dev/null
+++ b/chrome/browser/policy/messaging_layer/storage/resources/resource_interface.h
@@ -0,0 +1,78 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_POLICY_MESSAGING_LAYER_STORAGE_RESOURCES_RESOURCE_INTERFACE_H_
+#define CHROME_BROWSER_POLICY_MESSAGING_LAYER_STORAGE_RESOURCES_RESOURCE_INTERFACE_H_
+
+#include <cstdint>
+
+#include "base/optional.h"
+
+namespace reporting {
+
+// Interface to resources management by Storage module.
+// Must be implemented by the caller base on the platform limitations.
+// All APIs are non-blocking.
+class ResourceInterface {
+ public:
+  virtual ~ResourceInterface() = default;
+
+  // Needs to be called before attempting to allocate specified size.
+  // Returns true if requested amount can be allocated.
+  // After that the caller can actually allocate it or must call
+  // |Discard| if decided not to allocate.
+  virtual bool Reserve(uint64_t size) = 0;
+
+  // Reverts reservation.
+  // Must be called after the specified amount is released.
+  virtual void Discard(uint64_t size) = 0;
+
+  // Returns total amount.
+  virtual uint64_t GetTotal() = 0;
+
+  // Returns current used amount.
+  virtual uint64_t GetUsed() = 0;
+
+  // Test only: Sets non-default usage limit.
+  virtual void Test_SetTotal(uint64_t test_total) = 0;
+
+ protected:
+  ResourceInterface() = default;
+};
+
+// Moveable RAII class used for scoped Reserve-Discard.
+//
+// Usage:
+//  {
+//    ScopedReservation reservation(1024u, GetMemoryResource());
+//    if (!reservation.reserved()) {
+//      // Allocation failed.
+//      return;
+//    }
+//    // Allocation succeeded.
+//    ...
+//  }   // Automatically discarded.
+//
+// Can be handed over to another owner.
+class ScopedReservation {
+ public:
+  ScopedReservation(uint64_t size, ResourceInterface* resource_interface);
+  ScopedReservation(ScopedReservation&& other);
+  ScopedReservation(const ScopedReservation& other) = delete;
+  ScopedReservation& operator=(const ScopedReservation& other) = delete;
+  ~ScopedReservation();
+
+  bool reserved() const;
+
+ private:
+  ResourceInterface* const resource_interface_;
+  base::Optional<uint64_t> size_;
+};
+
+ResourceInterface* GetMemoryResource();
+ResourceInterface* GetDiskResource();
+
+}  // namespace reporting
+
+#endif  // CHROME_BROWSER_POLICY_MESSAGING_LAYER_STORAGE_RESOURCES_RESOURCE_INTERFACE_H_
diff --git a/chrome/browser/policy/messaging_layer/storage/storage_queue.cc b/chrome/browser/policy/messaging_layer/storage/storage_queue.cc
index cd4af1fa..f4a8ae44 100644
--- a/chrome/browser/policy/messaging_layer/storage/storage_queue.cc
+++ b/chrome/browser/policy/messaging_layer/storage/storage_queue.cc
@@ -33,6 +33,7 @@
 #include "base/task/post_task.h"
 #include "base/task_runner.h"
 #include "chrome/browser/policy/messaging_layer/encryption/encryption_module.h"
+#include "chrome/browser/policy/messaging_layer/storage/resources/resource_interface.h"
 #include "chrome/browser/policy/messaging_layer/storage/storage_configuration.h"
 #include "chrome/browser/policy/messaging_layer/util/status.h"
 #include "chrome/browser/policy/messaging_layer/util/status_macros.h"
@@ -54,11 +55,6 @@
 // make it harder to differ between kinds of records).
 constexpr size_t FRAME_SIZE = 16u;
 
-// Size of the buffer to read data to. Must be multiple of FRAME_SIZE
-constexpr size_t MAX_BUFFER_SIZE = 1024u * 1024u;  // 1 MiB
-static_assert(MAX_BUFFER_SIZE % FRAME_SIZE == 0u,
-              "Buffer size not multiple of frame size");
-
 // Helper functions for FRAME_SIZE alignment support.
 size_t RoundUpToFrameSize(size_t size) {
   return (size + FRAME_SIZE - 1) / FRAME_SIZE * FRAME_SIZE;
@@ -277,6 +273,11 @@
                    << ", status=" << file_seq_number_result.status();
       continue;
     }
+    if (!GetDiskResource()->Reserve(dir_enum.GetInfo().GetSize())) {
+      LOG(WARNING) << "Disk space exceeded adding file "
+                   << full_name.MaybeAsASCII();
+      continue;
+    }
     used_files_set->emplace(full_name);  // File is in use.
     if (!first_seq_number.has_value() ||
         first_seq_number.value() > file_seq_number_result.ValueOrDie()) {
@@ -310,10 +311,14 @@
     return Status(error::DATA_LOSS, base::StrCat({"Error opening file: '",
                                                   last_file->name(), "'"}));
   }
+  const size_t max_buffer_size =
+      RoundUpToFrameSize(options_.max_record_size()) +
+      RoundUpToFrameSize(sizeof(RecordHeader));
   uint32_t pos = 0;
   for (;;) {
     // Read the header
-    auto read_result = last_file->Read(pos, sizeof(RecordHeader));
+    auto read_result =
+        last_file->Read(pos, sizeof(RecordHeader), max_buffer_size);
     if (read_result.status().error_code() == error::OUT_OF_RANGE) {
       // End of file detected.
       break;
@@ -335,7 +340,7 @@
         *reinterpret_cast<const RecordHeader*>(read_result.ValueOrDie().data());
     // Read the data (rounded to frame size).
     const size_t data_size = RoundUpToFrameSize(header.record_size);
-    read_result = last_file->Read(pos, data_size);
+    read_result = last_file->Read(pos, data_size, max_buffer_size);
     if (!read_result.ok()) {
       // Error detected.
       LOG(ERROR) << "Error reading file " << last_file->name()
@@ -424,6 +429,9 @@
   DCHECK_CALLED_ON_VALID_SEQUENCE(storage_queue_sequence_checker_);
   // Prepare header.
   RecordHeader header;
+  // Pad to the whole frame, if necessary.
+  const size_t pad_size =
+      GetPaddingToNextFrameSize(sizeof(header) + data.size());
   // Assign sequence number.
   header.record_seq_number = next_seq_number_++;
   header.record_hash = base::PersistentHash(data.data(), data.size());
@@ -435,6 +443,12 @@
                   base::StrCat({"Cannot open file=", file->name(),
                                 " status=", open_status.ToString()}));
   }
+  if (!GetDiskResource()->Reserve(pad_size)) {
+    return Status(
+        error::RESOURCE_EXHAUSTED,
+        base::StrCat({"Not enough disk space available to write into file=",
+                      file->name()}));
+  }
   auto write_status = file->Append(base::StringPiece(
       reinterpret_cast<const char*>(&header), sizeof(header)));
   if (!write_status.ok()) {
@@ -450,9 +464,6 @@
           base::StrCat({"Cannot write file=", file->name(),
                         " status=", write_status.status().ToString()}));
     }
-    // Pad to the whole frame, if necessary.
-    const size_t pad_size =
-        GetPaddingToNextFrameSize(sizeof(header) + data.size());
     if (pad_size != FRAME_SIZE) {
       // Fill in with random bytes.
       char junk_bytes[FRAME_SIZE];
@@ -478,6 +489,15 @@
           .AddExtensionASCII(base::NumberToString(next_seq_number_)),
       /*size=*/0);
   RETURN_IF_ERROR(meta_file->Open(/*read_only=*/false));
+  // Account for the metadata file size.
+  DCHECK(last_record_digest_.has_value());  // Must be set by now.
+  if (!GetDiskResource()->Reserve(sizeof(generation_id_) +
+                                  last_record_digest_.value().size())) {
+    return Status(
+        error::RESOURCE_EXHAUSTED,
+        base::StrCat({"Not enough disk space available to write into file=",
+                      meta_file->name()}));
+  }
   // Write generation id.
   auto append_result = meta_file->Append(base::StringPiece(
       reinterpret_cast<const char*>(&generation_id_), sizeof(generation_id_)));
@@ -488,7 +508,6 @@
                       " status=", append_result.status().ToString()}));
   }
   // Write last record digest.
-  DCHECK(last_record_digest_.has_value());  // Must be set by now.
   append_result = meta_file->Append(last_record_digest_.value());
   if (!append_result.ok()) {
     return Status(
@@ -550,7 +569,10 @@
                                                     /*size=*/it->second.second);
   RETURN_IF_ERROR(meta_file->Open(/*read_only=*/true));
   // Read generation id.
-  auto read_result = meta_file->Read(/*pos=*/0, sizeof(generation_id_));
+  constexpr size_t max_buffer_size =
+      sizeof(generation_id_) + crypto::kSHA256Length;
+  auto read_result =
+      meta_file->Read(/*pos=*/0, sizeof(generation_id_), max_buffer_size);
   if (!read_result.ok() ||
       read_result.ValueOrDie().size() != sizeof(generation_id_)) {
     return Status(error::DATA_LOSS,
@@ -560,8 +582,8 @@
   const uint64_t generation_id =
       *reinterpret_cast<const uint64_t*>(read_result.ValueOrDie().data());
   // Read last record digest.
-  read_result =
-      meta_file->Read(/*pos=*/sizeof(generation_id_), crypto::kSHA256Length);
+  read_result = meta_file->Read(/*pos=*/sizeof(generation_id_),
+                                crypto::kSHA256Length, max_buffer_size);
   if (!read_result.ok() ||
       read_result.ValueOrDie().size() != crypto::kSHA256Length) {
     return Status(error::DATA_LOSS,
@@ -572,12 +594,18 @@
   generation_id_ = generation_id;
   last_record_digest_ = std::string(read_result.ValueOrDie());
   // Store used metadata file.
+  if (!GetDiskResource()->Reserve(meta_file->size())) {
+    LOG(WARNING) << "Disk space exceeded adding file " << meta_file->name();
+    return Status::StatusOK();  // Ignore lack of space.
+  }
   used_files_set->emplace(meta_file_path);
   return Status::StatusOK();
 }
 
 void StorageQueue::DeleteUnusedFiles(
     const base::flat_set<base::FilePath>& used_files_setused_files_set) {
+  // Note, that these files were not reserved against disk allowance and do not
+  // need to be discarded.
   base::FileEnumerator dir_enum(options_.directory(),
                                 /*recursive=*/true,
                                 base::FileEnumerator::FILES);
@@ -586,12 +614,12 @@
     if (used_files_setused_files_set.count(full_name) > 0) {
       continue;  // File is used, keep it.
     }
-    DeleteFile(full_name);
+    base::DeleteFile(full_name);
   }
 }
 
 void StorageQueue::DeleteOutdatedMetadata(uint64_t seq_number_to_keep) {
-  std::vector<base::FilePath> files_to_delete;
+  std::vector<std::pair<base::FilePath, uint64_t>> files_to_delete;
   base::FileEnumerator dir_enum(
       options_.directory(),
       /*recursive=*/false, base::FileEnumerator::FILES,
@@ -611,10 +639,13 @@
     if (seq_number >= seq_number_to_keep) {
       continue;
     }
-    files_to_delete.emplace_back(full_name);
+    files_to_delete.emplace_back(
+        std::make_pair(full_name, dir_enum.GetInfo().GetSize()));
   }
-  for (const auto& file_path : files_to_delete) {
-    base::DeleteFile(file_path);  // Ignore any errors.
+  for (const auto& file_to_delete : files_to_delete) {
+    if (base::DeleteFile(file_to_delete.first)) {
+      GetDiskResource()->Discard(file_to_delete.second);
+    }
   }
 }
 
@@ -861,8 +892,11 @@
 
     // Read from the current file at the current offset.
     RETURN_IF_ERROR(current_file_->second->Open(/*read_only=*/true));
-    auto read_result =
-        current_file_->second->Read(current_pos_, sizeof(RecordHeader));
+    const size_t max_buffer_size =
+        RoundUpToFrameSize(storage_queue->options_.max_record_size()) +
+        RoundUpToFrameSize(sizeof(RecordHeader));
+    auto read_result = current_file_->second->Read(
+        current_pos_, sizeof(RecordHeader), max_buffer_size);
     RETURN_IF_ERROR(read_result.status());
     auto header_data = read_result.ValueOrDie();
     if (header_data.empty()) {
@@ -891,7 +925,8 @@
     const size_t data_size = RoundUpToFrameSize(header.record_size);
     // From this point on, header in memory is no longer used and can be
     // overwritten when reading rest of the data.
-    read_result = current_file_->second->Read(current_pos_, data_size);
+    read_result =
+        current_file_->second->Read(current_pos_, data_size, max_buffer_size);
     RETURN_IF_ERROR(read_result.status());
     current_pos_ += read_result.ValueOrDie().size();
     if (read_result.ValueOrDie().size() != data_size) {
@@ -1022,13 +1057,23 @@
 
   void SerializeAndEncryptWrappedRecord(WrappedRecord wrapped_record) {
     // Serialize wrapped record into a string.
+    ScopedReservation scoped_reservation(wrapped_record.ByteSizeLong(),
+                                         GetMemoryResource());
+    if (!scoped_reservation.reserved()) {
+      Schedule(&ReadContext::Response, base::Unretained(this),
+               Status(error::RESOURCE_EXHAUSTED,
+                      "Not enough memory for the write buffer"));
+      return;
+    }
+
     std::string buffer;
     if (!wrapped_record.SerializeToString(&buffer)) {
       Schedule(&ReadContext::Response, base::Unretained(this),
                Status(error::DATA_LOSS, "Cannot serialize record"));
       return;
     }
-    wrapped_record.Clear();  // Release wrapped record memory.
+    // Release wrapped record memory, so scoped reservation may act.
+    wrapped_record.Clear();
 
     // Encrypt the result.
     storage_queue_->encryption_module_->EncryptRecord(
@@ -1046,14 +1091,23 @@
     }
 
     // Serialize encrypted record.
+    ScopedReservation scoped_reservation(
+        encrypted_record_result.ValueOrDie().ByteSizeLong(),
+        GetMemoryResource());
+    if (!scoped_reservation.reserved()) {
+      Schedule(&ReadContext::Response, base::Unretained(this),
+               Status(error::RESOURCE_EXHAUSTED,
+                      "Not enough memory for the write buffer"));
+      return;
+    }
     std::string buffer;
     if (!encrypted_record_result.ValueOrDie().SerializeToString(&buffer)) {
       Schedule(&ReadContext::Response, base::Unretained(this),
                Status(error::DATA_LOSS, "Cannot serialize EncryptedRecord"));
       return;
     }
-    encrypted_record_result.ValueOrDie()
-        .Clear();  // Release encrypted record memory.
+    // Release encrypted record memory, so scoped reservation may act.
+    encrypted_record_result.ValueOrDie().Clear();
 
     // Write into storage on sequntial task runner.
     Schedule(&WriteContext::WriteRecord, base::Unretained(this), buffer);
@@ -1223,6 +1277,7 @@
     // Delete it.
     files_.begin()->second->Close();
     if (files_.begin()->second->Delete().ok()) {
+      GetDiskResource()->Discard(files_.begin()->second->size());
       files_.erase(files_.begin());
     }
   }
@@ -1293,6 +1348,7 @@
   handle_.reset();
   is_readonly_ = base::nullopt;
   buffer_.reset();
+  GetMemoryResource()->Discard(buffer_size_);
 }
 
 Status StorageQueue::SingleFile::Delete() {
@@ -1305,25 +1361,31 @@
   return Status::StatusOK();
 }
 
-StatusOr<base::StringPiece> StorageQueue::SingleFile::Read(uint32_t pos,
-                                                           uint32_t size) {
+StatusOr<base::StringPiece> StorageQueue::SingleFile::Read(
+    uint32_t pos,
+    uint32_t size,
+    size_t max_buffer_size) {
   if (!handle_) {
     return Status(error::UNAVAILABLE, base::StrCat({"File not open ", name()}));
   }
-  if (size > MAX_BUFFER_SIZE) {
+  if (size > max_buffer_size) {
     return Status(error::RESOURCE_EXHAUSTED, "Too much data to read");
   }
   if (size_ == 0) {
     // Empty file, return EOF right away.
     return Status(error::OUT_OF_RANGE, "End of file");
   }
-  const size_t buffer_size =
-      std::min(MAX_BUFFER_SIZE, RoundUpToFrameSize(size_));
+  buffer_size_ = std::min(max_buffer_size, RoundUpToFrameSize(size_));
   // If no buffer yet, allocate.
   // TODO(b/157943192): Add buffer management - consider adding an UMA for
   // tracking the average + peak memory the Storage module is consuming.
   if (!buffer_) {
-    buffer_ = std::make_unique<char[]>(buffer_size);
+    // Register with resource management.
+    if (!GetMemoryResource()->Reserve(buffer_size_)) {
+      return Status(error::RESOURCE_EXHAUSTED,
+                    "Not enough memory for the read buffer");
+    }
+    buffer_ = std::make_unique<char[]>(buffer_size_);
     data_start_ = data_end_ = 0;
     file_position_ = 0;
   }
@@ -1334,7 +1396,7 @@
   }
   // If expected data size does not fit into the buffer, move what's left to the
   // start.
-  if (data_start_ + size > buffer_size) {
+  if (data_start_ + size > buffer_size_) {
     DCHECK_GT(data_start_, 0u);  // Cannot happen if 0.
     memmove(buffer_.get(), buffer_.get() + data_start_,
             data_end_ - data_start_);
@@ -1346,7 +1408,7 @@
     // Read as much as possible.
     const int32_t result =
         handle_->Read(pos, reinterpret_cast<char*>(buffer_.get() + data_end_),
-                      buffer_size - data_end_);
+                      buffer_size_ - data_end_);
     if (result < 0) {
       return Status(
           error::DATA_LOSS,
@@ -1359,7 +1421,7 @@
     }
     pos += result;
     data_end_ += result;
-    DCHECK_LE(data_end_, buffer_size);
+    DCHECK_LE(data_end_, buffer_size_);
     actual_size += result;
   }
   if (actual_size > size) {
diff --git a/chrome/browser/policy/messaging_layer/storage/storage_queue.h b/chrome/browser/policy/messaging_layer/storage/storage_queue.h
index 4658aeb2c..88e34bb 100644
--- a/chrome/browser/policy/messaging_layer/storage/storage_queue.h
+++ b/chrome/browser/policy/messaging_layer/storage/storage_queue.h
@@ -156,7 +156,12 @@
     // Attempts to read |size| bytes from position |pos| and returns
     // reference to the data that were actually read (no more than |size|).
     // End of file is indicated by empty data.
-    StatusOr<base::StringPiece> Read(uint32_t pos, uint32_t size);
+    // |max_buffer_size| specifies the largest allowed buffer, which
+    // must accommodate the largest possible data block plus header and
+    // overhead.
+    StatusOr<base::StringPiece> Read(uint32_t pos,
+                                     uint32_t size,
+                                     size_t max_buffer_size);
 
     // Appends data to the file.
     StatusOr<uint32_t> Append(base::StringPiece data);
@@ -192,6 +197,7 @@
     size_t data_start_ = 0;
     size_t data_end_ = 0;
     uint64_t file_position_ = 0;
+    size_t buffer_size_ = 0;
     std::unique_ptr<char[]> buffer_;
   };
 
diff --git a/chrome/browser/policy/messaging_layer/storage/storage_queue_unittest.cc b/chrome/browser/policy/messaging_layer/storage/storage_queue_unittest.cc
index 384ed60..d9817e03 100644
--- a/chrome/browser/policy/messaging_layer/storage/storage_queue_unittest.cc
+++ b/chrome/browser/policy/messaging_layer/storage/storage_queue_unittest.cc
@@ -981,7 +981,8 @@
 // 1) Options object with a bad path.
 // 2) Have bad prefix files in the directory.
 // 3) Attempt to create file with duplicated file extension.
-// 4) Other negative tests.
+// 4) Disk and memory limit exceeded.
+// 5) Other negative tests.
 
 }  // namespace
 }  // namespace reporting
diff --git a/chrome/browser/policy/policy_network_browsertest.cc b/chrome/browser/policy/policy_network_browsertest.cc
index 9ad8804e..612866b 100644
--- a/chrome/browser/policy/policy_network_browsertest.cc
+++ b/chrome/browser/policy/policy_network_browsertest.cc
@@ -134,8 +134,10 @@
   void SetUpInProcessBrowserTestFixture() override {
     QuicTestBase::SetUpInProcessBrowserTestFixture();
     base::CommandLine::ForCurrentProcess()->AppendSwitch(switches::kEnableQuic);
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
 
     BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
     PolicyMap values;
@@ -334,8 +336,10 @@
   void SetUpInProcessBrowserTestFixture() override {
     QuicTestBase::SetUpInProcessBrowserTestFixture();
     // Set the overriden policy provider for the first Profile (profile_1_).
-    EXPECT_CALL(policy_for_profile_1_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_for_profile_1_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_for_profile_1_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::PushProfilePolicyConnectorProviderForTesting(
         &policy_for_profile_1_);
   }
@@ -351,8 +355,10 @@
     EXPECT_FALSE(profile_2_);
 
     // Prepare policy provider for second profile.
-    EXPECT_CALL(policy_for_profile_2_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_for_profile_2_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_for_profile_2_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::PushProfilePolicyConnectorProviderForTesting(
         &policy_for_profile_2_);
 
diff --git a/chrome/browser/policy/policy_startup_browsertest.cc b/chrome/browser/policy/policy_startup_browsertest.cc
index c572e0d6..f373d94d 100644
--- a/chrome/browser/policy/policy_startup_browsertest.cc
+++ b/chrome/browser/policy/policy_startup_browsertest.cc
@@ -26,8 +26,10 @@
   void SetUpInProcessBrowserTestFixture() override {
     base::CommandLine::ForCurrentProcess()->AppendSwitch(
         switches::kMakeDefaultBrowser);
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-               .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
 
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
 
@@ -39,8 +41,8 @@
   }
 
  private:
-   policy::MockConfigurationPolicyProvider provider_;
-   DISALLOW_COPY_AND_ASSIGN(PolicyMakeDefaultBrowserTest);
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
+  DISALLOW_COPY_AND_ASSIGN(PolicyMakeDefaultBrowserTest);
 };
 
 IN_PROC_BROWSER_TEST_F(PolicyMakeDefaultBrowserTest, MakeDefaultDisabled) {
diff --git a/chrome/browser/policy/policy_test_utils.cc b/chrome/browser/policy/policy_test_utils.cc
index 1209f36..ee91724 100644
--- a/chrome/browser/policy/policy_test_utils.cc
+++ b/chrome/browser/policy/policy_test_utils.cc
@@ -102,6 +102,8 @@
   base::CommandLine::ForCurrentProcess()->AppendSwitch("noerrdialogs");
   EXPECT_CALL(provider_, IsInitializationComplete(_))
       .WillRepeatedly(Return(true));
+  EXPECT_CALL(provider_, IsFirstPolicyLoadComplete(_))
+      .WillRepeatedly(Return(true));
   BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
 }
 
diff --git a/chrome/browser/policy/profile_policy_connector_unittest.cc b/chrome/browser/policy/profile_policy_connector_unittest.cc
index d3a1f33a..14b9160 100644
--- a/chrome/browser/policy/profile_policy_connector_unittest.cc
+++ b/chrome/browser/policy/profile_policy_connector_unittest.cc
@@ -198,6 +198,8 @@
 
   EXPECT_FALSE(connector.policy_service()->IsInitializationComplete(
       POLICY_DOMAIN_CHROME));
+  EXPECT_FALSE(connector.policy_service()->IsFirstPolicyLoadComplete(
+      POLICY_DOMAIN_CHROME));
 
   PolicyServiceInitializedWaiter(connector.policy_service(),
                                  POLICY_DOMAIN_CHROME)
@@ -225,6 +227,8 @@
   MockConfigurationPolicyProvider mock_platform_provider;
   EXPECT_CALL(mock_platform_provider, IsInitializationComplete(_))
       .WillRepeatedly(Return(true));
+  EXPECT_CALL(mock_platform_provider, IsFirstPolicyLoadComplete(_))
+      .WillRepeatedly(Return(true));
 
   ProfilePolicyConnector connector;
   connector.SetPlatformPolicyProviderForTesting(&mock_platform_provider);
diff --git a/chrome/browser/policy/site_isolation_policy_browsertest.cc b/chrome/browser/policy/site_isolation_policy_browsertest.cc
index d9b0f14..c5c9269 100644
--- a/chrome/browser/policy/site_isolation_policy_browsertest.cc
+++ b/chrome/browser/policy/site_isolation_policy_browsertest.cc
@@ -60,7 +60,7 @@
     }
   }
 
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(SiteIsolationPolicyBrowserTest);
@@ -77,8 +77,10 @@
     // to the renderer via a command-line. Setting the policy in the test
     // itself or in SetUpOnMainThread works for update-able policies, but
     // is too late for this one.
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
 
     policy::PolicyMap values;
@@ -113,8 +115,10 @@
     // to the renderer via a command-line. Setting the policy in the test
     // itself or in SetUpOnMainThread works for update-able policies, but
     // is too late for this one.
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
 
     policy::PolicyMap values;
diff --git a/chrome/browser/prefetch/no_state_prefetch/prerender_unittest.cc b/chrome/browser/prefetch/no_state_prefetch/prerender_unittest.cc
index bdc1ec8..34a93e2 100644
--- a/chrome/browser/prefetch/no_state_prefetch/prerender_unittest.cc
+++ b/chrome/browser/prefetch/no_state_prefetch/prerender_unittest.cc
@@ -46,6 +46,7 @@
 #include "components/no_state_prefetch/common/prerender_util.h"
 #include "components/prefs/pref_service.h"
 #include "content/public/browser/render_view_host.h"
+#include "content/public/common/content_switches.h"
 #include "content/public/test/browser_task_environment.h"
 #include "content/public/test/test_utils.h"
 #include "mojo/public/cpp/bindings/unique_receiver_set.h"
@@ -1654,4 +1655,14 @@
   EXPECT_EQ(12, prerender_contents->network_bytes());
 }
 
+TEST_F(PrerenderTest, NoPrerenderInSingleProcess) {
+  GURL url("http://www.google.com/");
+  auto* command_line = base::CommandLine::ForCurrentProcess();
+  ASSERT_TRUE(command_line != nullptr);
+  command_line->AppendSwitch(switches::kSingleProcess);
+  EXPECT_FALSE(AddSimplePrerender(url));
+  histogram_tester().ExpectUniqueSample("Prerender.FinalStatus",
+                                        FINAL_STATUS_SINGLE_PROCESS, 1);
+}
+
 }  // namespace prerender
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 24bd443c..9be4d458 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -101,6 +101,7 @@
 #include "components/dom_distiller/core/distilled_page_prefs.h"
 #include "components/dom_distiller/core/dom_distiller_features.h"
 #include "components/dom_distiller/core/pref_names.h"
+#include "components/federated_learning/floc_id.h"
 #include "components/flags_ui/pref_service_flags_storage.h"
 #include "components/image_fetcher/core/cache/image_cache.h"
 #include "components/invalidation/impl/fcm_invalidation_service.h"
@@ -585,6 +586,7 @@
   ChromeTracingDelegate::RegisterPrefs(registry);
   component_updater::RegisterPrefs(registry);
   ExternalProtocolHandler::RegisterPrefs(registry);
+  federated_learning::FlocId::RegisterPrefs(registry);
   flags_ui::PrefServiceFlagsStorage::RegisterPrefs(registry);
   GpuModeManager::RegisterPrefs(registry);
   signin::IdentityManager::RegisterLocalStatePrefs(registry);
diff --git a/chrome/browser/prefs/proxy_policy_unittest.cc b/chrome/browser/prefs/proxy_policy_unittest.cc
index a2509817..c13af2d 100644
--- a/chrome/browser/prefs/proxy_policy_unittest.cc
+++ b/chrome/browser/prefs/proxy_policy_unittest.cc
@@ -95,8 +95,9 @@
   ProxyPolicyTest() : command_line_(base::CommandLine::NO_PROGRAM) {}
 
   void SetUp() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
 
     PolicyServiceImpl::Providers providers;
     providers.push_back(&provider_);
diff --git a/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer.cc b/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer.cc
index a1977bc..6b36d662 100644
--- a/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer.cc
+++ b/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer.cc
@@ -112,8 +112,7 @@
   std::string url = url_.spec();
   if (!selector.empty())
     url += kTextFragmentUrlClassifier + selector;
-  scw.WriteText(base::UTF8ToUTF16("\"") + selected_text_ +
-                base::UTF8ToUTF16("\"\n" + url));
+  scw.WriteText(base::UTF8ToUTF16(url));
 }
 
 void CopyLinkToTextMenuObserver::OverrideGeneratedSelectorForTesting(
diff --git a/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer_interactive_uitest.cc b/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer_interactive_uitest.cc
index 3d70792..32775eff 100644
--- a/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer_interactive_uitest.cc
+++ b/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer_interactive_uitest.cc
@@ -91,9 +91,7 @@
   ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
   base::string16 text;
   clipboard->ReadText(ui::ClipboardBuffer::kCopyPaste, nullptr, &text);
-  EXPECT_EQ(base::UTF8ToUTF16(
-                "\"hello world\"\nhttp://foo.com/#:~:text=hello%20world"),
-            text);
+  EXPECT_EQ(base::UTF8ToUTF16("http://foo.com/#:~:text=hello%20world"), text);
 }
 
 IN_PROC_BROWSER_TEST_F(CopyLinkToTextMenuObserverTest,
@@ -109,7 +107,7 @@
   ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
   base::string16 text;
   clipboard->ReadText(ui::ClipboardBuffer::kCopyPaste, nullptr, &text);
-  EXPECT_EQ(base::UTF8ToUTF16("\"hello world\"\nhttp://foo.com/"), text);
+  EXPECT_EQ(base::UTF8ToUTF16("http://foo.com/"), text);
 }
 
 IN_PROC_BROWSER_TEST_F(CopyLinkToTextMenuObserverTest, ReplacesRefInURL) {
@@ -124,8 +122,7 @@
   ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
   base::string16 text;
   clipboard->ReadText(ui::ClipboardBuffer::kCopyPaste, nullptr, &text);
-  EXPECT_EQ(base::UTF8ToUTF16("\"hello world\"\nhttp://foo.com/#:~:text=hello"),
-            text);
+  EXPECT_EQ(base::UTF8ToUTF16("http://foo.com/#:~:text=hello"), text);
 }
 
 // crbug.com/1139864
@@ -155,7 +152,7 @@
   ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
   base::string16 text;
   clipboard->ReadText(ui::ClipboardBuffer::kCopyPaste, nullptr, &text);
-  EXPECT_EQ(base::UTF8ToUTF16("\"hello world\"\n" + main_url.spec()), text);
+  EXPECT_EQ(base::UTF8ToUTF16(main_url.spec()), text);
 }
 
 IN_PROC_BROWSER_TEST_F(CopyLinkToTextMenuObserverTest, HiddenForExtensions) {
diff --git a/chrome/browser/resources/certificate_viewer/certificate_viewer.js b/chrome/browser/resources/certificate_viewer/certificate_viewer.js
index 546ac93..fa92922 100644
--- a/chrome/browser/resources/certificate_viewer/certificate_viewer.js
+++ b/chrome/browser/resources/certificate_viewer/certificate_viewer.js
@@ -11,217 +11,217 @@
 import {Tree, TreeItem} from 'chrome://resources/js/cr/ui/tree.m.js';
 import {$} from 'chrome://resources/js/util.m.js';
 
-  /**
-   * @typedef {{
-   *   general: !Object,
-   *   hierarchy: !Object,
-   * }}
-   */
-  let CertificateInfo;
+/**
+ * @typedef {{
+ *   general: !Object,
+ *   hierarchy: !Object,
+ * }}
+ */
+let CertificateInfo;
+
+/**
+ * Initialize the certificate viewer dialog by wiring up the close button,
+ * substituting in translated strings and requesting certificate details.
+ */
+function initialize() {
+  decorate('tabbox', TabBox);
+
+  const args = JSON.parse(chrome.getVariableValue('dialogArguments'));
+  getCertificateInfo(/** @type {!CertificateInfo} */ (args));
 
   /**
-   * Initialize the certificate viewer dialog by wiring up the close button,
-   * substituting in translated strings and requesting certificate details.
+   * Initialize the second tab's contents.
+   * This is a 'oneShot' function, meaning it will only be invoked once,
+   * no matter how many times it is called.  This is done for unit-testing
+   * purposes in case a test needs to initialize the tab before the timer
+   * fires.
    */
-  function initialize() {
-    decorate('tabbox', TabBox);
+  const initializeDetailTab = oneShot(function() {
+    initializeTree(assert($('hierarchy')), showCertificateFields);
+    initializeTree(assert($('cert-fields')), showCertificateFieldValue);
+    createCertificateHierarchy(args.hierarchy);
+  });
 
-    const args = JSON.parse(chrome.getVariableValue('dialogArguments'));
-    getCertificateInfo(/** @type {!CertificateInfo} */ (args));
+  // The second tab's contents aren't visible on startup, so we can
+  // shorten startup by not populating those controls until after we
+  // have had a chance to draw the visible controls the first time.
+  // The value of 200ms is quick enough that the user couldn't open the
+  // tab in that time but long enough to allow the first tab to draw on
+  // even the slowest machine.
+  setTimeout(initializeDetailTab, 200);
 
-    /**
-     * Initialize the second tab's contents.
-     * This is a 'oneShot' function, meaning it will only be invoked once,
-     * no matter how many times it is called.  This is done for unit-testing
-     * purposes in case a test needs to initialize the tab before the timer
-     * fires.
-     */
-    const initializeDetailTab = oneShot(function() {
-      initializeTree(assert($('hierarchy')), showCertificateFields);
-      initializeTree(assert($('cert-fields')), showCertificateFieldValue);
-      createCertificateHierarchy(args.hierarchy);
-    });
+  $('tabbox').addEventListener('selectedChange', function f(e) {
+    $('tabbox').removeEventListener('selectedChange', f);
+    initializeDetailTab();
+  }, true);
 
-    // The second tab's contents aren't visible on startup, so we can
-    // shorten startup by not populating those controls until after we
-    // have had a chance to draw the visible controls the first time.
-    // The value of 200ms is quick enough that the user couldn't open the
-    // tab in that time but long enough to allow the first tab to draw on
-    // even the slowest machine.
-    setTimeout(initializeDetailTab, 200);
+  stripGtkAccessorKeys();
 
-    $('tabbox').addEventListener('selectedChange', function f(e) {
-      $('tabbox').removeEventListener('selectedChange', f);
-      initializeDetailTab();
-    }, true);
+  $('export').onclick = exportCertificate;
+}
 
-    stripGtkAccessorKeys();
+/**
+ * Decorate a function so that it can only be invoked once.
+ */
+function oneShot(fn) {
+  let fired = false;
+  return function() {
+    if (fired) {
+      return;
+    }
+    fired = true;
+    fn();
+  };
+}
 
-    $('export').onclick = exportCertificate;
+/**
+ * Initialize a Tree object from a given element using the specified
+ * change handler.
+ * @param {!HTMLElement} tree The HTMLElement to style as a tree.
+ * @param {function()} handler Function to call when a node is selected.
+ */
+function initializeTree(tree, handler) {
+  decorate(tree, Tree);
+  tree['detail'] = {payload: {}, children: {}};
+  tree.addEventListener('change', handler);
+}
+
+/**
+ * The tab name strings in the languages file have accessor keys indicated
+ * by a preceding & sign. Strip these out for now.
+ * TODO(flackr) These accessor keys could be implemented with Javascript or
+ *     translated strings could be added / modified to remove the & sign.
+ */
+function stripGtkAccessorKeys() {
+  // Copy all the tab labels into an array.
+  const nodes = Array.prototype.slice.call($('tabs').childNodes, 0);
+  nodes.push($('export'));
+  for (let i = 0; i < nodes.length; i++) {
+    nodes[i].textContent = nodes[i].textContent.replace('&', '');
   }
+}
 
-  /**
-   * Decorate a function so that it can only be invoked once.
-   */
-  function oneShot(fn) {
-    let fired = false;
-    return function() {
-      if (fired) {
-        return;
-      }
-      fired = true;
-      fn();
-    };
+/**
+ * Expand all nodes of the given tree object.
+ * @param {!Tree} tree The tree object to expand all nodes on.
+ */
+function revealTree(tree) {
+  tree.expanded = true;
+  for (const key in tree['detail'].children) {
+    revealTree(tree['detail'].children[key]);
   }
+}
 
-  /**
-   * Initialize a Tree object from a given element using the specified
-   * change handler.
-   * @param {!HTMLElement} tree The HTMLElement to style as a tree.
-   * @param {function()} handler Function to call when a node is selected.
-   */
-  function initializeTree(tree, handler) {
-    decorate(tree, Tree);
-    tree['detail'] = {payload: {}, children: {}};
-    tree.addEventListener('change', handler);
+/**
+ * This function is called from certificate_viewer_ui.cc with the certificate
+ * information. Display all returned information to the user.
+ * @param {!CertificateInfo} certInfo Certificate information in named fields.
+ */
+function getCertificateInfo(certInfo) {
+  for (const key in certInfo.general) {
+    $(key).textContent = certInfo.general[key];
   }
+}
 
-  /**
-   * The tab name strings in the languages file have accessor keys indicated
-   * by a preceding & sign. Strip these out for now.
-   * TODO(flackr) These accessor keys could be implemented with Javascript or
-   *     translated strings could be added / modified to remove the & sign.
-   */
-  function stripGtkAccessorKeys() {
-    // Copy all the tab labels into an array.
-    const nodes = Array.prototype.slice.call($('tabs').childNodes, 0);
-    nodes.push($('export'));
-    for (let i = 0; i < nodes.length; i++) {
-      nodes[i].textContent = nodes[i].textContent.replace('&', '');
+/**
+ * This function populates the certificate hierarchy.
+ * @param {Object} hierarchy A dictionary containing the hierarchy.
+ */
+function createCertificateHierarchy(hierarchy) {
+  const treeItem = /** @type {!Tree} */ ($('hierarchy'));
+  const root = constructTree(hierarchy[0]);
+  treeItem['detail'].children['root'] = root;
+  treeItem.add(root);
+
+  // Select the last item in the hierarchy (really we have a list here - each
+  // node has at most one child).  This will reveal the parent nodes and
+  // populate the fields view.
+  let last = root;
+  while (last.detail.children && last.detail.children[0]) {
+    last = last.detail.children[0];
+  }
+  last.selected = true;
+}
+
+/**
+ * Constructs a TreeItem corresponding to the passed in tree
+ * @param {Object} tree Dictionary describing the tree structure.
+ * @return {!TreeItem} Tree node corresponding to the input dictionary.
+ */
+function constructTree(tree) {
+  const treeItem = new TreeItem({
+    label: tree.label,
+    detail: {payload: tree.payload ? tree.payload : {}, children: {}}
+  });
+  if (tree.children) {
+    for (let i = 0; i < tree.children.length; i++) {
+      treeItem.add(
+          treeItem['detail'].children[i] = constructTree(tree.children[i]));
     }
   }
+  return treeItem;
+}
 
-  /**
-   * Expand all nodes of the given tree object.
-   * @param {!Tree} tree The tree object to expand all nodes on.
-   */
-  function revealTree(tree) {
-    tree.expanded = true;
-    for (const key in tree['detail'].children) {
-      revealTree(tree['detail'].children[key]);
-    }
+/**
+ * Clear any previous certificate fields in the tree.
+ */
+function clearCertificateFields() {
+  const treeItem = /** @type {!Tree} */ ($('cert-fields'));
+  for (const key in treeItem['detail'].children) {
+    treeItem.remove(treeItem['detail'].children[key]);
+    delete treeItem['detail'].children[key];
   }
+}
 
-  /**
-   * This function is called from certificate_viewer_ui.cc with the certificate
-   * information. Display all returned information to the user.
-   * @param {!CertificateInfo} certInfo Certificate information in named fields.
-   */
-  function getCertificateInfo(certInfo) {
-    for (const key in certInfo.general) {
-      $(key).textContent = certInfo.general[key];
-    }
+/**
+ * Request certificate fields for the selected certificate in the hierarchy.
+ */
+function showCertificateFields() {
+  clearCertificateFields();
+  const item = $('hierarchy').selectedItem;
+  if (item && item.detail.payload.index !== undefined) {
+    sendWithPromise('requestCertificateFields', item.detail.payload.index)
+        .then(onCertificateFields);
   }
+}
 
-  /**
-   * This function populates the certificate hierarchy.
-   * @param {Object} hierarchy A dictionary containing the hierarchy.
-   */
-  function createCertificateHierarchy(hierarchy) {
-    const treeItem = /** @type {!Tree} */ ($('hierarchy'));
-    const root = constructTree(hierarchy[0]);
-    treeItem['detail'].children['root'] = root;
-    treeItem.add(root);
+/**
+ * Show the returned certificate fields for the selected certificate.
+ * @param {Object} certFields A dictionary containing the fields tree
+ *     structure.
+ */
+function onCertificateFields(certFields) {
+  clearCertificateFields();
+  const treeItem = /** @type {!Tree} */ ($('cert-fields'));
+  treeItem.add(
+      treeItem['detail'].children['root'] = constructTree(certFields[0]));
+  revealTree(treeItem);
+  // Ensure the list is scrolled to the top by selecting the first item.
+  treeItem.children[0].selected = true;
+  document.body.dispatchEvent(
+      new CustomEvent('certificate-fields-updated-for-testing'));
+}
 
-    // Select the last item in the hierarchy (really we have a list here - each
-    // node has at most one child).  This will reveal the parent nodes and
-    // populate the fields view.
-    let last = root;
-    while (last.detail.children && last.detail.children[0]) {
-      last = last.detail.children[0];
-    }
-    last.selected = true;
+/**
+ * Show certificate field value for a selected certificate field.
+ */
+function showCertificateFieldValue() {
+  const item = $('cert-fields').selectedItem;
+  if (item && item.detail.payload.val) {
+    $('cert-field-value').textContent = item.detail.payload.val;
+  } else {
+    $('cert-field-value').textContent = '';
   }
+}
 
-  /**
-   * Constructs a TreeItem corresponding to the passed in tree
-   * @param {Object} tree Dictionary describing the tree structure.
-   * @return {!TreeItem} Tree node corresponding to the input dictionary.
-   */
-  function constructTree(tree) {
-    const treeItem = new TreeItem({
-      label: tree.label,
-      detail: {payload: tree.payload ? tree.payload : {}, children: {}}
-    });
-    if (tree.children) {
-      for (let i = 0; i < tree.children.length; i++) {
-        treeItem.add(
-            treeItem['detail'].children[i] = constructTree(tree.children[i]));
-      }
-    }
-    return treeItem;
+/**
+ * Export the selected certificate.
+ */
+function exportCertificate() {
+  const item = $('hierarchy').selectedItem;
+  if (item && item.detail.payload.index !== undefined) {
+    chrome.send('exportCertificate', [item.detail.payload.index]);
   }
+}
 
-  /**
-   * Clear any previous certificate fields in the tree.
-   */
-  function clearCertificateFields() {
-    const treeItem = /** @type {!Tree} */ ($('cert-fields'));
-    for (const key in treeItem['detail'].children) {
-      treeItem.remove(treeItem['detail'].children[key]);
-      delete treeItem['detail'].children[key];
-    }
-  }
-
-  /**
-   * Request certificate fields for the selected certificate in the hierarchy.
-   */
-  function showCertificateFields() {
-    clearCertificateFields();
-    const item = $('hierarchy').selectedItem;
-    if (item && item.detail.payload.index !== undefined) {
-      sendWithPromise('requestCertificateFields', item.detail.payload.index)
-          .then(onCertificateFields);
-    }
-  }
-
-  /**
-   * Show the returned certificate fields for the selected certificate.
-   * @param {Object} certFields A dictionary containing the fields tree
-   *     structure.
-   */
-  function onCertificateFields(certFields) {
-    clearCertificateFields();
-    const treeItem = /** @type {!Tree} */ ($('cert-fields'));
-    treeItem.add(
-        treeItem['detail'].children['root'] = constructTree(certFields[0]));
-    revealTree(treeItem);
-    // Ensure the list is scrolled to the top by selecting the first item.
-    treeItem.children[0].selected = true;
-    document.body.dispatchEvent(
-        new CustomEvent('certificate-fields-updated-for-testing'));
-  }
-
-  /**
-   * Show certificate field value for a selected certificate field.
-   */
-  function showCertificateFieldValue() {
-    const item = $('cert-fields').selectedItem;
-    if (item && item.detail.payload.val) {
-      $('cert-field-value').textContent = item.detail.payload.val;
-    } else {
-      $('cert-field-value').textContent = '';
-    }
-  }
-
-  /**
-   * Export the selected certificate.
-   */
-  function exportCertificate() {
-    const item = $('hierarchy').selectedItem;
-    if (item && item.detail.payload.index !== undefined) {
-      chrome.send('exportCertificate', [item.detail.payload.index]);
-    }
-  }
-
-  document.addEventListener('DOMContentLoaded', initialize);
+document.addEventListener('DOMContentLoaded', initialize);
diff --git a/chrome/browser/resources/chromeos/accessibility/switch_access/test_support.js b/chrome/browser/resources/chromeos/accessibility/switch_access/test_support.js
new file mode 100644
index 0000000..42ed29b
--- /dev/null
+++ b/chrome/browser/resources/chromeos/accessibility/switch_access/test_support.js
@@ -0,0 +1,69 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * Test support.
+ */
+const focusRingState = {
+  'primary': {'role': '', 'name': ''},
+  'preview': {'role': '', 'name': ''}
+};
+let expectedType = '';
+let expectedRole = '';
+let expectedName = '';
+let successCallback = null;
+const transcript = [];
+
+function checkFocusRingState() {
+  if (expectedType !== '' &&
+      focusRingState[expectedType].role === expectedRole &&
+      focusRingState[expectedType].name === expectedName) {
+    if (successCallback) {
+      transcript.push(
+          `Success type=${expectedType} ` +
+          `role=${expectedRole} name=${expectedName}`);
+      successCallback();
+      successCallback = null;
+    }
+  }
+}
+
+function waitForFocusRing(type, role, name, callback) {
+  transcript.push(`Waiting for type=${type} role=${role} name=${name}`);
+  expectedType = type;
+  expectedRole = role;
+  expectedName = name;
+  successCallback = callback;
+  checkFocusRingState();
+}
+
+FocusRingManager.setObserver((primary, preview) => {
+  if (primary && primary instanceof BackButtonNode) {
+    focusRingState['primary']['role'] = 'back';
+    focusRingState['primary']['name'] = '';
+  } else if (primary && primary.automationNode) {
+    const node = primary.automationNode;
+    focusRingState['primary']['role'] = node.role;
+    focusRingState['primary']['name'] = node.name;
+  } else {
+    focusRingState['primary']['role'] = '';
+    focusRingState['primary']['name'] = '';
+  }
+  if (preview && preview.automationNode) {
+    const node = preview.automationNode;
+    focusRingState['preview']['role'] = node.role;
+    focusRingState['preview']['name'] = node.name;
+  } else {
+    focusRingState['preview']['role'] = '';
+    focusRingState['preview']['name'] = '';
+  }
+  transcript.push(`Focus ring state: ${JSON.stringify(focusRingState)}`);
+  checkFocusRingState();
+});
+window.domAutomationController.send('ready');
+
+setInterval(() => {
+  console.error(
+      'Test still running. Transcript so far:\n' + transcript.join('\n'));
+}, 5000);
diff --git a/chrome/browser/resources/print_preview/BUILD.gn b/chrome/browser/resources/print_preview/BUILD.gn
index b0fd5b4..ca34b38 100644
--- a/chrome/browser/resources/print_preview/BUILD.gn
+++ b/chrome/browser/resources/print_preview/BUILD.gn
@@ -82,6 +82,7 @@
     "native_layer.js",
     "print_preview.js",
     "print_preview_utils.js",
+    "data/cdd.js",
     "data/cloud_parsers.js",
     "data/coordinate2d.js",
     "data/destination.js",
@@ -108,7 +109,10 @@
   ]
 
   if (is_chromeos) {
-    in_files += [ "data/printer_status_cros.js" ]
+    in_files += [
+      "native_layer_cros.js",
+      "data/printer_status_cros.js",
+    ]
   }
 }
 
@@ -224,6 +228,7 @@
     ":dark_mode_behavior",
     ":metrics",
     ":native_layer",
+    ":native_layer_cros",
     ":print_preview",
     ":print_preview_utils",
   ]
@@ -233,8 +238,10 @@
   deps = [
     ":cloud_print_interface",
     ":native_layer",
+    ":native_layer_cros",
     "data:destination",
     "data:destination_store",
+    "data:local_parsers",
     "data:measurement_system",
     "ui:app",
     "ui:settings_select",
@@ -265,7 +272,7 @@
 js_library("cloud_print_interface_impl") {
   deps = [
     ":cloud_print_interface",
-    ":native_layer",
+    ":native_layer_cros",
     "data:cloud_parsers",
     "data:destination",
     "data:invitation",
@@ -277,10 +284,18 @@
 
 js_library("native_layer") {
   deps = [
+    "data:cdd",
     "data:destination",
     "data:destination_match",
-    "data:destination_policies",
     "data:measurement_system",
+    "//ui/webui/resources/js:assert.m",
+    "//ui/webui/resources/js:cr.m",
+  ]
+}
+
+js_library("native_layer_cros") {
+  deps = [
+    "data:destination_policies",
     "data:printer_status_cros",
     "//ui/webui/resources/js:assert.m",
     "//ui/webui/resources/js:cr.m",
diff --git a/chrome/browser/resources/print_preview/cloud_print_interface.js b/chrome/browser/resources/print_preview/cloud_print_interface.js
index e144820..a90c3d57 100644
--- a/chrome/browser/resources/print_preview/cloud_print_interface.js
+++ b/chrome/browser/resources/print_preview/cloud_print_interface.js
@@ -80,13 +80,11 @@
    * @param {string} baseUrl Base part of the Google Cloud Print service URL
    *     with no trailing slash. For example,
    *     'https://www.google.com/cloudprint'.
-   * @param {!NativeLayer} nativeLayer Native layer used to get
-   *     Auth2 tokens.
    * @param {boolean} isInAppKioskMode Whether the print preview is in App
    *     Kiosk mode.
    * @param {string} uiLocale The UI locale.
    */
-  configure(baseUrl, nativeLayer, isInAppKioskMode, uiLocale) {}
+  configure(baseUrl, isInAppKioskMode, uiLocale) {}
 
   /** @return {boolean} Whether the interface has been configured. */
   isConfigured() {}
diff --git a/chrome/browser/resources/print_preview/cloud_print_interface_impl.js b/chrome/browser/resources/print_preview/cloud_print_interface_impl.js
index 6044257..867f3f5 100644
--- a/chrome/browser/resources/print_preview/cloud_print_interface_impl.js
+++ b/chrome/browser/resources/print_preview/cloud_print_interface_impl.js
@@ -10,7 +10,9 @@
 import {parseCloudDestination, parseInvitation} from './data/cloud_parsers.js';
 import {CloudOrigins, DestinationOrigin} from './data/destination.js';
 import {Invitation} from './data/invitation.js';
-import {NativeLayer} from './native_layer.js';
+// <if expr="chromeos">
+import {NativeLayerCrosImpl} from './native_layer_cros.js';
+// </if>
 
 
 /** @implements {CloudPrintInterface} */
@@ -23,12 +25,6 @@
     this.baseUrl_ = '';
 
     /**
-     * Used to get Auth2 tokens.
-     * @private {?NativeLayer}
-     */
-    this.nativeLayer_ = null;
-
-    /**
      * Whether Print Preview is in App Kiosk mode; use only printers available
      * for the device and disable cookie destinations.
      * @private {boolean}
@@ -77,9 +73,8 @@
   }
 
   /** @override */
-  configure(baseUrl, nativeLayer, isInAppKioskMode, uiLocale) {
+  configure(baseUrl, isInAppKioskMode, uiLocale) {
     this.baseUrl_ = baseUrl;
-    this.nativeLayer_ = nativeLayer;
     this.isInAppKioskMode_ = isInAppKioskMode;
     this.uiLocale_ = uiLocale;
   }
@@ -290,7 +285,8 @@
     // <if expr="chromeos">
     assert(request.origin === DestinationOrigin.DEVICE);
     if (this.accessTokenRequestPromise_ === null) {
-      this.accessTokenRequestPromise_ = this.nativeLayer_.getAccessToken();
+      this.accessTokenRequestPromise_ =
+          NativeLayerCrosImpl.getInstance().getAccessToken();
     }
 
     this.accessTokenRequestPromise_.then(
diff --git a/chrome/browser/resources/print_preview/data/BUILD.gn b/chrome/browser/resources/print_preview/data/BUILD.gn
index 61a94ab..7753942 100644
--- a/chrome/browser/resources/print_preview/data/BUILD.gn
+++ b/chrome/browser/resources/print_preview/data/BUILD.gn
@@ -8,6 +8,7 @@
 js_type_check("closure_compile_module") {
   is_polymer3 = true
   deps = [
+    ":cdd",
     ":cloud_parsers",
     ":coordinate2d",
     ":destination",
@@ -30,17 +31,22 @@
   ]
 }
 
+js_library("cdd") {
+}
+
 js_library("destination_policies") {
 }
 
 js_library("destination_store") {
   deps = [
+    ":cdd",
     ":destination",
     ":destination_match",
     ":local_parsers",
     "..:cloud_print_interface",
     "..:metrics",
     "..:native_layer",
+    "..:native_layer_cros",
     "//ui/webui/resources/js:assert.m",
     "//ui/webui/resources/js:cr.m",
     "//ui/webui/resources/js:event_tracker.m",
@@ -62,6 +68,7 @@
   deps = [
     ":destination",
     ":destination_match",
+    ":destination_policies",
     "..:native_layer",
     "//ui/webui/resources/js:cr.m",
   ]
@@ -94,7 +101,10 @@
   ]
 
   if (is_chromeos) {
-    deps += [ ":destination_policies" ]
+    deps += [
+      ":destination_policies",
+      "..:native_layer_cros",
+    ]
   }
 }
 
diff --git a/chrome/browser/resources/print_preview/data/cdd.js b/chrome/browser/resources/print_preview/data/cdd.js
new file mode 100644
index 0000000..1d8c07f
--- /dev/null
+++ b/chrome/browser/resources/print_preview/data/cdd.js
@@ -0,0 +1,102 @@
+// Copyright (c) 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @typedef {{
+ *   display_name: (string),
+ *   type: (string | undefined),
+ *   value: (number | string | boolean),
+ *   is_default: (boolean | undefined),
+ * }}
+ */
+export let VendorCapabilitySelectOption;
+
+/**
+ * Same as cloud_devices::printer::TypedValueVendorCapability::ValueType.
+ * @enum {string}
+ */
+export const VendorCapabilityValueType = {
+  BOOLEAN: 'BOOLEAN',
+  FLOAT: 'FLOAT',
+  INTEGER: 'INTEGER',
+  STRING: 'STRING',
+};
+
+/**
+ * Specifies a custom vendor capability.
+ * @typedef {{
+ *   id: (string),
+ *   display_name: (string),
+ *   localized_display_name: (string | undefined),
+ *   type: (string),
+ *   select_cap: ({
+ *     option: (Array<!VendorCapabilitySelectOption>|undefined),
+ *   }|undefined),
+ *   typed_value_cap: ({
+ *     default: (number | string | boolean | undefined),
+ *     value_type: (VendorCapabilityValueType | undefined),
+ *   }|undefined),
+ *   range_cap: ({
+ *     default: (number),
+ *   }),
+ * }}
+ */
+export let VendorCapability;
+
+/**
+ * Capabilities of a print destination represented in a CDD.
+ * Pin capability is not a part of standard CDD description and is defined
+ * only on Chrome OS.
+ *
+ * @typedef {{
+ *   vendor_capability: (Array<!VendorCapability>|undefined),
+ *   collate: ({default: (boolean|undefined)}|undefined),
+ *   color: ({
+ *     option: !Array<{
+ *       type: (string|undefined),
+ *       vendor_id: (string|undefined),
+ *       custom_display_name: (string|undefined),
+ *       is_default: (boolean|undefined)
+ *     }>
+ *   }|undefined),
+ *   copies: ({default: (number|undefined),
+ *             max: (number|undefined)}|undefined),
+ *   duplex: ({option: !Array<{type: (string|undefined),
+ *                             is_default: (boolean|undefined)}>}|undefined),
+ *   page_orientation: ({
+ *     option: !Array<{type: (string|undefined),
+ *                      is_default: (boolean|undefined)}>
+ *   }|undefined),
+ *   media_size: ({
+ *     option: !Array<{
+ *       type: (string|undefined),
+ *       vendor_id: (string|undefined),
+ *       custom_display_name: (string|undefined),
+ *       is_default: (boolean|undefined),
+ *       name: (string|undefined),
+ *     }>
+ *   }|undefined),
+ *   dpi: ({
+ *     option: !Array<{
+ *       vendor_id: (string|undefined),
+ *       horizontal_dpi: number,
+ *       vertical_dpi: number,
+ *       is_default: (boolean|undefined)
+ *     }>
+ *   }|undefined),
+ *   pin: ({supported: (boolean|undefined)}|undefined)
+ * }}
+ */
+export let CddCapabilities;
+
+/**
+ * The CDD (Cloud Device Description) describes the capabilities of a print
+ * destination.
+ *
+ * @typedef {{
+ *   version: string,
+ *   printer: !CddCapabilities,
+ * }}
+ */
+export let Cdd;
diff --git a/chrome/browser/resources/print_preview/data/cloud_parsers.js b/chrome/browser/resources/print_preview/data/cloud_parsers.js
index 0c6fca5..a0c08b5 100644
--- a/chrome/browser/resources/print_preview/data/cloud_parsers.js
+++ b/chrome/browser/resources/print_preview/data/cloud_parsers.js
@@ -3,7 +3,8 @@
 // found in the LICENSE file.
 
 import {assert} from 'chrome://resources/js/assert.m.js';
-import {Cdd, Destination, DestinationCertificateStatus, DestinationConnectionStatus, DestinationOrigin, DestinationType} from './destination.js';
+import {Cdd} from './cdd.js';
+import {Destination, DestinationCertificateStatus, DestinationConnectionStatus, DestinationOrigin, DestinationType} from './destination.js';
 import {Invitation} from './invitation.js';
 
 /**
diff --git a/chrome/browser/resources/print_preview/data/destination.js b/chrome/browser/resources/print_preview/data/destination.js
index 6ff4a5c..c01d79c 100644
--- a/chrome/browser/resources/print_preview/data/destination.js
+++ b/chrome/browser/resources/print_preview/data/destination.js
@@ -9,10 +9,11 @@
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 
 // <if expr="chromeos">
-import {NativeLayerImpl} from '../native_layer.js';
+import {NativeLayerCrosImpl} from '../native_layer_cros.js';
 
+import {Cdd} from './cdd.js';
 import {ColorModeRestriction, DestinationPolicies, DuplexModeRestriction, PinModeRestriction} from './destination_policies.js';
-import {getStatusReasonFromPrinterStatus, PrinterStatusReason} from './printer_status_cros.js';
+import {getStatusReasonFromPrinterStatus, PrinterStatus, PrinterStatusReason} from './printer_status_cros.js';
 // </if>
 
 /**
@@ -95,105 +96,6 @@
 };
 
 /**
- * @typedef {{
- *   display_name: (string),
- *   type: (string | undefined),
- *   value: (number | string | boolean),
- *   is_default: (boolean | undefined),
- * }}
- */
-export let VendorCapabilitySelectOption;
-
-/**
- * Same as cloud_devices::printer::TypedValueVendorCapability::ValueType.
- * @enum {string}
- */
-export const VendorCapabilityValueType = {
-  BOOLEAN: 'BOOLEAN',
-  FLOAT: 'FLOAT',
-  INTEGER: 'INTEGER',
-  STRING: 'STRING',
-};
-
-/**
- * Specifies a custom vendor capability.
- * @typedef {{
- *   id: (string),
- *   display_name: (string),
- *   localized_display_name: (string | undefined),
- *   type: (string),
- *   select_cap: ({
- *     option: (Array<!VendorCapabilitySelectOption>|undefined),
- *   }|undefined),
- *   typed_value_cap: ({
- *     default: (number | string | boolean | undefined),
- *     value_type: (VendorCapabilityValueType | undefined),
- *   }|undefined),
- *   range_cap: ({
- *     default: (number),
- *   }),
- * }}
- */
-export let VendorCapability;
-
-/**
- * Capabilities of a print destination represented in a CDD.
- * Pin capability is not a part of standard CDD description and is defined
- * only on Chrome OS.
- *
- * @typedef {{
- *   vendor_capability: (Array<!VendorCapability>|undefined),
- *   collate: ({default: (boolean|undefined)}|undefined),
- *   color: ({
- *     option: !Array<{
- *       type: (string|undefined),
- *       vendor_id: (string|undefined),
- *       custom_display_name: (string|undefined),
- *       is_default: (boolean|undefined)
- *     }>
- *   }|undefined),
- *   copies: ({default: (number|undefined),
- *             max: (number|undefined)}|undefined),
- *   duplex: ({option: !Array<{type: (string|undefined),
- *                             is_default: (boolean|undefined)}>}|undefined),
- *   page_orientation: ({
- *     option: !Array<{type: (string|undefined),
- *                      is_default: (boolean|undefined)}>
- *   }|undefined),
- *   media_size: ({
- *     option: !Array<{
- *       type: (string|undefined),
- *       vendor_id: (string|undefined),
- *       custom_display_name: (string|undefined),
- *       is_default: (boolean|undefined),
- *       name: (string|undefined),
- *     }>
- *   }|undefined),
- *   dpi: ({
- *     option: !Array<{
- *       vendor_id: (string|undefined),
- *       horizontal_dpi: number,
- *       vertical_dpi: number,
- *       is_default: (boolean|undefined)
- *     }>
- *   }|undefined),
- *   pin: ({supported: (boolean|undefined)}|undefined)
- * }}
- */
-export let CddCapabilities;
-
-/**
- * The CDD (Cloud Device Description) describes the capabilities of a print
- * destination.
- *
- * @typedef {{
- *   version: string,
- *   printer: !CddCapabilities,
- * }}
- */
-export let Cdd;
-
-/**
  * Enumeration of color modes used by Chromium.
  * @enum {number}
  */
@@ -644,10 +546,13 @@
 
     // Request printer status then set and return the promise.
     this.printerStatusRequestedPromise_ =
-        NativeLayerImpl.getInstance().requestPrinterStatusUpdate(this.id_).then(
-            status => {
-              this.printerStatusReason_ =
-                  getStatusReasonFromPrinterStatus(status);
+        NativeLayerCrosImpl.getInstance()
+            .requestPrinterStatusUpdate(this.id_)
+            .then(status => {
+              if (status) {
+                this.printerStatusReason_ = getStatusReasonFromPrinterStatus(
+                    /** @type {!PrinterStatus} */ (status));
+              }
               return Promise.resolve(this.key);
             });
     return this.printerStatusRequestedPromise_;
diff --git a/chrome/browser/resources/print_preview/data/destination_store.js b/chrome/browser/resources/print_preview/data/destination_store.js
index 4dfd3a1b..851f286 100644
--- a/chrome/browser/resources/print_preview/data/destination_store.js
+++ b/chrome/browser/resources/print_preview/data/destination_store.js
@@ -10,11 +10,15 @@
 
 import {CloudPrintInterface, CloudPrintInterfaceEventType, CloudPrintInterfacePrinterFailedDetail, CloudPrintInterfaceProcessInviteDetail, CloudPrintInterfaceSearchDoneDetail} from '../cloud_print_interface.js';
 import {Metrics, MetricsContext} from '../metrics.js';
-import {CapabilitiesResponse, LocalDestinationInfo, NativeLayer, NativeLayerImpl, PrinterSetupResponse, PrivetPrinterDescription, ProvisionalDestinationInfo} from '../native_layer.js';
+import {CapabilitiesResponse, NativeLayer, NativeLayerImpl} from '../native_layer.js';
+// <if expr="chromeos">
+import {NativeLayerCros, NativeLayerCrosImpl, PrinterSetupResponse} from '../native_layer_cros.js';
 
-import {Cdd, CloudOrigins, createDestinationKey, createRecentDestinationKey, Destination, DestinationConnectionStatus, DestinationOrigin, DestinationProvisionalType, DestinationType, RecentDestination} from './destination.js';
+// </if>
+import {Cdd} from './cdd.js';
+import {CloudOrigins, createDestinationKey, createRecentDestinationKey, Destination, DestinationConnectionStatus, DestinationOrigin, DestinationProvisionalType, DestinationType, RecentDestination} from './destination.js';
 import {DestinationMatch, getPrinterTypeForDestination, originToType, PrinterType} from './destination_match.js';
-import {parseDestination, parseExtensionDestination} from './local_parsers.js';
+import {LocalDestinationInfo, parseDestination, parseExtensionDestination, PrivetPrinterDescription, ProvisionalDestinationInfo} from './local_parsers.js';
 
 /**
  * Printer search statuses used by the destination store.
@@ -239,6 +243,14 @@
      */
     this.nativeLayer_ = NativeLayerImpl.getInstance();
 
+    // <if expr="chromeos">
+    /**
+     * Used to fetch information about Chrome OS local print destinations.
+     * @private {!NativeLayerCros}
+     */
+    this.nativeLayerCros_ = NativeLayerCrosImpl.getInstance();
+    // </if>
+
     /**
      * Whether PDF printer is enabled. It's disabled, for example, in App
      * Kiosk mode or when PDF printing is disallowed by policy.
@@ -574,7 +586,7 @@
    * @param {string} destinationId ID of the destination.
    */
   fetchEulaUrl(destinationId) {
-    this.nativeLayer_.getEulaUrl(destinationId).then(response => {
+    this.nativeLayerCros_.getEulaUrl(destinationId).then(response => {
       // Check that the currently selected destination ID still matches the
       // destination ID we used to fetch the EULA URL.
       if (this.selectedDestination_ &&
@@ -792,7 +804,7 @@
    */
   resolveCrosDestination(destination) {
     assert(destination.origin === DestinationOrigin.CROS);
-    return this.nativeLayer_.setupPrinter(destination.id);
+    return this.nativeLayerCros_.setupPrinter(destination.id);
   }
 
   /**
@@ -806,7 +818,7 @@
         destination.provisionalType ===
             DestinationProvisionalType.NEEDS_USB_PERMISSION,
         'Provisional type cannot be resolved.');
-    return this.nativeLayer_.grantExtensionPrinterAccess(destination.id)
+    return this.nativeLayerCros_.grantExtensionPrinterAccess(destination.id)
         .then(
             destinationInfo => {
               /**
diff --git a/chrome/browser/resources/print_preview/data/local_parsers.js b/chrome/browser/resources/print_preview/data/local_parsers.js
index 895e881..184dbd4 100644
--- a/chrome/browser/resources/print_preview/data/local_parsers.js
+++ b/chrome/browser/resources/print_preview/data/local_parsers.js
@@ -4,9 +4,48 @@
 
 import {assertNotReached} from 'chrome://resources/js/assert.m.js';
 import {isChromeOS} from 'chrome://resources/js/cr.m.js';
-import {LocalDestinationInfo, PrivetPrinterDescription, ProvisionalDestinationInfo} from '../native_layer.js';
+
 import {Destination, DestinationConnectionStatus, DestinationOrigin, DestinationProvisionalType, DestinationType} from './destination.js';
 import {PrinterType} from './destination_match.js';
+// <if expr="chromeos">
+import {DestinationPolicies} from './destination_policies.js';
+// </if>
+
+/**
+ * @typedef {{
+ *   deviceName: string,
+ *   printerName: string,
+ *   printerDescription: (string | undefined),
+ *   cupsEnterprisePrinter: (boolean | undefined),
+ *   printerOptions: (Object | undefined),
+ *   policies: (DestinationPolicies | undefined),
+ * }}
+ */
+export let LocalDestinationInfo;
+
+/**
+ * @typedef {{
+ *   serviceName: string,
+ *   name: string,
+ *   hasLocalPrinting: boolean,
+ *   isUnregistered: boolean,
+ *   cloudID: string,
+ * }}
+ * @see PrintPreviewHandler::FillPrinterDescription in
+ * print_preview_handler.cc
+ */
+export let PrivetPrinterDescription;
+
+/**
+ * @typedef {{
+ *   extensionId: string,
+ *   extensionName: string,
+ *   id: string,
+ *   name: string,
+ *   description: (string|undefined),
+ * }}
+ */
+export let ProvisionalDestinationInfo;
 
 /**
  * @param{!PrinterType} type The type of printer to parse.
diff --git a/chrome/browser/resources/print_preview/data/model.js b/chrome/browser/resources/print_preview/data/model.js
index 4deab39..e92982c 100644
--- a/chrome/browser/resources/print_preview/data/model.js
+++ b/chrome/browser/resources/print_preview/data/model.js
@@ -9,8 +9,8 @@
 import {Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {BackgroundGraphicsModeRestriction, Policies} from '../native_layer.js';
-
-import {Cdd, CddCapabilities, Destination, DestinationOrigin, DestinationType, RecentDestination, VendorCapability} from './destination.js';
+import {Cdd, CddCapabilities, VendorCapability} from './cdd.js';
+import {Destination, DestinationOrigin, DestinationType, RecentDestination} from './destination.js';
 import {getPrinterTypeForDestination, PrinterType} from './destination_match.js';
 // <if expr="chromeos">
 import {ColorModeRestriction, DuplexModeRestriction, PinModeRestriction} from './destination_policies.js';
diff --git a/chrome/browser/resources/print_preview/data/printer_status_cros.js b/chrome/browser/resources/print_preview/data/printer_status_cros.js
index 4a4907e..09d00a0b 100644
--- a/chrome/browser/resources/print_preview/data/printer_status_cros.js
+++ b/chrome/browser/resources/print_preview/data/printer_status_cros.js
@@ -147,4 +147,4 @@
     default:
       assertNotReached();
   }
-}
\ No newline at end of file
+}
diff --git a/chrome/browser/resources/print_preview/native_layer.js b/chrome/browser/resources/print_preview/native_layer.js
index 22ae9842..5d642dd 100644
--- a/chrome/browser/resources/print_preview/native_layer.js
+++ b/chrome/browser/resources/print_preview/native_layer.js
@@ -5,15 +5,11 @@
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {addSingletonGetter, sendWithPromise} from 'chrome://resources/js/cr.m.js';
 
-import {Cdd, Destination} from './data/destination.js';
+import {Cdd} from './data/cdd.js';
+import {Destination} from './data/destination.js';
 import {PrinterType} from './data/destination_match.js';
-// <if expr="chromeos">
-import {DestinationPolicies} from './data/destination_policies.js';
-// </if>
+import {LocalDestinationInfo, PrivetPrinterDescription} from './data/local_parsers.js';
 import {MeasurementSystemUnitType} from './data/measurement_system.js';
-// <if expr="chromeos">
-import {PrinterStatus, PrinterStatusReason} from './data/printer_status_cros.js';
-// </if>
 
 /**
  * @typedef {{selectSaveAsPdfDestination: boolean,
@@ -27,18 +23,6 @@
 export let PreviewSettings;
 
 /**
- * @typedef {{
- *   deviceName: string,
- *   printerName: string,
- *   printerDescription: (string | undefined),
- *   cupsEnterprisePrinter: (boolean | undefined),
- *   printerOptions: (Object | undefined),
- *   policies: (DestinationPolicies | undefined),
- * }}
- */
-export let LocalDestinationInfo;
-
-/**
  * Enumeration of background graphics printing mode restrictions used by
  * Chromium.
  * This has to coincide with |printing::BackgroundGraphicsModeRestriction| as
@@ -106,19 +90,6 @@
 
 /**
  * @typedef {{
- *   serviceName: string,
- *   name: string,
- *   hasLocalPrinting: boolean,
- *   isUnregistered: boolean,
- *   cloudID: string,
- * }}
- * @see PrintPreviewHandler::FillPrinterDescription in
- * print_preview_handler.cc
- */
-export let PrivetPrinterDescription;
-
-/**
- * @typedef {{
  *   printer:(PrivetPrinterDescription |
  *            LocalDestinationInfo |
  *            undefined),
@@ -128,39 +99,10 @@
 export let CapabilitiesResponse;
 
 /**
- * @typedef {{
- *   printerId: string,
- *   success: boolean,
- *   capabilities: !Cdd,
- *   policies: (DestinationPolicies | undefined),
- * }}
- */
-export let PrinterSetupResponse;
-
-/**
- * @typedef {{
- *   extensionId: string,
- *   extensionName: string,
- *   id: string,
- *   name: string,
- *   description: (string|undefined),
- * }}
- */
-export let ProvisionalDestinationInfo;
-
-/**
  * An interface to the native Chromium printing system layer.
  * @interface
  */
 export class NativeLayer {
-  // <if expr="chromeos">
-  /**
-   * Requests access token for cloud print requests for DEVICE origin.
-   * @return {!Promise<string>}
-   */
-  getAccessToken() {}
-  // </if>
-
   /**
    * Gets the initial settings to initialize the print preview with.
    * @return {!Promise<!NativeInitialSettings>}
@@ -186,32 +128,6 @@
    */
   getPrinterCapabilities(destinationId, type) {}
 
-  // <if expr="chromeos">
-  /**
-   * Requests the destination's end user license information. Returns a promise
-   * that will be resolved with the destination's EULA URL if obtained
-   * successfully.
-   * @param {!string} destinationId ID of the destination.
-   * @return {!Promise<string>}
-   */
-  getEulaUrl(destinationId) {}
-
-  /**
-   * Requests Chrome to resolve provisional extension destination by granting
-   * the provider extension access to the printer.
-   * @param {string} provisionalDestinationId
-   * @return {!Promise<!ProvisionalDestinationInfo>}
-   */
-  grantExtensionPrinterAccess(provisionalDestinationId) {}
-
-  /**
-   * Requests that Chrome perform printer setup for the given printer.
-   * @param {string} printerId
-   * @return {!Promise<!PrinterSetupResponse>}
-   */
-  setupPrinter(printerId) {}
-  // </if>
-
   /**
    * Requests that a preview be generated. The following Web UI events may
    * be triggered in response:
@@ -272,25 +188,6 @@
    */
   signIn() {}
 
-  // <if expr="chromeos">
-  /**
-   * Sends a request to the printer with id |printerId| for its current status.
-   * @param {string} printerId
-   * @return {!Promise<!PrinterStatus>}
-   */
-  requestPrinterStatusUpdate(printerId) {}
-
-  /**
-   * Records the histogram to capture the printer status of the current
-   * destination and whether the user chose to print or cancel.
-   * @param {?PrinterStatusReason} statusReason Current destination printer
-   * status
-   * @param {boolean} didUserAttemptPrint True if user printed, false if user
-   * canceled.
-   */
-  recordPrinterStatusHistogram(statusReason, didUserAttemptPrint) {}
-  // </if>
-
   /**
    * Notifies the metrics handler to record a histogram value.
    * @param {string} histogram The name of the histogram to record
@@ -302,13 +199,6 @@
 
 /** @implements {NativeLayer} */
 export class NativeLayerImpl {
-  // <if expr="chromeos">
-  /** @override */
-  getAccessToken() {
-    return sendWithPromise('getAccessToken');
-  }
-  // </if>
-
   /** @override */
   getInitialSettings() {
     return sendWithPromise('getInitialSettings');
@@ -324,24 +214,6 @@
     return sendWithPromise('getPrinterCapabilities', destinationId, type);
   }
 
-  // <if expr="chromeos">
-  /** @override */
-  getEulaUrl(destinationId) {
-    return sendWithPromise('getEulaUrl', destinationId);
-  }
-
-  /** @override */
-  grantExtensionPrinterAccess(provisionalDestinationId) {
-    return sendWithPromise(
-        'grantExtensionPrinterAccess', provisionalDestinationId);
-  }
-
-  /** @override */
-  setupPrinter(printerId) {
-    return sendWithPromise('setupPrinter', printerId);
-  }
-  // </if>
-
   /** @override */
   getPreview(printTicket) {
     return sendWithPromise('getPreview', printTicket);
@@ -392,37 +264,6 @@
     chrome.send('signIn');
   }
 
-  // <if expr="chromeos">
-  /** @override */
-  requestPrinterStatusUpdate(printerId) {
-    return sendWithPromise('requestPrinterStatus', printerId);
-  }
-
-  /** @override */
-  recordPrinterStatusHistogram(statusReason, didUserAttemptPrint) {
-    if (!statusReason) {
-      return;
-    }
-
-    let histogram;
-    switch (statusReason) {
-      case (PrinterStatusReason.NO_ERROR):
-        histogram = 'PrintPreview.PrinterStatus.AttemptedPrintWithGoodStatus';
-        break;
-      case (PrinterStatusReason.UNKNOWN_REASON):
-        histogram =
-            'PrintPreview.PrinterStatus.AttemptedPrintWithUnknownStatus';
-        break;
-      default:
-        histogram = 'PrintPreview.PrinterStatus.AttemptedPrintWithErrorStatus';
-        break;
-    }
-    chrome.send(
-        'metricsHandler:recordBooleanHistogram',
-        [histogram, didUserAttemptPrint]);
-  }
-  // </if>
-
   /** @override */
   recordInHistogram(histogram, bucket, maxBucket) {
     chrome.send(
diff --git a/chrome/browser/resources/print_preview/native_layer_cros.js b/chrome/browser/resources/print_preview/native_layer_cros.js
new file mode 100644
index 0000000..16de9e75
--- /dev/null
+++ b/chrome/browser/resources/print_preview/native_layer_cros.js
@@ -0,0 +1,130 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {addSingletonGetter, sendWithPromise} from 'chrome://resources/js/cr.m.js';
+
+import {Cdd} from './data/cdd.js';
+import {DestinationPolicies} from './data/destination_policies.js';
+import {ProvisionalDestinationInfo} from './data/local_parsers.js';
+import {PrinterStatus, PrinterStatusReason} from './data/printer_status_cros.js';
+
+/**
+ * @typedef {{
+ *   printerId: string,
+ *   success: boolean,
+ *   capabilities: !Cdd,
+ *   policies: (DestinationPolicies | undefined),
+ * }}
+ */
+export let PrinterSetupResponse;
+
+/**
+ * An interface to the Chrome OS platform specific part of the native Chromium
+ * printing system layer.
+ * @interface
+ */
+export class NativeLayerCros {
+  /**
+   * Requests access token for cloud print requests for DEVICE origin.
+   * @return {!Promise<string>}
+   */
+  getAccessToken() {}
+
+  /**
+   * Requests the destination's end user license information. Returns a promise
+   * that will be resolved with the destination's EULA URL if obtained
+   * successfully.
+   * @param {!string} destinationId ID of the destination.
+   * @return {!Promise<string>}
+   */
+  getEulaUrl(destinationId) {}
+
+  /**
+   * Requests Chrome to resolve provisional extension destination by granting
+   * the provider extension access to the printer.
+   * @param {string} provisionalDestinationId
+   * @return {!Promise<!ProvisionalDestinationInfo>}
+   */
+  grantExtensionPrinterAccess(provisionalDestinationId) {}
+
+  /**
+   * Requests that Chrome perform printer setup for the given printer.
+   * @param {string} printerId
+   * @return {!Promise<!PrinterSetupResponse>}
+   */
+  setupPrinter(printerId) {}
+
+  /**
+   * Sends a request to the printer with id |printerId| for its current status.
+   * @param {string} printerId
+   * @return {!Promise<?PrinterStatus>}
+   */
+  requestPrinterStatusUpdate(printerId) {}
+
+  /**
+   * Records the histogram to capture the printer status of the current
+   * destination and whether the user chose to print or cancel.
+   * @param {?PrinterStatusReason} statusReason Current destination printer
+   * status
+   * @param {boolean} didUserAttemptPrint True if user printed, false if user
+   * canceled.
+   */
+  recordPrinterStatusHistogram(statusReason, didUserAttemptPrint) {}
+}
+
+/** @implements {NativeLayerCros} */
+export class NativeLayerCrosImpl {
+  /** @override */
+  getAccessToken() {
+    return sendWithPromise('getAccessToken');
+  }
+
+  /** @override */
+  getEulaUrl(destinationId) {
+    return sendWithPromise('getEulaUrl', destinationId);
+  }
+
+  /** @override */
+  grantExtensionPrinterAccess(provisionalDestinationId) {
+    return sendWithPromise(
+        'grantExtensionPrinterAccess', provisionalDestinationId);
+  }
+
+  /** @override */
+  setupPrinter(printerId) {
+    return sendWithPromise('setupPrinter', printerId);
+  }
+
+  /** @override */
+  requestPrinterStatusUpdate(printerId) {
+    return sendWithPromise('requestPrinterStatus', printerId);
+  }
+
+  /** @override */
+  recordPrinterStatusHistogram(statusReason, didUserAttemptPrint) {
+    if (!statusReason) {
+      return;
+    }
+
+    let histogram;
+    switch (statusReason) {
+      case (PrinterStatusReason.NO_ERROR):
+        histogram = 'PrintPreview.PrinterStatus.AttemptedPrintWithGoodStatus';
+        break;
+      case (PrinterStatusReason.UNKNOWN_REASON):
+        histogram =
+            'PrintPreview.PrinterStatus.AttemptedPrintWithUnknownStatus';
+        break;
+      default:
+        histogram = 'PrintPreview.PrinterStatus.AttemptedPrintWithErrorStatus';
+        break;
+    }
+    chrome.send(
+        'metricsHandler:recordBooleanHistogram',
+        [histogram, didUserAttemptPrint]);
+  }
+}
+
+addSingletonGetter(NativeLayerCrosImpl);
diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js
index b2ffbbe..30c71872 100644
--- a/chrome/browser/resources/print_preview/print_preview.js
+++ b/chrome/browser/resources/print_preview/print_preview.js
@@ -7,7 +7,8 @@
 export {PluralStringProxyImpl as PrintPreviewPluralStringProxyImpl} from 'chrome://resources/js/plural_string_proxy.js';
 export {CloudPrintInterface, CloudPrintInterfaceEventType} from './cloud_print_interface.js';
 export {CloudPrintInterfaceImpl} from './cloud_print_interface_impl.js';
-export {Cdd, ColorMode, createDestinationKey, Destination, DestinationCertificateStatus, DestinationConnectionStatus, DestinationOrigin, DestinationType, makeRecentDestination, RecentDestination} from './data/destination.js';
+export {Cdd} from './data/cdd.js';
+export {ColorMode, createDestinationKey, Destination, DestinationCertificateStatus, DestinationConnectionStatus, DestinationOrigin, DestinationType, makeRecentDestination, RecentDestination} from './data/destination.js';
 // <if expr="chromeos">
 export {SAVE_TO_DRIVE_CROS_DESTINATION_KEY} from './data/destination.js';
 // </if>
@@ -18,6 +19,7 @@
 export {DestinationErrorType, DestinationStore} from './data/destination_store.js';
 export {PageLayoutInfo} from './data/document_info.js';
 export {InvitationStore} from './data/invitation_store.js';
+export {LocalDestinationInfo, ProvisionalDestinationInfo} from './data/local_parsers.js';
 export {CustomMarginsOrientation, Margins, MarginsSetting, MarginsType} from './data/margins.js';
 export {MeasurementSystem, MeasurementSystemUnitType} from './data/measurement_system.js';
 export {DuplexMode, DuplexType, getInstance, whenReady} from './data/model.js';
@@ -27,7 +29,10 @@
 export {ScalingType} from './data/scaling.js';
 export {Size} from './data/size.js';
 export {Error, State} from './data/state.js';
-export {BackgroundGraphicsModeRestriction, CapabilitiesResponse, LocalDestinationInfo, NativeInitialSettings, NativeLayer, NativeLayerImpl, PrinterSetupResponse, ProvisionalDestinationInfo} from './native_layer.js';
+export {BackgroundGraphicsModeRestriction, CapabilitiesResponse, NativeInitialSettings, NativeLayer, NativeLayerImpl} from './native_layer.js';
+// <if expr="chromeos">
+export {NativeLayerCros, NativeLayerCrosImpl, PrinterSetupResponse} from './native_layer_cros.js';
+// </if>
 export {getSelectDropdownBackground} from './print_preview_utils.js';
 export {DEFAULT_MAX_COPIES} from './ui/copies_settings.js';
 export {DestinationState, NUM_PERSISTED_DESTINATIONS} from './ui/destination_settings.js';
diff --git a/chrome/browser/resources/print_preview/ui/BUILD.gn b/chrome/browser/resources/print_preview/ui/BUILD.gn
index cdc504ab..9a3971bd 100644
--- a/chrome/browser/resources/print_preview/ui/BUILD.gn
+++ b/chrome/browser/resources/print_preview/ui/BUILD.gn
@@ -72,6 +72,7 @@
     "..:cloud_print_interface",
     "..:cloud_print_interface_impl",
     "..:native_layer",
+    "..:native_layer_cros",
     "../data:destination",
     "../data:document_info",
     "../data:margins",
@@ -524,6 +525,7 @@
     ":highlight_utils",
     ":settings_behavior",
     "..:print_preview_utils",
+    "../data:cdd",
     "../data:destination",
     "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
   ]
diff --git a/chrome/browser/resources/print_preview/ui/advanced_settings_item.js b/chrome/browser/resources/print_preview/ui/advanced_settings_item.js
index 84ca21aa..529f033 100644
--- a/chrome/browser/resources/print_preview/ui/advanced_settings_item.js
+++ b/chrome/browser/resources/print_preview/ui/advanced_settings_item.js
@@ -12,7 +12,8 @@
 
 import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
-import {Destination, VendorCapability, VendorCapabilitySelectOption} from '../data/destination.js';
+import {VendorCapability, VendorCapabilitySelectOption} from '../data/cdd.js';
+import {Destination} from '../data/destination.js';
 import {getStringForCurrentLocale} from '../print_preview_utils.js';
 
 import {updateHighlights} from './highlight_utils.js';
diff --git a/chrome/browser/resources/print_preview/ui/app.js b/chrome/browser/resources/print_preview/ui/app.js
index b43d106c..8e4efee 100644
--- a/chrome/browser/resources/print_preview/ui/app.js
+++ b/chrome/browser/resources/print_preview/ui/app.js
@@ -28,6 +28,9 @@
 import {Size} from '../data/size.js';
 import {Error, State} from '../data/state.js';
 import {NativeInitialSettings, NativeLayer, NativeLayerImpl} from '../native_layer.js';
+// <if expr="chromeos">
+import {NativeLayerCros, NativeLayerCrosImpl} from '../native_layer_cros.js';
+// </if>
 
 import {DestinationState} from './destination_settings.js';
 import {PreviewAreaState} from './preview_area.js';
@@ -134,6 +137,11 @@
   /** @private {?NativeLayer} */
   nativeLayer_: null,
 
+  // <if expr="chromeos">
+  /** @private {?NativeLayerCros} */
+  nativeLayerCros_: null,
+  // </if>
+
   /** @private {!EventTracker} */
   tracker_: new EventTracker(),
 
@@ -181,6 +189,9 @@
   attached() {
     document.documentElement.classList.remove('loading');
     this.nativeLayer_ = NativeLayerImpl.getInstance();
+    // <if expr="chromeos">
+    this.nativeLayerCros_ = NativeLayerCrosImpl.getInstance();
+    // </if>
     this.addWebUIListener('print-failed', this.onPrintFailed_.bind(this));
     this.addWebUIListener(
         'print-preset-options', this.onPrintPresetOptions_.bind(this));
@@ -233,7 +244,7 @@
       // <if expr="chromeos">
       if (this.destination_ &&
           this.destination_.origin === DestinationOrigin.CROS) {
-        this.nativeLayer_.recordPrinterStatusHistogram(
+        this.nativeLayerCros_.recordPrinterStatusHistogram(
             this.destination_.printerStatusReason, false);
       }
       // </if>
@@ -364,8 +375,7 @@
   initializeCloudPrint_(cloudPrintUrl, appKioskMode, uiLocale) {
     assert(!this.cloudPrintInterface_);
     this.cloudPrintInterface_ = CloudPrintInterfaceImpl.getInstance();
-    this.cloudPrintInterface_.configure(
-        cloudPrintUrl, assert(this.nativeLayer_), appKioskMode, uiLocale);
+    this.cloudPrintInterface_.configure(cloudPrintUrl, appKioskMode, uiLocale);
     this.tracker_.add(
         assert(this.cloudPrintInterface_).getEventTarget(),
         CloudPrintInterfaceEventType.SUBMIT_DONE, this.close_.bind(this));
@@ -490,7 +500,7 @@
     // <if expr="chromeos">
     if (this.destination_ &&
         this.destination_.origin === DestinationOrigin.CROS) {
-      this.nativeLayer_.recordPrinterStatusHistogram(
+      this.nativeLayerCros_.recordPrinterStatusHistogram(
           this.destination_.printerStatusReason, true);
     }
     // </if>
@@ -503,7 +513,7 @@
     // <if expr="chromeos">
     if (this.destination_ &&
         this.destination_.origin === DestinationOrigin.CROS) {
-      this.nativeLayer_.recordPrinterStatusHistogram(
+      this.nativeLayerCros_.recordPrinterStatusHistogram(
           this.destination_.printerStatusReason, false);
     }
     // </if>
diff --git a/chrome/browser/resources/settings/autofill_page/address_edit_dialog.html b/chrome/browser/resources/settings/autofill_page/address_edit_dialog.html
index dbabd80..902fb2a 100644
--- a/chrome/browser/resources/settings/autofill_page/address_edit_dialog.html
+++ b/chrome/browser/resources/settings/autofill_page/address_edit_dialog.html
@@ -58,7 +58,7 @@
           </label>
           <select class="md-select" aria-labelledby="select-label"
               value="[[countryCode_]]" on-change="onCountryChange_"
-              tabindex="-1">
+              tabindex="-1" autofocus>
             <option value=""></option>
             <template is="dom-repeat" items="[[countries_]]">
               <option value="[[getCode_(item)]]"
@@ -74,13 +74,13 @@
               <template is="dom-if" if="[[item.isTextArea]]">
                 <settings-textarea label="[[item.component.fieldName]]"
                     value="{{item.value}}" on-value-changed="updateCanSave_"
-                    class$="address-column [[long_(item)]]" autofocus
+                    class$="address-column [[long_(item)]]"
                     spellcheck="false" maxlength="1000">
                 </settings-textarea>
               </template>
               <template is="dom-if" if="[[!item.isTextArea]]">
                 <cr-input type="text" label="[[item.component.fieldName]]"
-                    autofocus value="{{item.value}}" spellcheck="false"
+                    value="{{item.value}}" spellcheck="false"
                     on-value-changed="updateCanSave_" maxlength="1000"
                     class$="address-column [[long_(item)]]">
                 </cr-input>
diff --git a/chrome/browser/resources/settings/autofill_page/passwords_device_section.js b/chrome/browser/resources/settings/autofill_page/passwords_device_section.js
index 97ed8162..cd7f016 100644
--- a/chrome/browser/resources/settings/autofill_page/passwords_device_section.js
+++ b/chrome/browser/resources/settings/autofill_page/passwords_device_section.js
@@ -159,6 +159,14 @@
       value: null,
     },
 
+    /** @private */
+    movingMultiplePasswordsToAccountFeatureEnabled_: {
+      type: Boolean,
+      value() {
+        return loadTimeData.getBoolean(
+            'enableMovingMultiplePasswordsToAccount');
+      }
+    },
   },
 
   keyBindings: {
diff --git a/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_action_assignment_dialog.html b/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_action_assignment_dialog.html
index b518c614..4ac1fd49 100644
--- a/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_action_assignment_dialog.html
+++ b/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_action_assignment_dialog.html
@@ -2,27 +2,58 @@
 
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
 <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
+<link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html">
+<link rel="import" href="chrome://resources/cr_elements/shared_style_css.html">
 <link rel="import" href="../../i18n_setup.html">
+<link rel="import" href="../os_icons.html">
 <link rel="import" href="switch_access_constants.html">
 
 <dom-module id="settings-switch-access-action-assignment-dialog">
   <template>
-    <!-- TODO: style. -->
+    <style include="cr-shared-style settings-shared">
+      cr-dialog::part(dialog) {
+        width: 420px;
+      }
+
+      #switchAssignments {
+        background-color: var(--google-grey-refresh-100);
+        border-radius: 4px;
+        display: flex;
+        flex-direction: column;
+        gap: 12px;
+        height: 88px;
+        margin-top: 20px;
+        overflow: auto;
+        padding: 16px;
+      }
+
+      .switch-assignment {
+        display: flex;
+      }
+
+      .switch-assignment-icon {
+        margin-inline-end: 10px;
+      }
+    </style>
     <cr-dialog id="switchAccessActionAssignmentDialog" show-on-attach>
       <div slot="title">[[dialogTitle_]]</div>
       <div slot="body">
         <div aria-live="polite">
           [[promptText_]]
         </div>
-        <div class="list-frame">
-          <template is="dom-repeat"
-              items="[[assignments_]]" as="assignment">
-            <div class="settings-box continuation list-item">
+        <div id="switchAssignments">
+          <template is="dom-repeat" items="[[assignments_]]" as="assignment">
+            <div class="switch-assignment">
+              <iron-icon icon="os-settings:hollow-check-circle"
+                  class="switch-assignment-icon">
+              </iron-icon>
               [[assignment]]
             </div>
           </template>
         </div>
+      </div>
+      <div slot="button-container">
         <cr-button class="cancel-button" on-click="onCancelClick_"
             id="cancel">
           $i18n{cancel}
diff --git a/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_action_assignment_dialog.js b/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_action_assignment_dialog.js
index 1883d960..7eab642 100644
--- a/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_action_assignment_dialog.js
+++ b/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_action_assignment_dialog.js
@@ -72,12 +72,12 @@
     },
 
     /**
-     * The localized dialog title.
+     * The localized action label.
      * @private {string}
      */
     dialogTitle_: {
       type: String,
-      computed: 'getLabelForAction_(action)',
+      computed: 'getDialogTitleForAction_(action)',
     },
 
     /**
@@ -306,6 +306,17 @@
   },
 
   /**
+   * @param {SwitchAccessCommand} action
+   * @return {string}
+   * @private
+   */
+  getDialogTitleForAction_(action) {
+    return this.i18n(
+        'switchAccessActionAssignmentDialogTitle',
+        this.getLabelForAction_(action));
+  },
+
+  /**
    * @param {AssignmentState} assignmentState
    * @return {string}
    * @private
diff --git a/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_subpage.html b/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_subpage.html
index dfa5526b..efe0254 100644
--- a/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_subpage.html
+++ b/chrome/browser/resources/settings/chromeos/os_a11y_page/switch_access_subpage.html
@@ -22,51 +22,46 @@
       }
 
       ul {
-        list-style-type: none
+        list-style-type: none;
+        text-align: end;
       }
     </style>
     <h2>$i18n{switchAssignmentHeading}</h2>
     <div class="list-frame">
-      <div class="settings-box continuation list-item">
         <cr-link-row on-click="onSelectAssignClick_"
             id="selectLinkRow"
             label="$i18n{assignSelectSwitchLabel}"
             sub-label="$i18n{assignSwitchSubLabel}"
             deep-link-focus-id$="[[Setting.kSwitchActionAssignment]]">
+          <ul id="selectAssignmentList">
+            <template is="dom-repeat"
+                items="[[selectAssignments_]]" as="assignment">
+              <li>[[assignment]]</li>
+            </template>
+          </ul>
         </cr-link-row>
-        <ul id="selectAssignmentList">
-          <template is="dom-repeat"
-              items="[[selectAssignments_]]" as="assignment">
-            <li>[[assignment]]</li>
-          </template>
-        </ul>
-      </div>
-      <div class="settings-box continuation list-item">
         <cr-link-row on-click="onNextAssignClick_"
             id="nextLinkRow"
             label="$i18n{assignNextSwitchLabel}"
             sub-label="$i18n{assignSwitchSubLabel}">
+          <ul id="nextAssignmentList">
+            <template is="dom-repeat"
+                items="[[nextAssignments_]]" as="assignment">
+              <li>[[assignment]]</li>
+            </template>
+          </ul>
         </cr-link-row>
-        <ul id="nextAssignmentList">
-          <template is="dom-repeat"
-              items="[[nextAssignments_]]" as="assignment">
-            <li>[[assignment]]</li>
-          </template>
-        </ul>
-      </div>
-      <div class="settings-box continuation list-item">
         <cr-link-row on-click="onPreviousAssignClick_"
             id="previousLinkRow"
             label="$i18n{assignPreviousSwitchLabel}"
             sub-label="$i18n{assignSwitchSubLabel}">
+          <ul id="previousAssignmentList">
+            <template is="dom-repeat"
+                items="[[previousAssignments_]]" as="assignment">
+              <li>[[assignment]]</li>
+            </template>
+          </ul>
         </cr-link-row>
-        <ul id="previousAssignmentList">
-          <template is="dom-repeat"
-              items="[[previousAssignments_]]" as="assignment">
-            <li>[[assignment]]</li>
-          </template>
-        </ul>
-      </div>
     </div>
     <template is="dom-if"
         if="[[showSwitchAccessActionAssignmentDialog_]]" restamp>
diff --git a/chrome/browser/resources/settings/chromeos/os_icons.html b/chrome/browser/resources/settings/chromeos/os_icons.html
index 0bcbc86..fe8688e 100644
--- a/chrome/browser/resources/settings/chromeos/os_icons.html
+++ b/chrome/browser/resources/settings/chromeos/os_icons.html
@@ -60,6 +60,7 @@
       <g id="google-drive"><path fill-rule="evenodd" clip-rule="evenodd" d="M18.7333 12L13.0167 2H7.31665V2.00833L13.025 12H18.7333ZM8.27502 12.8334L5.41669 17.8334H16.35L19.2084 12.8334H8.27502ZM6.59167 3.26672L1.125 12.8334L3.98333 17.8251L9.45 8.26672C9.45 8.27506 6.59167 3.26672 6.59167 3.26672Z"></path></g>
       <g id="google-play"><path fill-rule="evenodd" clip-rule="evenodd" d="M16.8167 9.06658L14.2667 7.61658L11.8834 9.99991L14.2667 12.3832L16.8167 10.9332C17.275 10.6749 17.5 10.3416 17.5 9.99991C17.5 9.65824 17.275 9.32491 16.8167 9.06658ZM3.92498 2.04163C4.93332 3.04996 10.9417 9.05829 10.9417 9.05829L13.0666 6.93329L4.14998 1.88329C4.09165 1.84996 4.03332 1.82496 3.97498 1.79996C3.83332 1.74163 3.72498 1.84163 3.84998 1.97496C3.87498 1.99163 3.89998 2.01663 3.92498 2.04163ZM3.92501 17.9583C3.90001 17.9833 3.87501 18.0083 3.85834 18.025C3.73334 18.15 3.84168 18.2583 3.98334 18.2C4.04168 18.175 4.10001 18.15 4.15834 18.1166L13.0667 13.0667L10.9417 10.9417C10.9417 10.9417 4.94168 16.95 3.92501 17.9583ZM10 9.99995C10 9.99995 2.975 2.97495 2.81667 2.81662C2.65833 2.65828 2.5 2.75828 2.5 2.97495V17.025C2.5 17.2416 2.65833 17.3416 2.81667 17.1833C2.975 17.025 10 9.99995 10 9.99995Z"></path></g>
       <g id="hard-drive"><path d="M14 14C14 14.5523 13.5523 15 13 15C12.4477 15 12 14.5523 12 14C12 13.4477 12.4477 13 13 13C13.5523 13 14 13.4477 14 14Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M5 2C3.89543 2 3 2.89543 3 4V16C3 17.1046 3.89543 18 5 18H15C16.1046 18 17 17.1046 17 16V4C17 2.89543 16.1046 2 15 2H5ZM5 16H15V12H5V16ZM5 10H15V4H5V10Z"></path></g>
+      <g id="hollow-check-circle"><path d="M11.7071 5.29289C11.3166 4.90237 10.6834 4.90237 10.2929 5.29289L7 8.58579L5.70711 7.29289C5.31658 6.90237 4.68342 6.90237 4.29289 7.29289C3.90237 7.68342 3.90237 8.31658 4.29289 8.70711L6.29289 10.7071C6.68342 11.0976 7.31658 11.0976 7.70711 10.7071L11.7071 6.70711C12.0976 6.31658 12.0976 5.68342 11.7071 5.29289Z" fill="#1A73E8"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M8 16C12.4183 16 16 12.4183 16 8C16 3.58172 12.4183 0 8 0C3.58172 0 0 3.58172 0 8C0 12.4183 3.58172 16 8 16ZM8 14C11.3137 14 14 11.3137 14 8C14 4.68629 11.3137 2 8 2C4.68629 2 2 4.68629 2 8C2 11.3137 4.68629 14 8 14Z" fill="#1A73E8"></path></g>
       <g id="ic-checked-filled"><circle cx="10" cy="10" r="8" fill="#1A73E8"></circle><path fill-rule="evenodd" clip-rule="evenodd" d="M8.33333 11.833L6.16667 9.66634L5 10.833L8.33333 14.1663L15 7.49967L13.8333 6.33301L8.33333 11.833Z" fill="white"></path></g>
       <g id="lock"><path d="M11.75 12.5C11.75 13.4665 10.9665 14.25 10 14.25C9.0335 14.25 8.25 13.4665 8.25 12.5C8.25 11.5335 9.0335 10.75 10 10.75C10.9665 10.75 11.75 11.5335 11.75 12.5Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M14 7H13.5V5C13.5 3.34315 11.6569 2 10 2C8.34315 2 6.5 3.34315 6.5 5V7H6C4.89543 7 4 7.89543 4 9V16C4 17.1046 4.89543 18 6 18H14C15.1046 18 16 17.1046 16 16V9C16 7.89543 15.1046 7 14 7ZM12 5.5V7H8V5.5C8 5 8.5 3.5 10 3.5C11.5 3.5 12 5 12 5.5ZM6 9V16H14V9H6Z"></path></g>
       <g id="keyboard"><path fill-rule="evenodd" clip-rule="evenodd" d="M18 3H2C0.9 3 0.01 3.9 0.01 5L0 15C0 16.1 0.9 17 2 17H18C19.1 17 20 16.1 20 15V5C20 3.9 19.1 3 18 3ZM18 5V15H2V5H18ZM11 6H9V8H11V6ZM9 9H11V11H9V9ZM8 6H6V8H8V6ZM6 9H8V11H6V9ZM5 9H3V11H5V9ZM3 6H5V8H3V6ZM14 12H6V14H14V12ZM12 9H14V11H12V9ZM14 6H12V8H14V6ZM15 9H17V11H15V9ZM17 6H15V8H17V6Z"></path></g>
diff --git a/chrome/browser/safe_browsing/chrome_cleaner/reporter_runner_browsertest_win.cc b/chrome/browser/safe_browsing/chrome_cleaner/reporter_runner_browsertest_win.cc
index ca8dd1f..0b1f4683 100644
--- a/chrome/browser/safe_browsing/chrome_cleaner/reporter_runner_browsertest_win.cc
+++ b/chrome/browser/safe_browsing/chrome_cleaner/reporter_runner_browsertest_win.cc
@@ -126,8 +126,10 @@
   }
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(_))
+        .WillByDefault(Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
 
@@ -145,7 +147,7 @@
 
   void ComponentRegistered() { waiter_.Signal(); }
 
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
   Waiter waiter_;
 
   DISALLOW_COPY_AND_ASSIGN(ReporterRunnerPolicyTest);
diff --git a/chrome/browser/search/ntp_custom_background_enabled_policy_handler_browsertest.cc b/chrome/browser/search/ntp_custom_background_enabled_policy_handler_browsertest.cc
index dd905b6b..b3c7610 100644
--- a/chrome/browser/search/ntp_custom_background_enabled_policy_handler_browsertest.cc
+++ b/chrome/browser/search/ntp_custom_background_enabled_policy_handler_browsertest.cc
@@ -26,15 +26,17 @@
     : public InProcessBrowserTest {
  public:
   void SetUp() override {
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
     InProcessBrowserTest::SetUp();
   }
 
  protected:
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 };
 
 IN_PROC_BROWSER_TEST_F(NtpCustomBackgroundEnabledPolicyHandlerTest, Override) {
diff --git a/chrome/browser/search_engines/template_url_service_sync_unittest.cc b/chrome/browser/search_engines/template_url_service_sync_unittest.cc
index 1da4c7d..e2d2c10 100644
--- a/chrome/browser/search_engines/template_url_service_sync_unittest.cc
+++ b/chrome/browser/search_engines/template_url_service_sync_unittest.cc
@@ -1115,8 +1115,14 @@
     CreateTestTemplateURL(ASCIIToUTF16("keyword2"), "http://bbb.com")));
   ProcessAndExpectNotify(changes, 1);
 
-  EXPECT_TRUE(model()->GetTemplateURLForHost("aaa.com"));
+  // Because aaa.com was marked as replaceable, it was removed in favor of the
+  // extension engine.
+  EXPECT_FALSE(model()->GetTemplateURLForHost("aaa.com"));
+  // But bbb.com was marked as non-replaceable, so it coexists with extension2.
   EXPECT_TRUE(model()->GetTemplateURLForHost("bbb.com"));
+
+  // The extensions should continue to take precedence over the normal
+  // user-created engines.
   EXPECT_EQ(extension1,
             model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword1")));
   EXPECT_EQ(extension2,
diff --git a/chrome/browser/search_engines/template_url_service_unittest.cc b/chrome/browser/search_engines/template_url_service_unittest.cc
index 9034344d..449e4778e 100644
--- a/chrome/browser/search_engines/template_url_service_unittest.cc
+++ b/chrome/browser/search_engines/template_url_service_unittest.cc
@@ -417,6 +417,7 @@
   data.SetKeyword(ASCIIToUTF16("keyword"));
   data.SetURL("http://test2");
   data.safe_for_autoreplace = false;
+  data.last_modified = base::Time::FromTimeT(20);
   TemplateURL* t_url = model()->Add(std::make_unique<TemplateURL>(data));
 
   // Because the old TemplateURL was replaceable and the new one wasn't, the new
@@ -432,25 +433,28 @@
   data.SetShortName(ASCIIToUTF16("third"));
   data.SetURL("http://test3");
   data.safe_for_autoreplace = true;
-  model()->Add(std::make_unique<TemplateURL>(data));
+  EXPECT_EQ(nullptr, model()->Add(std::make_unique<TemplateURL>(data)));
   VerifyObserverCount(0);
   EXPECT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
   EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name());
   EXPECT_EQ(ASCIIToUTF16("keyword"), t_url->keyword());
   EXPECT_FALSE(t_url->safe_for_autoreplace());
 
-  // Now try adding a non-replaceable TemplateURL again.  This should uniquify
-  // the existing entry's keyword.
+  // Now try adding a non-replaceable TemplateURL again.  This should allow both
+  // TemplateURLs to exist under keyword, although the old one should still be
+  // better, since it was more recently last_modified.
   data.SetShortName(ASCIIToUTF16("fourth"));
   data.SetURL("http://test4");
+  // Make sure this one is not as recent as |t_url|.
+  data.last_modified = base::Time();
   data.safe_for_autoreplace = false;
   TemplateURL* t_url2 = model()->Add(std::make_unique<TemplateURL>(data));
   VerifyObserverCount(1);
-  EXPECT_EQ(t_url2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
+  EXPECT_EQ(t_url, model()->GetTemplateURLForKeyword(ASCIIToUTF16("keyword")));
   EXPECT_EQ(ASCIIToUTF16("fourth"), t_url2->short_name());
   EXPECT_EQ(ASCIIToUTF16("keyword"), t_url2->keyword());
   EXPECT_EQ(ASCIIToUTF16("second"), t_url->short_name());
-  EXPECT_EQ(ASCIIToUTF16("test2"), t_url->keyword());
+  EXPECT_EQ(ASCIIToUTF16("keyword"), t_url->keyword());
 }
 
 TEST_F(TemplateURLServiceTest, AddOmniboxExtensionKeyword) {
@@ -1711,6 +1715,7 @@
   std::unique_ptr<TemplateURLData> turl_data =
       GenerateDummyTemplateURLData("common_keyword");
   turl_data->safe_for_autoreplace = false;
+  turl_data->last_modified = base::Time();
 
   // Add non replaceable user engine.
   const TemplateURL* user1 =
@@ -1721,8 +1726,11 @@
       "common_keyword", "extension_id", true, Time::FromDoubleT(2));
 
   // Add another non replaceable user engine with same keyword as extension.
+  // But make it slightly "better" than the other one via last-modified date.
+  turl_data->last_modified = base::Time::FromTimeT(20);
   const TemplateURL* user2 =
       model()->Add(std::make_unique<TemplateURL>(*turl_data));
+  turl_data->last_modified = base::Time();
 
   // Check extension DSE is set as default and its keyword is not changed.
   const TemplateURL* current_dse = model()->GetDefaultSearchProvider();
@@ -1739,12 +1747,9 @@
   TemplateURL* omnibox_api = model()->FindTemplateURLForExtension(
       "omnibox_api_extension_id", TemplateURL::OMNIBOX_API_EXTENSION);
 
-  // Expect that first non replaceable user engine keyword is changed because of
-  // conflict. Second user engine will keep its keyword.
-  EXPECT_NE(ASCIIToUTF16("common_keyword"), user1->keyword());
+  // Expect that all four engines kept their keywords.
+  EXPECT_EQ(ASCIIToUTF16("common_keyword"), user1->keyword());
   EXPECT_EQ(ASCIIToUTF16("common_keyword"), user2->keyword());
-
-  // Check that extensions kept their keywords.
   EXPECT_EQ(ASCIIToUTF16("common_keyword"), extension->keyword());
   EXPECT_EQ(ASCIIToUTF16("common_keyword"), omnibox_api->keyword());
 
@@ -1823,8 +1828,9 @@
   TemplateURL* user1 =
       AddKeywordWithDate("user_engine1", "user1", "http://test1", std::string(),
                          std::string(), std::string(), true);
-  AddKeywordWithDate("user_engine2", "user2", "http://test2", std::string(),
-                     std::string(), std::string(), true);
+  TemplateURL* user2 =
+      AddKeywordWithDate("user_engine2", "user2", "http://test2", std::string(),
+                         std::string(), std::string(), true);
   // Update first engine to conflict with second by keyword. This should
   // overwrite the second engine.
   model()->ResetTemplateURL(user1, ASCIIToUTF16("title"), ASCIIToUTF16("user2"),
@@ -1835,8 +1841,9 @@
   model()->ResetTemplateURL(user1, ASCIIToUTF16("title"), ASCIIToUTF16("user1"),
                             "http://test_search.com");
   EXPECT_EQ(user1, model()->GetTemplateURLForKeyword(ASCIIToUTF16("user1")));
-  // Check that no engine is now found by keyword user2.
-  EXPECT_FALSE(model()->GetTemplateURLForKeyword(ASCIIToUTF16("user2")));
+  // Expect that |user2| is now unmasked, since we don't delete replaceable
+  // engines during the Update() phase, only on Add().
+  EXPECT_EQ(user2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("user2")));
 }
 
 TEST_F(TemplateURLServiceTest, CheckNonreplaceableEnginesKeywordsConflicts) {
@@ -1849,76 +1856,43 @@
                          std::string(), std::string(), std::string(), false);
 
   // Check it is accessible by keyword and host.
+  EXPECT_EQ(kCommonKeyword, user1->keyword());
   EXPECT_EQ(user1, model()->GetTemplateURLForKeyword(kCommonKeyword));
   EXPECT_EQ(user1, model()->GetTemplateURLForHost("test1"));
 
   // 2. Add another non replaceable user engine with same keyword but different
-  // search url.
-  const TemplateURL* user2 =
-      AddKeywordWithDate("nonreplaceable2", "common_keyword", "http://test2",
-                         std::string(), std::string(), std::string(), false);
-  // Existing engine conflicting keyword must be changed to value generated from
-  // its search url. Both engines must be acessible by keyword and host.
-  EXPECT_EQ(ASCIIToUTF16("test1"), user1->keyword());
-  EXPECT_EQ(user1, model()->GetTemplateURLForKeyword(ASCIIToUTF16("test1")));
-  EXPECT_EQ(user1, model()->GetTemplateURLForHost("test1"));
+  // search url. Make it a bit "better" with a non-zero date.
+  const TemplateURL* user2 = AddKeywordWithDate(
+      "nonreplaceable2", "common_keyword", "http://test2", std::string(),
+      std::string(), std::string(), false, "UTF-8", base::Time::FromTimeT(20));
+  // Both engines must be accessible by host. Prefer user2 because newer.
+  EXPECT_EQ(kCommonKeyword, user1->keyword());
+  EXPECT_EQ(kCommonKeyword, user2->keyword());
   EXPECT_EQ(user2, model()->GetTemplateURLForKeyword(kCommonKeyword));
+  EXPECT_EQ(user1, model()->GetTemplateURLForHost("test1"));
   EXPECT_EQ(user2, model()->GetTemplateURLForHost("test2"));
 
-  // 3. Add another non replaceable user engine with same keyword and same url
-  // as in engine that already exists in model.
-  const TemplateURL* user3 =
-      AddKeywordWithDate("nonreplaceable3", "common_keyword", "http://test2",
-                         std::string(), std::string(), std::string(), false);
-  // Previous conflicting engine will get keyword generated from url. Both
-  // engines must be acessible.
-  EXPECT_EQ(ASCIIToUTF16("test2"), user2->keyword());
-  EXPECT_EQ(user2, model()->GetTemplateURLForKeyword(ASCIIToUTF16("test2")));
-  EXPECT_EQ(kCommonKeyword, user3->keyword());
-  EXPECT_EQ(user3, model()->GetTemplateURLForKeyword(kCommonKeyword));
-  // Expect user2 or user3 returned for host "test2" because now both user2 and
-  // user3 engines correspond to host "test2" and GetTemplateURLForHost returns
-  // one of them.
-  const TemplateURL* url_for_test2 = model()->GetTemplateURLForHost("test2");
-  EXPECT_TRUE(user2 == url_for_test2 || user3 == url_for_test2);
-
-  // 4. Add another non replaceable user engine with common keyword.
-  const TemplateURL* user4 =
-      AddKeywordWithDate("nonreplaceable4", "common_keyword", "http://test3",
-                         std::string(), std::string(), std::string(), false);
-  // Existing conflicting engine user3 will get keyword generated by appending
-  // '_' to its keyword because it can not get keyword autogenerated from search
-  // url - "test2" keyword is already in use by user2 engine. Both engines must
-  // be acessible.
-  EXPECT_EQ(ASCIIToUTF16("common_keyword_"), user3->keyword());
-  EXPECT_EQ(user3,
-            model()->GetTemplateURLForKeyword(ASCIIToUTF16("common_keyword_")));
-  EXPECT_EQ(kCommonKeyword, user4->keyword());
-  EXPECT_EQ(user4, model()->GetTemplateURLForKeyword(kCommonKeyword));
-  EXPECT_EQ(user4, model()->GetTemplateURLForHost("test3"));
-
   // Check conflict between search engines with html tags embedded in URL host.
   // URLs with embedded HTML canonicalize to contain uppercase characters in the
   // hostname. Ensure these URLs are still handled correctly for conflict
   // resolution.
-  const TemplateURL* user5 =
-      AddKeywordWithDate("nonreplaceable5", "embedded.%3chtml%3eweb",
-                         "http://embedded.<html>web/?q={searchTerms}",
-                         std::string(), std::string(), std::string(), false);
-  EXPECT_EQ(ASCIIToUTF16("embedded.%3chtml%3eweb"), user5->keyword());
-  EXPECT_EQ(user5, model()->GetTemplateURLForKeyword(
-                       ASCIIToUTF16("embedded.%3chtml%3eweb")));
-  const TemplateURL* user6 =
+  const TemplateURL* embed_better = AddKeywordWithDate(
+      "nonreplaceable5", "embedded.%3chtml%3eweb",
+      "http://embedded.<html>web/?q={searchTerms}", std::string(),
+      std::string(), std::string(), false, "UTF-8", base::Time::FromTimeT(20));
+  EXPECT_EQ(ASCIIToUTF16("embedded.%3chtml%3eweb"), embed_better->keyword());
+  EXPECT_EQ(embed_better, model()->GetTemplateURLForKeyword(
+                              ASCIIToUTF16("embedded.%3chtml%3eweb")));
+  const TemplateURL* embed_worse =
       AddKeywordWithDate("nonreplaceable6", "embedded.%3chtml%3eweb",
                          "http://embedded.<html>web/?q={searchTerms}",
                          std::string(), std::string(), std::string(), false);
-  EXPECT_EQ(ASCIIToUTF16("embedded.%3chtml%3eweb"), user6->keyword());
-  EXPECT_EQ(user6, model()->GetTemplateURLForKeyword(
-                       ASCIIToUTF16("embedded.%3chtml%3eweb")));
-  // Expect existing engine changed its keyword.
-  EXPECT_EQ(ASCIIToUTF16("embedded.%3chtml%3eweb_"), user5->keyword());
-  EXPECT_EQ(user5, model()->GetTemplateURLForKeyword(
-                       ASCIIToUTF16("embedded.%3chtml%3eweb_")));
+  // Expect both to have kept their keyword, but to return the "better" one
+  // when requesting the engine for the shared keyword.
+  EXPECT_EQ(ASCIIToUTF16("embedded.%3chtml%3eweb"), embed_better->keyword());
+  EXPECT_EQ(ASCIIToUTF16("embedded.%3chtml%3eweb"), embed_worse->keyword());
+  EXPECT_EQ(embed_better, model()->GetTemplateURLForKeyword(
+                              ASCIIToUTF16("embedded.%3chtml%3eweb")));
 }
 
 TEST_F(TemplateURLServiceTest, CheckReplaceableEnginesKeywordsConflicts) {
@@ -1934,10 +1908,10 @@
   EXPECT_EQ(user1, model()->GetTemplateURLForHost("test1"));
 
   // 2. Try to add replaceable user engine with conflicting keyword. Addition
-  // must fail.
-  const TemplateURL* user2 =
-      AddKeywordWithDate("replaceable", "common_keyword", "http://test2",
-                         std::string(), std::string(), std::string(), true);
+  // must fail, even if it has a more recent date.
+  const TemplateURL* user2 = AddKeywordWithDate(
+      "replaceable", "common_keyword", "http://test2", std::string(),
+      std::string(), std::string(), true, "UTF-8", base::Time::FromTimeT(20));
   EXPECT_FALSE(user2);
   EXPECT_FALSE(model()->GetTemplateURLForHost("test2"));
 
@@ -1950,18 +1924,18 @@
   EXPECT_EQ(user3, model()->GetTemplateURLForKeyword(kCommonKeyword2));
   EXPECT_EQ(user3, model()->GetTemplateURLForHost("test3"));
 
-  // 4. Add another replaceable user engine with conflicting keyword.
-  const TemplateURL* user4 =
-      AddKeywordWithDate("replaceable3", "common_keyword2", "http://test4",
-                         std::string(), std::string(), std::string(), true);
+  // 4. Add a newer replaceable user engine with conflicting keyword.
+  const TemplateURL* user4 = AddKeywordWithDate(
+      "replaceable3", "common_keyword2", "http://test4", std::string(),
+      std::string(), std::string(), true, "UTF-8", base::Time::FromTimeT(20));
   // New engine must exist and be accessible. Old replaceable engine must be
-  // evicted from model.
+  // evicted from model, because it has a "worse" creation date.
   EXPECT_FALSE(model()->GetTemplateURLForHost("test3"));
   EXPECT_EQ(user4, model()->GetTemplateURLForKeyword(kCommonKeyword2));
   EXPECT_EQ(user4, model()->GetTemplateURLForHost("test4"));
 
   // 5. Add non replaceable user engine with common_keyword2. Must evict
-  // conflicting replaceable engine.
+  // conflicting replaceable engine, even though it has a better creation date.
   const TemplateURL* user5 =
       AddKeywordWithDate("nonreplaceable5", "common_keyword2", "http://test5",
                          std::string(), std::string(), std::string(), false);
diff --git a/chrome/browser/ssl/ocsp_browsertest.cc b/chrome/browser/ssl/ocsp_browsertest.cc
index 4e8b60f..ae6095f 100644
--- a/chrome/browser/ssl/ocsp_browsertest.cc
+++ b/chrome/browser/ssl/ocsp_browsertest.cc
@@ -58,8 +58,10 @@
     SystemNetworkContextManager::SetEnableCertificateTransparencyForTesting(
         false);
 
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
 
@@ -201,7 +203,7 @@
     content::FlushNetworkServiceInstanceForTesting();
   }
 
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 
   std::unique_ptr<net::ScopedTestEVPolicy> ev_test_policy_;
   base::test::ScopedFeatureList scoped_feature_list_;
diff --git a/chrome/browser/ssl/ssl_browsertest.cc b/chrome/browser/ssl/ssl_browsertest.cc
index 7b2253f..2a6e2b64 100644
--- a/chrome/browser/ssl/ssl_browsertest.cc
+++ b/chrome/browser/ssl/ssl_browsertest.cc
@@ -422,8 +422,10 @@
   }
 
   void SetUp() override {
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
 
@@ -860,7 +862,7 @@
   net::SpawnedTestServer wss_server_expired_;
   net::SpawnedTestServer wss_server_mismatched_;
 
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 
   network::mojom::SSLConfig last_ssl_config_;
   mojo::Receiver<network::mojom::SSLConfigClient> receiver_{this};
@@ -1664,8 +1666,10 @@
   }
 
   void SetUp() override {
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
 
@@ -1715,7 +1719,7 @@
 
   net::EmbeddedTestServer https_server_;
 
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 
   DISALLOW_COPY_AND_ASSIGN(CertificateTransparencySSLUITest);
 };
@@ -5855,8 +5859,10 @@
       static const char kSecondProfileGaiaId[] = "9876543210";
       static const char kSecondProfileHash[] = "testProfile2";
 
-      EXPECT_CALL(policy_for_profile_2_, IsInitializationComplete(testing::_))
-          .WillRepeatedly(testing::Return(true));
+      ON_CALL(policy_for_profile_2_, IsInitializationComplete(testing::_))
+          .WillByDefault(testing::Return(true));
+      ON_CALL(policy_for_profile_2_, IsFirstPolicyLoadComplete(testing::_))
+          .WillByDefault(testing::Return(true));
       policy::PushProfilePolicyConnectorProviderForTesting(
           &policy_for_profile_2_);
 
@@ -5928,7 +5934,8 @@
   net::NSSCertDatabase* profile_2_cert_db_;
 
   // Policy provider for |profile_2_|. Overrides any other policy providers.
-  policy::MockConfigurationPolicyProvider policy_for_profile_2_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider>
+      policy_for_profile_2_;
 
  private:
   void DidGetCertDatabase(base::RunLoop* loop,
diff --git a/chrome/browser/sync/test/integration/two_client_web_apps_bmo_sync_test.cc b/chrome/browser/sync/test/integration/two_client_web_apps_bmo_sync_test.cc
index 8ec71030..a42ef7c4 100644
--- a/chrome/browser/sync/test/integration/two_client_web_apps_bmo_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_web_apps_bmo_sync_test.cc
@@ -38,8 +38,8 @@
 
 std::unique_ptr<KeyedService> CreateTestWebAppProvider(Profile* profile) {
   auto provider = std::make_unique<TestWebAppProvider>(profile);
-  provider->SetOsIntegrationManager(
-      std::make_unique<TestOsIntegrationManager>(profile, nullptr, nullptr));
+  provider->SetOsIntegrationManager(std::make_unique<TestOsIntegrationManager>(
+      profile, nullptr, nullptr, nullptr));
   provider->Start();
   DCHECK(provider);
   return provider;
diff --git a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ca.xtb b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ca.xtb
index 1d3e670..270144f 100644
--- a/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ca.xtb
+++ b/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_ca.xtb
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ca">
-<translation id="1717486229951421299">La llista de credencials que s'emplenaran amb un toc està oberta i ocupa la meitat inferior de la pantalla.</translation>
+<translation id="1717486229951421299">La llista de credencials que s'emplenaran amb un toc s'ha obert a mitja alçada.</translation>
 <translation id="207576718733492531">La llista de credencials que s'emplenaran amb un toc està tancada.</translation>
 <translation id="2359808026110333948">Continua</translation>
 <translation id="2410754283952462441">Tria un compte</translation>
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
index 99e060b..2162248 100644
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -3109,6 +3109,9 @@
           =1 {<ph name="READING_LIST_UNREAD_PAGE_COUNT_ONE">%1$d<ex>1</ex></ph> unread page}
           other {<ph name="READING_LIST_UNREAD_PAGE_COUNT_MANY">%1$d<ex>8</ex></ph> unread pages}}
       </message>
+      <message name="IDS_READING_LIST_NO_UNREAD_PAGES" desc="The text as reading list folder subtitle to inform the user that there is no reading list articles.">
+        No unread pages
+      </message>
       <message name="IDS_READING_LIST_INTRO_TEXT" desc="The text on the reading list in product help bubble and other UIs to introduce the feature to the user.">
         Save this page for later and get a reminder
       </message>
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_NO_UNREAD_PAGES.png.sha1 b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_NO_UNREAD_PAGES.png.sha1
new file mode 100644
index 0000000..542706df
--- /dev/null
+++ b/chrome/browser/ui/android/strings/android_chrome_strings_grd/IDS_READING_LIST_NO_UNREAD_PAGES.png.sha1
@@ -0,0 +1 @@
+f22d699832b320b6255b75a7134248d34fc542ea
\ No newline at end of file
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 5e75ff4..625a5e6 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
@@ -1127,6 +1127,7 @@
 <translation id="8920114477895755567">অভিভাৱকৰ সবিশেষৰ বাবে অপেক্ষা কৰি আছে।</translation>
 <translation id="8922289737868596582">পৃষ্ঠাসমূহ অফলাইনত ব্যৱহাৰ কৰিবলৈ সেইসমূহ 'অধিক' বিকল্পৰ বুটামটোৰ পৰা ডাউনল’ড কৰক</translation>
 <translation id="8928626432984354940">অৰ্ধ উচ্চতাত খোলা বুকমাৰ্ক ফ'ল্ডাৰৰ সূচী</translation>
+<translation id="8937267401510745927">আপোনাক কামবোৰ সম্পূৰ্ণ কৰাত সহায় কৰিবলৈ, আপুনি Assistant ব্যৱহাৰ কৰা ছাইটসমূহৰ URL আৰু সমল তথা আপুনি Assistantৰ জৰিয়তে দাখিল কৰা তথ্য Googleএ লাভ কৰিব। এই তথ্যখিনি আপোনাৰ Google একাউণ্টত ষ্ট’ৰ কৰা হ’ব পাৰে। আপুনি Chromeৰ ছেটিঙত Assistant অফ কৰিব পাৰে।</translation>
 <translation id="8937772741022875483">আপুনি Chromeত কৰা কাৰ্যকলাপ ডিজিটেল ৱেলবিইঙ-ৰ পৰা আঁতৰাবনে?</translation>
 <translation id="8942627711005830162">অন্য উইণ্ড’ত খোলক</translation>
 <translation id="8951232171465285730">Chromeএ আপোনাৰ <ph name="MEGABYTES" /> এমবি ডেটা ৰাহি কৰিছে</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 b22bee9..b328011e 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
@@ -1175,7 +1175,7 @@
 <translation id="9204836675896933765">১টি ফাইল বাকি</translation>
 <translation id="9206873250291191720">আ</translation>
 <translation id="9209888181064652401">কল করা যাচ্ছে না</translation>
-<translation id="9219103736887031265">ছবিগুলি</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="926205370408745186">ডিজিটাল ওয়েলবিং থেকে আপনার Chrome অ্যাক্টিভিটি সরিয়ে দিন</translation>
 <translation id="927968626442779827">Google Chrome-এ 'লাইট' মোড ব্যবহার করুন</translation>
 <translation id="932327136139879170">হোম</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
index 1b038343..33ca144 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Web lokacije</translation>
 <translation id="4594952190837476234">Stranica van mreže je od <ph name="CREATION_TIME" /> i može se razlikovati od verzije koja je na mreži.</translation>
 <translation id="4605958867780575332">Uklonjena je stavka: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Spremite stranice za kasnije i postavite podsjetnik</translation>
 <translation id="4616150815774728855">Otvori <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Koristi lozinku</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 ugrožena lozinka}one{# ugrožena lozinka}few{# ugrožene lozinke}other{# ugroženih lozinki}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7778840695157240389">Provjerite nove priče kasnije</translation>
 <translation id="7786595606756654269">Google Asistent pruža bolje glasovno iskustvo za pretraživanje weba i stupanje u interakciju s web lokacijama koje ste otvorili. Google Asistent će primiti URL i sadržaje web lokacija koje koristite s njim.</translation>
+<translation id="7790349552933995572">Početni zaslon</translation>
 <translation id="7791543448312431591">Dodaj</translation>
 <translation id="7798392620021911922">Vraćeno kartica: <ph name="TAB_COUNT" /></translation>
 <translation id="780301667611848630">Ne, hvala</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
index fd69106..b919e97 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
@@ -119,7 +119,7 @@
 <translation id="1877026089748256423">Chrome no està actualitzat</translation>
 <translation id="1883903952484604915">Els meus fitxers</translation>
 <translation id="189358972401248634">Altres idiomes</translation>
-<translation id="1918175104945982129">La IU de consentiment de la cerca per veu de l'Assistent ocupa la meitat inferior de la pantalla</translation>
+<translation id="1918175104945982129">La IU de consentiment de la cerca per veu de l'Assistent s'ha obert a mitja alçada</translation>
 <translation id="1919130412786645364">Permet l'inici de sessió a Chrome</translation>
 <translation id="1922362554271624559">Idiomes suggerits</translation>
 <translation id="1925021887439448749">Introdueix l'adreça web personalitzada</translation>
@@ -446,7 +446,7 @@
 <translation id="4248098802131000011">Protegeix les contrasenyes contra les violacions de les dades i contra altres problemes de seguretat</translation>
 <translation id="4250229828105606438">Captura de pantalla</translation>
 <translation id="4256782883801055595">Llicències de programari lliure</translation>
-<translation id="4263656433980196874">La IU de consentiment de la cerca per veu de l'Assistent ocupa tota la pantalla</translation>
+<translation id="4263656433980196874">La IU de consentiment de la cerca per veu de l'Assistent s'ha obert a alçada completa</translation>
 <translation id="4269820728363426813">Copia l'adreça de l'enllaç</translation>
 <translation id="4298388696830689168">Llocs web enllaçats</translation>
 <translation id="4303044213806199882">chrome_screenshot_<ph name="CURRENT_TIMESTAMP_MS" /></translation>
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Llocs web</translation>
 <translation id="4594952190837476234">Aquesta pàgina sense connexió és del dia <ph name="CREATION_TIME" /> i pot ser diferent de la versió en línia.</translation>
 <translation id="4605958867780575332">S'ha suprimit l'element: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Desa pàgines per a més tard i rep un recordatori</translation>
 <translation id="4616150815774728855">Obre <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Fes servir la contrasenya</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 contrasenya en perill}other{# contrasenyes en perill}}</translation>
@@ -830,7 +831,7 @@
 <translation id="6710213216561001401">Anterior</translation>
 <translation id="671481426037969117">S'ha esgotat el temps definit al temporitzador per a <ph name="FQDN" />. Es tornarà a iniciar demà.</translation>
 <translation id="6738867403308150051">S'està baixant...</translation>
-<translation id="6767294960381293877">La llista de dispositius amb què es compartirà una pestanya ocupa la meitat inferior de la pantalla.</translation>
+<translation id="6767294960381293877">La llista de dispositius amb què es compartirà una pestanya s'ha obert a mitja alçada.</translation>
 <translation id="6783942555455976443">Desa aquesta pàgina per a més tard i rep un recordatori</translation>
 <translation id="6811034713472274749">Ja es pot veure la pàgina</translation>
 <translation id="6820686453637990663">CVC</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> més}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> més}}</translation>
 <translation id="7778840695157240389">Torna més tard per veure històries noves</translation>
 <translation id="7786595606756654269">L'Assistent de Google ofereix una millor experiència de veu per fer cerques al web i interaccionar amb els llocs web que tens oberts. L'Assistent de Google rebrà l'URL i el contingut dels llocs web en què el facis servir.</translation>
+<translation id="7790349552933995572">Pantalla d'inici</translation>
 <translation id="7791543448312431591">Afegeix</translation>
 <translation id="7798392620021911922">S'han restaurat <ph name="TAB_COUNT" /> pestanyes</translation>
 <translation id="780301667611848630">No, gràcies</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
index e0d2ee7e..519f0ae 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Websites</translation>
 <translation id="4594952190837476234">Denne offlineside er fra <ph name="CREATION_TIME" /> og kan afvige fra onlineversionen.</translation>
 <translation id="4605958867780575332">Element fjernet: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Gem sider til senere, og få en påmindelse</translation>
 <translation id="4616150815774728855">Åbn <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Brug adgangskode</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 kompromitteret adgangskode}one{# kompromitteret adgangskode}other{# kompromitterede adgangskoder}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> mere}one{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> mere}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 og <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> mere}}</translation>
 <translation id="7778840695157240389">Vend tilbage senere for at se nye historier</translation>
 <translation id="7786595606756654269">Google Assistent giver en bedre brugeroplevelse med stemmestyring ved søgning på nettet og interaktion med åbne websites. Google Assistent modtager webadressen og indholdet på de websites, hvor du bruger Assistent.</translation>
+<translation id="7790349552933995572">Startskærm</translation>
 <translation id="7791543448312431591">Tilføj</translation>
 <translation id="7798392620021911922"><ph name="TAB_COUNT" /> faner blev gendannet</translation>
 <translation id="780301667611848630">Nej tak</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 177af1c..0fb9dea 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
@@ -1129,6 +1129,7 @@
 <translation id="8920114477895755567">Esperando los detalles parentales</translation>
 <translation id="8922289737868596582">Descarga páginas desde el botón Más opciones para usarlas sin conexión</translation>
 <translation id="8928626432984354940">La lista de carpetas de favoritos está abierta a media altura</translation>
+<translation id="8937267401510745927">Para ayudarte a completar tareas, Google recibirá las URL y el contenido de los sitios en los que uses Asistente, así como la información que envías a través de este servicio. Esta información se almacenará en tu Cuenta de Google. En la configuración de Chrome, puedes desactivar Asistente.</translation>
 <translation id="8937772741022875483">¿Quieres quitar tu actividad en Chrome de Bienestar digital?</translation>
 <translation id="8942627711005830162">Abrir en otra ventana</translation>
 <translation id="8951232171465285730">Chrome te permitió ahorrar <ph name="MEGABYTES" /> megabytes</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 4c11414..74e4b4a 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
@@ -1129,6 +1129,7 @@
 <translation id="8920114477895755567">Esperando detalles de los padres.</translation>
 <translation id="8922289737868596582">Descarga páginas con el botón con el botón Más opciones para usarlas sin conexión</translation>
 <translation id="8928626432984354940">Lista de carpetas de marcadores abierta a la mitad de altura</translation>
+<translation id="8937267401510745927">Para ayudarte a completar tareas, Google recibirá las URL y los contenidos de los sitios en los que uses el Asistente, así como la información que envíes a través de este. Es posible que esta información se almacene en tu cuenta de Google. Puedes desactivar el Asistente en los ajustes de Chrome.</translation>
 <translation id="8937772741022875483">¿Eliminar tu actividad de Chrome de Bienestar digital?</translation>
 <translation id="8942627711005830162">Abrir en otra ventana</translation>
 <translation id="8951232171465285730">Chrome te ha permitido ahorrar <ph name="MEGABYTES" /> MB</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
index 865f21e..3b993a5 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Saidid</translation>
 <translation id="4594952190837476234">Võrguühenduseta leht loodi <ph name="CREATION_TIME" /> ja see võib veebiversioonist erineda.</translation>
 <translation id="4605958867780575332">Üksus on eemaldatud: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Salvestage lehed hiljem kasutamiseks ja laske saata meeldetuletus</translation>
 <translation id="4616150815774728855">Ava <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Kasuta parooli</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 parool on ohus}other{# parooli on ohus}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 ja veel <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 ja veel <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7778840695157240389">Uute lugude nägemiseks tulge hiljem tagasi</translation>
 <translation id="7786595606756654269">Google'i assistent pakub veebiotsingute ja külastatavate saitidega suhtlemise jaoks paremat häälotsingu kasutuskogemust. Google'i assistendile antakse nende saitide URL-id ja sisu, millel assistenti kasutate.</translation>
+<translation id="7790349552933995572">Avakuva</translation>
 <translation id="7791543448312431591">Lisa</translation>
 <translation id="7798392620021911922">Taastati <ph name="TAB_COUNT" /> vahelehte</translation>
 <translation id="780301667611848630">Ei, aitäh</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
index 6d659b91..7cc7be9 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Webguneak</translation>
 <translation id="4594952190837476234">Konexiorik gabe erabiltzeko orri hau <ph name="CREATION_TIME" /> datan sortu zen. Ondorioz, baliteke sareko bertsioarekin bat ez etortzea.</translation>
 <translation id="4605958867780575332">Kendu da elementua: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Gorde orriak gerorako eta jaso abisu bat</translation>
 <translation id="4616150815774728855">Ireki <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Erabili pasahitza</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 pasahitz dago arriskuan}other{# pasahitz daude arriskuan}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" /> eta beste <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> eta beste <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7778840695157240389">Itzuli geroago istorio berririk dagoen ikusteko</translation>
 <translation id="7786595606756654269">Google-ren Laguntzailea eginbideari esker, errazagoa izango da ahotsa erabiliz Interneten bilaketak egitea eta irekita dituzun webguneekin interakzioan aritzea. Eginbidearekin erabiltzen dituzun webguneen URLak eta edukiak jasoko ditu Google-ren Laguntzailea eginbideak.</translation>
+<translation id="7790349552933995572">Hasierako pantaila</translation>
 <translation id="7791543448312431591">Gehitu</translation>
 <translation id="7798392620021911922">Leheneratu egin dira <ph name="TAB_COUNT" /> fitxa</translation>
 <translation id="780301667611848630">Ez, eskerrik asko</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
index 451e818..e0c08835 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fi.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Sivustot</translation>
 <translation id="4594952190837476234">Offline-sivu vastaa tilannetta <ph name="CREATION_TIME" /> ja saattaa poiketa nykyisestä verkkoversiosta.</translation>
 <translation id="4605958867780575332">Kohde poistettiin: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Tallenna sivuja myöhemmin luettavaksi, saat muistutuksen</translation>
 <translation id="4616150815774728855">Avaa <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Käytä salasanaa</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 vaarantunut salasana}other{# vaarantunutta salasanaa}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 ja <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> muu}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 ja <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> muuta}}</translation>
 <translation id="7778840695157240389">Katso mahdolliset uudet tarinat myöhemmin</translation>
 <translation id="7786595606756654269">Google Assistantin avulla voit hakea verkosta ja käyttää avoinna olevia sivuja sujuvammin äänikomennoilla. Google Assistant saa tiedot niiden sivustojen URL-osoitteista ja sisällöstä, joita käytät sen kautta.</translation>
+<translation id="7790349552933995572">Aloitusnäyttö</translation>
 <translation id="7791543448312431591">Lisää</translation>
 <translation id="7798392620021911922"><ph name="TAB_COUNT" /> välilehteä palautettu</translation>
 <translation id="780301667611848630">Ei kiitos</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
index 8945117..b07c3ea 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -1172,7 +1172,7 @@
 <translation id="9204836675896933765">1 ફાઇલ બાકી છે</translation>
 <translation id="9206873250291191720">A</translation>
 <translation id="9209888181064652401">કૉલ કરી શકતા નથી</translation>
-<translation id="9219103736887031265">છબીઓ</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="926205370408745186">ડિજિટલ લાઇફસ્ટાઇલમાંથી તમારી Chromeની પ્રવૃત્તિને કેવી રીતે કાઢવી</translation>
 <translation id="927968626442779827">Google Chrome પર લાઇટ મોડનો ઉપયોગ કરો</translation>
 <translation id="932327136139879170">હોમ</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 d61e5ae..13f9753 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
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Sites</translation>
 <translation id="4594952190837476234">यह पेज <ph name="CREATION_TIME" /> का है और यह ऑनलाइन वर्शन से अलग हो सकता है.</translation>
 <translation id="4605958867780575332">आइटम निकाला गया: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">पेजों को बाद के लिए सेव करें और रिमाइंडर पाएं</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> को खोलें</translation>
 <translation id="4634124774493850572">पासवर्ड का इस्तेमाल करें</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 पासवर्ड या तो हैक हुआ है या चोरी हुआ है}one{# पासवर्ड या तो हैक हुआ है या चोरी हुआ है}other{# पासवर्ड या तो हैक हुए हैं या चोरी हुए हैं}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 और <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> अन्य}one{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 और <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> अन्य}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 और <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> अन्य}}</translation>
 <translation id="7778840695157240389">नई कहानियों के लिए कुछ समय बाद आएं</translation>
 <translation id="7786595606756654269">Google Assistant, वेब पर खोजने के लिए वॉइस सर्च का बेहतर अनुभव उपलब्ध कराती है और आपको खोली गई साइटों से जोड़े रखती है. Google Assistant, यूआरएल और उन साइटों का कॉन्टेंट इस्तेमाल करेगी जिन पर आप Assistant का इस्तेमाल करते हैं.</translation>
+<translation id="7790349552933995572">होम स्क्रीन</translation>
 <translation id="7791543448312431591">जोड़ें</translation>
 <translation id="7798392620021911922"><ph name="TAB_COUNT" /> टैब वापस लाए गए</translation>
 <translation id="780301667611848630">नहीं, रहने दें</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
index 0eaab2d6..7da9609 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Web-lokacije</translation>
 <translation id="4594952190837476234">Ova offline stranica nastala je <ph name="CREATION_TIME" /> i možda se razlikuje od online verzije.</translation>
 <translation id="4605958867780575332">Stavka je uklonjena: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Spremite stranice za kasnije i postavite podsjetnik</translation>
 <translation id="4616150815774728855">Otvori <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Upotrijebi zaporku</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{Jedna ugrožena zaporka}one{# ugrožena zaporka}few{# ugrožene zaporke}other{# ugroženih zaporki}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7778840695157240389">Nove priče potražite kasnije</translation>
 <translation id="7786595606756654269">Google asistent pruža bolji glasovni doživljaj za pretraživanje weba i interakciju s web-lokacijama koje su otvorene. Google asistent primit će URL i sadržaj web-lokacija koje upotrebljavate uz njegovu pomoć.</translation>
+<translation id="7790349552933995572">Početni zaslon</translation>
 <translation id="7791543448312431591">Dodavanje</translation>
 <translation id="7798392620021911922">Kartice su vraćene (njih <ph name="TAB_COUNT" />)</translation>
 <translation id="780301667611848630">Ne, hvala</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 3e6e570..30a1b80 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
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">ເວັບໄຊ</translation>
 <translation id="4594952190837476234">ໜ້າອອບລາຍນີ້ມາຈາກ <ph name="CREATION_TIME" /> ແລະ ອາດຈະແຕກຕ່າງຈາກເວີຊັນອອນລາຍ.</translation>
 <translation id="4605958867780575332">ລຶບລາຍການແລ້ວ: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">ບັນທຶກໜ້າສຳລັບພາຍຫຼັງ ແລະ ຮັບການແຈ້ງເຕືອນ</translation>
 <translation id="4616150815774728855">ເປີດ <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">ໃຊ້ລະຫັດຜ່ານ</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{ມີລະຫັດຜ່ານທີ່ຖືກລະເມີດ 1 ລາຍການ}other{ມີລະຫັດຜ່ານທີ່ຖືກລະເມີດ # ລາຍການ}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 ແລະ ອີກ <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> ວິທີການຈ່າຍເງິນ}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 ແລະ ອີກ <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> ວິທີການຈ່າຍເງິນ}}</translation>
 <translation id="7778840695157240389">ກວດເບິ່ງເລື່ອງລາວໃໝ່ໃນພາຍຫຼັງ</translation>
 <translation id="7786595606756654269">ຜູ້ຊ່ວຍ Google ໃຫ້ປະສົບການສຽງທີ່ດີກວ່າສຳລັບການຊອກຫາເວັບ ແລະ ໂຕ້ຕອບກັບເວັບໄຊທີ່ທ່ານເປີດ. ຜູ້ຊ່ວຍ Google ຈະໄດ້ຮັບ URL ແລະ ເນື້ອຫາຂອງເວັບໄຊທີ່ທ່ານໃຊ້ກັບມັນ.</translation>
+<translation id="7790349552933995572">ໜ້າຈໍຫຼັກ</translation>
 <translation id="7791543448312431591">ເພີ່ມ</translation>
 <translation id="7798392620021911922">ກູ້ <ph name="TAB_COUNT" /> ແຖບຄືນແລ້ວ</translation>
 <translation id="780301667611848630">ບໍ່​, ​ຂອບ​ໃຈ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
index 84b614f..62d9d42 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Svetainės</translation>
 <translation id="4594952190837476234">Šis neprisijungus naudojamas puslapis sukurtas <ph name="CREATION_TIME" />, todėl gali skirtis nuo prisijungus pateiktos versijos.</translation>
 <translation id="4605958867780575332">Pašalintas elementas: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Išsaugokite puslapius, jei norite peržiūrėti vėliau, ir gaukite priminimą</translation>
 <translation id="4616150815774728855">Atidaryti „<ph name="WEBAPK_NAME" />“</translation>
 <translation id="4634124774493850572">Naudoti slaptažodį</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 pažeistas slaptažodis}one{# pažeistas slaptažodis}few{# pažeisti slaptažodžiai}many{# pažeisto slaptažodžio}other{# pažeistų slaptažodžių}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}many{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 ir dar <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7778840695157240389">Patikrinkite vėliau, ar yra naujų istorijų</translation>
 <translation id="7786595606756654269">„Google“ padėjėjas teikia geresnes funkcijas balsu ieškant žiniatinklyje ir sąveikaujant su atidarytomis svetainėmis. „Google“ padėjėjas gaus svetainių, kuriose lankotės jį naudodami, URL ir turinį.</translation>
+<translation id="7790349552933995572">Pagrindinis ekranas</translation>
 <translation id="7791543448312431591">Pridėti</translation>
 <translation id="7798392620021911922">Atkurta skirtukų: <ph name="TAB_COUNT" /></translation>
 <translation id="780301667611848630">Ačiū, ne</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
index a1024b6b..f11d9ed 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">ဝဘ်ဆိုက်များ</translation>
 <translation id="4594952190837476234">ဤအော့ဖ်လိုင်း စာမျက်နှာသည် <ph name="CREATION_TIME" /> က ဖြစ်ပြီး အွန်လိုင်းဗားရှင်းနှင့် ကွဲပြားနိုင်ပါသည်။</translation>
 <translation id="4605958867780575332">ဖယ်ရှားလိုက်သည့် အကြောင်းအရာ − <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">စာမျက်နှာများကို နောင်အတွက်သိမ်းပြီး သတိပေးချက်ရယူပါ</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" /> ကို ဖွင့်ပါ</translation>
 <translation id="4634124774493850572">စကားဝှက်ကို အသုံးပြုရန်</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{ကျိုးပေါက်ထားသည့် စကားဝှက် 1 ခု}other{ကျိုးပေါက်ထားသည့် စကားဝှက် # ခု}}</translation>
@@ -972,6 +973,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 နှင့် နောက်ထပ် <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> ခု}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 နှင့် နောက်ထပ် <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> ခု}}</translation>
 <translation id="7778840695157240389">သတင်းဆောင်းပါးသစ်များအတွက် နောက်မှ ပြန်လာကြည့်ပါ</translation>
 <translation id="7786595606756654269">ဝဘ်တွင်ရှာဖွေခြင်းနှင့် သင်ဖွင့်ထားသော ဝဘ်ဆိုက်များအသုံးပြုခြင်းတို့အတွက် ပိုကောင်းမွန်သော အသံအသုံးပြုမှုကို Google Assistant က ပေးပါသည်။ Google Assistant သည် ၎င်းနှင့် အသုံးပြုသောဝဘ်ဆိုက်၏ အကြောင်းအရာများနှင့် URL တို့ကို ရရှိပါမည်။</translation>
+<translation id="7790349552933995572">ပင်မစာမျက်နှာ</translation>
 <translation id="7791543448312431591">ထည့်ရန်</translation>
 <translation id="7798392620021911922">တဘ် <ph name="TAB_COUNT" /> ခု ပြန်ယူထားသည်</translation>
 <translation id="780301667611848630">မလိုပါ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
index d15eb52..fe9b8f2 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Nettsteder</translation>
 <translation id="4594952190837476234">Denne siden uten nett er fra <ph name="CREATION_TIME" /> og kan avvike fra nettversjonen.</translation>
 <translation id="4605958867780575332">Elementet er fjernet: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Lagre sider til senere, og få en påminnelse</translation>
 <translation id="4616150815774728855">Åpne <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Bruk passord</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 passord er utsatt for sikkerhetsbrudd}other{# passord er utsatt for sikkerhetsbrudd}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> til}other{<ph name="PAYMENT_METHOD_PREVIEW" /> og <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" /> til}}</translation>
 <translation id="7778840695157240389">Kom tilbake senere for nye nyhetssaker</translation>
 <translation id="7786595606756654269">Google-assistenten gjør det lettere å bruke stemmen til å søke på nettet og utføre handlinger på nettstedene du er inne på. Google-assistenten mottar nettadressene til og innholdet på nettstedene der du bruker den.</translation>
+<translation id="7790349552933995572">Startskjerm</translation>
 <translation id="7791543448312431591">Legg til</translation>
 <translation id="7798392620021911922">Gjenopprettet <ph name="TAB_COUNT" /> faner</translation>
 <translation id="780301667611848630">Nei takk</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
index d58a170d..9d413f60b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
@@ -1173,7 +1173,7 @@
 <translation id="9204836675896933765">1 ଫାଇଲ୍‌ ବାକି ଅଛି</translation>
 <translation id="9206873250291191720">ଅ</translation>
 <translation id="9209888181064652401">କଲ୍ କରାଯାଇପାରିବ ନାହିଁ</translation>
-<translation id="9219103736887031265">ଛବିଗୁଡ଼ିକ</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="926205370408745186">ଡିଜିଟାଲ୍ ୱେଲ୍‍ବିଂରୁ ଆପଣଙ୍କର Chrome କାର୍ଯ୍ୟକଳାପଗୁଡ଼ିକୁ କାଢ଼ନ୍ତୁ</translation>
 <translation id="927968626442779827">Google Chromeରେ ଲାଇଟ୍ ମୋଡ୍ ବ୍ୟବହାର କରନ୍ତୁ</translation>
 <translation id="932327136139879170">Home</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
index d5964703..b06a364e 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Witryny</translation>
 <translation id="4594952190837476234">Ta strona offline jest z <ph name="CREATION_TIME" /> i może różnić się od wersji online.</translation>
 <translation id="4605958867780575332">Usunięto element: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Zapisz strony na później i ustaw przypomnienie</translation>
 <translation id="4616150815774728855">Otwórz <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Użyj hasła</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 przejęte hasło}few{# przejęte hasła}many{# przejętych haseł}other{# przejętego hasła}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}many{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i jeszcze <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7778840695157240389">Sprawdź później, czy pojawiły się nowe</translation>
 <translation id="7786595606756654269">Podczas wyszukiwania w internecie i korzystania ze stron, na które wchodzisz, Asystent Google oferuje bardziej zaawansowane funkcje głosowe. Ma on dostęp do adresów URL i zawartości stron, na których go używasz.</translation>
+<translation id="7790349552933995572">Ekran główny</translation>
 <translation id="7791543448312431591">Dodaj</translation>
 <translation id="7798392620021911922">Liczba przywróconych kart: <ph name="TAB_COUNT" /></translation>
 <translation id="780301667611848630">Nie, dziękuję</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
index a854375..640ac1a0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -1130,6 +1130,7 @@
 <translation id="8920114477895755567">Aguardando detalhes dos pais.</translation>
 <translation id="8922289737868596582">Use o botão Mais opções para fazer o download de páginas e acessá-las off-line</translation>
 <translation id="8928626432984354940">Lista de pastas de favoritos aberta na metade da altura</translation>
+<translation id="8937267401510745927">Para ajudar você com suas tarefas, o Google receberá os URLs e o conteúdo de sites em que você usa o Assistente, bem como as informações que você envia por ele. Essas informações poderão ser armazenadas na sua Conta do Google. É possível desativar o Assistente nas configurações do Chrome.</translation>
 <translation id="8937772741022875483">Remover sua atividade do Chrome do Bem-estar digital?</translation>
 <translation id="8942627711005830162">Abrir em outra janela</translation>
 <translation id="8951232171465285730">O Chrome economizou <ph name="MEGABYTES" /> MB</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
index cb837b8..06ec214b 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Site-uri</translation>
 <translation id="4594952190837476234">Această pagină offline este din data de <ph name="CREATION_TIME" /> și poate fi diferită de versiunea online.</translation>
 <translation id="4605958867780575332">Element eliminat: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Salvează paginile pentru mai târziu și primește un memento</translation>
 <translation id="4616150815774728855">Deschide <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Folosește parola</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{O parolă compromisă}few{# parole compromise}other{# de parole compromise}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 și încă <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 și încă <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 și încă <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7778840695157240389">Revino mai târziu pentru subiecte noi</translation>
 <translation id="7786595606756654269">Asistentul Google oferă o experiență vocală mai bună pentru căutarea pe web și interacțiunea cu site-uri pe care le-ai deschis. Asistentul Google va primi adresa URL și conținutul site-urilor în care îl folosești.</translation>
+<translation id="7790349552933995572">Ecran de pornire</translation>
 <translation id="7791543448312431591">Adaugă</translation>
 <translation id="7798392620021911922">S-au restabilit <ph name="TAB_COUNT" /> file</translation>
 <translation id="780301667611848630">Nu, mulțumesc</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
index 901c9c0..71e88a0 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb
@@ -1129,6 +1129,7 @@
 <translation id="8920114477895755567">Недостаточно данных о родителях.</translation>
 <translation id="8922289737868596582">Скачивайте страницы через меню кнопки "Ещё" и открывайте их без подключения к Интернету</translation>
 <translation id="8928626432984354940">Список папок с закладками развернут на половину экрана</translation>
+<translation id="8937267401510745927">Чтобы вы смогли выполнять действия в Chrome с помощью Ассистента, в Google будет отправляться контент и URL сайтов, а также информация, которую вы сообщаете Ассистенту. Эта информация может храниться в вашем аккаунте Google. Отключить Ассистента можно в настройках Chrome.</translation>
 <translation id="8937772741022875483">Удалить данные о ваших действиях в Chrome из сервиса "Цифровое благополучие"?</translation>
 <translation id="8942627711005830162">Открыть в новом окне</translation>
 <translation id="8951232171465285730">Благодаря Chrome вы сэкономили <ph name="MEGABYTES" /> МБ свободного места</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
index a9360f4..1925c71 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sl.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Spletna mesta</translation>
 <translation id="4594952190837476234">Ta stran brez povezave je bila ustvarjena <ph name="CREATION_TIME" /> in se morda razlikuje od spletne različice.</translation>
 <translation id="4605958867780575332">Odstranjen element: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Shranite strani za pozneje in prejmite opomnik</translation>
 <translation id="4616150815774728855">Odpri <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Uporabi geslo</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 ogroženo geslo}one{# ogroženo geslo}two{# ogroženi gesli}few{# ogrožena gesla}other{# ogroženih gesel}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" /> \u2026 in še <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" /> \u2026 in še <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}two{<ph name="PAYMENT_METHOD_PREVIEW" /> \u2026 in še <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" /> \u2026 in še <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" /> \u2026 in še <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7778840695157240389">Vrnite se pozneje in preverite, ali so na voljo nove novice</translation>
 <translation id="7786595606756654269">Pomočnik Google omogoča boljšo glasovno izkušnjo pri iskanju v spletu in komunikaciji s spletnimi stranmi, ki jih imate odprte. Pomočnik Google prejme URL in vsebino spletnih mest, s katero ga uporabljate.</translation>
+<translation id="7790349552933995572">Začetni zaslon</translation>
 <translation id="7791543448312431591">Dodaj</translation>
 <translation id="7798392620021911922">Število obnovljenih zavihkov: <ph name="TAB_COUNT" /></translation>
 <translation id="780301667611848630">Ne, hvala</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
index 8327267..70d018a 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Sajtovi</translation>
 <translation id="4594952190837476234">Ova oflajn stranica je od <ph name="CREATION_TIME" /> i može da se razlikuje od onlajn verzije.</translation>
 <translation id="4605958867780575332">Stavka je uklonjena: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Sačuvajte stranice za kasnije i primite podsetnik</translation>
 <translation id="4616150815774728855">Otvori <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Koristi lozinku</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 ugrožena lozinka}one{# ugrožena lozinka}few{# ugrožene lozinke}other{# ugroženih lozinki}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 i još <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7778840695157240389">Vratite se kasnije za još novih vesti</translation>
 <translation id="7786595606756654269">Google pomoćnik pruža bolji glasovni doživljaj za pretraživanje veba i interakciju sa sajtovima koje ste otvorili. Google pomoćnik će primiti URL-ove i sadržaj sajtova koje koristite sa njim.</translation>
+<translation id="7790349552933995572">Početni ekran</translation>
 <translation id="7791543448312431591">Dodaj</translation>
 <translation id="7798392620021911922">Vraćene kartice: <ph name="TAB_COUNT" /></translation>
 <translation id="780301667611848630">Ne, hvala</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
index b46135d..26b895bb 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">Сајтови</translation>
 <translation id="4594952190837476234">Ова офлајн страница је од <ph name="CREATION_TIME" /> и може да се разликује од онлајн верзије.</translation>
 <translation id="4605958867780575332">Ставка је уклоњена: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">Сачувајте странице за касније и примите подсетник</translation>
 <translation id="4616150815774728855">Отвори <ph name="WEBAPK_NAME" /></translation>
 <translation id="4634124774493850572">Користи лозинку</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 угрожена лозинка}one{# угрожена лозинка}few{# угрожене лозинке}other{# угрожених лозинки}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}one{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}few{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 и још <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7778840695157240389">Вратите се касније за још нових вести</translation>
 <translation id="7786595606756654269">Google помоћник пружа бољи гласовни доживљај за претраживање веба и интеракцију са сајтовима које сте отворили. Google помоћник ће примити URL-ове и садржај сајтова које користите са њим.</translation>
+<translation id="7790349552933995572">Почетни екран</translation>
 <translation id="7791543448312431591">Додај</translation>
 <translation id="7798392620021911922">Враћене картице: <ph name="TAB_COUNT" /></translation>
 <translation id="780301667611848630">Не, хвала</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
index eb3d4b3..e29ceaaa 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -491,6 +491,7 @@
 <translation id="4587589328781138893">సైట్‌లు</translation>
 <translation id="4594952190837476234">ఈ ఆఫ్‌లైన్ పేజీ <ph name="CREATION_TIME" />కి చెందినది మరియు ఆన్‌లైన్ వెర్షన్ వేరుగా ఉండవచ్చు.</translation>
 <translation id="4605958867780575332">ఈ అంశం తీసివేయబడింది: <ph name="ITEM_TITLE" /></translation>
+<translation id="4614535611158687827">తర్వాత కోసం పేజీలను సేవ్ చేసి, ఒక రిమైండర్‌ను పొందండి</translation>
 <translation id="4616150815774728855"><ph name="WEBAPK_NAME" />ని తెరువు</translation>
 <translation id="4634124774493850572">పాస్‌వర్డ్‌ను ఉపయోగించు</translation>
 <translation id="4640331037679501949">{NUM_PASSWORDS,plural, =1{1 చోరీకి గురైన పాస్‌వర్డ్}other{# చోరీకి గురైన పాస్‌వర్డ్‌లు}}</translation>
@@ -973,6 +974,7 @@
 <translation id="7774809984919390718">{PAYMENT_METHOD,plural, =1{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 మరియు మరో <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}other{<ph name="PAYMENT_METHOD_PREVIEW" />\u2026 మరియు మరో <ph name="NUMBER_OF_ADDITIONAL_PAYMENT_METHODS" />}}</translation>
 <translation id="7778840695157240389">కొత్త కథనాల కోసం తర్వాత మళ్లీ చెక్ చేయండి</translation>
 <translation id="7786595606756654269">వెబ్‌లో సెర్చ్ చేయడం కోసం, అలాగే మీరు తెరిచిన సైట్‌లతో ఎంగేజ్ అయ్యి ఉండటం కోసం Google Assistant మెరుగైన వాయిస్ అనుభవాన్ని అందిస్తుంది. Google Assistant మీరు దానితో ఉపయోగించే సైట్ల URL, అలాగే కంటెంట్‌లను అందుకుంటుంది.</translation>
+<translation id="7790349552933995572">హోమ్ స్క్రీన్</translation>
 <translation id="7791543448312431591">జోడించు</translation>
 <translation id="7798392620021911922"><ph name="TAB_COUNT" /> ట్యాబ్‌లు రీస్టోర్ చేయబడ్డాయి</translation>
 <translation id="780301667611848630">వద్దు , ధన్యవాదాలు</translation>
@@ -1173,7 +1175,7 @@
 <translation id="9204836675896933765">1 ఫైల్ మిగిలి ఉంది</translation>
 <translation id="9206873250291191720">A</translation>
 <translation id="9209888181064652401">కాల్‌లను చేయడం సాధ్యం కాదు</translation>
-<translation id="9219103736887031265">చిత్రాలు</translation>
+<translation id="9219103736887031265">ఇమేజ్‌లు</translation>
 <translation id="926205370408745186">డిజిటల్ సంక్షేమం నుండి మీ Chrome కార్యకలాపాన్ని తీసివేస్తుంది</translation>
 <translation id="927968626442779827">Google Chromeలోని లైట్ మోడ్‌ను ఉపయోగించండి</translation>
 <translation id="932327136139879170">హోమ్</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
index 2069182..a36cd686 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_tr.xtb
@@ -1129,6 +1129,7 @@
 <translation id="8920114477895755567">Ebeveyn ayrıntıları bekleniyor.</translation>
 <translation id="8922289737868596582">Çevrimdışı olarak kullanmak istediğiniz sayfaları Diğer seçenekler düğmesini kullanarak indirin</translation>
 <translation id="8928626432984354940">Yer işareti klasörlerinin listesi, ekranın yarısına kadar açıldı</translation>
+<translation id="8937267401510745927">Google, görevleri tamamlamanıza yardımcı olmak için Asistan'ı kullandığınız sitelerin URL'lerinin ve içeriklerinin yanı sıra Asistan aracılığıyla gönderdiğiniz bilgileri alır. Bu bilgiler Google hesabınızda depolanabilir. Asistan'ı Chrome ayarlarından kapatabilirsiniz.</translation>
 <translation id="8937772741022875483">Chrome etkinliğiniz Dijital Denge'den kaldırılsın mı?</translation>
 <translation id="8942627711005830162">Yeni pencerede aç</translation>
 <translation id="8951232171465285730">Chrome <ph name="MEGABYTES" /> MB tasarruf sağladı</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
index ec109ab..10feff9 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -325,7 +325,7 @@
 <translation id="32895400574683172">允许显示通知</translation>
 <translation id="3290991969712132877">若要更快速地访问该网页,请通过“更多选项”按钮将它添加到主屏幕</translation>
 <translation id="3295530008794733555">浏览速度更快。耗用的流量更少。</translation>
-<translation id="3297344142967351106">语音协助</translation>
+<translation id="3297344142967351106">语音助理</translation>
 <translation id="3298243779924642547">精简版</translation>
 <translation id="3303414029551471755">要开始下载该内容吗?</translation>
 <translation id="3315103659806849044">您正在自定义您的“同步功能和 Google 服务”设置。要完成开启同步功能的操作,请点按屏幕底部附近的“确认”按钮。转到上一层级</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
index bf3a79a..5d4b68f 100644
--- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
+++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -1129,6 +1129,7 @@
 <translation id="8920114477895755567">尚未取得家長詳細資料。</translation>
 <translation id="8922289737868596582">透過「更多選項」按鈕下載網頁,以便離線存取</translation>
 <translation id="8928626432984354940">書籤資料夾清單已開啟,顯示在畫面下半部</translation>
+<translation id="8937267401510745927">為協助你完成工作,當你在網站上使用 Google 助理時,系統會將該網站的網址和內容,連同你透過 Google 助理提交的資訊,一併傳送給 Google。這類資訊可能會儲存在你的 Google 帳戶中。你可以透過 Chrome 設定停用 Google 助理。</translation>
 <translation id="8937772741022875483">要將你的 Chrome 活動記錄從數位健康中移除嗎?</translation>
 <translation id="8942627711005830162">在其他視窗中開啟</translation>
 <translation id="8951232171465285730">Chrome 為你節省了 <ph name="MEGABYTES" /> MB</translation>
diff --git a/chrome/browser/ui/ash/chrome_capture_mode_delegate.cc b/chrome/browser/ui/ash/chrome_capture_mode_delegate.cc
index ba0845b2..73d8d6a 100644
--- a/chrome/browser/ui/ash/chrome_capture_mode_delegate.cc
+++ b/chrome/browser/ui/ash/chrome_capture_mode_delegate.cc
@@ -11,6 +11,7 @@
 #include "chrome/browser/apps/app_service/app_service_proxy.h"
 #include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
 #include "chrome/browser/apps/app_service/launch_utils.h"
+#include "chrome/browser/browser_process.h"
 #include "chrome/browser/chromeos/policy/dlp/dlp_content_manager.h"
 #include "chrome/browser/download/download_prefs.h"
 #include "chrome/browser/platform_util.h"
@@ -29,6 +30,8 @@
 
 namespace {
 
+ChromeCaptureModeDelegate* g_instance = nullptr;
+
 ScreenshotArea ConvertToScreenshotArea(const aura::Window* window,
                                        const gfx::Rect& bounds) {
   return window->IsRootWindow()
@@ -36,11 +39,39 @@
              : ScreenshotArea::CreateForWindow(window);
 }
 
+bool IsScreenCaptureDisabledByPolicy() {
+  return g_browser_process->local_state()->GetBoolean(
+      prefs::kDisableScreenshots);
+}
+
 }  // namespace
 
-ChromeCaptureModeDelegate::ChromeCaptureModeDelegate() = default;
+ChromeCaptureModeDelegate::ChromeCaptureModeDelegate() {
+  DCHECK_EQ(g_instance, nullptr);
+  g_instance = this;
+}
 
-ChromeCaptureModeDelegate::~ChromeCaptureModeDelegate() = default;
+ChromeCaptureModeDelegate::~ChromeCaptureModeDelegate() {
+  DCHECK_EQ(g_instance, this);
+  g_instance = nullptr;
+}
+
+// static
+ChromeCaptureModeDelegate* ChromeCaptureModeDelegate::Get() {
+  DCHECK(g_instance);
+  return g_instance;
+}
+
+void ChromeCaptureModeDelegate::SetIsScreenCaptureLocked(bool locked) {
+  is_screen_capture_locked_ = locked;
+  if (is_screen_capture_locked_)
+    InterruptVideoRecordingIfAny();
+}
+
+void ChromeCaptureModeDelegate::InterruptVideoRecordingIfAny() {
+  if (interrupt_video_recording_callback_)
+    std::move(interrupt_video_recording_callback_).Run();
+}
 
 base::FilePath ChromeCaptureModeDelegate::GetActiveUserDownloadsDir() const {
   DCHECK(chromeos::LoginState::Get()->IsUserLoggedIn());
@@ -86,12 +117,19 @@
 }
 
 bool ChromeCaptureModeDelegate::IsCaptureModeInitRestricted() const {
-  return policy::DlpContentManager::Get()->IsCaptureModeInitRestricted();
+  return is_screen_capture_locked_ || IsScreenCaptureDisabledByPolicy() ||
+         policy::DlpContentManager::Get()->IsCaptureModeInitRestricted();
 }
 
 bool ChromeCaptureModeDelegate::IsCaptureAllowed(const aura::Window* window,
                                                  const gfx::Rect& bounds,
                                                  bool for_video) const {
+  if (is_screen_capture_locked_)
+    return false;
+
+  if (IsScreenCaptureDisabledByPolicy())
+    return false;
+
   policy::DlpContentManager* dlp_content_manager =
       policy::DlpContentManager::Get();
   const ScreenshotArea area = ConvertToScreenshotArea(window, bounds);
@@ -103,11 +141,16 @@
     const aura::Window* window,
     const gfx::Rect& bounds,
     base::OnceClosure stop_callback) {
+  // The order here matters, since DlpContentManager::OnVideoCaptureStarted()
+  // may call InterruptVideoRecordingIfAny() right away, so the callback must be
+  // set first.
+  interrupt_video_recording_callback_ = std::move(stop_callback);
   policy::DlpContentManager::Get()->OnVideoCaptureStarted(
-      ConvertToScreenshotArea(window, bounds), std::move(stop_callback));
+      ConvertToScreenshotArea(window, bounds));
 }
 
 void ChromeCaptureModeDelegate::StopObservingRestrictedContent() {
+  interrupt_video_recording_callback_.Reset();
   policy::DlpContentManager::Get()->OnVideoCaptureStopped();
 }
 
diff --git a/chrome/browser/ui/ash/chrome_capture_mode_delegate.h b/chrome/browser/ui/ash/chrome_capture_mode_delegate.h
index c7253487..c550d6d 100644
--- a/chrome/browser/ui/ash/chrome_capture_mode_delegate.h
+++ b/chrome/browser/ui/ash/chrome_capture_mode_delegate.h
@@ -18,6 +18,16 @@
       delete;
   ~ChromeCaptureModeDelegate() override;
 
+  static ChromeCaptureModeDelegate* Get();
+
+  // Sets |is_screen_capture_locked_| to the given |locked|, and interrupts any
+  // on going video capture.
+  void SetIsScreenCaptureLocked(bool locked);
+
+  // Interrupts an on going video recording if any, due to some restricted
+  // content showing up on the screen, or if screen capture becomes locked.
+  void InterruptVideoRecordingIfAny();
+
   // ash::CaptureModeDelegate:
   base::FilePath GetActiveUserDownloadsDir() const override;
   void ShowScreenCaptureItemInFolder(const base::FilePath& file_path) override;
@@ -37,6 +47,19 @@
       override;
   void BindAudioStreamFactory(
       mojo::PendingReceiver<audio::mojom::StreamFactory> receiver) override;
+
+ private:
+  // Used to temporarily disable capture mode in certain cases for which neither
+  // a device policy, nor DLP will be triggered. For example, Some extension
+  // APIs can request that a tab operate in a locked fullscreen mode, and in
+  // that, capturing the screen is disabled.
+  bool is_screen_capture_locked_ = false;
+
+  // A callback to terminate an on going video recording on ash side due to a
+  // restricted content showing up on the screen, or screen capture becoming
+  // locked.
+  // This is only non-null during recording.
+  base::OnceClosure interrupt_video_recording_callback_;
 };
 
 #endif  // CHROME_BROWSER_UI_ASH_CHROME_CAPTURE_MODE_DELEGATE_H_
diff --git a/chrome/browser/ui/ash/recording_service_browsertest.cc b/chrome/browser/ui/ash/recording_service_browsertest.cc
index 872a971..6d8926b 100644
--- a/chrome/browser/ui/ash/recording_service_browsertest.cc
+++ b/chrome/browser/ui/ash/recording_service_browsertest.cc
@@ -159,6 +159,7 @@
 
   void FinishVideoRecordingTest(ash::CaptureModeTestApi* test_api) {
     test_api->PerformCapture();
+    test_api->FlushRecordingServiceForTesting();
     // Record a 1.5-second long video to give it enough time to produce and send
     // video frames in order to exercise all the code paths of the service and
     // its client.
@@ -213,3 +214,16 @@
   test_api.SetUserSelectedRegion(gfx::Rect(50, 200));
   FinishVideoRecordingTest(&test_api);
 }
+
+// Tests that recording will be interrupted once screen capture becomes locked.
+IN_PROC_BROWSER_TEST_F(RecordingServiceBrowserTest,
+                       RecordingInterruptedOnCaptureLocked) {
+  ash::CaptureModeTestApi test_api;
+  test_api.StartForFullscreen(/*for_video=*/true);
+  test_api.PerformCapture();
+  test_api.FlushRecordingServiceForTesting();
+  WaitForMilliseconds(1000);
+  ChromeCaptureModeDelegate::Get()->SetIsScreenCaptureLocked(true);
+  const base::FilePath video_path = WaitForVideoFileToBeSaved();
+  VerifyVideoFileAndDelete(video_path);
+}
diff --git a/chrome/browser/ui/blocked_content/safe_browsing_triggered_popup_blocker_browsertest.cc b/chrome/browser/ui/blocked_content/safe_browsing_triggered_popup_blocker_browsertest.cc
index 85b90a7..159ee82 100644
--- a/chrome/browser/ui/blocked_content/safe_browsing_triggered_popup_blocker_browsertest.cc
+++ b/chrome/browser/ui/blocked_content/safe_browsing_triggered_popup_blocker_browsertest.cc
@@ -101,8 +101,10 @@
   void SetUp() override {
     FinalizeFeatures();
     database_helper_ = CreateTestDatabase();
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
     InProcessBrowserTest::SetUp();
   }
@@ -164,7 +166,7 @@
   std::unique_ptr<TestSafeBrowsingDatabaseHelper> database_helper_;
   std::unique_ptr<blocked_content::SafeBrowsingTriggeredPopupBlocker>
       popup_blocker_;
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 
   DISALLOW_COPY_AND_ASSIGN(SafeBrowsingTriggeredPopupBlockerBrowserTest);
 };
diff --git a/chrome/browser/ui/blocked_content/tab_under_blocker_browsertest.cc b/chrome/browser/ui/blocked_content/tab_under_blocker_browsertest.cc
index 0631337..bc096e14 100644
--- a/chrome/browser/ui/blocked_content/tab_under_blocker_browsertest.cc
+++ b/chrome/browser/ui/blocked_content/tab_under_blocker_browsertest.cc
@@ -48,8 +48,10 @@
     scoped_feature_list_.InitAndEnableFeature(
         TabUnderNavigationThrottle::kBlockTabUnders);
 
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   }
 
@@ -89,7 +91,7 @@
 
  private:
   base::test::ScopedFeatureList scoped_feature_list_;
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 
   DISALLOW_COPY_AND_ASSIGN(TabUnderBlockerBrowserTest);
 };
diff --git a/chrome/browser/ui/managed_ui_browsertest.cc b/chrome/browser/ui/managed_ui_browsertest.cc
index fc0037a..44a9fc56e 100644
--- a/chrome/browser/ui/managed_ui_browsertest.cc
+++ b/chrome/browser/ui/managed_ui_browsertest.cc
@@ -25,15 +25,17 @@
   ~ManagedUiTest() override = default;
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnectorBase::SetPolicyProviderForTesting(&provider_);
   }
 
   policy::MockConfigurationPolicyProvider* provider() { return &provider_; }
 
  private:
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 
   DISALLOW_COPY_AND_ASSIGN(ManagedUiTest);
 };
diff --git a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
index e3d4081..7ba657d 100644
--- a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
+++ b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
@@ -161,8 +161,10 @@
   }
 
   void SetUp() override {
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
     InProcessBrowserTest::SetUp();
@@ -369,7 +371,7 @@
   }
 
  private:
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 
   // Non-owning pointer.
   TestLocationBarModel* test_location_bar_model_ = nullptr;
diff --git a/chrome/browser/ui/search/local_ntp_backgrounds_browsertest.cc b/chrome/browser/ui/search/local_ntp_backgrounds_browsertest.cc
index 68edf3a..08f256b 100644
--- a/chrome/browser/ui/search/local_ntp_backgrounds_browsertest.cc
+++ b/chrome/browser/ui/search/local_ntp_backgrounds_browsertest.cc
@@ -242,8 +242,10 @@
     : public extensions::ExtensionBrowserTest {
  public:
   void SetUp() override {
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
 
@@ -283,7 +285,7 @@
     ASSERT_EQ(new_theme->name(), theme_name);
   }
 
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 };
 
 IN_PROC_BROWSER_TEST_F(LocalNTPCustomBackgroundsThemeTest,
diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
index 1a703e7..6e3be8c 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
@@ -1294,7 +1294,7 @@
   void SetUpCommandLine(base::CommandLine* command_line) override;
   void SetUpInProcessBrowserTestFixture() override;
 
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
   policy::PolicyMap policy_map_;
 
  private:
@@ -1317,8 +1317,8 @@
 #endif  // (defined(OS_LINUX) || defined(OS_CHROMEOS)) &&
         // BUILDFLAG(GOOGLE_CHROME_BRANDING)
 
-  EXPECT_CALL(provider_, IsInitializationComplete(_))
-      .WillRepeatedly(Return(true));
+  ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
+  ON_CALL(provider_, IsFirstPolicyLoadComplete(_)).WillByDefault(Return(true));
   policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
 }
 
@@ -1568,8 +1568,10 @@
   StartupBrowserCreatorWelcomeBackTest() = default;
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
 
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   }
@@ -1621,7 +1623,7 @@
   Profile* profile_ = nullptr;
   std::unique_ptr<ScopedKeepAlive> scoped_keep_alive_;
   StartupBrowserCreator browser_creator_;
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 };
 
 IN_PROC_BROWSER_TEST_F(StartupBrowserCreatorWelcomeBackTest,
@@ -1710,8 +1712,10 @@
 
  private:
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(policy_provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
+    ON_CALL(policy_provider_, IsInitializationComplete(_))
+        .WillByDefault(Return(true));
+    ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
         &policy_provider_);
 
@@ -1727,7 +1731,7 @@
     }
   }
 
-  policy::MockConfigurationPolicyProvider policy_provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> policy_provider_;
 };
 
 IN_PROC_BROWSER_TEST_P(StartupBrowserCreatorInfobarsTest,
diff --git a/chrome/browser/ui/tabs/tab_strip_model.cc b/chrome/browser/ui/tabs/tab_strip_model.cc
index 032eb7a..504b535 100644
--- a/chrome/browser/ui/tabs/tab_strip_model.cc
+++ b/chrome/browser/ui/tabs/tab_strip_model.cc
@@ -1047,6 +1047,10 @@
     const std::vector<int>& indices) {
   ReentrancyCheck reentrancy_check(&reentrancy_guard_);
 
+  // Ensure that the indices are sorted and unique.
+  DCHECK(base::ranges::is_sorted(indices));
+  DCHECK(std::adjacent_find(indices.begin(), indices.end()) == indices.end());
+
   // The odds of |new_group| colliding with an existing group are astronomically
   // low. If there is a collision, a DCHECK will fail in |AddToNewGroupImpl()|,
   // in which case there is probably something wrong with
@@ -1062,6 +1066,10 @@
                                        const tab_groups::TabGroupId& group) {
   ReentrancyCheck reentrancy_check(&reentrancy_guard_);
 
+  // Ensure that the indices are sorted and unique.
+  DCHECK(base::ranges::is_sorted(indices));
+  DCHECK(std::adjacent_find(indices.begin(), indices.end()) == indices.end());
+
   AddToExistingGroupImpl(indices, group);
 }
 
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
index ad92cbb..45eeec68 100644
--- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
+++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
@@ -217,7 +217,7 @@
       browser_view_(browser_view),
       browser_frame_(browser_frame),
       virtual_desktop_helper_(nullptr) {
-  profile_observer_.Add(
+  profile_observation_.Observe(
       &g_browser_process->profile_manager()->GetProfileAttributesStorage());
 
   // TODO(crbug.com/1051306) Make turning off this policy turn off
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h
index 40a5c3f5..e39dc8a 100644
--- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h
+++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h
@@ -13,7 +13,7 @@
 
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/sequenced_task_runner.h"
 #include "base/win/scoped_gdi_object.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
@@ -100,8 +100,9 @@
 
   // This is used to monitor when the window icon needs to be updated because
   // the icon badge has changed (e.g., avatar icon changed).
-  ScopedObserver<ProfileAttributesStorage, ProfileAttributesStorage::Observer>
-      profile_observer_{this};
+  base::ScopedObservation<ProfileAttributesStorage,
+                          ProfileAttributesStorage::Observer>
+      profile_observation_{this};
 
   base::win::ScopedHICON icon_handle_;
 
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
index 0a3fed8e..91c9912 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view.cc
@@ -52,8 +52,9 @@
         GetProfileAttributesStorage().AddObserver(this);
   }
   if (browser_view_->tabstrip()) {
-    DCHECK(!tab_strip_observer_.IsObserving(browser_view_->tabstrip()));
-    tab_strip_observer_.Add(browser_view_->tabstrip());
+    DCHECK(
+        !tab_strip_observation_.IsObservingSource(browser_view_->tabstrip()));
+    tab_strip_observation_.Observe(browser_view_->tabstrip());
   }
 }
 
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view.h b/chrome/browser/ui/views/frame/browser_non_client_frame_view.h
index 42a8de8..3d692cb 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view.h
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_H_
 #define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_H_
 
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "build/build_config.h"
 #include "chrome/browser/profiles/profile_attributes_storage.h"
 #include "chrome/browser/ui/views/tabs/tab_strip.h"
@@ -198,7 +198,8 @@
           base::BindRepeating(&BrowserNonClientFrameView::PaintAsActiveChanged,
                               base::Unretained(this)));
 
-  ScopedObserver<TabStrip, TabStripObserver> tab_strip_observer_{this};
+  base::ScopedObservation<TabStrip, TabStripObserver> tab_strip_observation_{
+      this};
 
   DISALLOW_COPY_AND_ASSIGN(BrowserNonClientFrameView);
 };
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc
index 2f268a1..9c75ba8 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.cc
@@ -139,7 +139,7 @@
                                                     : ash::AppType::BROWSER));
 #endif
 
-  window_observer_.Add(GetFrameWindow());
+  window_observation_.Observe(GetFrameWindow());
 
   // To preserve privacy, tag incognito windows so that they won't be included
   // in screenshot sent to assistant server.
@@ -505,7 +505,7 @@
 
 void BrowserNonClientFrameViewChromeOS::OnWindowDestroying(
     aura::Window* window) {
-  window_observer_.RemoveAll();
+  window_observation_.RemoveObservation();
 }
 
 void BrowserNonClientFrameViewChromeOS::OnWindowPropertyChanged(
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.h b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.h
index e8115b3..e7176a31 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.h
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos.h
@@ -10,7 +10,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "chrome/browser/ui/views/frame/browser_frame_header_chromeos.h"
 #include "chrome/browser/ui/views/frame/browser_non_client_frame_view.h"
 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
@@ -215,7 +215,8 @@
   // Helper class for painting the header.
   std::unique_ptr<chromeos::FrameHeader> frame_header_;
 
-  ScopedObserver<aura::Window, aura::WindowObserver> window_observer_{this};
+  base::ScopedObservation<aura::Window, aura::WindowObserver>
+      window_observation_{this};
 
   base::WeakPtrFactory<BrowserNonClientFrameViewChromeOS> weak_ptr_factory_{
       this};
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc
index 33e9573b..e19d778e 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_chromeos_browsertest.cc
@@ -13,7 +13,7 @@
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "base/callback_helpers.h"
 #include "base/run_loop.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/test/metrics/histogram_tester.h"
 #include "build/build_config.h"
 #include "chrome/app/chrome_command_ids.h"
@@ -185,7 +185,7 @@
 class ImmersiveModeTester : public ImmersiveModeController::Observer {
  public:
   explicit ImmersiveModeTester(Browser* browser) : browser_(browser) {
-    scoped_observer_.Add(GetBrowserView()->immersive_mode_controller());
+    scoped_observation_.Observe(GetBrowserView()->immersive_mode_controller());
   }
   ~ImmersiveModeTester() override = default;
 
@@ -240,7 +240,7 @@
   }
 
   void OnImmersiveModeControllerDestroyed() override {
-    scoped_observer_.RemoveAll();
+    scoped_observation_.RemoveObservation();
   }
 
   void OnImmersiveFullscreenExited() override {
@@ -250,8 +250,9 @@
 
  private:
   Browser* browser_ = nullptr;
-  ScopedObserver<ImmersiveModeController, ImmersiveModeController::Observer>
-      scoped_observer_{this};
+  base::ScopedObservation<ImmersiveModeController,
+                          ImmersiveModeController::Observer>
+      scoped_observation_{this};
   bool reveal_started_ = false;
   bool reveal_ended_ = false;
   std::unique_ptr<base::RunLoop> reveal_loop_;
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac_browsertest.cc
index d75e429..8ace6bd0 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac_browsertest.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_mac_browsertest.cc
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 #include "base/run_loop.h"
-#include "base/scoped_observer.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index bd749e8..1b19a87b 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -1197,7 +1197,8 @@
       loading_bar_->SetWebContents(nullptr);
     contents_web_view_->SetWebContents(nullptr);
     infobar_container_->ChangeInfoBarManager(nullptr);
-    app_banner_manager_observer_.RemoveAll();
+    if (app_banner_manager_observation_.IsObserving())
+      app_banner_manager_observation_.RemoveObservation();
     UpdateDevToolsForContents(nullptr, true);
   }
 }
@@ -2568,7 +2569,8 @@
 }
 
 void BrowserView::OnWidgetDestroying(views::Widget* widget) {
-  widget_observer_.Remove(widget);
+  DCHECK(widget_observation_.IsObservingSource(widget));
+  widget_observation_.RemoveObservation();
   // Destroy any remaining WebContents early on. Doing so may result in
   // calling back to one of the Views/LayoutManagers or supporting classes of
   // BrowserView. By destroying here we ensure all said classes are valid.
@@ -2843,7 +2845,7 @@
 void BrowserView::AddedToWidget() {
   views::ClientView::AddedToWidget();
 
-  widget_observer_.Add(GetWidget());
+  widget_observation_.Observe(GetWidget());
 
   // Stow a pointer to this object onto the window handle so that we can get at
   // it later when all we have is a native view.
@@ -3237,7 +3239,9 @@
           [](base::WeakPtr<BrowserView> view, const gfx::Rect& bounds,
              bool maximize) {
             if (view && view->frame()) {
-              view->frame()->SetBounds(bounds);
+              // Adjust the restored bounds to be onscreen, in case the original
+              // screen was disconnected or repositioned during fullscreen.
+              view->frame()->SetBoundsConstrained(bounds);
               if (maximize)
                 view->frame()->Maximize();
             }
@@ -3535,8 +3539,8 @@
 
 void BrowserView::ObserveAppBannerManager(
     banners::AppBannerManager* new_manager) {
-  app_banner_manager_observer_.RemoveAll();
-  app_banner_manager_observer_.Add(new_manager);
+  app_banner_manager_observation_.Reset();
+  app_banner_manager_observation_.Observe(new_manager);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h
index 4e6dc3a..a4a3ffc 100644
--- a/chrome/browser/ui/views/frame/browser_view.h
+++ b/chrome/browser/ui/views/frame/browser_view.h
@@ -15,6 +15,7 @@
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/optional.h"
+#include "base/scoped_observation.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "build/build_config.h"
@@ -947,10 +948,12 @@
   // exited to restore the original pre-fullscreen bounds of the window.
   base::OnceClosure restore_pre_fullscreen_bounds_callback_;
 
-  ScopedObserver<banners::AppBannerManager, banners::AppBannerManager::Observer>
-      app_banner_manager_observer_{this};
+  base::ScopedObservation<banners::AppBannerManager,
+                          banners::AppBannerManager::Observer>
+      app_banner_manager_observation_{this};
 
-  ScopedObserver<views::Widget, views::WidgetObserver> widget_observer_{this};
+  base::ScopedObservation<views::Widget, views::WidgetObserver>
+      widget_observation_{this};
 
   bool interactive_resize_in_progress_ = false;
 
diff --git a/chrome/browser/ui/views/frame/dbus_appmenu.cc b/chrome/browser/ui/views/frame/dbus_appmenu.cc
index 6f08292..ca1fdfa 100644
--- a/chrome/browser/ui/views/frame/dbus_appmenu.cc
+++ b/chrome/browser/ui/views/frame/dbus_appmenu.cc
@@ -274,7 +274,7 @@
 
     // Register as TopSitesObserver so that we can update ourselves when the
     // TopSites changes.
-    scoped_observer_.Add(top_sites_.get());
+    scoped_observation_.Observe(top_sites_.get());
   }
 
   ProfileManager* profile_manager = g_browser_process->profile_manager();
diff --git a/chrome/browser/ui/views/frame/dbus_appmenu.h b/chrome/browser/ui/views/frame/dbus_appmenu.h
index ec705fcc..c784b0c 100644
--- a/chrome/browser/ui/views/frame/dbus_appmenu.h
+++ b/chrome/browser/ui/views/frame/dbus_appmenu.h
@@ -12,7 +12,7 @@
 #include "base/containers/flat_set.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "chrome/browser/command_observer.h"
 #include "chrome/browser/profiles/avatar_menu.h"
 #include "chrome/browser/profiles/avatar_menu_observer.h"
@@ -163,8 +163,8 @@
 
   std::unique_ptr<AvatarMenu> avatar_menu_;
 
-  ScopedObserver<history::TopSites, history::TopSitesObserver> scoped_observer_{
-      this};
+  base::ScopedObservation<history::TopSites, history::TopSitesObserver>
+      scoped_observation_{this};
 
   // Maps from history item command ID to HistoryItem data.
   std::map<int, std::unique_ptr<HistoryItem>> history_items_;
diff --git a/chrome/browser/ui/views/frame/glass_browser_caption_button_container.cc b/chrome/browser/ui/views/frame/glass_browser_caption_button_container.cc
index c52f555..78da52a 100644
--- a/chrome/browser/ui/views/frame/glass_browser_caption_button_container.cc
+++ b/chrome/browser/ui/views/frame/glass_browser_caption_button_container.cc
@@ -102,11 +102,18 @@
 
 void GlassBrowserCaptionButtonContainer::AddedToWidget() {
   views::Widget* const widget = GetWidget();
-  if (!widget_observer_.IsObserving(widget))
-    widget_observer_.Add(widget);
+
+  DCHECK(!widget_observation_.IsObserving());
+  widget_observation_.Observe(widget);
+
   UpdateButtons();
 }
 
+void GlassBrowserCaptionButtonContainer::RemovedFromWidget() {
+  DCHECK(widget_observation_.IsObserving());
+  widget_observation_.RemoveObservation();
+}
+
 void GlassBrowserCaptionButtonContainer::OnWidgetBoundsChanged(
     views::Widget* widget,
     const gfx::Rect& new_bounds) {
diff --git a/chrome/browser/ui/views/frame/glass_browser_caption_button_container.h b/chrome/browser/ui/views/frame/glass_browser_caption_button_container.h
index 22514c2..4f12518 100644
--- a/chrome/browser/ui/views/frame/glass_browser_caption_button_container.h
+++ b/chrome/browser/ui/views/frame/glass_browser_caption_button_container.h
@@ -5,7 +5,7 @@
 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_GLASS_BROWSER_CAPTION_BUTTON_CONTAINER_H_
 #define CHROME_BROWSER_UI_VIEWS_FRAME_GLASS_BROWSER_CAPTION_BUTTON_CONTAINER_H_
 
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "ui/base/pointer/touch_ui_controller.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/view.h"
@@ -38,6 +38,7 @@
 
   // views::View:
   void AddedToWidget() override;
+  void RemovedFromWidget() override;
 
   // views::WidgetObserver:
   void OnWidgetBoundsChanged(views::Widget* widget,
@@ -56,7 +57,8 @@
   Windows10CaptionButton* const restore_button_;
   Windows10CaptionButton* const close_button_;
 
-  ScopedObserver<views::Widget, views::WidgetObserver> widget_observer_{this};
+  base::ScopedObservation<views::Widget, views::WidgetObserver>
+      widget_observation_{this};
 
   base::CallbackListSubscription subscription_ =
       ui::TouchUiController::Get()->RegisterCallback(base::BindRepeating(
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.cc b/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.cc
index f000ae5..43db7ea 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.cc
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.cc
@@ -65,17 +65,17 @@
   controller_.Init(this, browser_view_->frame(),
                    browser_view_->top_container());
 
-  observed_windows_.Add(browser_view_->GetNativeWindow());
+  window_observation_.Observe(browser_view_->GetNativeWindow());
 }
 
 void ImmersiveModeControllerChromeos::SetEnabled(bool enabled) {
   if (controller_.IsEnabled() == enabled)
     return;
 
-  if (!fullscreen_observer_.IsObservingSources()) {
-    fullscreen_observer_.Add(browser_view_->browser()
-                                 ->exclusive_access_manager()
-                                 ->fullscreen_controller());
+  if (!fullscreen_observer_.IsObserving()) {
+    fullscreen_observer_.Observe(browser_view_->browser()
+                                     ->exclusive_access_manager()
+                                     ->fullscreen_controller());
   }
 
   chromeos::ImmersiveFullscreenController::EnableForWidget(
@@ -254,6 +254,7 @@
 void ImmersiveModeControllerChromeos::OnWindowDestroying(aura::Window* window) {
   // Clean up observers here rather than in the destructor because the owning
   // BrowserView has already destroyed the aura::Window.
-  observed_windows_.Remove(window);
-  DCHECK(!observed_windows_.IsObservingSources());
+  DCHECK(window_observation_.IsObservingSource(window));
+  window_observation_.RemoveObservation();
+  DCHECK(!window_observation_.IsObserving());
 }
diff --git a/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.h b/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.h
index ade2b492..78f7892 100644
--- a/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.h
+++ b/chrome/browser/ui/views/frame/immersive_mode_controller_chromeos.h
@@ -8,7 +8,7 @@
 #include <memory>
 
 #include "base/macros.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
 #include "chrome/browser/ui/exclusive_access/fullscreen_observer.h"
 #include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
@@ -77,10 +77,11 @@
   // the top-of-window views are not revealed.
   double visible_fraction_ = 1.0;
 
-  ScopedObserver<FullscreenController, FullscreenObserver> fullscreen_observer_{
-      this};
+  base::ScopedObservation<FullscreenController, FullscreenObserver>
+      fullscreen_observer_{this};
 
-  ScopedObserver<aura::Window, aura::WindowObserver> observed_windows_{this};
+  base::ScopedObservation<aura::Window, aura::WindowObserver>
+      window_observation_{this};
 
   DISALLOW_COPY_AND_ASSIGN(ImmersiveModeControllerChromeos);
 };
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
index 2cb1f585..c294bf7 100644
--- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
+++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
@@ -15,7 +15,7 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/notreached.h"
 #include "base/numerics/ranges.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_observation.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/trace_event/trace_event.h"
 #include "chrome/app/chrome_command_ids.h"
@@ -240,10 +240,10 @@
     DCHECK(content_area_);
     DCHECK(omnibox_);
 
-    view_observer_.Add(content_area_);
-    view_observer_.Add(omnibox_);
+    view_observations_.AddObservation(content_area_);
+    view_observations_.AddObservation(omnibox_);
 #if defined(OS_WIN)
-    view_observer_.Add(top_container_);
+    view_observations_.AddObservation(top_container_);
 #endif  // defined(OS_WIN)
 
     // Our observed Widget's NativeView may be destroyed before us. We
@@ -308,7 +308,7 @@
   }
 
   void OnViewIsDeleting(views::View* observed_view) override {
-    view_observer_.Remove(observed_view);
+    view_observations_.RemoveObservation(observed_view);
     if (observed_view == content_area_)
       content_area_ = nullptr;
     else if (observed_view == omnibox_)
@@ -350,7 +350,8 @@
 
   bool pretarget_handler_added_ = false;
 
-  ScopedObserver<views::View, views::ViewObserver> view_observer_{this};
+  base::ScopedMultiSourceObservation<views::View, views::ViewObserver>
+      view_observations_{this};
 };
 
 class WebUITabStripContainerView::DragToOpenHandler : public ui::EventHandler {
@@ -495,8 +496,8 @@
       web_view_->web_contents());
 
   DCHECK(tab_contents_container);
-  view_observer_.Add(tab_contents_container_);
-  view_observer_.Add(top_container_);
+  view_observations_.AddObservation(tab_contents_container_);
+  view_observations_.AddObservation(top_container_);
 
   TabStripUI* const tab_strip_ui = static_cast<TabStripUI*>(
       web_view_->GetWebContents()->GetWebUI()->GetController());
@@ -585,7 +586,7 @@
       browser_view_);
 
   tab_counter_ = tab_counter.get();
-  view_observer_.Add(tab_counter_);
+  view_observations_.AddObservation(tab_counter_);
 
   return tab_counter;
 }
@@ -886,7 +887,7 @@
 }
 
 void WebUITabStripContainerView::OnViewIsDeleting(View* observed_view) {
-  view_observer_.Remove(observed_view);
+  view_observations_.RemoveObservation(observed_view);
 
   if (observed_view == tab_counter_)
     tab_counter_ = nullptr;
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
index ad0511d1..f5594ec 100644
--- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
+++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
@@ -9,7 +9,7 @@
 #include <set>
 
 #include "base/optional.h"
-#include "base/scoped_observer.h"
+#include "base/scoped_multi_source_observation.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/webui/tab_strip/tab_strip_ui.h"
@@ -168,7 +168,8 @@
   std::unique_ptr<views::MenuRunner> context_menu_runner_;
   std::unique_ptr<ui::MenuModel> context_menu_model_;
 
-  ScopedObserver<views::View, views::ViewObserver> view_observer_{this};
+  base::ScopedMultiSourceObservation<views::View, views::ViewObserver>
+      view_observations_{this};
 };
 
 #endif  // CHROME_BROWSER_UI_VIEWS_FRAME_WEBUI_TAB_STRIP_CONTAINER_VIEW_H_
diff --git a/chrome/browser/ui/webui/management_ui_browsertest.cc b/chrome/browser/ui/webui/management_ui_browsertest.cc
index 806e9c1..b7e639b 100644
--- a/chrome/browser/ui/webui/management_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/management_ui_browsertest.cc
@@ -26,8 +26,10 @@
   ~ManagementUITest() override = default;
 
   void SetUpInProcessBrowserTestFixture() override {
-    EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-        .WillRepeatedly(testing::Return(true));
+    ON_CALL(provider_, IsInitializationComplete(testing::_))
+        .WillByDefault(testing::Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+        .WillByDefault(testing::Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   }
 
@@ -48,7 +50,7 @@
   }
 
  private:
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 
   DISALLOW_COPY_AND_ASSIGN(ManagementUITest);
 };
diff --git a/chrome/browser/ui/webui/policy_ui_browsertest.cc b/chrome/browser/ui/webui/policy_ui_browsertest.cc
index 2cb49709..7aa784c 100644
--- a/chrome/browser/ui/webui/policy_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/policy_ui_browsertest.cc
@@ -214,7 +214,7 @@
   void VerifyExportingPolicies(const base::DictionaryValue& expected);
 
  protected:
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(PolicyUITest);
@@ -266,8 +266,8 @@
 PolicyUITest::~PolicyUITest() {}
 
 void PolicyUITest::SetUpInProcessBrowserTestFixture() {
-  EXPECT_CALL(provider_, IsInitializationComplete(_))
-      .WillRepeatedly(Return(true));
+  ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
+  ON_CALL(provider_, IsFirstPolicyLoadComplete(_)).WillByDefault(Return(true));
   policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   policy::PushProfilePolicyConnectorProviderForTesting(&provider_);
 
diff --git a/chrome/browser/ui/webui/settings/chromeos/accessibility_section.cc b/chrome/browser/ui/webui/settings/chromeos/accessibility_section.cc
index 767201e..7664267 100644
--- a/chrome/browser/ui/webui/settings/chromeos/accessibility_section.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/accessibility_section.cc
@@ -498,6 +498,8 @@
       {"assignSelectSwitchLabel", IDS_SETTINGS_ASSIGN_SELECT_SWITCH_LABEL},
       {"assignNextSwitchLabel", IDS_SETTINGS_ASSIGN_NEXT_SWITCH_LABEL},
       {"assignPreviousSwitchLabel", IDS_SETTINGS_ASSIGN_PREVIOUS_SWITCH_LABEL},
+      {"switchAccessActionAssignmentDialogTitle",
+       IDS_SETTINGS_SWITCH_ACCESS_ACTION_ASSIGNMENT_DIALOG_TITLE},
       {"switchAccessActionAssignmentDialogWarnNotConfirmedPrompt",
        IDS_SETTINGS_SWITCH_ACCESS_ACTION_ASSIGNMENT_DIALOG_WARN_NOT_CONFIRMED_PROMPT},
       {"switchAccessActionAssignmentDialogWarnAlreadyAssignedActionPrompt",
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc b/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc
index 0b21a59..4d54e411 100644
--- a/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/device_power_handler_browsertest.cc
@@ -84,6 +84,8 @@
   void SetUpInProcessBrowserTestFixture() override {
     // Initialize user policy.
     ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   }
 
@@ -188,7 +190,7 @@
 
   content::TestWebUI web_ui_;
 
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(PowerHandlerTest);
diff --git a/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc b/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc
index 3a5b7bd..fc55f42 100644
--- a/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc
+++ b/chrome/browser/ui/webui/settings/settings_secure_dns_handler_browsertest.cc
@@ -112,6 +112,8 @@
   void SetUpInProcessBrowserTestFixture() override {
     // Initialize user policy.
     ON_CALL(provider_, IsInitializationComplete(_)).WillByDefault(Return(true));
+    ON_CALL(provider_, IsFirstPolicyLoadComplete(_))
+        .WillByDefault(Return(true));
     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
   }
 
@@ -183,7 +185,7 @@
 
   std::unique_ptr<TestSecureDnsHandler> handler_;
   content::TestWebUI web_ui_;
-  policy::MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<policy::MockConfigurationPolicyProvider> provider_;
 
  private:
 #if defined(OS_WIN)
diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui/webui/settings/settings_ui.cc
index fb2237d1..1513107 100644
--- a/chrome/browser/ui/webui/settings/settings_ui.cc
+++ b/chrome/browser/ui/webui/settings/settings_ui.cc
@@ -270,6 +270,11 @@
           password_manager::features::kEnablePasswordsAccountStorage));
 
   html_source->AddBoolean(
+      "enableMovingMultiplePasswordsToAccount",
+      base::FeatureList::IsEnabled(
+          password_manager::features::kEnableMovingMultiplePasswordsToAccount));
+
+  html_source->AddBoolean(
       "enableContentSettingsRedesign",
       base::FeatureList::IsEnabled(features::kContentSettingsRedesign));
 
diff --git a/chrome/browser/ui/webui/test_data_source.cc b/chrome/browser/ui/webui/test_data_source.cc
index 7747acb..fdd046b0 100644
--- a/chrome/browser/ui/webui/test_data_source.cc
+++ b/chrome/browser/ui/webui/test_data_source.cc
@@ -133,17 +133,20 @@
         << url.spec() << "=" << file_path.value();
     content = "<script type=\"module\" src=\"" + js_path + "\"></script>";
   } else {
-    // Try the |src_root_| folder first.
+    // Try the |gen_root_| folder first, covering cases where the test file is
+    // generated at build time. We do this first as if a test file exists under
+    // the same name in the src and gen directories, the generated file is
+    // generally the desired file (for example, may have been preprocessed).
     base::FilePath file_path =
-        src_root_.Append(base::FilePath::FromUTF8Unsafe(path));
+        gen_root_.Append(base::FilePath::FromUTF8Unsafe(path));
     if (base::PathExists(file_path)) {
       CHECK(base::ReadFileToString(file_path, &content))
           << url.spec() << "=" << file_path.value();
     } else {
-      // Then try the |gen_root_| folder, covering cases where the test file is
+      // Then try the |src_root_| folder, covering cases where the test file is
       // generated at build time.
       base::FilePath file_path =
-          gen_root_.Append(base::FilePath::FromUTF8Unsafe(path));
+          src_root_.Append(base::FilePath::FromUTF8Unsafe(path));
       CHECK(base::ReadFileToString(file_path, &content))
           << url.spec() << "=" << file_path.value();
     }
diff --git a/chrome/browser/upgrade_detector/directory_monitor.cc b/chrome/browser/upgrade_detector/directory_monitor.cc
index a8161f8..bf8af40 100644
--- a/chrome/browser/upgrade_detector/directory_monitor.cc
+++ b/chrome/browser/upgrade_detector/directory_monitor.cc
@@ -55,25 +55,40 @@
        base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN, base::MayBlock()});
   watcher_ = std::make_unique<base::FilePathWatcher>();
 
-  // Start the watcher on a background sequence, reporting all events back to
-  // this sequence. base::Unretained is safe because the watcher instance lives
-  // on the target sequence and will be destroyed there in a subsequent task.
+#if defined(OS_MAC)
+  // The normal Watch risks triggering a macOS Catalina+ consent dialog, so use
+  // a trivial watch here.
+  const base::FilePathWatcher::Type watch_type =
+      base::FilePathWatcher::Type::kTrivial;
+#else
+  const base::FilePathWatcher::Type watch_type =
+      base::FilePathWatcher::Type::kNonRecursive;
+#endif
+
+  // Start the watcher on a background sequence, reporting a failure to start to
+  // |on_change_callback| on the caller's sequence. The watcher is given a
+  // trampoline that will run |on_change_callback| on the caller's sequence.
+  // base::Unretained is safe because the watcher instance lives on the target
+  // sequence and will be destroyed there in a subsequent task.
   task_runner_->PostTaskAndReplyWithResult(
       FROM_HERE,
       base::BindOnce(
-          &base::FilePathWatcher::Watch, base::Unretained(watcher_.get()),
-          std::move(install_dir_),
-          /*recursive=*/false,
+          static_cast<bool (base::FilePathWatcher::*)(
+              const base::FilePath&, base::FilePathWatcher::Type,
+              const base::FilePathWatcher::Callback&)>(
+              &base::FilePathWatcher::Watch),
+          base::Unretained(watcher_.get()), std::move(install_dir_), watch_type,
           base::BindRepeating(
-              [](scoped_refptr<base::SequencedTaskRunner> main_sequence,
+              [](base::SequencedTaskRunner* main_sequence,
                  const Callback& on_change_callback, const base::FilePath&,
                  bool error) {
                 main_sequence->PostTask(
                     FROM_HERE, base::BindOnce(on_change_callback, error));
               },
-              base::SequencedTaskRunnerHandle::Get(), on_change_callback)),
+              base::RetainedRef(base::SequencedTaskRunnerHandle::Get()),
+              on_change_callback)),
       base::BindOnce(
-          [](Callback on_change_callback, bool start_result) {
+          [](const Callback& on_change_callback, bool start_result) {
             if (!start_result)
               on_change_callback.Run(/*error=*/true);
           },
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn
index cb4384a..36cd911 100644
--- a/chrome/browser/web_applications/BUILD.gn
+++ b/chrome/browser/web_applications/BUILD.gn
@@ -141,6 +141,8 @@
     "test/test_pending_app_manager.h",
     "test/test_pending_app_manager_impl.cc",
     "test/test_pending_app_manager_impl.h",
+    "test/test_protocol_handler_manager.cc",
+    "test/test_protocol_handler_manager.h",
     "test/test_system_web_app_manager.cc",
     "test/test_system_web_app_manager.h",
     "test/test_system_web_app_url_data_source.cc",
diff --git a/chrome/browser/web_applications/components/BUILD.gn b/chrome/browser/web_applications/components/BUILD.gn
index 7122bac1..9f58345 100644
--- a/chrome/browser/web_applications/components/BUILD.gn
+++ b/chrome/browser/web_applications/components/BUILD.gn
@@ -37,6 +37,8 @@
     "policy/web_app_policy_constants.h",
     "policy/web_app_policy_manager.cc",
     "policy/web_app_policy_manager.h",
+    "protocol_handler_manager.cc",
+    "protocol_handler_manager.h",
     "web_app_audio_focus_id_map.cc",
     "web_app_audio_focus_id_map.h",
     "web_app_chromeos_data.cc",
@@ -141,6 +143,7 @@
     "//components/crx_file",
     "//components/keyed_service/content",
     "//components/pref_registry",
+    "//components/services/app_service/public/cpp:protocol_handling",
     "//components/services/app_service/public/mojom",
     "//components/site_engagement/core/mojom:mojo_bindings",
     "//components/user_manager:user_manager",
diff --git a/chrome/browser/web_applications/components/os_integration_manager.cc b/chrome/browser/web_applications/components/os_integration_manager.cc
index 15aa140..898bb480 100644
--- a/chrome/browser/web_applications/components/os_integration_manager.cc
+++ b/chrome/browser/web_applications/components/os_integration_manager.cc
@@ -79,10 +79,12 @@
 OsIntegrationManager::OsIntegrationManager(
     Profile* profile,
     std::unique_ptr<AppShortcutManager> shortcut_manager,
-    std::unique_ptr<FileHandlerManager> file_handler_manager)
+    std::unique_ptr<FileHandlerManager> file_handler_manager,
+    std::unique_ptr<ProtocolHandlerManager> protocol_handler_manager)
     : profile_(profile),
       shortcut_manager_(std::move(shortcut_manager)),
-      file_handler_manager_(std::move(file_handler_manager)) {}
+      file_handler_manager_(std::move(file_handler_manager)),
+      protocol_handler_manager_(std::move(protocol_handler_manager)) {}
 
 OsIntegrationManager::~OsIntegrationManager() = default;
 
@@ -93,6 +95,8 @@
   ui_manager_ = ui_manager;
   file_handler_manager_->SetSubsystems(registrar);
   shortcut_manager_->SetSubsystems(icon_manager, registrar);
+  if (protocol_handler_manager_)
+    protocol_handler_manager_->SetSubsystems(registrar);
 }
 
 void OsIntegrationManager::Start() {
@@ -113,6 +117,8 @@
   }
 #endif
   file_handler_manager_->Start();
+  if (protocol_handler_manager_)
+    protocol_handler_manager_->Start();
 }
 
 void OsIntegrationManager::InstallOsHooks(
diff --git a/chrome/browser/web_applications/components/os_integration_manager.h b/chrome/browser/web_applications/components/os_integration_manager.h
index 1dcb264..b768b99 100644
--- a/chrome/browser/web_applications/components/os_integration_manager.h
+++ b/chrome/browser/web_applications/components/os_integration_manager.h
@@ -15,6 +15,7 @@
 #include "chrome/browser/web_applications/components/app_registrar.h"
 #include "chrome/browser/web_applications/components/app_shortcut_manager.h"
 #include "chrome/browser/web_applications/components/file_handler_manager.h"
+#include "chrome/browser/web_applications/components/protocol_handler_manager.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_id.h"
 #include "chrome/browser/web_applications/components/web_app_run_on_os_login.h"
@@ -70,7 +71,8 @@
   explicit OsIntegrationManager(
       Profile* profile,
       std::unique_ptr<AppShortcutManager> shortcut_manager,
-      std::unique_ptr<FileHandlerManager> file_handler_manager);
+      std::unique_ptr<FileHandlerManager> file_handler_manager,
+      std::unique_ptr<ProtocolHandlerManager> protocol_handler_manager);
   virtual ~OsIntegrationManager();
 
   void SetSubsystems(AppRegistrar* registrar,
@@ -138,6 +140,9 @@
   FileHandlerManager* file_handler_manager() {
     return file_handler_manager_.get();
   }
+  ProtocolHandlerManager* protocol_handler_manager() {
+    return protocol_handler_manager_.get();
+  }
   void set_shortcut_manager(
       std::unique_ptr<AppShortcutManager> shortcut_manager) {
     shortcut_manager_ = std::move(shortcut_manager);
@@ -146,6 +151,10 @@
       std::unique_ptr<FileHandlerManager> file_handler_manager) {
     file_handler_manager_ = std::move(file_handler_manager);
   }
+  void set_protocol_handler_manager(
+      std::unique_ptr<ProtocolHandlerManager> protocol_handler_manager) {
+    protocol_handler_manager_ = std::move(protocol_handler_manager);
+  }
 
   virtual void CreateShortcuts(const AppId& app_id,
                                bool add_to_desktop,
@@ -193,6 +202,7 @@
 
   std::unique_ptr<AppShortcutManager> shortcut_manager_;
   std::unique_ptr<FileHandlerManager> file_handler_manager_;
+  std::unique_ptr<ProtocolHandlerManager> protocol_handler_manager_;
 
   base::WeakPtrFactory<OsIntegrationManager> weak_ptr_factory_{this};
 };
diff --git a/chrome/browser/web_applications/components/os_integration_manager_unittest.cc b/chrome/browser/web_applications/components/os_integration_manager_unittest.cc
index 04641675..ec0bb7a 100644
--- a/chrome/browser/web_applications/components/os_integration_manager_unittest.cc
+++ b/chrome/browser/web_applications/components/os_integration_manager_unittest.cc
@@ -21,7 +21,7 @@
 class MockOsIntegrationManager : public OsIntegrationManager {
  public:
   MockOsIntegrationManager()
-      : OsIntegrationManager(nullptr, nullptr, nullptr) {}
+      : OsIntegrationManager(nullptr, nullptr, nullptr, nullptr) {}
   ~MockOsIntegrationManager() override = default;
 
   MOCK_METHOD(void,
diff --git a/chrome/browser/web_applications/components/protocol_handler_manager.cc b/chrome/browser/web_applications/components/protocol_handler_manager.cc
new file mode 100644
index 0000000..70ca39b
--- /dev/null
+++ b/chrome/browser/web_applications/components/protocol_handler_manager.cc
@@ -0,0 +1,63 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/web_applications/components/protocol_handler_manager.h"
+
+#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
+#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h"
+#include "chrome/browser/profiles/profile.h"
+
+namespace web_app {
+
+ProtocolHandlerManager::ProtocolHandlerManager(Profile* profile)
+    : app_registrar_(nullptr) {}
+
+ProtocolHandlerManager::~ProtocolHandlerManager() = default;
+
+void ProtocolHandlerManager::SetSubsystems(AppRegistrar* registrar) {
+  app_registrar_ = registrar;
+}
+
+void ProtocolHandlerManager::Start() {
+  DCHECK(app_registrar_);
+}
+
+std::vector<apps::ProtocolHandlerInfo>
+ProtocolHandlerManager::GetAppProtocolHandlerInfos(
+    const std::string& app_id) const {
+  // TODO(crbug.com/1019239): Implement OS-specific protocol handler
+  // registration.
+  NOTIMPLEMENTED();
+  return std::vector<apps::ProtocolHandlerInfo>();
+}
+
+void ProtocolHandlerManager::RegisterOsProtocolHandlers(const AppId& app_id) {
+  // TODO(crbug.com/1019239): Implement OS-specific protocol handler
+  // registration.
+  NOTIMPLEMENTED();
+}
+
+void ProtocolHandlerManager::RegisterOsProtocolHandlers(
+    const AppId& app_id,
+    const std::vector<apps::ProtocolHandlerInfo>& protocol_handlers) {
+  // TODO(crbug.com/1019239): Implement OS-specific protocol handler
+  // registration.
+  NOTIMPLEMENTED();
+}
+
+void ProtocolHandlerManager::UnregisterOsProtocolHandlers(const AppId& app_id) {
+  // TODO(crbug.com/1019239): Implement OS-specific protocol handler
+  // registration.
+  NOTIMPLEMENTED();
+}
+
+void ProtocolHandlerManager::UnregisterOsProtocolHandlers(
+    const AppId& app_id,
+    const std::vector<apps::ProtocolHandlerInfo>& protocol_handlers) {
+  // TODO(crbug.com/1019239): Implement OS-specific protocol handler
+  // registration.
+  NOTIMPLEMENTED();
+}
+
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/components/protocol_handler_manager.h b/chrome/browser/web_applications/components/protocol_handler_manager.h
new file mode 100644
index 0000000..d195eaf
--- /dev/null
+++ b/chrome/browser/web_applications/components/protocol_handler_manager.h
@@ -0,0 +1,57 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_PROTOCOL_HANDLER_MANAGER_H_
+#define CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_PROTOCOL_HANDLER_MANAGER_H_
+
+#include "chrome/browser/web_applications/components/app_registrar.h"
+#include "chrome/common/custom_handlers/protocol_handler.h"
+#include "components/services/app_service/public/cpp/protocol_handler_info.h"
+
+#include <vector>
+
+namespace web_app {
+
+class ProtocolHandlerManager {
+ public:
+  explicit ProtocolHandlerManager(Profile* profile);
+  ProtocolHandlerManager(const ProtocolHandlerManager&) = delete;
+  ProtocolHandlerManager& operator=(const ProtocolHandlerManager&) = delete;
+  virtual ~ProtocolHandlerManager();
+
+  // |registrar| is used to observe OnWebAppInstalled/Uninstalled events.
+  void SetSubsystems(AppRegistrar* registrar);
+  void Start();
+
+  // Gets all protocol handlers for |app_id|.
+  std::vector<apps::ProtocolHandlerInfo> GetAppProtocolHandlerInfos(
+      const std::string& app_id) const;
+
+  // Registers OS specific protocol handlers for OSs that need them, using the
+  // protocol handler information supplied in the app manifest.
+  void RegisterOsProtocolHandlers(const AppId& app_id);
+
+  // Registers OS specific protocol handlers for OSs that need them, using
+  // arbitrary protocol handler information.
+  void RegisterOsProtocolHandlers(
+      const AppId& app_id,
+      const std::vector<apps::ProtocolHandlerInfo>& protocol_handlers);
+
+  // Unregisters OS specific protocol handlers for OSs that need them, using the
+  // protocol handler information supplied in the app manifest.
+  void UnregisterOsProtocolHandlers(const AppId& app_id);
+
+  // Unregisters OS specific protocol handlers for OSs that need them, using
+  // arbitrary protocol handler information.
+  void UnregisterOsProtocolHandlers(
+      const AppId& app_id,
+      const std::vector<apps::ProtocolHandlerInfo>& protocol_handlers);
+
+ private:
+  AppRegistrar* app_registrar_;
+};
+
+}  // namespace web_app
+
+#endif  // CHROME_BROWSER_WEB_APPLICATIONS_COMPONENTS_PROTOCOL_HANDLER_MANAGER_H_
diff --git a/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer_unittest.cc b/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer_unittest.cc
index 5a588c5..3d6e4785 100644
--- a/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer_unittest.cc
+++ b/chrome/browser/web_applications/extensions/bookmark_app_install_finalizer_unittest.cc
@@ -120,7 +120,8 @@
     os_integration_manager_ =
         std::make_unique<web_app::TestOsIntegrationManager>(
             profile(), /*shortcut_manager=*/nullptr,
-            /*file_handler_manager=*/nullptr);
+            /*file_handler_manager=*/nullptr,
+            /*protocol_handler_manager=*/nullptr);
 
     finalizer_ = std::make_unique<BookmarkAppInstallFinalizer>(profile());
     finalizer_->SetSubsystems(registrar_.get(), ui_manager_.get(),
diff --git a/chrome/browser/web_applications/extensions/bookmark_app_provider.cc b/chrome/browser/web_applications/extensions/bookmark_app_provider.cc
index 501fca43..ba9e820 100644
--- a/chrome/browser/web_applications/extensions/bookmark_app_provider.cc
+++ b/chrome/browser/web_applications/extensions/bookmark_app_provider.cc
@@ -34,7 +34,8 @@
   auto shortcut_manager =
       std::make_unique<extensions::BookmarkAppShortcutManager>(profile);
   os_integration_manager_ = std::make_unique<OsIntegrationManager>(
-      profile, std::move(shortcut_manager), std::move(file_handler_manager));
+      profile, std::move(shortcut_manager), std::move(file_handler_manager),
+      /*protocol_handler_manager*/ nullptr);
 
   // Upcast to unified subsystem types:
   registrar_ = std::move(registrar);
diff --git a/chrome/browser/web_applications/extensions/pending_app_install_task_unittest.cc b/chrome/browser/web_applications/extensions/pending_app_install_task_unittest.cc
index 608d709..9d169ff 100644
--- a/chrome/browser/web_applications/extensions/pending_app_install_task_unittest.cc
+++ b/chrome/browser/web_applications/extensions/pending_app_install_task_unittest.cc
@@ -291,7 +291,8 @@
 
     auto os_integration_manager = std::make_unique<TestOsIntegrationManager>(
         profile(), /*app_shortcut_manager=*/nullptr,
-        /*file_handler_manager=*/nullptr);
+        /*file_handler_manager=*/nullptr,
+        /*protocol_handler_manager=*/nullptr);
     os_integration_manager_ = os_integration_manager.get();
 
     auto ui_manager = std::make_unique<TestWebAppUiManager>();
diff --git a/chrome/browser/web_applications/test/test_os_integration_manager.cc b/chrome/browser/web_applications/test/test_os_integration_manager.cc
index 90d3775..483a23d 100644
--- a/chrome/browser/web_applications/test/test_os_integration_manager.cc
+++ b/chrome/browser/web_applications/test/test_os_integration_manager.cc
@@ -7,24 +7,32 @@
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "chrome/browser/web_applications/components/app_shortcut_manager.h"
 #include "chrome/browser/web_applications/components/file_handler_manager.h"
+#include "chrome/browser/web_applications/components/protocol_handler_manager.h"
 #include "chrome/browser/web_applications/components/web_app_constants.h"
 #include "chrome/browser/web_applications/components/web_app_ui_manager.h"
 #include "chrome/browser/web_applications/test/test_file_handler_manager.h"
+#include "chrome/browser/web_applications/test/test_protocol_handler_manager.h"
 
 namespace web_app {
 TestOsIntegrationManager::TestOsIntegrationManager(
     Profile* profile,
     std::unique_ptr<AppShortcutManager> shortcut_manager,
-    std::unique_ptr<FileHandlerManager> file_handler_manager)
+    std::unique_ptr<FileHandlerManager> file_handler_manager,
+    std::unique_ptr<ProtocolHandlerManager> protocol_handler_manager)
     : OsIntegrationManager(profile,
                            std::move(shortcut_manager),
-                           std::move(file_handler_manager)) {
+                           std::move(file_handler_manager),
+                           std::move(protocol_handler_manager)) {
   if (!this->shortcut_manager()) {
     set_shortcut_manager(std::make_unique<TestShortcutManager>(profile));
   }
   if (!this->file_handler_manager()) {
     set_file_handler_manager(std::make_unique<TestFileHandlerManager>(profile));
   }
+  if (!this->protocol_handler_manager()) {
+    set_protocol_handler_manager(
+        std::make_unique<TestProtocolHandlerManager>(profile));
+  }
 }
 
 TestOsIntegrationManager::~TestOsIntegrationManager() = default;
@@ -99,6 +107,11 @@
   set_file_handler_manager(std::move(file_handler_manager));
 }
 
+void TestOsIntegrationManager::SetProtocolHandlerManager(
+    std::unique_ptr<ProtocolHandlerManager> protocol_handler_manager) {
+  set_protocol_handler_manager(std::move(protocol_handler_manager));
+}
+
 TestOsIntegrationManager*
 TestOsIntegrationManager::AsTestOsIntegrationManager() {
   return this;
diff --git a/chrome/browser/web_applications/test/test_os_integration_manager.h b/chrome/browser/web_applications/test/test_os_integration_manager.h
index 0f14d45..634553f 100644
--- a/chrome/browser/web_applications/test/test_os_integration_manager.h
+++ b/chrome/browser/web_applications/test/test_os_integration_manager.h
@@ -15,13 +15,15 @@
 
 class AppShortcutManager;
 class FileHandlerManager;
+class ProtocolHandlerManager;
 
 class TestOsIntegrationManager : public OsIntegrationManager {
  public:
   explicit TestOsIntegrationManager(
       Profile* profile,
       std::unique_ptr<AppShortcutManager> shortcut_manager,
-      std::unique_ptr<FileHandlerManager> file_handler_manager);
+      std::unique_ptr<FileHandlerManager> file_handler_manager,
+      std::unique_ptr<ProtocolHandlerManager> protocol_handler_manager);
   ~TestOsIntegrationManager() override;
 
   // OsIntegrationManager:
@@ -67,6 +69,9 @@
   void SetFileHandlerManager(
       std::unique_ptr<FileHandlerManager> file_handler_manager);
 
+  void SetProtocolHandlerManager(
+      std::unique_ptr<ProtocolHandlerManager> protocol_handler_manager);
+
   TestOsIntegrationManager* AsTestOsIntegrationManager() override;
 
  private:
diff --git a/chrome/browser/web_applications/test/test_protocol_handler_manager.cc b/chrome/browser/web_applications/test/test_protocol_handler_manager.cc
new file mode 100644
index 0000000..2bc297ed
--- /dev/null
+++ b/chrome/browser/web_applications/test/test_protocol_handler_manager.cc
@@ -0,0 +1,14 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/web_applications/test/test_protocol_handler_manager.h"
+
+namespace web_app {
+
+TestProtocolHandlerManager::TestProtocolHandlerManager(Profile* profile)
+    : ProtocolHandlerManager(profile) {}
+
+TestProtocolHandlerManager::~TestProtocolHandlerManager() = default;
+
+}  // namespace web_app
diff --git a/chrome/browser/web_applications/test/test_protocol_handler_manager.h b/chrome/browser/web_applications/test/test_protocol_handler_manager.h
new file mode 100644
index 0000000..0221c0a8
--- /dev/null
+++ b/chrome/browser/web_applications/test/test_protocol_handler_manager.h
@@ -0,0 +1,21 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_WEB_APPLICATIONS_TEST_TEST_PROTOCOL_HANDLER_MANAGER_H_
+#define CHROME_BROWSER_WEB_APPLICATIONS_TEST_TEST_PROTOCOL_HANDLER_MANAGER_H_
+
+#include "chrome/browser/web_applications/components/protocol_handler_manager.h"
+
+namespace web_app {
+
+// testing implementation of ProtocolHandlerManager
+class TestProtocolHandlerManager : public ProtocolHandlerManager {
+ public:
+  explicit TestProtocolHandlerManager(Profile* profile);
+  ~TestProtocolHandlerManager() override;
+};
+
+}  // namespace web_app
+
+#endif  // CHROME_BROWSER_WEB_APPLICATIONS_TEST_TEST_PROTOCOL_HANDLER_MANAGER_H_
diff --git a/chrome/browser/web_applications/test/test_web_app_registry_controller.cc b/chrome/browser/web_applications/test/test_web_app_registry_controller.cc
index c42f97a..9ec67af 100644
--- a/chrome/browser/web_applications/test/test_web_app_registry_controller.cc
+++ b/chrome/browser/web_applications/test/test_web_app_registry_controller.cc
@@ -27,7 +27,8 @@
 
   os_integration_manager_ = std::make_unique<TestOsIntegrationManager>(
       profile, /*app_shortcut_manager=*/nullptr,
-      /*file_handler_manager=*/nullptr);
+      /*file_handler_manager=*/nullptr,
+      /*protocol_handler_manager=*/nullptr);
 
   mutable_registrar_->SetSubsystems(os_integration_manager_.get());
 
diff --git a/chrome/browser/web_applications/web_app_provider.cc b/chrome/browser/web_applications/web_app_provider.cc
index f0d469a..87103c3 100644
--- a/chrome/browser/web_applications/web_app_provider.cc
+++ b/chrome/browser/web_applications/web_app_provider.cc
@@ -13,6 +13,7 @@
 #include "chrome/browser/web_applications/components/install_bounce_metric.h"
 #include "chrome/browser/web_applications/components/os_integration_manager.h"
 #include "chrome/browser/web_applications/components/policy/web_app_policy_manager.h"
+#include "chrome/browser/web_applications/components/protocol_handler_manager.h"
 #include "chrome/browser/web_applications/components/web_app_audio_focus_id_map.h"
 #include "chrome/browser/web_applications/components/web_app_prefs_utils.h"
 #include "chrome/browser/web_applications/components/web_app_ui_manager.h"
@@ -208,10 +209,13 @@
 
   auto file_handler_manager =
       std::make_unique<WebAppFileHandlerManager>(profile);
+  auto protocol_handler_manager =
+      std::make_unique<ProtocolHandlerManager>(profile);
   auto shortcut_manager = std::make_unique<WebAppShortcutManager>(
       profile, icon_manager.get(), file_handler_manager.get());
   os_integration_manager_ = std::make_unique<OsIntegrationManager>(
-      profile, std::move(shortcut_manager), std::move(file_handler_manager));
+      profile, std::move(shortcut_manager), std::move(file_handler_manager),
+      std::move(protocol_handler_manager));
 
   migration_manager_ = std::make_unique<WebAppMigrationManager>(
       profile, database_factory_.get(), icon_manager.get(),
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt
index 456f4fd..a8f3be1 100644
--- a/chrome/build/linux.pgo.txt
+++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@
-chrome-linux-master-1606132785-400a323c4dba2e607a1a56a52382b70a24e1d779.profdata
+chrome-linux-master-1606154359-bcec197d59b03d3584048e9969b836c9e27febce.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt
index 37a3be5..0a9c144 100644
--- a/chrome/build/mac.pgo.txt
+++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@
-chrome-mac-master-1606132785-843754305781d29437145aed34be0b0fdd2b3c82.profdata
+chrome-mac-master-1606154359-5b79efba7e932d58ea0d577c610ff95eb947b3fb.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt
index 218eaa0f..39d95ba2 100644
--- a/chrome/build/win64.pgo.txt
+++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@
-chrome-win64-master-1606121381-2f0d1c6311931d551e9bebe8758016318ab6fd23.profdata
+chrome-win64-master-1606132785-17d21d0e147a4d4edd435db8e7a867f5c7c0da0c.profdata
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index fc268bfb..16861a6 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -406,6 +406,13 @@
 const base::Feature kFlocIdSortingLshBasedComputation{
     "FlocIdSortingLshBasedComputation", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Controls whether the floc id will be updated regularly and the rate at which
+// they should be updated.
+const base::Feature kFlocIdScheduledUpdate{"FlocIdScheduledUpdate",
+                                           base::FEATURE_ENABLED_BY_DEFAULT};
+constexpr base::FeatureParam<base::TimeDelta> kFlocIdScheduledUpdateInterval{
+    &kFlocIdScheduledUpdate, "update_interval", base::TimeDelta::FromDays(7)};
+
 // Enables Focus Mode which brings up a PWA-like window look.
 const base::Feature kFocusMode{"FocusMode", base::FEATURE_DISABLED_BY_DEFAULT};
 
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index b92af02..b96f075 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -277,6 +277,11 @@
 extern const base::Feature kFlocIdSortingLshBasedComputation;
 
 COMPONENT_EXPORT(CHROME_FEATURES)
+extern const base::Feature kFlocIdScheduledUpdate;
+COMPONENT_EXPORT(CHROME_FEATURES)
+extern const base::FeatureParam<base::TimeDelta> kFlocIdScheduledUpdateInterval;
+
+COMPONENT_EXPORT(CHROME_FEATURES)
 extern const base::Feature kFocusMode;
 
 #if defined(OS_WIN)
diff --git a/chrome/installer/linux/common/rpm.include b/chrome/installer/linux/common/rpm.include
index c7f89421..a094f01 100644
--- a/chrome/installer/linux/common/rpm.include
+++ b/chrome/installer/linux/common/rpm.include
@@ -221,24 +221,34 @@
 
 determine_rpm_package_manager() {
   local RELEASE
+
+  # Modern method using os-release(5)
+  if [ -f "/etc/os-release" ]; then
+    RELEASE=$(. "/etc/os-release"; echo "$ID")
+    case $RELEASE in
+    "fedora"|"rhel"|"centos"|"amzn"|"mageia"|"openmandriva")
+      PACKAGEMANAGERS=(yum)
+      ;;
+    "suse"|"sles"|"sled"|"opensuse"|"opensuse-leap"|"opensuse-tumbleweed")
+      PACKAGEMANAGERS=(zypp)
+      ;;
+    esac
+  fi
+
+  if [ "$PACKAGEMANAGERS" ]; then
+    return
+  fi
+
+  # Fallback method using lsb_release(1)
   LSB_RELEASE="$(which lsb_release 2> /dev/null)"
   if [ -x "$LSB_RELEASE" ]; then
     RELEASE=$(lsb_release -i 2> /dev/null | sed 's/:\t/:/' | cut -d ':' -f 2-)
     case $RELEASE in
-    "Fedora"|"Amazon")
+    "Fedora"|"Amazon"|"Mageia"|"OpenMandrivaLinux")
       PACKAGEMANAGERS=(yum)
       ;;
-    "Mageia")
-      PACKAGEMANAGERS=(urpmi)
-      if [ "$(lsb_release -rs 2> /dev/null)" -ge "6" ]; then
-        PACKAGEMANAGERS=(yum urpmi)
-      fi
-      ;;
-    "MandrivaLinux")
-      PACKAGEMANAGERS=(urpmi)
-      ;;
     "SUSE LINUX"|"openSUSE")
-      PACKAGEMANAGERS=(yast)
+      PACKAGEMANAGERS=(zypp)
       ;;
     esac
   fi
@@ -248,35 +258,18 @@
   fi
 
   # Fallback methods that are probably unnecessary on modern systems.
-  if [ -f "/etc/lsb-release" ]; then
-    # file missing on Fedora, does not contain DISTRIB_ID on OpenSUSE.
-    eval $(sed -e '/DISTRIB_ID/!d' /etc/lsb-release)
-    case $DISTRIB_ID in
-    MandrivaLinux)
-      PACKAGEMANAGERS=(urpmi)
-      ;;
-    esac
-  fi
-
-  if [ "$PACKAGEMANAGERS" ]; then
-    return
-  fi
-
   if [ -f "/etc/fedora-release" ] || [ -f "/etc/redhat-release" ]; then
     PACKAGEMANAGERS=(yum)
   elif [ -f "/etc/system-release" ] && grep -Fq "Amazon Linux" "/etc/system-release"; then
     PACKAGEMANAGERS=(yum)
   elif [ -f "/etc/SuSE-release" ]; then
-    PACKAGEMANAGERS=(yast)
-  elif [ -f "/etc/mandriva-release" ]; then
-    PACKAGEMANAGERS=(urpmi)
+    PACKAGEMANAGERS=(zypp)
   fi
 }
 
 DEFAULT_ARCH="@@ARCHITECTURE@@"
 YUM_REPO_FILE="/etc/yum.repos.d/@@PACKAGE@@.repo"
 ZYPPER_REPO_FILE="/etc/zypp/repos.d/@@PACKAGE@@.repo"
-URPMI_REPO_FILE="/etc/urpmi/urpmi.cfg"
 
 install_yum() {
   install_rpm_key
@@ -297,43 +290,11 @@
   fi
 }
 
-# This is called by the cron job, rather than in the RPM postinstall.
-# We cannot do this during the install when urpmi is running due to
-# database locking. We also need to enable the repository, and we can
-# only do that while we are online.
-# see: https://qa.mandriva.com/show_bug.cgi?id=31893
-configure_urpmi() {
+install_zypp() {
   if [ ! "$REPOCONFIG" ]; then
     return 0
   fi
 
-  urpmq --list-media | grep -q -s "^@@PACKAGE@@$"
-  if [ "$?" -eq "0" ]; then
-    # Repository already configured
-    return 0
-  fi
-  urpmi.addmedia --update \
-    "@@PACKAGE@@" "$REPOCONFIG/$DEFAULT_ARCH"
-}
-
-install_urpmi() {
-  # urpmi not smart enough to pull media_info/pubkey from the repository?
-  install_rpm_key
-
-  # Defer urpmi.addmedia to configure_urpmi() in the cron job.
-  # See comment there.
-  #
-  # urpmi.addmedia --update \
-  #   "@@PACKAGE@@" "$REPOCONFIG/$DEFAULT_ARCH"
-}
-
-install_yast() {
-  if [ ! "$REPOCONFIG" ]; then
-    return 0
-  fi
-
-  # We defer adding the key to later. See comment in the cron job.
-
   # Ideally, we would run: zypper addrepo -t YUM -f \
   # "$REPOCONFIG/$DEFAULT_ARCH" "@@PACKAGE@@"
   # but that does not work when zypper is running.
@@ -344,6 +305,8 @@
 enabled=1
 autorefresh=1
 baseurl=$REPOCONFIG/$DEFAULT_ARCH
+gpgcheck=1
+gpgkey=https://dl.google.com/linux/linux_signing_key.pub
 type=rpm-md
 keeppackages=0
 REPOCONTENT
@@ -359,12 +322,9 @@
   "yum")
     [ -f "$YUM_REPO_FILE" ]
     ;;
-  "yast")
+  "zypp")
     [ -f "$ZYPPER_REPO_FILE" ]
     ;;
-  "urpmi")
-    urpmq --list-url | grep -q -s "\b@@PACKAGE@@\b"
-    ;;
   esac
 }
 
@@ -382,12 +342,9 @@
     "yum")
       update_repo_file "$YUM_REPO_FILE"
       ;;
-    "yast")
+    "zypp")
       update_repo_file "$ZYPPER_REPO_FILE"
       ;;
-    "urpmi")
-      update_urpmi_cfg
-      ;;
     esac
   done
 }
@@ -428,26 +385,6 @@
   sed -i -e "s,^baseurl=.*,baseurl=$REPOCONFIG/$DEFAULT_ARCH," "$REPO_FILE"
 }
 
-update_urpmi_cfg() {
-  REPOCFG=$(urpmq --list-url | grep "\b@@PACKAGE@@\b")
-  if [ ! "$REPOCFG" ]; then
-    # Don't do anything if the repo isn't there, since that probably means the
-    # user deleted it.
-    return 0
-  fi
-
-  # See if it's the right repo URL
-  REPOMATCH=$(echo "$REPOCFG" | grep "\b$REPOCONFIG/$DEFAULT_ARCH\b")
-  # If so, nothing to do
-  if [ "$REPOMATCH" ]; then
-    return 0
-  fi
-
-  # Looks like it's the wrong URL, so recreate it.
-  urpmi.removemedia "@@PACKAGE@@" && \
-    urpmi.addmedia --update "@@PACKAGE@@" "$REPOCONFIG/$DEFAULT_ARCH"
-}
-
 # We only remove the repository configuration during a purge. Since RPM has
 # no equivalent to dpkg --purge, the code below is actually never used. We
 # keep it only for reference purposes, should we ever need it.
@@ -456,18 +393,7 @@
 #  rm -f "$YUM_REPO_FILE"
 #}
 #
-#remove_urpmi() {
-#  # Ideally, we would run: urpmi.removemedia "@@PACKAGE@@"
-#  # but that does not work when urpmi is running.
-#  # Sentinel comment text does not work either because urpmi.update removes
-#  # all comments. So we just delete the entry that matches what we originally
-#  # inserted. If such an entry was added manually, that's tough luck.
-#  if [ -f "$URPMI_REPO_FILE" ]; then
-#    sed -i '\_^@@PACKAGE@@ $REPOCONFIG/$DEFAULT_ARCH {$_,/^}$/d' "$URPMI_REPO_FILE"
-#  fi
-#}
-#
-#remove_yast() {
+#remove_zypp() {
 #  # Ideally, we would run: zypper removerepo "@@PACKAGE@@"
 #  # but that does not work when zypper is running.
 #  rm -f /etc/zypp/repos.d/@@PACKAGE@@.repo
diff --git a/chrome/installer/linux/common/rpmrepo.cron b/chrome/installer/linux/common/rpmrepo.cron
index f7fe2bcf..1a9344f 100755
--- a/chrome/installer/linux/common/rpmrepo.cron
+++ b/chrome/installer/linux/common/rpmrepo.cron
@@ -37,15 +37,6 @@
     if [ $? -ne 0 ]; then
       install_${PACKAGEMANAGER}
     fi
-
-    # Now do any extra configuration that couldn't be done by post-install.
-    case $PACKAGEMANAGER in
-    "urpmi")
-      # We need to configure urpmi after the install has finished.
-      # See configure_urpmi() for details.
-      configure_urpmi
-      ;;
-    esac
   done
 
   if [ $? -eq 0 ]; then
diff --git a/chrome/installer/linux/rpm/chrome.spec.template b/chrome/installer/linux/rpm/chrome.spec.template
index 55a3567..c755e4c 100644
--- a/chrome/installer/linux/rpm/chrome.spec.template
+++ b/chrome/installer/linux/rpm/chrome.spec.template
@@ -138,28 +138,13 @@
     "yum")
       install_yum
       ;;
-    "urpmi")
-      install_urpmi
-      ;;
-    "yast")
-      install_yast
+    "zypp")
+      install_zypp
       ;;
     esac
   done
 fi
 
-# Some package managers have locks that prevent everything from being
-# configured at install time, so wait a bit then kick the cron job to do
-# whatever is left. Probably the db will be unlocked by then, but if not, the
-# cron job will keep retrying.
-# Do this with 'at' instead of a backgrounded shell because zypper waits on all
-# sub-shells to finish before it finishes, which is exactly the opposite of
-# what we want here. Also preemptively start atd because for some reason it's
-# not always running, which kind of defeats the purpose of having 'at' as a
-# required LSB command.
-service atd start
-echo "sh /etc/cron.daily/@@PACKAGE@@" | at now + 2 minute > /dev/null 2>&1
-
 CHANNEL=@@CHANNEL@@
 case $CHANNEL in
   stable )
@@ -219,11 +204,8 @@
 #  "yum")
 #    remove_yum
 #    ;;
-#  "urpmi")
-#    remove_urpmi
-#    ;;
-#  "yast")
-#    remove_yast
+#  "zypp")
+#    remove_zypp
 #    ;;
 #  esac
 #done
diff --git a/chrome/installer/setup/install.cc b/chrome/installer/setup/install.cc
index 9be6241..d46771e 100644
--- a/chrome/installer/setup/install.cc
+++ b/chrome/installer/setup/install.cc
@@ -148,9 +148,9 @@
 void CopyPreferenceFileForFirstRun(const InstallerState& installer_state,
                                    const base::FilePath& prefs_source_path) {
   base::FilePath prefs_dest_path(
-      installer_state.target_path().AppendASCII(kDefaultMasterPrefs));
+      installer_state.target_path().AppendASCII(kDefaultInitialPrefs));
   if (!base::CopyFile(prefs_source_path, prefs_dest_path)) {
-    VLOG(1) << "Failed to copy master preferences from:"
+    VLOG(1) << "Failed to copy initial preferences from:"
             << prefs_source_path.value() << " gle: " << ::GetLastError();
   }
 }
@@ -578,7 +578,7 @@
 
   // Read master_preferences copied beside chrome.exe at install.
   const InitialPreferences prefs(
-      installer_state.target_path().AppendASCII(kDefaultMasterPrefs));
+      installer_state.target_path().AppendASCII(kDefaultInitialPrefs));
 
   // Update shortcuts at this install level (per-user shortcuts on system-level
   // installs will be updated through Active Setup).
@@ -655,7 +655,7 @@
   // Read master_preferences copied beside chrome.exe at install for the sake of
   // creating/updating shortcuts.
   const base::FilePath installation_root = installer_state.target_path();
-  InitialPreferences prefs(installation_root.AppendASCII(kDefaultMasterPrefs));
+  InitialPreferences prefs(installation_root.AppendASCII(kDefaultInitialPrefs));
   base::FilePath chrome_exe(installation_root.Append(kChromeExe));
   CreateOrUpdateShortcuts(chrome_exe, prefs, CURRENT_USER, install_operation);
 
diff --git a/chrome/installer/setup/install.h b/chrome/installer/setup/install.h
index 0bacd749..e8d24059 100644
--- a/chrome/installer/setup/install.h
+++ b/chrome/installer/setup/install.h
@@ -70,7 +70,7 @@
 // install status (failed, new_install, updated etc).
 //
 // install_params: See install_params.h
-// prefs: master preferences. See chrome/installer/util/initial_preferences.h.
+// prefs: initial preferences. See chrome/installer/util/initial_preferences.h.
 //
 // Note: since caller unpacks Chrome to install_temp_path\source, the caller
 // is responsible for cleaning up install_temp_path.
diff --git a/chrome/installer/setup/install_unittest.cc b/chrome/installer/setup/install_unittest.cc
index 63624ce..8c4fe0b 100644
--- a/chrome/installer/setup/install_unittest.cc
+++ b/chrome/installer/setup/install_unittest.cc
@@ -286,16 +286,16 @@
          do_not_create_quick_launch_shortcut},
     };
 
-    std::string master_prefs("{\"distribution\":{");
+    std::string initial_prefs("{\"distribution\":{");
     for (size_t i = 0; i < base::size(desired_prefs); ++i) {
-      master_prefs += (i == 0 ? "\"" : ",\"");
-      master_prefs += desired_prefs[i].pref_name;
-      master_prefs += "\":";
-      master_prefs += desired_prefs[i].is_desired ? "true" : "false";
+      initial_prefs += (i == 0 ? "\"" : ",\"");
+      initial_prefs += desired_prefs[i].pref_name;
+      initial_prefs += "\":";
+      initial_prefs += desired_prefs[i].is_desired ? "true" : "false";
     }
-    master_prefs += "}}";
+    initial_prefs += "}}";
 
-    return new installer::InitialPreferences(master_prefs);
+    return new installer::InitialPreferences(initial_prefs);
   }
 
   base::win::ScopedCOMInitializer com_initializer_;
diff --git a/chrome/installer/setup/installer_state.h b/chrome/installer/setup/installer_state.h
index 144cd02..e46e5d7 100644
--- a/chrome/installer/setup/installer_state.h
+++ b/chrome/installer/setup/installer_state.h
@@ -26,7 +26,7 @@
 class InitialPreferences;
 
 // Encapsulates the state of the current installation operation. This class
-// interprets the command-line arguments and master preferences and determines
+// interprets the command-line arguments and initial preferences and determines
 // the operations to be performed.
 class InstallerState {
  public:
@@ -69,7 +69,7 @@
   bool is_msi() const { return msi_; }
 
   // True if the --verbose-logging command-line flag is set or if the
-  // verbose_logging master preferences option is true.
+  // verbose_logging initial preferences option is true.
   bool verbose_logging() const { return verbose_logging_; }
 
   HKEY root_key() const { return root_key_; }
diff --git a/chrome/installer/setup/setup_install_details.cc b/chrome/installer/setup/setup_install_details.cc
index fd1ef95..adf6462 100644
--- a/chrome/installer/setup/setup_install_details.cc
+++ b/chrome/installer/setup/setup_install_details.cc
@@ -37,14 +37,14 @@
 
 void InitializeInstallDetails(
     const base::CommandLine& command_line,
-    const installer::InitialPreferences& master_preferences) {
+    const installer::InitialPreferences& initial_preferences) {
   install_static::InstallDetails::SetForProcess(
-      MakeInstallDetails(command_line, master_preferences));
+      MakeInstallDetails(command_line, initial_preferences));
 }
 
 std::unique_ptr<install_static::PrimaryInstallDetails> MakeInstallDetails(
     const base::CommandLine& command_line,
-    const installer::InitialPreferences& master_preferences) {
+    const installer::InitialPreferences& initial_preferences) {
   std::unique_ptr<install_static::PrimaryInstallDetails> details(
       std::make_unique<install_static::PrimaryInstallDetails>());
 
@@ -54,14 +54,14 @@
   details->set_mode(mode);
 
   // The install level may be set by any of:
-  // - distribution.system_level=true in master_preferences,
+  // - distribution.system_level=true in initial_preferences,
   // - --system-level on the command line, or
   // - the GoogleUpdateIsMachine=1 environment variable.
   // In all three cases the value is sussed out in InitialPreferences
   // initialization.
   bool system_level = false;
-  master_preferences.GetBool(installer::initial_preferences::kSystemLevel,
-                             &system_level);
+  initial_preferences.GetBool(installer::initial_preferences::kSystemLevel,
+                              &system_level);
   details->set_system_level(system_level);
 
   // The channel is determined based on the brand and the mode's
diff --git a/chrome/installer/setup/setup_install_details.h b/chrome/installer/setup/setup_install_details.h
index 8bd04e4f..df8b021 100644
--- a/chrome/installer/setup/setup_install_details.h
+++ b/chrome/installer/setup/setup_install_details.h
@@ -24,11 +24,11 @@
 // global InstallDetails for the process.
 void InitializeInstallDetails(
     const base::CommandLine& command_line,
-    const installer::InitialPreferences& master_preferences);
+    const installer::InitialPreferences& initial_preferences);
 
 // Returns a PrimaryInstallDetails instance for the installer.
 std::unique_ptr<install_static::PrimaryInstallDetails> MakeInstallDetails(
     const base::CommandLine& command_line,
-    const installer::InitialPreferences& master_preferences);
+    const installer::InitialPreferences& initial_preferences);
 
 #endif  // CHROME_INSTALLER_SETUP_SETUP_INSTALL_DETAILS_H_
diff --git a/chrome/installer/setup/setup_install_details_unittest.cc b/chrome/installer/setup/setup_install_details_unittest.cc
index c014167..3e70c9f9 100644
--- a/chrome/installer/setup/setup_install_details_unittest.cc
+++ b/chrome/installer/setup/setup_install_details_unittest.cc
@@ -453,7 +453,7 @@
         command_line_(base::CommandLine::NO_PROGRAM) {
     // Prepare the inputs from the process command line.
     command_line_.ParseFromString(test_data_.command_line);
-    master_preferences_ =
+    initial_preferences_ =
         std::make_unique<installer::InitialPreferences>(command_line_);
   }
 
@@ -482,8 +482,8 @@
 
   const base::CommandLine& command_line() const { return command_line_; }
 
-  const installer::InitialPreferences& master_preferences() const {
-    return *master_preferences_;
+  const installer::InitialPreferences& initial_preferences() const {
+    return *initial_preferences_;
   }
 
  private:
@@ -528,14 +528,14 @@
   HKEY root_key_;
   nt::ROOT_KEY nt_root_key_;
   base::CommandLine command_line_;
-  std::unique_ptr<installer::InitialPreferences> master_preferences_;
+  std::unique_ptr<installer::InitialPreferences> initial_preferences_;
 
   DISALLOW_COPY_AND_ASSIGN(MakeInstallDetailsTest);
 };
 
 TEST_P(MakeInstallDetailsTest, Test) {
   std::unique_ptr<install_static::PrimaryInstallDetails> details(
-      MakeInstallDetails(command_line(), master_preferences()));
+      MakeInstallDetails(command_line(), initial_preferences()));
   EXPECT_THAT(details->install_mode_index(), Eq(test_data().index));
   EXPECT_THAT(details->system_level(), Eq(test_data().system_level));
   EXPECT_THAT(details->channel(), Eq(test_data().channel));
diff --git a/chrome/installer/setup/setup_main.cc b/chrome/installer/setup/setup_main.cc
index 8d05723..17ab12a0 100644
--- a/chrome/installer/setup/setup_main.cc
+++ b/chrome/installer/setup/setup_main.cc
@@ -678,14 +678,14 @@
     DCHECK_NE(install_status, installer::UNKNOWN_STATUS);
   }
 
-  // Delete the master preferences file if present. Note that we do not care
+  // Delete the initial preferences file if present. Note that we do not care
   // about rollback here and we schedule for deletion on reboot if the delete
   // fails. As such, we do not use DeleteTreeWorkItem.
   if (cmd_line.HasSwitch(installer::switches::kInstallerData)) {
     base::FilePath prefs_path(
         cmd_line.GetSwitchValuePath(installer::switches::kInstallerData));
     if (!base::DeleteFile(prefs_path)) {
-      LOG(ERROR) << "Failed deleting master preferences file "
+      LOG(ERROR) << "Failed deleting initial preferences file "
                  << prefs_path.value()
                  << ", scheduling for deletion after reboot.";
       ScheduleFileSystemEntityForDeletion(prefs_path);
@@ -1233,13 +1233,13 @@
   // If the installation completed successfully...
   if (InstallUtil::GetInstallReturnCode(install_status) == 0) {
     // Update the DisplayVersion created by an MSI-based install.
-    base::FilePath master_preferences_file(
+    base::FilePath initial_preferences_file(
         installer_state.target_path().AppendASCII(
-            installer::kDefaultMasterPrefs));
+            installer::kDefaultInitialPrefs));
     std::string install_id;
     if (prefs.GetString(installer::initial_preferences::kMsiProductId,
                         &install_id)) {
-      // A currently active MSI install will have specified the master-
+      // A currently active MSI install will have specified the initial-
       // preferences file on the command-line that includes the product-id.
       // We must delay the setting of the DisplayVersion until after the
       // grandparent "msiexec" process has exited.
diff --git a/chrome/installer/setup/setup_singleton.cc b/chrome/installer/setup/setup_singleton.cc
index 5f9af9c..4505c2df 100644
--- a/chrome/installer/setup/setup_singleton.cc
+++ b/chrome/installer/setup/setup_singleton.cc
@@ -20,7 +20,7 @@
 
 std::unique_ptr<SetupSingleton> SetupSingleton::Acquire(
     const base::CommandLine& command_line,
-    const InitialPreferences& master_preferences,
+    const InitialPreferences& initial_preferences,
     InstallationState* original_state,
     InstallerState* installer_state) {
   DCHECK(original_state);
@@ -84,7 +84,7 @@
 
   // Update |original_state| and |installer_state|.
   original_state->Initialize();
-  installer_state->Initialize(command_line, master_preferences,
+  installer_state->Initialize(command_line, initial_preferences,
                               *original_state);
 
   // UMA data indicates that this method succeeds > 99% of the time.
diff --git a/chrome/installer/setup/setup_singleton.h b/chrome/installer/setup/setup_singleton.h
index 10926a2d..2cac351 100644
--- a/chrome/installer/setup/setup_singleton.h
+++ b/chrome/installer/setup/setup_singleton.h
@@ -34,11 +34,11 @@
   // process the exclusive right to modify the Chrome installation described by
   // |installer_state| (installation directory and associated registry keys).
   // May block. |original_state| and |installer_state| are updated using
-  // |command_line| and |master_preferences| to reflect the new state of the
+  // |command_line| and |initial_preferences| to reflect the new state of the
   // installation after acquisition. Returns nullptr on failure.
   static std::unique_ptr<SetupSingleton> Acquire(
       const base::CommandLine& command_line,
-      const InitialPreferences& master_preferences,
+      const InitialPreferences& initial_preferences,
       InstallationState* original_state,
       InstallerState* installer_state);
 
diff --git a/chrome/installer/setup/user_experiment.cc b/chrome/installer/setup/user_experiment.cc
index e202cee8..3a0628e 100644
--- a/chrome/installer/setup/user_experiment.cc
+++ b/chrome/installer/setup/user_experiment.cc
@@ -334,14 +334,14 @@
 // setup.exe immediately after a successful update or following user logon as a
 // result of Active Setup.
 void RunUserExperiment(const base::CommandLine& command_line,
-                       const InitialPreferences& master_preferences,
+                       const InitialPreferences& initial_preferences,
                        InstallationState* original_state,
                        InstallerState* installer_state) {
   VLOG(1) << __func__;
 
   ExperimentStorage storage;
   std::unique_ptr<SetupSingleton> setup_singleton(SetupSingleton::Acquire(
-      command_line, master_preferences, original_state, installer_state));
+      command_line, initial_preferences, original_state, installer_state));
   if (!setup_singleton) {
     VLOG(1) << "Timed out while waiting for setup singleton";
     WriteInitialState(&storage, ExperimentMetrics::kSingletonWaitTimeout);
diff --git a/chrome/installer/setup/user_experiment.h b/chrome/installer/setup/user_experiment.h
index 12853a2..793e4cbcc 100644
--- a/chrome/installer/setup/user_experiment.h
+++ b/chrome/installer/setup/user_experiment.h
@@ -38,7 +38,7 @@
 
 // Runs the experiment for the current user.
 void RunUserExperiment(const base::CommandLine& command_line,
-                       const InitialPreferences& master_preferences,
+                       const InitialPreferences& initial_preferences,
                        InstallationState* original_state,
                        InstallerState* installer_state);
 
diff --git a/chrome/installer/util/initial_preferences.cc b/chrome/installer/util/initial_preferences.cc
index 059b5711..eb4e198 100644
--- a/chrome/installer/util/initial_preferences.cc
+++ b/chrome/installer/util/initial_preferences.cc
@@ -27,7 +27,7 @@
 const char kFirstRunTabs[] = "first_run_tabs";
 
 base::LazyInstance<installer::InitialPreferences>::DestructorAtExit
-    g_master_preferences = LAZY_INSTANCE_INITIALIZER;
+    g_initial_preferences = LAZY_INSTANCE_INITIALIZER;
 
 bool GetURLFromValue(const base::Value* in_value, std::string* out_value) {
   return in_value && out_value && in_value->GetAsString(out_value);
@@ -62,11 +62,11 @@
   std::string error;
   std::unique_ptr<base::Value> root(json.Deserialize(nullptr, &error));
   if (!root.get()) {
-    LOG(WARNING) << "Failed to parse master prefs file: " << error;
+    LOG(WARNING) << "Failed to parse initial prefs file: " << error;
     return nullptr;
   }
   if (!root->is_dict()) {
-    LOG(WARNING) << "Failed to parse master prefs file: "
+    LOG(WARNING) << "Failed to parse initial prefs file: "
                  << "Root item must be a dictionary.";
     return nullptr;
   }
@@ -103,10 +103,10 @@
         cmd_line.GetSwitchValuePath(installer::switches::kInstallerData));
     InitializeFromFilePath(prefs_path);
   } else {
-    master_dictionary_.reset(new base::DictionaryValue());
+    initial_dictionary_.reset(new base::DictionaryValue());
   }
 
-  DCHECK(master_dictionary_.get());
+  DCHECK(initial_dictionary_.get());
 
   // A simple map from command line switches to equivalent switches in the
   // distribution dictionary.  Currently all switches added will be set to
@@ -137,7 +137,7 @@
     if (cmd_line.HasSwitch(translate_switches[i].cmd_line_switch)) {
       name.assign(installer::initial_preferences::kDistroDict);
       name.append(".").append(translate_switches[i].distribution_switch);
-      master_dictionary_->SetBoolean(name, true);
+      initial_dictionary_->SetBoolean(name, true);
     }
   }
 
@@ -147,7 +147,7 @@
   if (!str_value.empty()) {
     name.assign(installer::initial_preferences::kDistroDict);
     name.append(".").append(installer::initial_preferences::kLogFile);
-    master_dictionary_->SetString(name, str_value);
+    initial_dictionary_->SetString(name, str_value);
   }
 
   // Handle the special case of --system-level being implied by the presence of
@@ -160,13 +160,13 @@
       VLOG(1) << "Taking system-level from environment.";
       name.assign(installer::initial_preferences::kDistroDict);
       name.append(".").append(installer::initial_preferences::kSystemLevel);
-      master_dictionary_->SetBoolean(name, true);
+      initial_dictionary_->SetBoolean(name, true);
     }
   }
 
   // Cache a pointer to the distribution dictionary. Ignore errors if any.
-  master_dictionary_->GetDictionary(installer::initial_preferences::kDistroDict,
-                                    &distribution_);
+  initial_dictionary_->GetDictionary(
+      installer::initial_preferences::kDistroDict, &distribution_);
 #endif
 }
 
@@ -186,15 +186,15 @@
 
 bool InitialPreferences::InitializeFromString(const std::string& json_data) {
   if (!json_data.empty())
-    master_dictionary_.reset(ParseDistributionPreferences(json_data));
+    initial_dictionary_.reset(ParseDistributionPreferences(json_data));
 
   bool data_is_valid = true;
-  if (!master_dictionary_.get()) {
-    master_dictionary_.reset(new base::DictionaryValue());
+  if (!initial_dictionary_.get()) {
+    initial_dictionary_.reset(new base::DictionaryValue());
     data_is_valid = false;
   } else {
     // Cache a pointer to the distribution dictionary.
-    master_dictionary_->GetDictionary(
+    initial_dictionary_->GetDictionary(
         installer::initial_preferences::kDistroDict, &distribution_);
   }
 
@@ -221,8 +221,8 @@
         installer::initial_preferences::kDoNotCreateQuickLaunchShortcut, true);
   }
 
-  // Deprecated boolean import master preferences now mapped to their duplicates
-  // in prefs::.
+  // Deprecated boolean import initial preferences now mapped to their
+  // duplicates in prefs::.
   static constexpr char kDistroImportHistoryPref[] = "import_history";
   static constexpr char kDistroImportHomePagePref[] = "import_home_page";
   static constexpr char kDistroImportSearchPref[] = "import_search_engine";
@@ -241,7 +241,7 @@
   for (const auto& mapping : kLegacyDistroImportPrefMappings) {
     bool value = false;
     if (GetBool(mapping.old_distro_pref_path, &value))
-      master_dictionary_->SetBoolean(mapping.modern_pref_path, value);
+      initial_dictionary_->SetBoolean(mapping.modern_pref_path, value);
   }
 
 #if BUILDFLAG(ENABLE_RLZ)
@@ -250,7 +250,8 @@
   static constexpr char kDistroPingDelay[] = "ping_delay";
   int rlz_ping_delay = 0;
   if (GetInt(kDistroPingDelay, &rlz_ping_delay))
-    master_dictionary_->SetInteger(prefs::kRlzPingDelaySeconds, rlz_ping_delay);
+    initial_dictionary_->SetInteger(prefs::kRlzPingDelaySeconds,
+                                    rlz_ping_delay);
 #endif  // BUILDFLAG(ENABLE_RLZ)
 }
 
@@ -277,12 +278,12 @@
 }
 
 std::vector<std::string> InitialPreferences::GetFirstRunTabs() const {
-  return GetNamedList(kFirstRunTabs, master_dictionary_.get());
+  return GetNamedList(kFirstRunTabs, initial_dictionary_.get());
 }
 
 bool InitialPreferences::GetExtensionsBlock(
     base::DictionaryValue** extensions) const {
-  return master_dictionary_->GetDictionary(
+  return initial_dictionary_->GetDictionary(
       initial_preferences::kExtensionsBlock, extensions);
 }
 
@@ -298,7 +299,7 @@
     const std::string& name) const {
   std::string result;
   std::unique_ptr<base::Value> pref_value;
-  if (master_dictionary_->Remove(name, &pref_value)) {
+  if (initial_dictionary_->Remove(name, &pref_value)) {
     if (!pref_value->GetAsString(&result))
       NOTREACHED();
   }
@@ -307,7 +308,7 @@
 
 // static
 const InitialPreferences& InitialPreferences::ForCurrentProcess() {
-  return g_master_preferences.Get();
+  return g_initial_preferences.Get();
 }
 
 }  // namespace installer
diff --git a/chrome/installer/util/initial_preferences.h b/chrome/installer/util/initial_preferences.h
index a801b9e..3be5a92 100644
--- a/chrome/installer/util/initial_preferences.h
+++ b/chrome/installer/util/initial_preferences.h
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// This file contains functions processing master preference file used by
+// This file contains functions processing initial preference file used by
 // setup and first run.
 
 #ifndef CHROME_INSTALLER_UTIL_INITIAL_PREFERENCES_H_
@@ -24,12 +24,12 @@
 namespace installer {
 
 #if !defined(OS_MAC)
-// This is the default name for the master preferences file used to pre-set
+// This is the default name for the initial preferences file used to pre-set
 // values in the user profile at first run.
-const char kDefaultMasterPrefs[] = "master_preferences";
+const char kDefaultInitialPrefs[] = "master_preferences";
 #endif
 
-// The master preferences is a JSON file with the same entries as the
+// The initial preferences is a JSON file with the same entries as the
 // 'Default\Preferences' file. This function parses the distribution
 // section of the preferences file.
 //
@@ -75,12 +75,12 @@
 
 class InitialPreferences {
  public:
-  // Construct a master preferences from the current process' current command
+  // Construct a initial preferences from the current process' current command
   // line. Equivalent to calling
   // InitialPreferences(*CommandLine::ForCurrentProcess()).
   InitialPreferences();
 
-  // Parses the command line and optionally reads the master preferences file
+  // Parses the command line and optionally reads the initial preferences file
   // to get distribution related install options (if the "installerdata" switch
   // is present in the command line.
   // The options from the preference file and command line are merged, with the
@@ -104,7 +104,7 @@
   bool GetInt(const std::string& name, int* value) const;
   bool GetString(const std::string& name, std::string* value) const;
 
-  // As part of the master preferences an optional section indicates the tabs
+  // As part of the initial preferences an optional section indicates the tabs
   // to open during first run. An example is the following:
   //
   //  {
@@ -119,10 +119,10 @@
   // An empty vector is returned if the first_run_tabs preference is absent.
   std::vector<std::string> GetFirstRunTabs() const;
 
-  // The master preferences can also contain a regular extensions
+  // The initial preferences can also contain a regular extensions
   // preference block. If so, the extensions referenced there will be
   // installed during the first run experience.
-  // An extension can go in the master prefs needs just the basic
+  // An extension can go in the initial prefs needs just the basic
   // elements such as:
   //   1- An extension entry under settings, assigned by the gallery
   //   2- The "location" : 1 entry
@@ -132,7 +132,7 @@
   //   4- The "path" entry with the version as last component
   //   5- The "state" : 1 entry
   //
-  // The following is an example of a master pref file that installs
+  // The following is an example of a initial pref file that installs
   // Google XYZ:
   //
   //  {
@@ -156,18 +156,19 @@
   //
   bool GetExtensionsBlock(base::DictionaryValue** extensions) const;
 
-  // Returns the compressed variations seed entry from the master prefs.
+  // Returns the compressed variations seed entry from the initial prefs.
   std::string GetCompressedVariationsSeed() const;
 
-  // Returns the variations seed signature entry from the master prefs.
+  // Returns the variations seed signature entry from the initial prefs.
   std::string GetVariationsSeedSignature() const;
 
-  // Returns true iff the master preferences were successfully read from a file.
+  // Returns true iff the initial preferences were successfully read from a
+  // file.
   bool read_from_file() const { return preferences_read_from_file_; }
 
   // Returns a reference to this InitialPreferences' root dictionary of values.
-  const base::DictionaryValue& master_dictionary() const {
-    return *master_dictionary_.get();
+  const base::DictionaryValue& initial_dictionary() const {
+    return *initial_dictionary_.get();
   }
 
   // Returns a static preference object that has been initialized with the
@@ -188,12 +189,12 @@
   // found in older master_preferences files.
   void EnforceLegacyPreferences();
 
-  // Removes the specified string pref from the master preferences and returns
-  // its value. Should be used for master prefs that shouldn't be automatically
+  // Removes the specified string pref from the initial preferences and returns
+  // its value. Should be used for initial prefs that shouldn't be automatically
   // copied over to profile preferences.
   std::string ExtractPrefString(const std::string& name) const;
 
-  std::unique_ptr<base::DictionaryValue> master_dictionary_;
+  std::unique_ptr<base::DictionaryValue> initial_dictionary_;
   base::DictionaryValue* distribution_ = nullptr;
   bool preferences_read_from_file_ = false;
 
diff --git a/chrome/installer/util/initial_preferences_unittest.cc b/chrome/installer/util/initial_preferences_unittest.cc
index 770471f..e14440d 100644
--- a/chrome/installer/util/initial_preferences_unittest.cc
+++ b/chrome/installer/util/initial_preferences_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.
 //
-// Unit tests for master preferences related methods.
+// Unit tests for initial preferences related methods.
 
 #include "chrome/installer/util/initial_preferences.h"
 
@@ -221,7 +221,7 @@
       "behllobkkfkfnphdnhnkndlbkcpglgmj.manifest.version", &version));
 }
 
-// Test that we are parsing master preferences correctly.
+// Test that we are parsing initial preferences correctly.
 TEST_F(InitialPreferencesTest, GetInstallPreferencesTest) {
   // Create a temporary prefs file.
   base::FilePath prefs_file;
@@ -239,7 +239,7 @@
   EXPECT_TRUE(
       base::WriteFile(prefs_file, text, static_cast<int>(strlen(text))));
 
-  // Make sure command line values override the values in master preferences.
+  // Make sure command line values override the values in initial preferences.
   std::wstring cmd_str(L"setup.exe --installerdata=\"" + prefs_file.value() +
                        L"\"");
   cmd_str.append(L" --do-not-launch-chrome");
@@ -263,7 +263,7 @@
   // Delete temporary prefs file.
   EXPECT_TRUE(base::DeleteFile(prefs_file));
 
-  // Check that if master prefs doesn't exist, we can still parse the common
+  // Check that if initial prefs doesn't exist, we can still parse the common
   // prefs.
   cmd_str = L"setup.exe --do-not-launch-chrome";
   cmd_line.ParseFromString(cmd_str);
@@ -326,23 +326,23 @@
   EXPECT_FALSE(do_not_create_taskbar_shortcut);
 
   bool actual_value = false;
-  EXPECT_TRUE(prefs.master_dictionary().GetBoolean(prefs::kImportBookmarks,
-                                                   &actual_value));
+  EXPECT_TRUE(prefs.initial_dictionary().GetBoolean(prefs::kImportBookmarks,
+                                                    &actual_value));
   EXPECT_TRUE(actual_value);
-  EXPECT_TRUE(prefs.master_dictionary().GetBoolean(prefs::kImportHistory,
-                                                   &actual_value));
+  EXPECT_TRUE(prefs.initial_dictionary().GetBoolean(prefs::kImportHistory,
+                                                    &actual_value));
   EXPECT_TRUE(actual_value);
-  EXPECT_TRUE(prefs.master_dictionary().GetBoolean(prefs::kImportHomepage,
-                                                   &actual_value));
+  EXPECT_TRUE(prefs.initial_dictionary().GetBoolean(prefs::kImportHomepage,
+                                                    &actual_value));
   EXPECT_TRUE(actual_value);
-  EXPECT_TRUE(prefs.master_dictionary().GetBoolean(prefs::kImportSearchEngine,
-                                                   &actual_value));
+  EXPECT_TRUE(prefs.initial_dictionary().GetBoolean(prefs::kImportSearchEngine,
+                                                    &actual_value));
   EXPECT_TRUE(actual_value);
 
 #if BUILDFLAG(ENABLE_RLZ)
   int rlz_ping_delay = 0;
-  EXPECT_TRUE(prefs.master_dictionary().GetInteger(prefs::kRlzPingDelaySeconds,
-                                                   &rlz_ping_delay));
+  EXPECT_TRUE(prefs.initial_dictionary().GetInteger(prefs::kRlzPingDelaySeconds,
+                                                    &rlz_ping_delay));
   EXPECT_EQ(40, rlz_ping_delay);
 #endif  // BUILDFLAG(ENABLE_RLZ)
 }
diff --git a/chrome/installer/util/util_constants.cc b/chrome/installer/util/util_constants.cc
index 72633f21..77b5f3f 100644
--- a/chrome/installer/util/util_constants.cc
+++ b/chrome/installer/util/util_constants.cc
@@ -76,7 +76,7 @@
 // of an uncompressed archive).
 const char kInstallArchive[] = "install-archive";
 
-// Specify the file path of Chrome master preference file.
+// Specify the file path of Chrome initial preference file.
 const char kInstallerData[] = "installerdata";
 
 // If present, specify file path to write logging info.
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 5956bde..91c02e1 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -998,6 +998,7 @@
       "../browser/component_updater/component_patcher_operation_browsertest.cc",
       "../browser/content_index/content_index_browsertest.cc",
       "../browser/content_settings/content_settings_browsertest.cc",
+      "../browser/conversions/conversions_usage_restriction_trial_browsertest.cc",
       "../browser/conversions/conversions_usecounter_browsertest.cc",
       "../browser/crash_recovery_browsertest.cc",
       "../browser/custom_handlers/protocol_handler_registry_browsertest.cc",
@@ -2065,6 +2066,8 @@
         "../browser/extensions/lazy_background_page_apitest.cc",
         "../browser/extensions/lazy_background_page_test_util.h",
         "../browser/extensions/manifest_v3_browsertest.cc",
+        "../browser/extensions/mixin_based_extension_apitest.cc",
+        "../browser/extensions/mixin_based_extension_apitest.h",
         "../browser/extensions/mutation_observers_apitest.cc",
         "../browser/extensions/native_bindings_apitest.cc",
         "../browser/extensions/navigation_observer_browsertest.cc",
@@ -2820,6 +2823,7 @@
         "base/interactive_test_utils_aura.h",
         "base/interactive_test_utils_views.cc",
       ]
+      data += [ "../browser/resources/chromeos/accessibility/switch_access/test_support.js" ]
       if (is_chromeos && !is_official_build) {
         sources += [
           "../browser/chromeos/web_applications/sample_system_web_app_integration_browsertest.cc",
diff --git a/chrome/test/android/test_support/src/org/chromium/chrome/test_support/PaymentRequestTestBridge.java b/chrome/test/android/test_support/src/org/chromium/chrome/test_support/PaymentRequestTestBridge.java
index c38029c9..3919619f 100644
--- a/chrome/test/android/test_support/src/org/chromium/chrome/test_support/PaymentRequestTestBridge.java
+++ b/chrome/test/android/test_support/src/org/chromium/chrome/test_support/PaymentRequestTestBridge.java
@@ -159,14 +159,7 @@
         }
 
         @Override
-        public void onAppListReady(@Nullable List<EditableOption> apps, PaymentItem total) {
-            if (apps == null) {
-                nativeSetAppDescriptions(
-                        mSetAppDescriptionsPtr, new String[0], new String[0], new String[0]);
-                nativeResolvePaymentRequestObserverCallback(mOnAppListReadyPtr);
-                return;
-            }
-
+        public void onAppListReady(List<EditableOption> apps, PaymentItem total) {
             String[] appLabels = new String[apps.size()];
             String[] appSublabels = new String[apps.size()];
             String[] appTotals = new String[apps.size()];
diff --git a/chrome/test/chromedriver/chrome_launcher.cc b/chrome/test/chromedriver/chrome_launcher.cc
index 5045d1c..8ab7987 100644
--- a/chrome/test/chromedriver/chrome_launcher.cc
+++ b/chrome/test/chromedriver/chrome_launcher.cc
@@ -98,6 +98,14 @@
     "no-service-autorun",
 };
 
+#if defined(OS_WIN)
+
+const char* const kWindowsDesktopSwitches[] = {
+    "disable-backgrounding-occluded-windows",
+};
+
+#endif
+
 const char* const kAndroidSwitches[] = {
     "disable-fre", "enable-remote-debugging",
 };
@@ -141,6 +149,10 @@
     switches.SetUnparsedSwitch(common_switch);
   for (auto* desktop_switch : kDesktopSwitches)
     switches.SetUnparsedSwitch(desktop_switch);
+#if defined(OS_WIN)
+  for (auto* win_desktop_switch : kWindowsDesktopSwitches)
+    switches.SetUnparsedSwitch(win_desktop_switch);
+#endif
 
   // Chrome logs are normally sent to a file (whose location can be controlled
   // via the logPath capability). We expose a flag, --enable-chrome-logs, that
diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py
index 59c9b96a..44e5f64 100755
--- a/chrome/test/chromedriver/test/run_py_tests.py
+++ b/chrome/test/chromedriver/test/run_py_tests.py
@@ -3027,6 +3027,20 @@
         is_desktop,
         self._driver.capabilities['webauthn:extension:largeBlob'])
 
+class ChromeDriverBackgroundTest(ChromeDriverBaseTestWithWebServer):
+  def setUp(self):
+    self._driver1 = self.CreateDriver()
+    self._driver2 = self.CreateDriver()
+
+  def testBackgroundScreenshot(self):
+    self._driver2.Load(self._http_server.GetUrl('localhost')
+                      + '/chromedriver/empty.html')
+    self._driver1.Load(self._http_server.GetUrl('localhost')
+                      + '/chromedriver/empty.html')
+
+    screenshotPNGBase64  = self._driver1.TakeScreenshot()
+    self.assertIsNotNone(screenshotPNGBase64)
+
 # Tests that require a secure context.
 class ChromeDriverSecureContextTest(ChromeDriverBaseTestWithWebServer):
   # The example attestation private key from the U2F spec at
diff --git a/chrome/test/data/extensions/signin_screen_managed_storage/extension.crx b/chrome/test/data/extensions/signin_screen_managed_storage/extension.crx
deleted file mode 100644
index aa027c9..0000000
--- a/chrome/test/data/extensions/signin_screen_managed_storage/extension.crx
+++ /dev/null
Binary files differ
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json
index 789f695..9d42317 100644
--- a/chrome/test/data/policy/policy_test_cases.json
+++ b/chrome/test/data/policy/policy_test_cases.json
@@ -27,7 +27,7 @@
             "${pref}": {
               "value": "The value that |pref| should take on.",
               "expect_default": "Whether or not the pref value should be the default one.",
-              "local_state": "Whether |pref| is registered in local state's PrefService instead of the profile's PrefService. Defaults to |false| if not specified.",
+              "location": "The location where the pref is registered, possible values are ['user_profile', 'local_state']. Defaults to 'user_profile' if not specified.",
               "check_for_mandatory": "Should the preference be tested when a mandatory value is set for the policy? Defaults to |true| if not specified.",
               "check_for_recommended": "Should the preference be tested when a recommended value is set for the policy? Defaults to |true| if not specified."
             }
@@ -56,7 +56,7 @@
             "*.example.com"
           ]
         },
-        "prefs": { "unsafely_treat_insecure_origin_as_secure": { "local_state": true } }
+        "prefs": { "unsafely_treat_insecure_origin_as_secure": { "location": "local_state" } }
       }
     ]
   },
@@ -72,7 +72,7 @@
             "*.example.com"
           ]
         },
-        "prefs": { "unsafely_treat_insecure_origin_as_secure": { "local_state": true } }
+        "prefs": { "unsafely_treat_insecure_origin_as_secure": { "location": "local_state" } }
       }
     ]
   },
@@ -114,7 +114,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "DefaultBrowserSettingEnabled": true },
-        "prefs": { "browser.default_browser_setting_enabled": { "local_state": true } }
+        "prefs": { "browser.default_browser_setting_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -125,7 +125,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "ApplicationLocaleValue": "fr" },
-        "prefs": { "intl.app_locale": { "local_state": true } }
+        "prefs": { "intl.app_locale": { "location": "local_state" } }
       }
     ]
   },
@@ -161,7 +161,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "DnsOverHttpsMode": "off" },
-        "prefs": { "dns_over_https.mode": { "local_state": true } }
+        "prefs": { "dns_over_https.mode": { "location": "local_state" } }
       }
     ]
   },
@@ -174,7 +174,7 @@
           "DnsOverHttpsMode": "automatic",
           "DnsOverHttpsTemplates": "https://cloudflare-dns.com/dns-query https://dns.quad9.net/dns-query{?dns}"
         },
-        "prefs": { "dns_over_https.templates": { "local_state": true } }
+        "prefs": { "dns_over_https.templates": { "location": "local_state" } }
       }
     ]
   },
@@ -344,7 +344,6 @@
 
   "PrinterTypeDenyList": {
     "os": ["win", "linux", "mac", "chromeos"],
-    "test_policy": { "PrinterTypeDenyList": ["privet", "extension"] },
     "policy_pref_mapping_tests": [
       {
         "policies": { "PrinterTypeDenyList": [ "value1" ]},
@@ -833,7 +832,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "MetricsReportingEnabled": false },
-        "prefs": { "user_experience_metrics.reporting_enabled": { "local_state": true } },
+        "prefs": { "user_experience_metrics.reporting_enabled": { "location": "local_state" } },
         "indicator_tests": [
           {
             "pref": "user_experience_metrics.reporting_enabled",
@@ -989,7 +988,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "DiskCacheDir": "${user_home}/test-cache" },
-        "prefs": { "browser.disk_cache_dir": { "local_state": true } }
+        "prefs": { "browser.disk_cache_dir": { "location": "local_state" } }
       }
     ]
   },
@@ -999,7 +998,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "DiskCacheSize": 100 },
-        "prefs": { "browser.disk_cache_size": { "local_state": true } }
+        "prefs": { "browser.disk_cache_size": { "location": "local_state" } }
       }
     ]
   },
@@ -1161,7 +1160,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "EnableOnlineRevocationChecks": true },
-        "prefs": { "ssl.rev_checking.enabled": { "local_state": true } }
+        "prefs": { "ssl.rev_checking.enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -1170,8 +1169,14 @@
     "os": ["win", "linux", "chromeos"],
     "policy_pref_mapping_tests": [
       {
-        "policies": { "RequireOnlineRevocationChecksForLocalAnchors": true },
-        "prefs": { "ssl.rev_checking.required_for_local_anchors": { "local_state": true } }
+        "policies": {
+          "RequireOnlineRevocationChecksForLocalAnchors": true
+        },
+        "prefs": {
+          "ssl.rev_checking.required_for_local_anchors": {
+            "location": "local_state"
+          }
+        }
       }
     ]
   },
@@ -1193,7 +1198,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "BuiltinCertificateVerifierEnabled": true },
-        "prefs": { "builtin_certificate_verifier_enabled": { "local_state": true } }
+        "prefs": { "builtin_certificate_verifier_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -1203,7 +1208,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "AuthSchemes": "AuthSchemes" },
-        "prefs": { "auth.schemes": { "local_state": true } }
+        "prefs": { "auth.schemes": { "location": "local_state" } }
       }
     ]
   },
@@ -1213,7 +1218,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "DisableAuthNegotiateCnameLookup": true },
-        "prefs": { "auth.disable_negotiate_cname_lookup": { "local_state": true } }
+        "prefs": { "auth.disable_negotiate_cname_lookup": { "location": "local_state" } }
       }
     ]
   },
@@ -1223,7 +1228,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "EnableAuthNegotiatePort": true },
-        "prefs": { "auth.enable_negotiate_port": { "local_state": true } }
+        "prefs": { "auth.enable_negotiate_port": { "location": "local_state" } }
       }
     ]
   },
@@ -1233,7 +1238,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "BasicAuthOverHttpEnabled": false },
-        "prefs": { "auth.basic_over_http_enabled": { "local_state": true } }
+        "prefs": { "auth.basic_over_http_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -1243,7 +1248,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "AuthServerWhitelist": "localhost" },
-        "prefs": { "auth.server_allowlist": { "local_state": true } }
+        "prefs": { "auth.server_allowlist": { "location": "local_state" } }
       }
     ]
   },
@@ -1253,7 +1258,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "AuthServerAllowlist": "localhost" },
-        "prefs": { "auth.server_allowlist": { "local_state": true } }
+        "prefs": { "auth.server_allowlist": { "location": "local_state" } }
       }
     ]
   },
@@ -1263,7 +1268,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "AuthNegotiateDelegateWhitelist": "localhost" },
-        "prefs": { "auth.negotiate_delegate_whitelist": { "local_state": true } }
+        "prefs": { "auth.negotiate_delegate_whitelist": { "location": "local_state" } }
       }
     ]
   },
@@ -1273,7 +1278,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "AuthNegotiateDelegateAllowlist": "localhost" },
-        "prefs": { "auth.negotiate_delegate_whitelist": { "local_state": true } }
+        "prefs": { "auth.negotiate_delegate_whitelist": { "location": "local_state" } }
       }
     ]
   },
@@ -1283,7 +1288,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "AuthNegotiateDelegateByKdcPolicy": true },
-        "prefs": { "auth.negotiate_delegate_by_kdc_policy": { "local_state": true } }
+        "prefs": { "auth.negotiate_delegate_by_kdc_policy": { "location": "local_state" } }
       }
     ]
   },
@@ -1293,7 +1298,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "GSSAPILibraryName": "libwhatever.so" },
-        "prefs": { "auth.gssapi_library_name": { "local_state": true } }
+        "prefs": { "auth.gssapi_library_name": { "location": "local_state" } }
       }
     ]
   },
@@ -1303,7 +1308,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "AuthAndroidNegotiateAccountType": "com.example.spnego" },
-        "prefs": { "auth.android_negotiate_account_type": { "local_state": true } }
+        "prefs": { "auth.android_negotiate_account_type": { "location": "local_state" } }
       }
     ]
   },
@@ -1313,7 +1318,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "AllowCrossOriginAuthPrompt": true },
-        "prefs": { "auth.allow_cross_origin_prompt": { "local_state": true } }
+        "prefs": { "auth.allow_cross_origin_prompt": { "location": "local_state" } }
       }
     ]
   },
@@ -1323,7 +1328,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "NtlmV2Enabled": true },
-        "prefs": { "auth.ntlm_v2_enabled": { "local_state": true } }
+        "prefs": { "auth.ntlm_v2_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -1333,7 +1338,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "KerberosEnabled": true },
-        "prefs": { "kerberos.enabled": { "local_state": true } }
+        "prefs": { "kerberos.enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -1343,7 +1348,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "KerberosRememberPasswordEnabled": false },
-        "prefs": { "kerberos.remember_password_enabled": { "local_state": true } }
+        "prefs": { "kerberos.remember_password_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -1353,7 +1358,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "KerberosAddAccountsAllowed": false },
-        "prefs": { "kerberos.add_accounts_allowed": { "local_state": true } }
+        "prefs": { "kerberos.add_accounts_allowed": { "location": "local_state" } }
       }
     ]
   },
@@ -1382,7 +1387,7 @@
             }
           ]
         },
-        "prefs": { "kerberos.accounts": { "local_state": true } }
+        "prefs": { "kerberos.accounts": { "location": "local_state" } }
       }
     ]
   },
@@ -1493,7 +1498,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "ThirdPartyBlockingEnabled": false },
-        "prefs": { "third_party_blocking_enabled": { "local_state": true } }
+        "prefs": { "third_party_blocking_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -2726,7 +2731,7 @@
             }
           ]
         },
-        "prefs": { "device_login_screen_webusb_allow_devices_for_urls": { "local_state": true } }
+        "prefs": { "device_login_screen_webusb_allow_devices_for_urls": { "location": "local_state" } }
       }
     ]
   },
@@ -2865,7 +2870,7 @@
       {
         "policies": {"AllowFileSelectionDialogs": false},
         "prefs": {
-          "select_file_dialogs.allowed": { "local_state": true },
+          "select_file_dialogs.allowed": { "location": "local_state" },
           "download.prompt_for_download": {}
         }
       }
@@ -2957,7 +2962,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": {"MaxConnectionsPerProxy": 16},
-        "prefs": { "net.max_connections_per_proxy": { "local_state": true }}
+        "prefs": { "net.max_connections_per_proxy": { "location": "local_state" }}
       }
     ]
   },
@@ -3071,7 +3076,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": {"BackgroundModeEnabled": false},
-        "prefs": { "background_mode.enabled": { "local_state": true }}
+        "prefs": { "background_mode.enabled": { "location": "local_state" }}
       }
     ]
   },
@@ -3081,7 +3086,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": {"RestrictSigninToPattern": ".*@google.com"},
-        "prefs": { "google.services.username_pattern": { "local_state": true }}
+        "prefs": { "google.services.username_pattern": { "location": "local_state" }}
       }
     ]
   },
@@ -3129,7 +3134,7 @@
         "policies": {
           "BuiltInDnsClientEnabled": true
         },
-        "prefs": { "async_dns.enabled": { "local_state": true } }
+        "prefs": { "async_dns.enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -3141,7 +3146,7 @@
         "policies": {
           "WPADQuickCheckEnabled": true
         },
-        "prefs": { "proxy.quick_check_enabled": { "local_state": true } }
+        "prefs": { "proxy.quick_check_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -3185,7 +3190,7 @@
         "policies": {
           "VariationsRestrictParameter": "restricted"
         },
-        "prefs": { "variations_restrict_parameter": { "local_state": true } }
+        "prefs": { "variations_restrict_parameter": { "location": "local_state" } }
       }
     ]
   },
@@ -3197,7 +3202,7 @@
         "policies": {
           "ChromeVariations": 1
         },
-        "prefs": { "variations_restrictions_by_policy": { "local_state": true } }
+        "prefs": { "variations_restrictions_by_policy": { "location": "local_state" } }
       }
     ]
   },
@@ -3227,8 +3232,7 @@
             "url": "http://localhost/",
             "hash": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef"
           }
-        },
-        "selector": "#account-picture-indicator"
+        }
       }
     ]
   },
@@ -3242,8 +3246,7 @@
             "url": "http://localhost/",
             "hash": "baddecafbaddecafbaddecafbaddecafbaddecafbaddecafbaddecafbaddecaf"
           }
-        },
-        "selector": "#wallpaper-indicator"
+        }
       }
     ]
   },
@@ -3255,7 +3258,7 @@
         "policies": {
           "BrowserGuestModeEnabled": true
         },
-        "prefs": { "profile.browser_guest_enabled": { "local_state": true } }
+        "prefs": { "profile.browser_guest_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -3267,7 +3270,7 @@
         "policies": {
           "BrowserGuestModeEnforced": true
         },
-        "prefs": { "profile.browser_guest_enforced": { "local_state": true } }
+        "prefs": { "profile.browser_guest_enforced": { "location": "local_state" } }
       }
     ]
   },
@@ -3279,7 +3282,7 @@
         "policies": {
           "BrowserAddPersonEnabled": true
         },
-        "prefs": { "profile.add_person_enabled": { "local_state": true } }
+        "prefs": { "profile.add_person_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -3291,7 +3294,7 @@
         "policies": {
           "ForceBrowserSignin": false
         },
-        "prefs": { "profile.force_browser_signin": { "local_state": true } }
+        "prefs": { "profile.force_browser_signin": { "location": "local_state" } }
       }
     ]
   },
@@ -3320,8 +3323,8 @@
         },
         "prefs": {
           "signin.allowed_on_next_startup": {},
-          "profile.force_browser_signin": { "local_state": true },
-          "profile.browser_guest_enabled": { "local_state": true }
+          "profile.force_browser_signin": { "location": "local_state" },
+          "profile.browser_guest_enabled": { "location": "local_state" }
           }
       }
     ]
@@ -3352,7 +3355,7 @@
         },
         "prefs": {
           "signin.allowed": {},
-          "profile.force_browser_signin": { "local_state": true }
+          "profile.force_browser_signin": { "location": "local_state" }
         }
       }
     ]
@@ -3369,7 +3372,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "CloudManagementEnrollmentMandatory": true },
-        "prefs": { "policy.cloud_management_enrollment_mandatory": { "local_state": true } }
+        "prefs": { "policy.cloud_management_enrollment_mandatory": { "location": "local_state" } }
       }
     ]
   },
@@ -3379,7 +3382,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "SSLVersionMin": "tls1.1" },
-        "prefs": { "ssl.version_min": { "local_state": true } }
+        "prefs": { "ssl.version_min": { "location": "local_state" } }
       }
     ]
   },
@@ -3458,7 +3461,7 @@
         "policies": {
           "SuppressUnsupportedOSWarning": true
         },
-        "prefs": { "browser.suppress_unsupported_os_warning": { "local_state": true } }
+        "prefs": { "browser.suppress_unsupported_os_warning": { "location": "local_state" } }
       }
     ]
   },
@@ -3512,7 +3515,7 @@
         "policies": {
           "MediaRouterCastAllowAllIPs": false
         },
-        "prefs": { "media_router.cast_allow_all_ips": { "local_state": true } }
+        "prefs": { "media_router.cast_allow_all_ips": { "location": "local_state" } }
       }
     ]
   },
@@ -3589,7 +3592,7 @@
         "policies": {
           "ComponentUpdatesEnabled": true
         },
-        "prefs": { "component_updates.component_updates_enabled": { "local_state": true } }
+        "prefs": { "component_updates.component_updates_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -3625,7 +3628,7 @@
         "policies": {
           "RelaunchNotification": 1
         },
-        "prefs": { "browser.relaunch_notification": { "local_state": true } }
+        "prefs": { "browser.relaunch_notification": { "location": "local_state" } }
       }
     ]
   },
@@ -3637,7 +3640,7 @@
         "policies": {
           "RelaunchNotificationPeriod": 86400000
         },
-        "prefs": { "browser.relaunch_notification_period": { "local_state": true } }
+        "prefs": { "browser.relaunch_notification_period": { "location": "local_state" } }
       }
     ]
   },
@@ -3649,7 +3652,7 @@
         "policies": {
           "RelaunchHeadsUpPeriod": 86400000
         },
-        "prefs": { "browser.relaunch_heads_up_period": { "local_state": true } }
+        "prefs": { "browser.relaunch_heads_up_period": { "location": "local_state" } }
       }
     ]
   },
@@ -3661,7 +3664,7 @@
         "policies": {
           "PromotionalTabsEnabled": false
         },
-        "prefs": { "browser.promotional_tabs_enabled": { "local_state": true } }
+        "prefs": { "browser.promotional_tabs_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -3677,7 +3680,7 @@
         "policies": {
           "CommandLineFlagSecurityWarningsEnabled": true
         },
-        "prefs": { "browser.command_line_flag_security_warnings_enabled": { "local_state": true } }
+        "prefs": { "browser.command_line_flag_security_warnings_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -3701,7 +3704,10 @@
         "policies": {
           "ExternalProtocolDialogShowAlwaysOpenCheckbox": true
         },
-        "prefs": { "external_protocol_dialog.show_always_open_checkbox": { "local_state": false, "value": true }
+        "prefs": {
+          "external_protocol_dialog.show_always_open_checkbox": {
+            "value": true
+          }
         }
       }
     ]
@@ -3740,7 +3746,6 @@
 
   "ScrollToTextFragmentEnabled": {
     "os": ["win", "linux", "mac", "chromeos", "android"],
-    "test_policy": { "ScrollToTextFragmentEnabled": true },
     "policy_pref_mapping_tests": [
       {
         "policies": { "ScrollToTextFragmentEnabled": true },
@@ -3760,7 +3765,7 @@
         "policies": { "TargetBlankImpliesNoOpener": false },
         "prefs": {
           "policy.target_blank_implies_noopener": {
-            "local_state": true,
+            "location": "local_state",
             "value": false
           }
         }
@@ -3780,7 +3785,6 @@
 
   "GloballyScopeHTTPAuthCacheEnabled": {
     "os": ["win", "linux", "mac", "chromeos", "android"],
-    "test_policy": { "GloballyScopeHTTPAuthCacheEnabled": true },
     "policy_pref_mapping_tests": [
       {
         "policies": {
@@ -3813,7 +3817,6 @@
 
   "DNSInterceptionChecksEnabled": {
     "os": ["chromeos", "linux", "mac", "win"],
-    "test_policy": { "DNSInterceptionChecksEnabled": false },
     "policy_pref_mapping_tests": [
       {
         "policies": {
@@ -3821,7 +3824,7 @@
         },
         "prefs": {
           "browser.dns_interception_checks_enabled": {
-            "local_state": true,
+            "location": "local_state",
             "value": false
           }
         }
@@ -3831,13 +3834,12 @@
 
   "IntranetRedirectBehavior": {
     "os": ["chromeos", "linux", "mac", "win"],
-    "test_policy": { "IntranetRedirectBehavior": 0 },
     "policy_pref_mapping_tests": [
       {
         "policies": { "IntranetRedirectBehavior": 0 },
         "prefs": {
           "browser.intranet_redirect_behavior": {
-            "local_state": true,
+            "location": "local_state",
             "value": 0
           }
         }
@@ -3867,7 +3869,7 @@
         "policies": {
           "PolicyRefreshRate": 300000
         },
-        "prefs": { "policy.user_refresh_rate": { "local_state": true } }
+        "prefs": { "policy.user_refresh_rate": { "location": "local_state" } }
       }
     ]
   },
@@ -3965,7 +3967,7 @@
         "policies": {
           "AudioOutputAllowed": true
         },
-        "prefs": { "hardware.audio_output_enabled": { "local_state": true } }
+        "prefs": { "hardware.audio_output_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -4018,7 +4020,7 @@
           "ManagedGuestSessionPrivacyWarningsEnabled": false
         },
         "prefs": {
-          "managed_session.privacy_warning_enabled": { "local_state": true }
+          "managed_session.privacy_warning_enabled": { "location": "local_state" }
         }
       }
     ]
@@ -4049,8 +4051,8 @@
         "policies": {
           "SystemFeaturesDisableList": ["os_settings", "scanning"]
         },
-        "prefs": { "policy.system_features_disable_list": { "local_state": true },
-                   "os_settings_enabled": { "local_state": true } }
+        "prefs": { "policy.system_features_disable_list": { "location": "local_state" },
+                   "os_settings_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -4060,7 +4062,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "SystemFeaturesDisableMode": "hidden" },
-        "prefs": { "policy.system_features_disable_mode": { "local_state": true } }
+        "prefs": { "policy.system_features_disable_mode": { "location": "local_state" } }
       }
     ]
   },
@@ -4072,7 +4074,7 @@
         "policies": {
           "SessionLengthLimit": 3600000
         },
-        "prefs": { "session.length_limit": { "local_state": true } }
+        "prefs": { "session.length_limit": { "location": "local_state" } }
       }
     ]
   },
@@ -4305,7 +4307,7 @@
           "WaitForInitialUserActivity": true
         },
         "prefs": {
-          "session.wait_for_initial_user_activity": { "local_state": true },
+          "session.wait_for_initial_user_activity": { "location": "local_state" },
           "power.wait_for_initial_user_activity": {}
         }
       }
@@ -4811,7 +4813,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "HardwareAccelerationModeEnabled": true },
-        "prefs": { "hardware_acceleration_mode.enabled": { "local_state": true } }
+        "prefs": { "hardware_acceleration_mode.enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -5077,7 +5079,7 @@
         "policies": {
           "SchedulerConfiguration": "performance"
         },
-        "prefs": { "chromeos.scheduler_configuration": { "local_state": true } }
+        "prefs": { "chromeos.scheduler_configuration": { "location": "local_state" } }
       }
     ]
   },
@@ -5089,7 +5091,7 @@
         "policies": {
           "CloudPolicyOverridesPlatformPolicy": false
         },
-        "prefs": { "policy.cloud_override": { "local_state": true } }
+        "prefs": { "policy.cloud_override": { "location": "local_state" } }
       }
     ]
   },
@@ -5182,7 +5184,7 @@
             "example.com"
           ]
         },
-        "prefs": { "ssl.client_certs.h2_coalescing_hosts": { "local_state": true } }
+        "prefs": { "ssl.client_certs.h2_coalescing_hosts": { "location": "local_state" } }
       }
     ]
   },
@@ -5225,13 +5227,12 @@
 
   "AmbientAuthenticationInPrivateModesEnabled":{
     "os": ["win", "linux", "mac", "chromeos", "android"],
-    "test_policy":{"AmbientAuthenticationInPrivateModesEnabled": true},
     "policy_pref_mapping_tests": [
       {
         "policies": {
           "AmbientAuthenticationInPrivateModesEnabled": 0
         },
-        "prefs": { "auth.ambient_auth_in_private_modes": {"local_state": true } }
+        "prefs": { "auth.ambient_auth_in_private_modes": {"location": "local_state" } }
       }
     ]
   },
@@ -5442,7 +5443,6 @@
 
   "ClickToCallEnabled" : {
     "os": ["win", "linux", "mac", "chromeos"],
-    "test_policy": { "ClickToCallEnabled": false },
     "policy_pref_mapping_tests": [
       {
         "policies": {
@@ -5475,7 +5475,6 @@
 
   "SuggestedContentEnabled": {
     "os": ["chromeos"],
-    "test_policy": {"SuggestedContentEnabled": false },
     "policy_pref_mapping_tests": [
       {
         "policies": {
@@ -5499,7 +5498,7 @@
         "policies": {
           "DevicePolicyRefreshRate": 300000
         },
-        "prefs": { "policy.device_refresh_rate": { "local_state": true } }
+        "prefs": { "policy.device_refresh_rate": { "location": "local_state" } }
       }
     ]
   },
@@ -5846,7 +5845,7 @@
         "policies": {
           "TaskManagerEndProcessEnabled": false
         },
-        "prefs": { "task_manager.end_process_enabled": { "local_state": true } }
+        "prefs": { "task_manager.end_process_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -5862,7 +5861,7 @@
             "download_rate_kbits": "5600"
           }
         },
-        "prefs": { "net.throttling_enabled": { "local_state": true } }
+        "prefs": { "net.throttling_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -5874,7 +5873,7 @@
         "policies": {
           "DeviceWiFiFastTransitionEnabled": true
         },
-        "prefs": { "net.device_wifi_fast_transition_enabled": { "local_state": true } }
+        "prefs": { "net.device_wifi_fast_transition_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -5929,7 +5928,7 @@
         "policies": {
           "BrowserNetworkTimeQueriesEnabled": true
         },
-        "prefs": { "network_time.network_time_queries_enabled": { "local_state": true } }
+        "prefs": { "network_time.network_time_queries_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -5988,7 +5987,7 @@
         "policies": {
           "CastReceiverName": "Hallway"
         },
-        "prefs": { "cros.device.cast_receiver.name": { "local_state": true } }
+        "prefs": { "cros.device.cast_receiver.name": { "location": "local_state" } }
       }
     ]
   },
@@ -6064,7 +6063,7 @@
         "policies": { "DeviceExternalPrintServersAllowlist": ["id4", "id7", "id10"]},
         "prefs": {
           "native_printing.device_external_print_servers_allowlist": {
-            "local_state": true,
+            "location": "local_state",
             "value": ["id4", "id7", "id10"]
           }
         }
@@ -6436,7 +6435,6 @@
 
   "DeviceCrostiniArcAdbSideloadingAllowed": {
     "os": ["chromeos"],
-    "test_policy": { "DeviceCrostiniArcAdbSideloadingAllowed": 2 },
     "policy_pref_mapping_tests": []
   },
 
@@ -6467,7 +6465,7 @@
         "policies": {
           "ChromeCleanupEnabled": true
         },
-        "prefs": { "software_reporter.enabled": { "local_state": true } }
+        "prefs": { "software_reporter.enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -6915,7 +6913,7 @@
         "policies": {
           "DevicePowerPeakShiftEnabled": true
         },
-        "prefs": { "ash.power.peak_shift_enabled": { "local_state": true } }
+        "prefs": { "ash.power.peak_shift_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -6927,7 +6925,7 @@
         "policies": {
           "DevicePowerPeakShiftBatteryThreshold": 20
         },
-        "prefs": { "ash.power.peak_shift_battery_threshold": { "local_state": true } }
+        "prefs": { "ash.power.peak_shift_battery_threshold": { "location": "local_state" } }
       }
     ]
   },
@@ -6972,7 +6970,7 @@
             ]
           }
         },
-        "prefs": { "ash.power.peak_shift_day_config": { "local_state": true } }
+        "prefs": { "ash.power.peak_shift_day_config": { "location": "local_state" } }
       }
     ]
   },
@@ -6984,7 +6982,7 @@
         "policies": {
           "DeviceBootOnAcEnabled": true
         },
-        "prefs": { "ash.power.boot_on_ac_enabled": { "local_state": true } }
+        "prefs": { "ash.power.boot_on_ac_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -7008,7 +7006,7 @@
         "policies": {
           "DeviceAdvancedBatteryChargeModeEnabled": true
         },
-        "prefs": { "ash.power.advanced_battery_charge_mode_enabled": { "local_state": true } }
+        "prefs": { "ash.power.advanced_battery_charge_mode_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -7045,7 +7043,7 @@
             ]
           }
         },
-        "prefs": { "ash.power.advanced_battery_charge_mode_day_config": { "local_state": true } }
+        "prefs": { "ash.power.advanced_battery_charge_mode_day_config": { "location": "local_state" } }
       }
     ]
   },
@@ -7057,7 +7055,7 @@
         "policies": {
           "DeviceBatteryChargeMode": 5
         },
-        "prefs": { "ash.power.battery_charge_mode": { "local_state": true } }
+        "prefs": { "ash.power.battery_charge_mode": { "location": "local_state" } }
       }
     ]
   },
@@ -7069,7 +7067,7 @@
         "policies": {
           "DeviceBatteryChargeCustomStartCharging": 60
         },
-        "prefs": { "ash.power.battery_charge_custom_start_charging": { "local_state": true } }
+        "prefs": { "ash.power.battery_charge_custom_start_charging": { "location": "local_state" } }
       }
     ]
   },
@@ -7081,7 +7079,7 @@
         "policies": {
           "DeviceBatteryChargeCustomStopCharging": 91
         },
-        "prefs": { "ash.power.battery_charge_custom_stop_charging": { "local_state": true } }
+        "prefs": { "ash.power.battery_charge_custom_stop_charging": { "location": "local_state" } }
       }
     ]
   },
@@ -7093,7 +7091,7 @@
         "policies": {
           "DeviceUsbPowerShareEnabled": true
         },
-        "prefs": { "ash.power.usb_power_share_enabled": { "local_state": true } }
+        "prefs": { "ash.power.usb_power_share_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -7105,7 +7103,7 @@
         "policies": {
           "DevicePowerwashAllowed": true
         },
-        "prefs": { "cros.device.device_powerwash_allowed": { "local_state": true } }
+        "prefs": { "cros.device.device_powerwash_allowed": { "location": "local_state" } }
       }
     ]
   },
@@ -7131,7 +7129,9 @@
         "policies": {
           "EmojiSuggestionEnabled": false
         },
-        "prefs": { "assistive_input.emoji_suggestion.enterprise_allowed": { "local_state": false } }
+        "prefs": {
+          "assistive_input.emoji_suggestion.enterprise_allowed": {}
+        }
       }
     ]
   },
@@ -7320,7 +7320,7 @@
               "policy_version": "some_hash",
               "enable_remote_attestation_check": true
             }],
-            "local_state": true
+            "location": "local_state"
           }
         }
       }
@@ -7358,7 +7358,7 @@
           }
         },
         "prefs": {
-          "arc.snapshot_hours": { "local_state": true }
+          "arc.snapshot_hours": { "location": "local_state" }
         }
       }
     ]
@@ -7522,7 +7522,7 @@
         "policies": {
           "CloudReportingEnabled": true
         },
-        "prefs": { "enterprise_reporting.chrome_cloud_reporting": { "local_state": true } }
+        "prefs": { "enterprise_reporting.chrome_cloud_reporting": { "location": "local_state" } }
       }
     ]
   },
@@ -7749,7 +7749,7 @@
             }
           ]
         },
-        "prefs": { "enterprise_connectors.on_file_attached": { "local_state": true } }
+        "prefs": { "enterprise_connectors.on_file_attached": { "location": "local_state" } }
       }
     ]
   },
@@ -7784,7 +7784,7 @@
             }
           ]
         },
-        "prefs": { "enterprise_connectors.on_file_downloaded": { "local_state": true } }
+        "prefs": { "enterprise_connectors.on_file_downloaded": { "location": "local_state" } }
       }
     ]
   },
@@ -7817,7 +7817,7 @@
             }
           ]
         },
-        "prefs": { "enterprise_connectors.on_bulk_data_entry": { "local_state": true } }
+        "prefs": { "enterprise_connectors.on_bulk_data_entry": { "location": "local_state" } }
       }
     ]
   },
@@ -7833,7 +7833,7 @@
             }
           ]
         },
-        "prefs": { "enterprise_connectors.on_security_event": { "local_state": true } }
+        "prefs": { "enterprise_connectors.on_security_event": { "location": "local_state" } }
       }
     ]
   },
@@ -7855,7 +7855,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "RendererCodeIntegrityEnabled": true },
-        "prefs": { "renderer_code_integrity_enabled": { "local_state": true } }
+        "prefs": { "renderer_code_integrity_enabled": { "location": "local_state" } }
       }
     ]
   },
@@ -7865,7 +7865,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "HSTSPolicyBypassList": ["example"]},
-        "prefs": { "hsts.policy.upgrade_bypass_list": { "local_state": true } }
+        "prefs": { "hsts.policy.upgrade_bypass_list": { "location": "local_state" } }
       }
     ]
   },
@@ -7878,7 +7878,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "TotalMemoryLimitMb": 2048 },
-        "prefs": { "total_memory_limit_mb": { "local_state": true } }
+        "prefs": { "total_memory_limit_mb": { "location": "local_state" } }
       }
     ]
   },
@@ -7904,7 +7904,7 @@
       {
         "policies": { "UserDataSnapshotRetentionLimit": 2 },
         "prefs": {
-          "downgrade.snapshot_retention_limit": { "value": 2, "local_state": true }
+          "downgrade.snapshot_retention_limit": { "value": 2, "location": "local_state" }
         }
       }
     ]
@@ -7966,7 +7966,7 @@
        }
       },
       "prefs": {
-       "cros.system_proxy_settings": { "local_state": true }
+       "cros.system_proxy_settings": { "location": "local_state" }
       }
      }
     ]
@@ -7978,7 +7978,7 @@
         "policies":  {
           "NativeWindowOcclusionEnabled":  true
         },
-        "prefs": { "policy.native_window_occlusion_enabled":  {"local_state":  true} }
+        "prefs": { "policy.native_window_occlusion_enabled":  {"location":  "local_state"} }
       }
     ]
   },
@@ -8014,7 +8014,7 @@
         "policies": { "IntensiveWakeUpThrottlingEnabled": true },
         "prefs": {
           "policy.intensive_wake_up_throttling_enabled": {
-            "local_state":  true,
+            "location": "local_state",
             "value": true
           }
         }
@@ -8028,7 +8028,7 @@
         "policies": { "UserAgentClientHintsEnabled": true },
         "prefs": {
           "policy.user_agent_client_hints_enabled": {
-            "local_state":  true,
+            "location": "local_state",
             "value": true
           }
         }
@@ -8079,7 +8079,7 @@
         "policies": { "BackForwardCacheEnabled": true },
         "prefs": {
           "policy.back_forward_cache_enabled": {
-            "local_state":  true,
+            "location": "local_state",
             "value": true
           }
         }
@@ -8094,7 +8094,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "TosDialogBehavior": 2 },
-        "prefs": { "policy.cct_tos_dialog_behavior": { "local_state": true } }
+        "prefs": { "policy.cct_tos_dialog_behavior": { "location": "local_state" } }
       }
     ]
   },
@@ -8209,7 +8209,7 @@
             }
           ]
         },
-        "prefs": { "policy.dlp_rules_list": { "local_state": true } }
+        "prefs": { "policy.dlp_rules_list": { "location": "local_state" } }
       }
     ]
   },
@@ -8257,7 +8257,7 @@
       {
         "policies": { "LacrosAllowed": false },
         "prefs": {
-          "lacros_allowed": { "local_state": true }
+          "lacros_allowed": { "location": "local_state" }
         }
       }
     ]
diff --git a/chrome/test/data/webui/BUILD.gn b/chrome/test/data/webui/BUILD.gn
index e02731d..ce6306f 100644
--- a/chrome/test/data/webui/BUILD.gn
+++ b/chrome/test/data/webui/BUILD.gn
@@ -239,6 +239,24 @@
       "$root_gen_dir/chrome/test/data/webui/test_store.m.js",
       "$root_gen_dir/chrome/test/data/webui/test_util.m.js",
     ]
+
+    if (enable_print_preview) {
+      deps += [ "print_preview:preprocess" ]
+      data += [
+        "$root_gen_dir/chrome/test/data/webui/print_preview/destination_settings_test.js",
+        "$root_gen_dir/chrome/test/data/webui/print_preview/destination_store_test.js",
+        "$root_gen_dir/chrome/test/data/webui/print_preview/invalid_settings_browsertest.js",
+        "$root_gen_dir/chrome/test/data/webui/print_preview/key_event_test.js",
+        "$root_gen_dir/chrome/test/data/webui/print_preview/policy_test.js",
+        "$root_gen_dir/chrome/test/data/webui/print_preview/preview_generation_test.js",
+        "$root_gen_dir/chrome/test/data/webui/print_preview/print_button_test.js",
+        "$root_gen_dir/chrome/test/data/webui/print_preview/print_preview_app_test.js",
+        "$root_gen_dir/chrome/test/data/webui/print_preview/print_preview_sidebar_test.js",
+        "$root_gen_dir/chrome/test/data/webui/print_preview/restore_state_test.js",
+        "$root_gen_dir/chrome/test/data/webui/print_preview/user_manager_test.js",
+      ]
+    }
+
     if (is_chromeos) {
       data += [
         "$root_gen_dir/chrome/test/data/webui/chromeos/fake_network_config_mojom.m.js",
diff --git a/chrome/test/data/webui/chromeos/diagnostics/realtime_cpu_chart_test.js b/chrome/test/data/webui/chromeos/diagnostics/realtime_cpu_chart_test.js
index 0ed3609..2ddbeee8 100644
--- a/chrome/test/data/webui/chromeos/diagnostics/realtime_cpu_chart_test.js
+++ b/chrome/test/data/webui/chromeos/diagnostics/realtime_cpu_chart_test.js
@@ -125,7 +125,7 @@
 
       // Correct number of yAxis ticks drawn.
       assertEquals(
-          3,
+          5,
           realtimeCpuChartElement.shadowRoot
               .querySelectorAll('#gridLines>g.tick')
               .length);
diff --git a/chrome/test/data/webui/chromeos/scanning/BUILD.gn b/chrome/test/data/webui/chromeos/scanning/BUILD.gn
index f03919a..4d4cb3ab 100644
--- a/chrome/test/data/webui/chromeos/scanning/BUILD.gn
+++ b/chrome/test/data/webui/chromeos/scanning/BUILD.gn
@@ -16,6 +16,7 @@
     ":file_type_select_test",
     ":page_size_select_test",
     ":resolution_select_test",
+    ":scan_done_section_test",
     ":scan_preview_test",
     ":scan_to_select_test",
     ":scanner_select_test",
@@ -50,6 +51,11 @@
   externs_list = [ "$externs_path/mocha-2.5.js" ]
 }
 
+js_library("scan_done_section_test") {
+  deps = [ "//chromeos/components/scanning/resources:scan_done_section" ]
+  externs_list = [ "$externs_path/mocha-2.5.js" ]
+}
+
 js_library("scan_preview_test") {
   deps = [ "//chromeos/components/scanning/resources:scan_preview" ]
   externs_list = [ "$externs_path/mocha-2.5.js" ]
diff --git a/chrome/test/data/webui/chromeos/scanning/scan_done_section_test.js b/chrome/test/data/webui/chromeos/scanning/scan_done_section_test.js
new file mode 100644
index 0000000..890bb6a
--- /dev/null
+++ b/chrome/test/data/webui/chromeos/scanning/scan_done_section_test.js
@@ -0,0 +1,40 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'chrome://scanning/scan_done_section.js';
+
+import {assertEquals, assertTrue} from '../../chai_assert.js';
+
+export function scanDoneSectionTest() {
+  /** @type {?ScanDoneSectionElement} */
+  let scanDoneSection = null;
+
+  setup(() => {
+    scanDoneSection = /** @type {!ScanDoneSectionElement} */ (
+        document.createElement('scan-done-section'));
+    assertTrue(!!scanDoneSection);
+    document.body.appendChild(scanDoneSection);
+  });
+
+  teardown(() => {
+    if (scanDoneSection) {
+      scanDoneSection.remove();
+    }
+    scanDoneSection = null;
+  });
+
+  test('initializeScanDoneSection', () => {
+    assertTrue(!!scanDoneSection.$.title);
+    assertTrue(!!scanDoneSection.$$('.done-button-container'));
+  });
+
+  test('pageNumberUpdatesTitleText', () => {
+    scanDoneSection.pageNumber = 1;
+    assertEquals(
+        'Scanned file saved!', scanDoneSection.$.title.textContent.trim());
+    scanDoneSection.pageNumber = 2;
+    assertEquals(
+        'Scanned files saved!', scanDoneSection.$.title.textContent.trim());
+  });
+}
diff --git a/chrome/test/data/webui/chromeos/scanning/scanning_app_browsertest.js b/chrome/test/data/webui/chromeos/scanning/scanning_app_browsertest.js
index 6d0d755..301b63cb 100644
--- a/chrome/test/data/webui/chromeos/scanning/scanning_app_browsertest.js
+++ b/chrome/test/data/webui/chromeos/scanning/scanning_app_browsertest.js
@@ -54,7 +54,7 @@
 // although technically is not necessary.
 const debug_suites_list = [
   'ColorModeSelect', 'FileTypeSelect', 'PageSizeSelect', 'ResolutionSelect',
-  'ScanApp', 'ScannerSelect', 'ScanPreviewSelect', 'ScanToSelect',
+  'ScanApp', 'ScanDoneSection', 'ScannerSelect', 'ScanPreview', 'ScanToSelect',
   'SelectBehavior', 'SourceSelect'
 ];
 
diff --git a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js
index 3c27fbe..b1fa477 100644
--- a/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js
+++ b/chrome/test/data/webui/chromeos/scanning/scanning_app_test.js
@@ -449,11 +449,6 @@
           assertTrue(isVisible(
               /** @type {!HTMLElement} */ (
                   scanningApp.$$('scan-done-section'))));
-          assertEquals(
-              'Scanned files saved!',
-              scanningApp.$$('scan-done-section')
-                  .$$('#title')
-                  .textContent.trim());
 
           // Click the Done button to return to READY state.
           return clickDoneButton();
diff --git a/chrome/test/data/webui/chromeos/scanning/scanning_app_unified_test.js b/chrome/test/data/webui/chromeos/scanning/scanning_app_unified_test.js
index c3c3390..9216ab1f 100644
--- a/chrome/test/data/webui/chromeos/scanning/scanning_app_unified_test.js
+++ b/chrome/test/data/webui/chromeos/scanning/scanning_app_unified_test.js
@@ -14,6 +14,7 @@
 import {fileTypeSelectTest} from './file_type_select_test.js';
 import {pageSizeSelectTest} from './page_size_select_test.js';
 import {resolutionSelectTest} from './resolution_select_test.js';
+import {scanDoneSectionTest} from './scan_done_section_test.js';
 import {scanPreviewTest} from './scan_preview_test.js';
 import {scanToSelectTest} from './scan_to_select_test.js';
 import {scannerSelectTest} from './scanner_select_test.js';
@@ -33,8 +34,9 @@
 runSuite('PageSizeSelect', pageSizeSelectTest);
 runSuite('ResolutionSelect', resolutionSelectTest);
 runSuite('ScanApp', scanningAppTest);
+runSuite('ScanDoneSection', scanDoneSectionTest);
 runSuite('ScannerSelect', scannerSelectTest);
-runSuite('ScanPreviewSelect', scanPreviewTest);
+runSuite('ScanPreview', scanPreviewTest);
 runSuite('ScanToSelect', scanToSelectTest);
 runSuite('SelectBehavior', selectBehaviorTest);
 runSuite('SourceSelect', sourceSelectTest);
diff --git a/chrome/test/data/webui/cr_components/chromeos/cellular_setup/esim_flow_ui_test.js b/chrome/test/data/webui/cr_components/chromeos/cellular_setup/esim_flow_ui_test.js
index e814cf9e..6fff314 100644
--- a/chrome/test/data/webui/cr_components/chromeos/cellular_setup/esim_flow_ui_test.js
+++ b/chrome/test/data/webui/cr_components/chromeos/cellular_setup/esim_flow_ui_test.js
@@ -36,7 +36,57 @@
     Polymer.dom.flush();
   });
 
-  test('No eSIM profile flow', async function() {
+  test('No eSIM profile flow invalid activation code', async function() {
+    eSimManagerRemote.addEuiccForTest(0);
+    const availableEuiccs = await eSimManagerRemote.getAvailableEuiccs();
+    availableEuiccs.euiccs[0].setProfileInstallResultForTest(
+        chromeos.cellularSetup.mojom.ProfileInstallResult
+            .kErrorInvalidActivationCode);
+
+    const profileLoadingPage = eSimPage.$$('#profileLoadingPage');
+    const activationCodePage = eSimPage.$$('#activationCodePage');
+    const finalPage = eSimPage.$$('#finalPage');
+
+    assertTrue(!!profileLoadingPage);
+    assertTrue(!!activationCodePage);
+    assertTrue(!!finalPage);
+
+    // Loading page should be showing.
+    assertTrue(
+        eSimPage.selectedESimPageName_ ===
+            cellular_setup.ESimPageName.PROFILE_LOADING &&
+        eSimPage.selectedESimPageName_ === profileLoadingPage.id);
+
+    await flushAsync();
+
+    // Should now be at the activation code page.
+    assertTrue(
+        eSimPage.selectedESimPageName_ ===
+            cellular_setup.ESimPageName.ACTIVATION_CODE &&
+        eSimPage.selectedESimPageName_ === activationCodePage.id);
+    // Insert an activation code.
+    activationCodePage.$$('#activationCode').value = 'ACTIVATION_CODE';
+
+    // Next button should now be enabled.
+    assertTrue(
+        eSimPage.buttonState.next ===
+        cellularSetup.ButtonState.SHOWN_AND_ENABLED);
+
+    eSimPage.navigateForward();
+
+    await flushAsync();
+
+    // Install should fail and still be at activation code page.
+    assertTrue(
+        eSimPage.selectedESimPageName_ ===
+            cellular_setup.ESimPageName.ACTIVATION_CODE &&
+        eSimPage.selectedESimPageName_ === activationCodePage.id);
+    // TODO(crbug.com/1093185) We don't have a way to show the error on the DOM
+    // right now. Check internal property for now.
+    assertTrue(eSimPage.showError_);
+  });
+
+  test('No eSIM profile flow valid activation code', async function() {
     eSimManagerRemote.addEuiccForTest(0);
 
     const profileLoadingPage = eSimPage.$$('#profileLoadingPage');
@@ -69,15 +119,16 @@
         cellularSetup.ButtonState.SHOWN_AND_ENABLED);
 
     eSimPage.navigateForward();
-    Polymer.dom.flush();
 
-    // Should now be at the final page.
+    await flushAsync();
+
+    // Should go to final page.
     assertTrue(
         eSimPage.selectedESimPageName_ === cellular_setup.ESimPageName.FINAL &&
         eSimPage.selectedESimPageName_ === finalPage.id);
   });
 
-  test('Single eSIM profile flow', async function() {
+  test('Single eSIM profile flow successful install', async function() {
     eSimManagerRemote.addEuiccForTest(1);
 
     const profileLoadingPage = eSimPage.$$('#profileLoadingPage');
@@ -98,6 +149,35 @@
     assertTrue(
         eSimPage.selectedESimPageName_ === cellular_setup.ESimPageName.FINAL &&
         eSimPage.selectedESimPageName_ === finalPage.id);
+    assertFalse(!!finalPage.$$('.error'));
+  });
+
+  test('Single eSIM profile flow unsuccessful install', async function() {
+    eSimManagerRemote.addEuiccForTest(1);
+    const availableEuiccs = await eSimManagerRemote.getAvailableEuiccs();
+    const profileList = await availableEuiccs.euiccs[0].getProfileList();
+    profileList.profiles[0].setProfileInstallResultForTest(
+        chromeos.cellularSetup.mojom.ProfileInstallResult.kFailure);
+
+    const profileLoadingPage = eSimPage.$$('#profileLoadingPage');
+    const finalPage = eSimPage.$$('#finalPage');
+
+    assertTrue(!!profileLoadingPage);
+    assertTrue(!!finalPage);
+
+    // Loading page should be showing.
+    assertTrue(
+        eSimPage.selectedESimPageName_ ===
+            cellular_setup.ESimPageName.PROFILE_LOADING &&
+        eSimPage.selectedESimPageName_ === profileLoadingPage.id);
+
+    await flushAsync();
+
+    // Should go directly to final page.
+    assertTrue(
+        eSimPage.selectedESimPageName_ === cellular_setup.ESimPageName.FINAL &&
+        eSimPage.selectedESimPageName_ === finalPage.id);
+    assertTrue(!!finalPage.$$('.error'));
   });
 
   test('Multiple eSIM profiles skip discovery flow', async function() {
@@ -148,7 +228,7 @@
         eSimPage.buttonState.next ===
         cellularSetup.ButtonState.SHOWN_AND_ENABLED);
     eSimPage.navigateForward();
-    Polymer.dom.flush();
+    await flushAsync();
 
     // Should now be at the final page.
     assertTrue(
diff --git a/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_esim_manager_remote.js b/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_esim_manager_remote.js
index c10fe5d..05abe8f 100644
--- a/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_esim_manager_remote.js
+++ b/chrome/test/data/webui/cr_components/chromeos/cellular_setup/fake_esim_manager_remote.js
@@ -24,12 +24,31 @@
      *     chromeos.cellularSetup.mojom.ESimProfileProperties},}>}
      */
     getProperties() {
-      return new Promise((res) => {
-        res({
-          properties: this.properties_,
-        });
+      return Promise.resolve({
+        properties: this.properties_,
       });
     }
+
+    /**
+     * @override
+     * @param {string} confirmationCode
+     * @return {!Promise<{result:
+     *     chromeos.cellularSetup.mojom.ProfileInstallResult},}>}
+     */
+    installProfile(confirmationCode) {
+      return Promise.resolve({
+        result: this.profileInstallResult_ ?
+            this.profileInstallResult_ :
+            chromeos.cellularSetup.mojom.ProfileInstallResult.kSuccess
+      });
+    }
+
+    /**
+     * @param {chromeos.cellularSetup.mojom.ProfileInstallResult} result
+     */
+    setProfileInstallResultForTest(result) {
+      this.profileInstallResult_ = result;
+    }
   }
 
   /** @implements {chromeos.cellularSetup.mojom.Euicc} */
@@ -47,10 +66,8 @@
      *     chromeos.cellularSetup.mojom.ESimOperationResult},}>}
      */
     requestPendingProfiles() {
-      return new Promise((res) => {
-        res({
-          result: chromeos.cellularSetup.mojom.ESimOperationResult.kSuccess
-        });
+      return Promise.resolve({
+        result: chromeos.cellularSetup.mojom.ESimOperationResult.kSuccess,
       });
     }
 
@@ -59,13 +76,33 @@
      * @return {!Promise<{profiles: Array<!ESimProfile>,}>}
      */
     getProfileList() {
-      return new Promise((res) => {
-        res({
-          profiles: this.profiles_,
-        });
+      return Promise.resolve({
+        profiles: this.profiles_,
       });
     }
 
+    /**
+     * @override
+     * @param {string} activationCode
+     * @param {string} confirmationCode
+     * @return {!Promise<{result:
+     *     chromeos.cellularSetup.mojom.ProfileInstallResult},}>}
+     */
+    installProfileFromActivationCode(activationCode, confirmationCode) {
+      return Promise.resolve({
+        result: this.profileInstallResult_ ?
+            this.profileInstallResult_ :
+            chromeos.cellularSetup.mojom.ProfileInstallResult.kSuccess,
+      });
+    }
+
+    /**
+     * @param {chromeos.cellularSetup.mojom.ProfileInstallResult} result
+     */
+    setProfileInstallResultForTest(result) {
+      this.profileInstallResult_ = result;
+    }
+
     /** @private */
     addProfileForTest_() {
       const id = this.profiles_.length + 1;
@@ -84,8 +121,8 @@
      * @return {!Promise<{euiccs: !Array<!Euicc>,}>}
      */
     getAvailableEuiccs() {
-      return new Promise((res) => {
-        res({euiccs: this.euiccs_});
+      return Promise.resolve({
+        euiccs: this.euiccs_,
       });
     }
 
diff --git a/chrome/test/data/webui/print_preview/BUILD.gn b/chrome/test/data/webui/print_preview/BUILD.gn
index 76c68926..ee13a72 100644
--- a/chrome/test/data/webui/print_preview/BUILD.gn
+++ b/chrome/test/data/webui/print_preview/BUILD.gn
@@ -3,6 +3,25 @@
 # found in the LICENSE file.
 
 import("//third_party/closure_compiler/compile_js.gni")
+import("//tools/grit/preprocess_grit.gni")
+
+preprocess_grit("preprocess") {
+  in_folder = "./"
+  out_folder = "$target_gen_dir"
+  in_files = [
+    "destination_settings_test.js",
+    "destination_store_test.js",
+    "invalid_settings_browsertest.js",
+    "key_event_test.js",
+    "policy_test.js",
+    "preview_generation_test.js",
+    "print_button_test.js",
+    "print_preview_app_test.js",
+    "print_preview_sidebar_test.js",
+    "restore_state_test.js",
+    "user_manager_test.js",
+  ]
+}
 
 js_type_check("closure_compile") {
   is_polymer3 = true
@@ -75,6 +94,8 @@
       ":destination_item_test_cros",
       ":destination_search_test_chromeos",
       ":destination_select_test_cros",
+      ":destination_settings_test_cros",
+      ":native_layer_cros_stub",
     ]
   } else {
     deps += [
@@ -281,6 +302,28 @@
 }
 
 if (is_chromeos) {
+  js_library("native_layer_cros_stub") {
+    deps = [
+      "..:test_browser_proxy.m",
+      "//chrome/browser/resources/print_preview:print_preview",
+      "//ui/webui/resources/js:assert.m",
+      "//ui/webui/resources/js:promise_resolver.m",
+    ]
+  }
+
+  js_library("destination_settings_test_cros") {
+    deps = [
+      ":native_layer_cros_stub",
+      ":native_layer_stub",
+      "..:chai_assert",
+      "..:test_util.m",
+      "//chrome/browser/resources/print_preview:print_preview",
+      "//ui/webui/resources/js:assert.m",
+      "//ui/webui/resources/js:cr.m",
+    ]
+    externs_list = [ "$externs_path/mocha-2.5.js" ]
+  }
+
   js_library("destination_dropdown_cros_test") {
     deps = [
       ":print_preview_test_utils",
@@ -292,6 +335,7 @@
 
   js_library("destination_select_test_cros") {
     deps = [
+      ":native_layer_cros_stub",
       ":native_layer_stub",
       ":print_preview_test_utils",
       "..:chai_assert",
@@ -303,6 +347,7 @@
 
   js_library("destination_search_test_chromeos") {
     deps = [
+      ":native_layer_cros_stub",
       ":native_layer_stub",
       ":print_preview_test_utils",
       "..:chai_assert",
diff --git a/chrome/test/data/webui/print_preview/destination_dialog_cros_interactive_test.js b/chrome/test/data/webui/print_preview/destination_dialog_cros_interactive_test.js
index 5d398f0..11dc22c 100644
--- a/chrome/test/data/webui/print_preview/destination_dialog_cros_interactive_test.js
+++ b/chrome/test/data/webui/print_preview/destination_dialog_cros_interactive_test.js
@@ -10,6 +10,7 @@
 import {eventToPromise, fakeDataBind} from '../test_util.m.js';
 
 import {CloudPrintInterfaceStub} from './cloud_print_interface_stub.js';
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
 import {NativeLayerStub} from './native_layer_stub.js';
 import {getDestinations, setupTestListenerElement} from './print_preview_test_utils.js';
 
@@ -43,6 +44,7 @@
     // Create destinations.
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    setNativeLayerCrosInstance();
     const localDestinations = [];
     const destinations = getDestinations(localDestinations);
     const recentDestinations = [makeRecentDestination(destinations[4])];
diff --git a/chrome/test/data/webui/print_preview/destination_dialog_cros_test.js b/chrome/test/data/webui/print_preview/destination_dialog_cros_test.js
index 4028f3b7..d6a911b 100644
--- a/chrome/test/data/webui/print_preview/destination_dialog_cros_test.js
+++ b/chrome/test/data/webui/print_preview/destination_dialog_cros_test.js
@@ -12,6 +12,7 @@
 import {eventToPromise} from '../test_util.m.js';
 
 import {CloudPrintInterfaceStub} from './cloud_print_interface_stub.js';
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
 import {NativeLayerStub} from './native_layer_stub.js';
 import {createDestinationStore, getDestinations, getGoogleDriveDestination, setupTestListenerElement} from './print_preview_test_utils.js';
 
@@ -60,6 +61,7 @@
     // Create data classes
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    setNativeLayerCrosInstance();
     cloudPrintInterface = new CloudPrintInterfaceStub();
     destinationStore = createDestinationStore();
     destinationStore.setCloudPrintInterface(cloudPrintInterface);
diff --git a/chrome/test/data/webui/print_preview/destination_item_test_cros.js b/chrome/test/data/webui/print_preview/destination_item_test_cros.js
index dd7a822..b76917ea 100644
--- a/chrome/test/data/webui/print_preview/destination_item_test_cros.js
+++ b/chrome/test/data/webui/print_preview/destination_item_test_cros.js
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {Destination, DestinationConnectionStatus, DestinationOrigin, DestinationType, NativeLayer, NativeLayerImpl, PrinterState, PrinterStatusReason, PrinterStatusSeverity} from 'chrome://print/print_preview.js';
+import {Destination, DestinationConnectionStatus, DestinationOrigin, DestinationType, NativeLayerCros, NativeLayerCrosImpl, PrinterState, PrinterStatusReason, PrinterStatusSeverity} from 'chrome://print/print_preview.js';
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
 
 import {assertEquals} from '../chai_assert.js';
 import {waitBeforeNextRender} from '../test_util.m.js';
 
-import {NativeLayerStub} from './native_layer_stub.js';
+import {NativeLayerCrosStub} from './native_layer_cros_stub.js';
 
 window.destination_item_test_cros = {};
 const destination_item_test_cros = window.destination_item_test_cros;
@@ -25,8 +25,8 @@
   /** @type {!PrintPreviewDestinationListItemElement} */
   let listItem;
 
-  /** @type {?NativeLayerStub} */
-  let nativeLayer = null;
+  /** @type {?NativeLayerCrosStub} */
+  let nativeLayerCros = null;
 
   function setNativeLayerPrinterStatusMap() {
     [{
@@ -44,8 +44,8 @@
        }],
      }]
         .forEach(
-            status =>
-                nativeLayer.addPrinterStatusToMap(status.printerId, status));
+            status => nativeLayerCros.addPrinterStatusToMap(
+                status.printerId, status));
   }
 
   /** @override */
@@ -55,8 +55,8 @@
           </print-preview-destination-list-item>`;
 
     // Stub out native layer.
-    nativeLayer = new NativeLayerStub();
-    NativeLayerImpl.instance_ = nativeLayer;
+    nativeLayerCros = new NativeLayerCrosStub();
+    NativeLayerCrosImpl.instance_ = nativeLayerCros;
     setNativeLayerPrinterStatusMap();
 
     listItem = /** @type {!PrintPreviewDestinationListItemElement} */ (
diff --git a/chrome/test/data/webui/print_preview/destination_search_test_chromeos.js b/chrome/test/data/webui/print_preview/destination_search_test_chromeos.js
index 27de9d6..6b91a76 100644
--- a/chrome/test/data/webui/print_preview/destination_search_test_chromeos.js
+++ b/chrome/test/data/webui/print_preview/destination_search_test_chromeos.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 {ColorModeRestriction, Destination, DestinationConnectionStatus, DestinationOrigin, DestinationStore, DestinationType, DuplexModeRestriction, InvitationStore, NativeLayer, NativeLayerImpl} from 'chrome://print/print_preview.js';
+import {ColorModeRestriction, Destination, DestinationConnectionStatus, DestinationOrigin, DestinationStore, DestinationType, DuplexModeRestriction, InvitationStore, NativeLayer, NativeLayerCrosImpl, NativeLayerImpl} from 'chrome://print/print_preview.js';
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {NativeEventTarget as EventTarget} from 'chrome://resources/js/cr/event_target.m.js';
 import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
@@ -10,6 +10,7 @@
 import {assertEquals, assertNotEquals} from '../chai_assert.js';
 import {eventToPromise} from '../test_util.m.js';
 
+import {NativeLayerCrosStub} from './native_layer_cros_stub.js';
 import {NativeLayerStub} from './native_layer_stub.js';
 import {createDestinationStore, getCddTemplate, setupTestListenerElement} from './print_preview_test_utils.js';
 
@@ -36,6 +37,9 @@
   /** @type {NativeLayerStub} */
   let nativeLayer;
 
+  /** @type {NativeLayerCrosStub} */
+  let nativeLayerCros;
+
   /** @override */
   suiteSetup(function() {
     setupTestListenerElement();
@@ -46,6 +50,8 @@
     // Create data classes
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    nativeLayerCros = new NativeLayerCrosStub();
+    NativeLayerCrosImpl.instance_ = nativeLayerCros;
     destinationStore = createDestinationStore();
     nativeLayer.setLocalDestinationCapabilities(
         getCddTemplate('FooDevice', 'FooName'));
@@ -110,13 +116,13 @@
           capabilities: getCddTemplate(destId).capabilities,
           success: true,
         };
-        nativeLayer.setSetupPrinterResponse(response);
+        nativeLayerCros.setSetupPrinterResponse(response);
 
         const waiter = eventToPromise(
             DestinationStore.EventType.DESTINATION_SELECT,
             /** @type {!EventTarget} */ (destinationStore));
         requestSetup(destId);
-        return Promise.all([nativeLayer.whenCalled('setupPrinter'), waiter])
+        return Promise.all([nativeLayerCros.whenCalled('setupPrinter'), waiter])
             .then(function(results) {
               const actualId = results[0];
               assertEquals(destId, actualId);
@@ -133,7 +139,7 @@
       function() {
         const destId = '001122DEADBEEF';
         const originalDestination = destinationStore.selectedDestination;
-        nativeLayer.setSetupPrinterResponse(
+        nativeLayerCros.setSetupPrinterResponse(
             {
               printerId: destId,
               success: false,
@@ -141,13 +147,14 @@
             },
             true);
         requestSetup(destId);
-        return nativeLayer.whenCalled('setupPrinter').then(function(actualId) {
-          assertEquals(destId, actualId);
-          // The selected printer should not have changed, since a printer
-          // cannot be selected until setup succeeds.
-          assertEquals(
-              originalDestination, destinationStore.selectedDestination);
-        });
+        return nativeLayerCros.whenCalled('setupPrinter')
+            .then(function(actualId) {
+              assertEquals(destId, actualId);
+              // The selected printer should not have changed, since a printer
+              // cannot be selected until setup succeeds.
+              assertEquals(
+                  originalDestination, destinationStore.selectedDestination);
+            });
       });
 
   // Test what happens when the setupPrinter request is resolved with a
@@ -162,9 +169,9 @@
           capabilities: getCddTemplate(destId).capabilities,
           success: false,
         };
-        nativeLayer.setSetupPrinterResponse(response);
+        nativeLayerCros.setSetupPrinterResponse(response);
         requestSetup(destId);
-        return nativeLayer.whenCalled('setupPrinter')
+        return nativeLayerCros.whenCalled('setupPrinter')
             .then(function(actualDestId) {
               assertEquals(destId, actualDestId);
               // The selected printer should not have changed, since a printer
@@ -214,21 +221,22 @@
           },
           success: true,
         };
-        nativeLayer.setSetupPrinterResponse(response);
+        nativeLayerCros.setSetupPrinterResponse(response);
         requestSetup(destId);
-        return nativeLayer.whenCalled('setupPrinter').then(function(actualId) {
-          assertEquals(destId, actualId);
-          const selectedDestination = destinationStore.selectedDestination;
-          assertNotEquals(null, selectedDestination);
-          assertEquals(destId, selectedDestination.id);
-          assertNotEquals(null, selectedDestination.capabilities);
-          assertNotEquals(null, selectedDestination.policies);
-          assertEquals(
-              ColorModeRestriction.MONOCHROME,
-              selectedDestination.policies.allowedColorModes);
-          assertEquals(
-              DuplexModeRestriction.DUPLEX,
-              selectedDestination.policies.allowedDuplexModes);
-        });
+        return nativeLayerCros.whenCalled('setupPrinter')
+            .then(function(actualId) {
+              assertEquals(destId, actualId);
+              const selectedDestination = destinationStore.selectedDestination;
+              assertNotEquals(null, selectedDestination);
+              assertEquals(destId, selectedDestination.id);
+              assertNotEquals(null, selectedDestination.capabilities);
+              assertNotEquals(null, selectedDestination.policies);
+              assertEquals(
+                  ColorModeRestriction.MONOCHROME,
+                  selectedDestination.policies.allowedColorModes);
+              assertEquals(
+                  DuplexModeRestriction.DUPLEX,
+                  selectedDestination.policies.allowedDuplexModes);
+            });
       });
 });
diff --git a/chrome/test/data/webui/print_preview/destination_select_test_cros.js b/chrome/test/data/webui/print_preview/destination_select_test_cros.js
index 3fab875..4f4c41b 100644
--- a/chrome/test/data/webui/print_preview/destination_select_test_cros.js
+++ b/chrome/test/data/webui/print_preview/destination_select_test_cros.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 {Destination, DestinationConnectionStatus, DestinationOrigin, DestinationType, getSelectDropdownBackground, NativeLayer, NativeLayerImpl, PrinterStatus, PrinterStatusReason, PrinterStatusSeverity, SAVE_TO_DRIVE_CROS_DESTINATION_KEY} from 'chrome://print/print_preview.js';
+import {Destination, DestinationConnectionStatus, DestinationOrigin, DestinationType, getSelectDropdownBackground, NativeLayer, NativeLayerCros, NativeLayerCrosImpl, NativeLayerImpl, PrinterStatus, PrinterStatusReason, PrinterStatusSeverity, SAVE_TO_DRIVE_CROS_DESTINATION_KEY} from 'chrome://print/print_preview.js';
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 import {Base, flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
@@ -10,6 +10,7 @@
 import {assertEquals, assertFalse, assertTrue} from '../chai_assert.js';
 import {waitBeforeNextRender} from '../test_util.m.js';
 
+import {NativeLayerCrosStub} from './native_layer_cros_stub.js';
 import {NativeLayerStub} from './native_layer_stub.js';
 import {getGoogleDriveDestination, getSaveAsPdfDestination, selectOption} from './print_preview_test_utils.js';
 
@@ -30,18 +31,17 @@
 
   const account = 'foo@chromium.org';
 
-  /** @type {?NativeLayerStub} */
-  let nativeLayer = null;
+  /** @type {?NativeLayerCrosStub} */
+  let nativeLayerCros = null;
 
   function setNativeLayerPrinterStatusMap() {
-    [
-     {
-       printerId: 'ID1',
-       statusReasons: [{
-         reason: PrinterStatusReason.NO_ERROR,
-         severity: PrinterStatusSeverity.UNKNOWN_SEVERITY
-       }],
-     },
+    [{
+      printerId: 'ID1',
+      statusReasons: [{
+        reason: PrinterStatusReason.NO_ERROR,
+        severity: PrinterStatusSeverity.UNKNOWN_SEVERITY
+      }],
+    },
      {
        printerId: 'ID2',
        statusReasons: [
@@ -119,8 +119,10 @@
            severity: PrinterStatusSeverity.REPORT
          }
        ],
-     }].forEach(status =>
-                  nativeLayer.addPrinterStatusToMap(status.printerId, status));
+     }]
+        .forEach(
+            status => nativeLayerCros.addPrinterStatusToMap(
+                status.printerId, status));
   }
 
   /**
@@ -147,8 +149,9 @@
     document.body.innerHTML = '';
 
     // Stub out native layer.
-    nativeLayer = new NativeLayerStub();
-    NativeLayerImpl.instance_ = nativeLayer;
+    NativeLayerImpl.instance_ = new NativeLayerStub();
+    nativeLayerCros = new NativeLayerCrosStub();
+    NativeLayerCrosImpl.instance_ = nativeLayerCros;
     setNativeLayerPrinterStatusMap();
 
     destinationSelect =
@@ -179,7 +182,7 @@
         return waitBeforeNextRender(destinationSelect)
             .then(() => {
               const whenStatusRequestsDone =
-                  nativeLayer.waitForMultiplePrinterStatusRequests(7);
+                  nativeLayerCros.waitForMultiplePrinterStatusRequests(7);
 
               destinationSelect.recentDestinationList = [
                 destination1,
@@ -245,7 +248,7 @@
             createDestination('ID4', 'Four', DestinationOrigin.EXTENSION),
           ];
           assertEquals(
-              2, nativeLayer.getCallCount('requestPrinterStatusUpdate'));
+              2, nativeLayerCros.getCallCount('requestPrinterStatusUpdate'));
 
           // Update list with 2 existing destinations and one new destination.
           // Make sure the requestPrinterStatusUpdate only gets called for the
@@ -256,7 +259,7 @@
             createDestination('ID5', 'Five', DestinationOrigin.CROS),
           ];
           assertEquals(
-              3, nativeLayer.getCallCount('requestPrinterStatusUpdate'));
+              3, nativeLayerCros.getCallCount('requestPrinterStatusUpdate'));
         });
       });
 
@@ -297,7 +300,7 @@
           assertFalse(destinationEulaWrapper.hidden);
 
           destinationSelect.destination = destinationWithErrorStatus;
-          return nativeLayer.whenCalled('requestPrinterStatusUpdate');
+          return nativeLayerCros.whenCalled('requestPrinterStatusUpdate');
         })
         .then(() => {
           return waitBeforeNextRender(destinationSelect);
diff --git a/chrome/test/data/webui/print_preview/destination_settings_test.js b/chrome/test/data/webui/print_preview/destination_settings_test.js
index 4fcd3256..a1909ab 100644
--- a/chrome/test/data/webui/print_preview/destination_settings_test.js
+++ b/chrome/test/data/webui/print_preview/destination_settings_test.js
@@ -12,6 +12,9 @@
 import {eventToPromise, fakeDataBind, waitBeforeNextRender} from '../test_util.m.js';
 
 import {CloudPrintInterfaceStub} from './cloud_print_interface_stub.js';
+// <if expr="chromeos">
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
+// </if>
 import {NativeLayerStub} from './native_layer_stub.js';
 import {getDestinations, getGoogleDriveDestination, getSaveAsPdfDestination, setupTestListenerElement} from './print_preview_test_utils.js';
 
@@ -36,8 +39,6 @@
   ResetDestinationOnSignOut: 'reset destination on sign out',
   DisabledSaveAsPdf: 'disabled save as pdf',
   NoDestinations: 'no destinations',
-  EulaIsRetrieved: 'eula is retrieved',
-  DriveIsNotMounted: 'drive is not mounted',
 };
 
 suite(destination_settings_test.suiteName, function() {
@@ -95,6 +96,9 @@
     // Stub out native layer and cloud print interface.
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    // <if expr="chromeos">
+    setNativeLayerCrosInstance();
+    // </if>
     localDestinations = [];
     destinations = getDestinations(localDestinations);
     // Add some extra destinations.
@@ -1012,88 +1016,4 @@
         ])
         .then(() => assertDropdownItems(['noDestinations']));
   });
-
-    /**
-     * Tests that destinations with a EULA will fetch the EULA URL when
-     * selected.
-     */
-    test(
-        assert(destination_settings_test.TestNames.EulaIsRetrieved),
-        function() {
-          // Recent destinations start out empty.
-          assertRecentDestinations([]);
-
-          const expectedUrl = 'chrome://os-credits/eula';
-
-          assertEquals(0, nativeLayer.getCallCount('getEulaUrl'));
-
-          initialize();
-
-          return nativeLayer.whenCalled('getEulaUrl')
-              .then(() => {
-                assertEquals(1, nativeLayer.getCallCount('getEulaUrl'));
-                nativeLayer.resetResolver('getEulaUrl');
-
-                // Add printers to the store.
-                destinationSettings.getDestinationStoreForTest()
-                    .startLoadAllDestinations();
-                return nativeLayer.whenCalled('getPrinters');
-              })
-              .then(() => {
-                nativeLayer.setEulaUrl('chrome://os-credits/eula');
-                // Simulate selecting a destination that has a EULA URL from the
-                // dialog.
-                selectDestination(destinations[0]);
-                return nativeLayer.whenCalled('getEulaUrl');
-              })
-              .then(() => {
-                assertEquals(1, nativeLayer.getCallCount('getEulaUrl'));
-                nativeLayer.resetResolver('getEulaUrl');
-                assertEquals(
-                    expectedUrl, destinationSettings.destination.eulaUrl);
-
-                nativeLayer.setEulaUrl('');
-                // Select a destination without a EULA URL.
-                selectDestination(destinations[1]);
-                return nativeLayer.whenCalled('getEulaUrl');
-              })
-              .then(() => {
-                assertEquals(1, nativeLayer.getCallCount('getEulaUrl'));
-                nativeLayer.resetResolver('getEulaUrl');
-                assertEquals('', destinationSettings.destination.eulaUrl);
-
-                // Reselect a destination with a EULA URL. This destination
-                // already had its EULA URL set, so expect that it still retains
-                // it. Since capabilities for this destination are already set,
-                // we don't try to fetch the license again.
-                nativeLayer.resetResolver('getPrinterCapabilities');
-                destinationSettings.$$('#destinationSelect')
-                    .fire('selected-option-change', 'ID1/chrome_os/');
-              })
-              .then(() => {
-                assertEquals(
-                    0, nativeLayer.getCallCount('getPrinterCapabilities'));
-                assertEquals(0, nativeLayer.getCallCount('getEulaUrl'));
-                assertRecentDestinations(['ID1', 'ID2', 'Save as PDF']);
-                assertEquals(
-                    expectedUrl, destinationSettings.destination.eulaUrl);
-              });
-        });
-
-    // Tests that disabling Google Drive on Chrome OS hides the Save to Drive
-    // destination.
-    test(
-        assert(destination_settings_test.TestNames.DriveIsNotMounted),
-        function() {
-          isDriveMounted = false;
-          initialize();
-
-          return nativeLayer.whenCalled('getPrinterCapabilities')
-              .then(() => {
-                return waitBeforeNextRender(destinationSettings);
-              })
-              .then(() => {
-                assertDropdownItems(['Save as PDF/local/']);
-              });
-        });
 });
diff --git a/chrome/test/data/webui/print_preview/destination_settings_test_cros.js b/chrome/test/data/webui/print_preview/destination_settings_test_cros.js
new file mode 100644
index 0000000..bb777223
--- /dev/null
+++ b/chrome/test/data/webui/print_preview/destination_settings_test_cros.js
@@ -0,0 +1,210 @@
+// 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.
+
+import {Destination, DestinationStore, DestinationType, LocalDestinationInfo, NativeLayer, NativeLayerCros, NativeLayerCrosImpl, NativeLayerImpl, NUM_PERSISTED_DESTINATIONS, RecentDestination, State} from 'chrome://print/print_preview.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
+
+import {assertEquals, assertFalse, assertTrue} from '../chai_assert.js';
+import {eventToPromise, fakeDataBind, waitBeforeNextRender} from '../test_util.m.js';
+
+import {NativeLayerCrosStub} from './native_layer_cros_stub.js';
+import {NativeLayerStub} from './native_layer_stub.js';
+import {getDestinations, setupTestListenerElement} from './print_preview_test_utils.js';
+
+window.destination_settings_test_cros = {};
+const destination_settings_test_cros = window.destination_settings_test_cros;
+destination_settings_test_cros.suiteName = 'DestinationSettingsCrosTest';
+/** @enum {string} */
+destination_settings_test_cros.TestNames = {
+  EulaIsRetrieved: 'eula is retrieved',
+  DriveIsNotMounted: 'drive is not mounted',
+};
+
+suite(destination_settings_test_cros.suiteName, function() {
+  /** @type {!PrintPreviewDestinationSettingsElement} */
+  let destinationSettings;
+
+  /** @type {?NativeLayerStub} */
+  let nativeLayer = null;
+
+  /** @type {?NativeLayerCrosStub} */
+  let nativeLayerCros = null;
+
+  /** @type {!Array<!LocalDestinationInfo>} */
+  let localDestinations = [];
+
+  /** @type {!Array<!Destination>} */
+  let destinations = [];
+
+  /** @type {boolean} */
+  let isDriveMounted = true;
+
+  /** @type {string} */
+  const defaultUser = 'foo@chromium.org';
+
+  /** @override */
+  suiteSetup(function() {
+    setupTestListenerElement();
+  });
+
+  /** @override */
+  setup(function() {
+    document.body.innerHTML = '';
+
+    // Stub out native layer.
+    nativeLayer = new NativeLayerStub();
+    NativeLayerImpl.instance_ = nativeLayer;
+    nativeLayerCros = new NativeLayerCrosStub();
+    NativeLayerCrosImpl.instance_ = nativeLayerCros;
+
+    localDestinations = [];
+    destinations = getDestinations(localDestinations);
+    // Add some extra destinations.
+    for (let i = 0; i < NUM_PERSISTED_DESTINATIONS; i++) {
+      const id = `e${i}`;
+      const name = `n${i}`;
+      localDestinations.push({deviceName: id, printerName: name});
+    }
+    nativeLayer.setLocalDestinations(localDestinations);
+
+    const model = document.createElement('print-preview-model');
+    document.body.appendChild(model);
+
+    destinationSettings =
+        /** @type {!PrintPreviewDestinationSettingsElement} */ (
+            document.createElement('print-preview-destination-settings'));
+    destinationSettings.settings = model.settings;
+    destinationSettings.state = State.NOT_READY;
+    destinationSettings.disabled = true;
+    fakeDataBind(model, destinationSettings, 'settings');
+    document.body.appendChild(destinationSettings);
+  });
+
+  /**
+   * Initializes the destination store and destination settings using
+   * |destinations| and |recentDestinations|.
+   */
+  function initialize() {
+    // Initialize destination settings.
+    destinationSettings.setSetting('recentDestinations', []);
+    destinationSettings.appKioskMode = false;
+    destinationSettings.init(
+        '' /* printerName */, false, isDriveMounted,
+        '' /* serializedDefaultDestinationSelectionRulesStr */,
+        [] /* accounts */, true /* syncAvailable */);
+    destinationSettings.state = State.READY;
+    destinationSettings.disabled = false;
+  }
+
+  /**
+   * @param {!Array<string>} expectedDestinationIds An array of the expected
+   *     recent destination ids.
+   */
+  function assertRecentDestinations(expectedDestinationIds) {
+    const recentDestinations =
+        destinationSettings.getSettingValue('recentDestinations');
+    assertEquals(expectedDestinationIds.length, recentDestinations.length);
+    expectedDestinationIds.forEach((expectedId, index) => {
+      assertEquals(expectedId, recentDestinations[index].id);
+    });
+  }
+
+  function selectDestination(destination) {
+    const storeDestination =
+        destinationSettings.getDestinationStoreForTest().destinations().find(
+            d => d.key === destination.key);
+    destinationSettings.getDestinationStoreForTest().selectDestination(
+        assert(storeDestination));
+    flush();
+  }
+
+
+  /**
+   * Tests that destinations with a EULA will fetch the EULA URL when
+   * selected.
+   */
+  test(
+      assert(destination_settings_test_cros.TestNames.EulaIsRetrieved),
+      function() {
+        // Recent destinations start out empty.
+        assertRecentDestinations([]);
+
+        const expectedUrl = 'chrome://os-credits/eula';
+
+        assertEquals(0, nativeLayerCros.getCallCount('getEulaUrl'));
+
+        initialize();
+
+        return nativeLayerCros.whenCalled('getEulaUrl')
+            .then(() => {
+              assertEquals(1, nativeLayerCros.getCallCount('getEulaUrl'));
+              nativeLayerCros.resetResolver('getEulaUrl');
+
+              // Add printers to the store.
+              destinationSettings.getDestinationStoreForTest()
+                  .startLoadAllDestinations();
+              return nativeLayer.whenCalled('getPrinters');
+            })
+            .then(() => {
+              nativeLayerCros.setEulaUrl('chrome://os-credits/eula');
+              // Simulate selecting a destination that has a EULA URL from the
+              // dialog.
+              selectDestination(destinations[0]);
+              return nativeLayerCros.whenCalled('getEulaUrl');
+            })
+            .then(() => {
+              assertEquals(1, nativeLayerCros.getCallCount('getEulaUrl'));
+              nativeLayerCros.resetResolver('getEulaUrl');
+              assertEquals(
+                  expectedUrl, destinationSettings.destination.eulaUrl);
+
+              nativeLayerCros.setEulaUrl('');
+              // Select a destination without a EULA URL.
+              selectDestination(destinations[1]);
+              return nativeLayerCros.whenCalled('getEulaUrl');
+            })
+            .then(() => {
+              assertEquals(1, nativeLayerCros.getCallCount('getEulaUrl'));
+              nativeLayerCros.resetResolver('getEulaUrl');
+              assertEquals('', destinationSettings.destination.eulaUrl);
+
+              // Reselect a destination with a EULA URL. This destination
+              // already had its EULA URL set, so expect that it still retains
+              // it. Since capabilities for this destination are already set,
+              // we don't try to fetch the license again.
+              nativeLayer.resetResolver('getPrinterCapabilities');
+              destinationSettings.$$('#destinationSelect')
+                  .fire('selected-option-change', 'ID1/chrome_os/');
+            })
+            .then(() => {
+              assertEquals(
+                  0, nativeLayer.getCallCount('getPrinterCapabilities'));
+              assertEquals(0, nativeLayerCros.getCallCount('getEulaUrl'));
+              assertRecentDestinations(['ID1', 'ID2', 'Save as PDF']);
+              assertEquals(
+                  expectedUrl, destinationSettings.destination.eulaUrl);
+            });
+      });
+
+  // Tests that disabling Google Drive on Chrome OS hides the Save to Drive
+  // destination.
+  test(
+      assert(destination_settings_test_cros.TestNames.DriveIsNotMounted),
+      function() {
+        isDriveMounted = false;
+        initialize();
+
+        return nativeLayer.whenCalled('getPrinterCapabilities')
+            .then(() => {
+              return waitBeforeNextRender(destinationSettings);
+            })
+            .then(() => {
+              const options = destinationSettings.$$('#destinationSelect')
+                                  .getVisibleItemsForTest();
+              assertEquals(2, options.length);
+              assertEquals('Save as PDF/local/', options[0].value);
+            });
+      });
+});
diff --git a/chrome/test/data/webui/print_preview/destination_store_test.js b/chrome/test/data/webui/print_preview/destination_store_test.js
index 69fec4a..58311b88 100644
--- a/chrome/test/data/webui/print_preview/destination_store_test.js
+++ b/chrome/test/data/webui/print_preview/destination_store_test.js
@@ -11,6 +11,9 @@
 import {eventToPromise} from '../test_util.m.js';
 
 import {CloudPrintInterfaceStub} from './cloud_print_interface_stub.js';
+// <if expr="chromeos">
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
+// </if>
 import {NativeLayerStub} from './native_layer_stub.js';
 import {createDestinationStore, createDestinationWithCertificateStatus, getCddTemplate, getDefaultInitialSettings, getDestinations, getGoogleDriveDestination, getSaveAsPdfDestination, setupTestListenerElement} from './print_preview_test_utils.js';
 
@@ -75,6 +78,9 @@
 
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    // <if expr="chromeos">
+    setNativeLayerCrosInstance();
+    // </if>
 
     initialSettings = getDefaultInitialSettings();
     initialSettings.userAccounts = [];
diff --git a/chrome/test/data/webui/print_preview/invalid_settings_browsertest.js b/chrome/test/data/webui/print_preview/invalid_settings_browsertest.js
index e1ae6f5..464075b 100644
--- a/chrome/test/data/webui/print_preview/invalid_settings_browsertest.js
+++ b/chrome/test/data/webui/print_preview/invalid_settings_browsertest.js
@@ -11,6 +11,9 @@
 import {eventToPromise, waitBeforeNextRender} from '../test_util.m.js';
 
 import {CloudPrintInterfaceStub} from './cloud_print_interface_stub.js';
+// <if expr="chromeos">
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
+// </if>
 import {NativeLayerStub} from './native_layer_stub.js';
 import {createDestinationWithCertificateStatus, getCddTemplate, getDefaultMediaSize, getDefaultOrientation} from './print_preview_test_utils.js';
 import {TestPluginProxy} from './test_plugin_proxy.js';
@@ -68,6 +71,9 @@
   setup(function() {
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    // <if expr="chromeos">
+    setNativeLayerCrosInstance();
+    // </if>
     cloudPrintInterface = new CloudPrintInterfaceStub();
     CloudPrintInterfaceImpl.instance_ = cloudPrintInterface;
     document.body.innerHTML = '';
diff --git a/chrome/test/data/webui/print_preview/key_event_test.js b/chrome/test/data/webui/print_preview/key_event_test.js
index 45dbc27e..983cb66 100644
--- a/chrome/test/data/webui/print_preview/key_event_test.js
+++ b/chrome/test/data/webui/print_preview/key_event_test.js
@@ -11,6 +11,9 @@
 import {assertEquals, assertTrue} from '../chai_assert.js';
 import {eventToPromise, flushTasks} from '../test_util.m.js';
 
+// <if expr="chromeos">
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
+// </if>
 import {NativeLayerStub} from './native_layer_stub.js';
 import {getCddTemplateWithAdvancedSettings, getDefaultInitialSettings} from './print_preview_test_utils.js';
 import {TestPluginProxy} from './test_plugin_proxy.js';
@@ -48,6 +51,9 @@
         getCddTemplateWithAdvancedSettings(1, initialSettings.printerName));
     nativeLayer.setPageCount(3);
     NativeLayerImpl.instance_ = nativeLayer;
+    // <if expr="chromeos">
+    setNativeLayerCrosInstance();
+    // </if>
     const pluginProxy = new TestPluginProxy();
     PluginProxyImpl.instance_ = pluginProxy;
 
diff --git a/chrome/test/data/webui/print_preview/native_layer_cros_stub.js b/chrome/test/data/webui/print_preview/native_layer_cros_stub.js
new file mode 100644
index 0000000..be40c55
--- /dev/null
+++ b/chrome/test/data/webui/print_preview/native_layer_cros_stub.js
@@ -0,0 +1,137 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {NativeLayerCros, NativeLayerCrosImpl, PrinterSetupResponse} from 'chrome://print/print_preview.js';
+import {assert} from 'chrome://resources/js/assert.m.js';
+import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
+
+import {TestBrowserProxy} from '../test_browser_proxy.m.js';
+
+/** @return {!NativeLayerCrosStub} */
+export function setNativeLayerCrosInstance() {
+  const instance = new NativeLayerCrosStub();
+  NativeLayerCrosImpl.instance_ = instance;
+  return instance;
+}
+
+/**
+ * Test version of the Chrome OS native layer.
+ * @implements {NativeLayerCros}
+ */
+export class NativeLayerCrosStub extends TestBrowserProxy {
+  constructor() {
+    super([
+      'getEulaUrl',
+      'requestPrinterStatusUpdate',
+      'setupPrinter',
+    ]);
+
+    /**
+     * @private {?PrinterSetupResponse} The response to be sent
+     *     on a |setupPrinter| call.
+     */
+    this.setupPrinterResponse_ = null;
+
+    /**
+     * @private {boolean} Whether the printer setup request should be
+     *     rejected.
+     */
+    this.shouldRejectPrinterSetup_ = false;
+
+    /** @private {string} license The PPD license of a destination. */
+    this.eulaUrl_ = '';
+
+    /**
+     * @private {!Map<string, !Object>}
+     * A map from printerId to PrinterStatus. Defining the value parameter as
+     * Object instead of PrinterStatus because the PrinterStatus type is CrOS
+     * specific, and this class is used by tests on all platforms.
+     */
+    this.printerStatusMap_ = new Map();
+
+    /** @private {?PromiseResolver} */
+    this.multiplePrinterStatusRequestsPromise_ = null;
+
+    /** @private {number} */
+    this.multiplePrinterStatusRequestsCount_ = 0;
+  }
+
+  /** @override */
+  getEulaUrl(destinationId) {
+    this.methodCalled('getEulaUrl', {destinationId: destinationId});
+
+    return Promise.resolve(this.eulaUrl_);
+  }
+
+  /** @override */
+  setupPrinter(printerId) {
+    this.methodCalled('setupPrinter', printerId);
+    return this.shouldRejectPrinterSetup_ ?
+        Promise.reject(assert(this.setupPrinterResponse_)) :
+        Promise.resolve(assert(this.setupPrinterResponse_));
+  }
+
+  /** @override */
+  getAccessToken() {}
+
+  /** @override */
+  grantExtensionPrinterAccess() {}
+
+  /**
+   * @param {!PrinterSetupResponse} response The response to send when
+   *     |setupPrinter| is called.
+   * @param {boolean=} opt_reject Whether printSetup requests should be
+   *     rejected. Defaults to false (will resolve callback) if not provided.
+   */
+  setSetupPrinterResponse(response, opt_reject) {
+    this.shouldRejectPrinterSetup_ = opt_reject || false;
+    this.setupPrinterResponse_ = response;
+  }
+
+  /** @param {string} eulaUrl The eulaUrl of the PPD. */
+  setEulaUrl(eulaUrl) {
+    this.eulaUrl_ = eulaUrl;
+  }
+
+  /**
+   * Sends a request to the printer with id |printerId| for its current status.
+   * @param {string} printerId
+   * @return {!Promise} Promise that resolves returns a printer status.
+   * @override
+   */
+  requestPrinterStatusUpdate(printerId) {
+    this.methodCalled('requestPrinterStatusUpdate');
+    if (this.multiplePrinterStatusRequestsPromise_) {
+      this.multiplePrinterStatusRequestsCount_--;
+      if (this.multiplePrinterStatusRequestsCount_ === 0) {
+        this.multiplePrinterStatusRequestsPromise_.resolve();
+        this.multiplePrinterStatusRequestsPromise_ = null;
+      }
+    }
+
+    return Promise.resolve(this.printerStatusMap_.get(printerId) || {});
+  }
+
+  /**
+   * @param {string} printerId
+   * @param {!Object} printerStatus
+   */
+  addPrinterStatusToMap(printerId, printerStatus) {
+    this.printerStatusMap_.set(printerId, printerStatus);
+  }
+
+  /**
+   * @param {number} count The number of printer status requests to wait for.
+   * @return {!Promise} Promise that resolves after |count| requests.
+   */
+  waitForMultiplePrinterStatusRequests(count) {
+    assert(this.multiplePrinterStatusRequestsPromise_ === null);
+    this.multiplePrinterStatusRequestsCount_ = count;
+    this.multiplePrinterStatusRequestsPromise_ = new PromiseResolver();
+    return this.multiplePrinterStatusRequestsPromise_.promise;
+  }
+
+  /** @override */
+  recordPrinterStatusHistogram(statusReason, didUserAttemptPrint) {}
+}
diff --git a/chrome/test/data/webui/print_preview/native_layer_stub.js b/chrome/test/data/webui/print_preview/native_layer_stub.js
index 75e14b0..a2a466b1 100644
--- a/chrome/test/data/webui/print_preview/native_layer_stub.js
+++ b/chrome/test/data/webui/print_preview/native_layer_stub.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 {CapabilitiesResponse, Destination, LocalDestinationInfo, NativeInitialSettings, NativeLayer, PageLayoutInfo, PrinterSetupResponse, PrinterType, ProvisionalDestinationInfo} from 'chrome://print/print_preview.js';
+import {CapabilitiesResponse, Destination, LocalDestinationInfo, NativeInitialSettings, NativeLayer, PageLayoutInfo, PrinterType, ProvisionalDestinationInfo} from 'chrome://print/print_preview.js';
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js';
 import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
@@ -23,12 +23,9 @@
       'getPrinters',
       'getPreview',
       'getPrinterCapabilities',
-      'getEulaUrl',
       'hidePreview',
       'print',
-      'requestPrinterStatusUpdate',
       'saveAppState',
-      'setupPrinter',
       'showSystemDialog',
       'signIn',
     ]);
@@ -62,18 +59,6 @@
      */
     this.localDestinationCapabilities_ = new Map();
 
-    /**
-     * @private {?PrinterSetupResponse} The response to be sent
-     *     on a |setupPrinter| call.
-     */
-    this.setupPrinterResponse_ = null;
-
-    /**
-     * @private {boolean} Whether the printer setup request should be
-     *     rejected.
-     */
-    this.shouldRejectPrinterSetup_ = false;
-
     /** @private {?PromiseResolver} */
     this.multipleCapabilitiesPromise_ = null;
 
@@ -90,23 +75,6 @@
 
     /** @private {?PageLayoutInfo} Page layout information */
     this.pageLayoutInfo_ = null;
-
-    /** @private {string} license The PPD license of a destination. */
-    this.eulaUrl_ = '';
-
-    /**
-     * @private {!Map<string, !Object>}
-     * A map from printerId to PrinterStatus. Defining the value parameter as
-     * Object instead of PrinterStatus because the PrinterStatus type is CrOS
-     * specific, and this class is used by tests on all platforms.
-     */
-    this.printerStatusMap_ = new Map();
-
-    /** @private {?PromiseResolver} */
-    this.multiplePrinterStatusRequestsPromise_ = null;
-
-    /** @private {number} */
-    this.multiplePrinterStatusRequestsCount_ = 0;
   }
 
   /** @param {number} pageCount The number of pages in the document. */
@@ -199,13 +167,6 @@
   }
 
   /** @override */
-  getEulaUrl(destinationId) {
-    this.methodCalled('getEulaUrl', {destinationId: destinationId});
-
-    return Promise.resolve(this.eulaUrl_);
-  }
-
-  /** @override */
   print(printTicket) {
     this.methodCalled('print', printTicket);
     if (JSON.parse(printTicket).printerType === PrinterType.CLOUD_PRINTER) {
@@ -215,14 +176,6 @@
   }
 
   /** @override */
-  setupPrinter(printerId) {
-    this.methodCalled('setupPrinter', printerId);
-    return this.shouldRejectPrinterSetup_ ?
-        Promise.reject(assert(this.setupPrinterResponse_)) :
-        Promise.resolve(assert(this.setupPrinterResponse_));
-  }
-
-  /** @override */
   hidePreview() {
     this.methodCalled('hidePreview');
   }
@@ -253,12 +206,6 @@
   }
 
   /** @override */
-  getAccessToken() {}
-
-  /** @override */
-  grantExtensionPrinterAccess() {}
-
-  /** @override */
   cancelPendingPrintRequest() {}
 
   /** @override */
@@ -311,17 +258,6 @@
   }
 
   /**
-   * @param {!PrinterSetupResponse} response The response to send when
-   *     |setupPrinter| is called.
-   * @param {boolean=} opt_reject Whether printSetup requests should be
-   *     rejected. Defaults to false (will resolve callback) if not provided.
-   */
-  setSetupPrinterResponse(response, opt_reject) {
-    this.shouldRejectPrinterSetup_ = opt_reject || false;
-    this.setupPrinterResponse_ = response;
-  }
-
-  /**
    * @param {string} id The printer ID that should cause an
    *     SETTINGS_INVALID error in response to a preview request. Models a
    *     bad printer driver.
@@ -345,50 +281,4 @@
     this.multipleCapabilitiesPromise_ = new PromiseResolver();
     return this.multipleCapabilitiesPromise_.promise;
   }
-
-  /** @param {string} eulaUrl The eulaUrl of the PPD. */
-  setEulaUrl(eulaUrl) {
-    this.eulaUrl_ = eulaUrl;
-  }
-
-  /**
-   * Sends a request to the printer with id |printerId| for its current status.
-   * @param {string} printerId
-   * @return {!Promise} Promise that resolves returns a printer status.
-   * @override
-   */
-  requestPrinterStatusUpdate(printerId) {
-    this.methodCalled('requestPrinterStatusUpdate');
-    if (this.multiplePrinterStatusRequestsPromise_) {
-      this.multiplePrinterStatusRequestsCount_--;
-      if (this.multiplePrinterStatusRequestsCount_ === 0) {
-        this.multiplePrinterStatusRequestsPromise_.resolve();
-        this.multiplePrinterStatusRequestsPromise_ = null;
-      }
-    }
-
-    return Promise.resolve(this.printerStatusMap_.get(printerId) || {});
-  }
-
-  /**
-   * @param {string} printerId
-   * @param {!Object} printerStatus
-   */
-  addPrinterStatusToMap(printerId, printerStatus) {
-    this.printerStatusMap_.set(printerId, printerStatus);
-  }
-
-  /**
-   * @param {number} count The number of printer status requests to wait for.
-   * @return {!Promise} Promise that resolves after |count| requests.
-   */
-  waitForMultiplePrinterStatusRequests(count) {
-    assert(this.multiplePrinterStatusRequestsPromise_ === null);
-    this.multiplePrinterStatusRequestsCount_ = count;
-    this.multiplePrinterStatusRequestsPromise_ = new PromiseResolver();
-    return this.multiplePrinterStatusRequestsPromise_.promise;
-  }
-
-  /** @override */
-  recordPrinterStatusHistogram(statusReason, didUserAttemptPrint) {}
 }
diff --git a/chrome/test/data/webui/print_preview/policy_test.js b/chrome/test/data/webui/print_preview/policy_test.js
index 6841d6b5..84aa0c7 100644
--- a/chrome/test/data/webui/print_preview/policy_test.js
+++ b/chrome/test/data/webui/print_preview/policy_test.js
@@ -10,6 +10,10 @@
 import {TestPluginProxy} from 'chrome://test/print_preview/test_plugin_proxy.js';
 import {TestPluralStringProxy} from 'chrome://test/test_plural_string_proxy.js';
 
+// <if expr="chromeos">
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
+// </if>
+
 window.policy_tests = {};
 policy_tests.suiteName = 'PolicyTest';
 /** @enum {string} */
@@ -48,6 +52,9 @@
         getCddTemplate(initialSettings.printerName));
     nativeLayer.setPageCount(3);
     NativeLayerImpl.instance_ = nativeLayer;
+    // <if expr="chromeos">
+    setNativeLayerCrosInstance();
+    // </if>
     const pluginProxy = new TestPluginProxy();
     PluginProxyImpl.instance_ = pluginProxy;
 
diff --git a/chrome/test/data/webui/print_preview/preview_generation_test.js b/chrome/test/data/webui/print_preview/preview_generation_test.js
index 5518860..f2dea68 100644
--- a/chrome/test/data/webui/print_preview/preview_generation_test.js
+++ b/chrome/test/data/webui/print_preview/preview_generation_test.js
@@ -8,6 +8,10 @@
 import {getCddTemplate, getDefaultInitialSettings} from 'chrome://test/print_preview/print_preview_test_utils.js';
 import {TestPluginProxy} from 'chrome://test/print_preview/test_plugin_proxy.js';
 
+// <if expr="chromeos">
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
+// </if>
+
 window.preview_generation_test = {};
 preview_generation_test.suiteName = 'PreviewGenerationTest';
 /** @enum {string} */
@@ -57,6 +61,9 @@
   setup(function() {
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    // <if expr="chromeos">
+    setNativeLayerCrosInstance();
+    // </if>
     document.body.innerHTML = '';
   });
 
diff --git a/chrome/test/data/webui/print_preview/print_button_test.js b/chrome/test/data/webui/print_preview/print_button_test.js
index 35c492797..90c0761 100644
--- a/chrome/test/data/webui/print_preview/print_button_test.js
+++ b/chrome/test/data/webui/print_preview/print_button_test.js
@@ -8,6 +8,10 @@
 import {getDefaultInitialSettings} from 'chrome://test/print_preview/print_preview_test_utils.js';
 import {TestPluginProxy} from 'chrome://test/print_preview/test_plugin_proxy.js';
 
+// <if expr="chromeos">
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
+// </if>
+
 window.print_button_test = {};
 print_button_test.suiteName = 'PrintButtonTest';
 /** @enum {string} */
@@ -37,6 +41,9 @@
   setup(function() {
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    // <if expr="chromeos">
+    setNativeLayerCrosInstance();
+    // </if>
     document.body.innerHTML = '';
     nativeLayer.setInitialSettings(initialSettings);
     const localDestinationInfos = [
diff --git a/chrome/test/data/webui/print_preview/print_preview_app_test.js b/chrome/test/data/webui/print_preview/print_preview_app_test.js
index 607c8c0..10bfd0b 100644
--- a/chrome/test/data/webui/print_preview/print_preview_app_test.js
+++ b/chrome/test/data/webui/print_preview/print_preview_app_test.js
@@ -10,6 +10,10 @@
 import {getCddTemplate, getGoogleDriveDestination} from 'chrome://test/print_preview/print_preview_test_utils.js';
 import {TestPluginProxy} from 'chrome://test/print_preview/test_plugin_proxy.js';
 
+// <if expr="chromeos">
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
+// </if>
+
 window.print_preview_app_test = {};
 print_preview_app_test.suiteName = 'PrintPreviewAppTest';
 /** @enum {string} */
@@ -76,6 +80,9 @@
     document.body.innerHTML = '';
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    // <if expr="chromeos">
+    setNativeLayerCrosInstance();
+    // </if>
     cloudPrintInterface = new CloudPrintInterfaceStub();
     CloudPrintInterfaceImpl.instance_ = cloudPrintInterface;
     pluginProxy = new TestPluginProxy();
diff --git a/chrome/test/data/webui/print_preview/print_preview_sidebar_test.js b/chrome/test/data/webui/print_preview/print_preview_sidebar_test.js
index 132a688..789a9fc 100644
--- a/chrome/test/data/webui/print_preview/print_preview_sidebar_test.js
+++ b/chrome/test/data/webui/print_preview/print_preview_sidebar_test.js
@@ -9,6 +9,10 @@
 import {getCddTemplate} from 'chrome://test/print_preview/print_preview_test_utils.js';
 import {fakeDataBind} from 'chrome://test/test_util.m.js';
 
+// <if expr="chromeos">
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
+// </if>
+
 window.print_preview_sidebar_test = {};
 print_preview_sidebar_test.suiteName = 'PrintPreviewSidebarTest';
 /** @enum {string} */
@@ -36,6 +40,9 @@
     // Stub out the native layer and cloud print interface
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    // <if expr="chromeos">
+    setNativeLayerCrosInstance();
+    // </if>
     nativeLayer.setLocalDestinationCapabilities(getCddTemplate('FooDevice'));
     cloudPrintInterface = new CloudPrintInterfaceStub();
     CloudPrintInterfaceImpl.instance_ = cloudPrintInterface;
diff --git a/chrome/test/data/webui/print_preview/print_preview_ui_browsertest.js b/chrome/test/data/webui/print_preview/print_preview_ui_browsertest.js
index 09b6518..3b89c30 100644
--- a/chrome/test/data/webui/print_preview/print_preview_ui_browsertest.js
+++ b/chrome/test/data/webui/print_preview/print_preview_ui_browsertest.js
@@ -1499,12 +1499,12 @@
 var PrintPreviewDestinationSettingsTestCros = class extends PrintPreviewTest {
   /** @override */
   get browsePreload() {
-    return 'chrome://print/test_loader.html?module=print_preview/destination_settings_test.js';
+    return 'chrome://print/test_loader.html?module=print_preview/destination_settings_test_cros.js';
   }
 
   /** @override */
   get suiteName() {
-    return destination_settings_test.suiteName;
+    return destination_settings_test_cros.suiteName;
   }
 
   /** @override */
@@ -1520,12 +1520,14 @@
 
 TEST_F(
     'PrintPreviewDestinationSettingsTestCros', 'EulaIsRetrieved', function() {
-      this.runMochaTest(destination_settings_test.TestNames.EulaIsRetrieved);
+      this.runMochaTest(
+          destination_settings_test_cros.TestNames.EulaIsRetrieved);
     });
 
 TEST_F(
     'PrintPreviewDestinationSettingsTestCros', 'DriveIsNotMounted', function() {
-      this.runMochaTest(destination_settings_test.TestNames.DriveIsNotMounted);
+      this.runMochaTest(
+          destination_settings_test_cros.TestNames.DriveIsNotMounted);
     });
 GEN('#endif');
 
diff --git a/chrome/test/data/webui/print_preview/restore_state_test.js b/chrome/test/data/webui/print_preview/restore_state_test.js
index 380daa7e..6f2d023f 100644
--- a/chrome/test/data/webui/print_preview/restore_state_test.js
+++ b/chrome/test/data/webui/print_preview/restore_state_test.js
@@ -9,6 +9,10 @@
 import {getCddTemplate, getCddTemplateWithAdvancedSettings, getDefaultInitialSettings} from 'chrome://test/print_preview/print_preview_test_utils.js';
 import {TestPluginProxy} from 'chrome://test/print_preview/test_plugin_proxy.js';
 
+// <if expr="chromeos">
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
+// </if>
+
 window.restore_state_test = {};
 restore_state_test.suiteName = 'RestoreStateTest';
 /** @enum {string} */
@@ -28,6 +32,9 @@
   setup(function() {
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    // <if expr="chromeos">
+    setNativeLayerCrosInstance();
+    // </if>
     document.body.innerHTML = '';
   });
 
diff --git a/chrome/test/data/webui/print_preview/user_manager_test.js b/chrome/test/data/webui/print_preview/user_manager_test.js
index 5d72b2fa..cc165522 100644
--- a/chrome/test/data/webui/print_preview/user_manager_test.js
+++ b/chrome/test/data/webui/print_preview/user_manager_test.js
@@ -9,6 +9,10 @@
 import {NativeLayerStub} from 'chrome://test/print_preview/native_layer_stub.js';
 import {createDestinationStore, getDestinations, getGoogleDriveDestination, setupTestListenerElement} from 'chrome://test/print_preview/print_preview_test_utils.js';
 
+// <if expr="chromeos">
+import {setNativeLayerCrosInstance} from './native_layer_cros_stub.js';
+// </if>
+
 suite('UserManagerTest', function() {
   /** @type {?PrintPreviewUserManagerElement} */
   let userManager = null;
@@ -37,6 +41,9 @@
     // Create data classes
     nativeLayer = new NativeLayerStub();
     NativeLayerImpl.instance_ = nativeLayer;
+    // <if expr="chromeos">
+    setNativeLayerCrosInstance();
+    // </if>
     cloudPrintInterface = new CloudPrintInterfaceStub();
     CloudPrintInterfaceImpl.instance_ = cloudPrintInterface;
 
diff --git a/chrome/test/data/webui/settings/autofill_section_test.js b/chrome/test/data/webui/settings/autofill_section_test.js
index eefb232e..c77171b 100644
--- a/chrome/test/data/webui/settings/autofill_section_test.js
+++ b/chrome/test/data/webui/settings/autofill_section_test.js
@@ -294,6 +294,15 @@
     });
   });
 
+  // The first editable element should be focused by default.
+  test('verifyFirstFieldFocused', async function() {
+    const dialog = await createAddressDialog(createEmptyAddressEntry());
+    const currentFocus = dialog.shadowRoot.activeElement;
+    const editableElements =
+        dialog.$.dialog.querySelectorAll('cr-input, select');
+    assertEquals(editableElements[0], currentFocus);
+  });
+
   test('verifyRemoveAddressDialogConfirmed', async function() {
     const autofillManager = new TestAutofillManager();
     const removeAddressDialog = createRemoveAddressDialog(autofillManager);
diff --git a/chrome/test/media_router/media_router_integration_browsertest.cc b/chrome/test/media_router/media_router_integration_browsertest.cc
index bbdcfda..c93190c2 100644
--- a/chrome/test/media_router/media_router_integration_browsertest.cc
+++ b/chrome/test/media_router/media_router_integration_browsertest.cc
@@ -95,8 +95,10 @@
 
 void MediaRouterIntegrationBrowserTest::SetUpInProcessBrowserTestFixture() {
   MediaRouterBaseBrowserTest::SetUpInProcessBrowserTestFixture();
-  EXPECT_CALL(provider_, IsInitializationComplete(testing::_))
-      .WillRepeatedly(testing::Return(true));
+  ON_CALL(provider_, IsInitializationComplete(testing::_))
+      .WillByDefault(testing::Return(true));
+  ON_CALL(provider_, IsFirstPolicyLoadComplete(testing::_))
+      .WillByDefault(testing::Return(true));
   policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
 }
 
diff --git a/chrome/test/ppapi/ppapi_browsertest.cc b/chrome/test/ppapi/ppapi_browsertest.cc
index 740237e..61f5bec 100644
--- a/chrome/test/ppapi/ppapi_browsertest.cc
+++ b/chrome/test/ppapi/ppapi_browsertest.cc
@@ -108,11 +108,14 @@
       RunTestWithSSLServer(STRIP_PREFIXES(test_name)); \
     }
 
-// Disable all NaCl tests for --disable-nacl flag and on Mac ASAN builds.
-// Flaky on Mac ASAN:
-//    http://crbug.com/428670
+// Disable all NaCl tests for --disable-nacl flag and on Mac ASAN and Windows
+// builds.
+//
+// Flaky on Mac ASAN: https://crbug.com/428670
+// Flaky on Win7: https://crbug.com/1003252
 
-#if !BUILDFLAG(ENABLE_NACL) || (defined(OS_MAC) && defined(ADDRESS_SANITIZER))
+#if !BUILDFLAG(ENABLE_NACL) || \
+    (defined(OS_MAC) && defined(ADDRESS_SANITIZER)) || defined(OS_WIN)
 
 #define MAYBE_PPAPI_NACL(test_name) DISABLED_##test_name
 #define MAYBE_PPAPI_PNACL(test_name) DISABLED_##test_name
diff --git a/chromecast/browser/BUILD.gn b/chromecast/browser/BUILD.gn
index 0d7cd67..8c57ea2 100644
--- a/chromecast/browser/BUILD.gn
+++ b/chromecast/browser/BUILD.gn
@@ -137,6 +137,11 @@
     "service/cast_service_simple.h",
     "service_connector.cc",
     "service_connector.h",
+    "service_manager_connection.h",
+    "service_manager_context.cc",
+    "service_manager_context.h",
+    "system_connector.cc",
+    "system_connector.h",
     "webui/cast_resource_data_source.cc",
     "webui/cast_resource_data_source.h",
     "webui/cast_webui.cc",
@@ -233,6 +238,7 @@
     "//services/media_session/public/mojom",
     "//services/metrics/public/cpp:metrics_cpp",
     "//services/network/public/mojom",
+    "//services/service_manager",
     "//services/service_manager/public/cpp",
     "//third_party/blink/public/common:headers",
     "//ui/base",
diff --git a/chromecast/browser/DEPS b/chromecast/browser/DEPS
index 5444d01..60ec6e2 100644
--- a/chromecast/browser/DEPS
+++ b/chromecast/browser/DEPS
@@ -55,10 +55,11 @@
   "+media/mojo",
   "+mojo/public",
   "+net",
+  "+sandbox/policy",
   "+services/media_session/public",
   "+services/metrics/public/cpp",
   "+services/network/public/cpp",
-  "+services/service_manager/public",
+  "+services/service_manager",
   "+storage/browser/quota/quota_settings.h",
   "+third_party/blink/public/common",
   "+third_party/blink/public/mojom/autoplay",
diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc
index 9682263..5f4cad75 100644
--- a/chromecast/browser/cast_browser_main_parts.cc
+++ b/chromecast/browser/cast_browser_main_parts.cc
@@ -45,6 +45,8 @@
 #include "chromecast/browser/media/media_caps_impl.h"
 #include "chromecast/browser/metrics/cast_browser_metrics.h"
 #include "chromecast/browser/service_connector.h"
+#include "chromecast/browser/service_manager_connection.h"
+#include "chromecast/browser/service_manager_context.h"
 #include "chromecast/chromecast_buildflags.h"
 #include "chromecast/graphics/cast_window_manager.h"
 #include "chromecast/media/base/key_systems_common.h"
@@ -404,6 +406,10 @@
   DCHECK(cast_content_browser_client);
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   AddDefaultCommandLineSwitches(command_line);
+
+  service_manager_context_ = std::make_unique<ServiceManagerContext>(
+      cast_content_browser_client_, content::GetIOThreadTaskRunner({}));
+  ServiceManagerConnection::GetForProcess()->Start();
 }
 
 CastBrowserMainParts::~CastBrowserMainParts() {
@@ -776,6 +782,8 @@
   DeregisterKillOnAlarm();
 #endif  // !defined(OS_FUCHSIA)
 #endif
+
+  service_manager_context_.reset();
 }
 
 void CastBrowserMainParts::PostCreateThreads() {
diff --git a/chromecast/browser/cast_browser_main_parts.h b/chromecast/browser/cast_browser_main_parts.h
index 65cad753..008f3f6 100644
--- a/chromecast/browser/cast_browser_main_parts.h
+++ b/chromecast/browser/cast_browser_main_parts.h
@@ -37,6 +37,7 @@
 namespace chromecast {
 class CastSystemMemoryPressureEvaluatorAdjuster;
 class ServiceConnector;
+class ServiceManagerContext;
 class WaylandServerController;
 
 #if defined(USE_AURA)
@@ -93,6 +94,7 @@
   const content::MainFunctionParams parameters_;  // For running browser tests.
   // Caches a pointer of the CastContentBrowserClient.
   CastContentBrowserClient* const cast_content_browser_client_ = nullptr;
+  std::unique_ptr<ServiceManagerContext> service_manager_context_;
   std::unique_ptr<media::VideoPlaneController> video_plane_controller_;
   std::unique_ptr<media::MediaCapsImpl> media_caps_;
   std::unique_ptr<ServiceConnector> service_connector_;
diff --git a/chromecast/browser/cast_content_browser_client.h b/chromecast/browser/cast_content_browser_client.h
index e20e545a..e148dfb 100644
--- a/chromecast/browser/cast_content_browser_client.h
+++ b/chromecast/browser/cast_content_browser_client.h
@@ -25,6 +25,8 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "services/metrics/public/cpp/ukm_source_id.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
+#include "services/service_manager/public/cpp/identity.h"
+#include "services/service_manager/public/cpp/manifest.h"
 #include "services/service_manager/public/mojom/interface_provider.mojom-forward.h"
 #include "services/service_manager/public/mojom/service.mojom-forward.h"
 #include "storage/browser/quota/quota_settings.h"
@@ -151,8 +153,18 @@
   // on browser startup.
   virtual bool EnableRemoteDebuggingImmediately();
 
+  // Note: These were originally part of ContentBrowserClient, but have been
+  // lifted into this class as they're now only used by Chromecast. This is a
+  // transitional step to avoid breakage in the internal downstream repository.
+  virtual void RunServiceInstance(
+      const service_manager::Identity& identity,
+      mojo::PendingReceiver<service_manager::mojom::Service>* receiver);
+  virtual base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
+      base::StringPiece service_name);
+  std::vector<service_manager::Manifest> GetExtraServiceManifests();
+  std::vector<std::string> GetStartupServices();
+
   // content::ContentBrowserClient implementation:
-  std::vector<std::string> GetStartupServices() override;
   std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts(
       const content::MainFunctionParams& parameters) override;
   void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
@@ -208,13 +220,6 @@
       mojo::BinderMapWithContext<content::RenderFrameHost*>* map) override;
   mojo::Remote<::media::mojom::MediaService> RunSecondaryMediaService()
       override;
-  void RunServiceInstance(
-      const service_manager::Identity& identity,
-      mojo::PendingReceiver<service_manager::mojom::Service>* receiver)
-      override;
-  base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
-      base::StringPiece service_name) override;
-  std::vector<service_manager::Manifest> GetExtraServiceManifests() override;
   void GetAdditionalMappedFilesForChildProcess(
       const base::CommandLine& command_line,
       int child_process_id,
diff --git a/chromecast/browser/general_audience_browsing_service.cc b/chromecast/browser/general_audience_browsing_service.cc
index 5d6d996f..4f0f6d9 100644
--- a/chromecast/browser/general_audience_browsing_service.cc
+++ b/chromecast/browser/general_audience_browsing_service.cc
@@ -4,11 +4,11 @@
 
 #include "chromecast/browser/general_audience_browsing_service.h"
 
+#include "chromecast/browser/system_connector.h"
 #include "chromecast/common/mojom/constants.mojom.h"
 #include "components/policy/core/browser/url_util.h"
 #include "components/safe_search_api/safe_search/safe_search_url_checker_client.h"
 #include "components/safe_search_api/url_checker.h"
-#include "content/public/browser/system_connector.h"
 #include "net/base/net_errors.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/service_manager/public/cpp/connector.h"
@@ -57,7 +57,7 @@
 GeneralAudienceBrowsingService::GeneralAudienceBrowsingService(
     scoped_refptr<network::SharedURLLoaderFactory> shared_url_loader_factory)
     : shared_url_loader_factory_(shared_url_loader_factory) {
-  content::GetSystemConnector()->Connect(
+  GetSystemConnector()->Connect(
       mojom::kChromecastServiceName,
       general_audience_browsing_api_key_subject_remote_
           .BindNewPipeAndPassReceiver());
diff --git a/chromecast/browser/service_connector.cc b/chromecast/browser/service_connector.cc
index 4c898f8..140cbed 100644
--- a/chromecast/browser/service_connector.cc
+++ b/chromecast/browser/service_connector.cc
@@ -7,11 +7,11 @@
 #include "base/bind.h"
 #include "base/logging.h"
 #include "base/task/post_task.h"
+#include "chromecast/browser/system_connector.h"
 #include "chromecast/common/mojom/constants.mojom.h"
 #include "chromecast/common/mojom/multiroom.mojom.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/system_connector.h"
 
 namespace chromecast {
 
@@ -53,8 +53,8 @@
     ServiceConnectorClientId client_id,
     mojo::PendingReceiver<mojom::ServiceConnector> receiver) {
   if (!content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
-    base::PostTask(FROM_HERE, content::BrowserThread::UI,
-                   base::BindOnce(&ServiceConnector::BindReceiver, client_id,
+    content::GetUIThreadTaskRunner({})->PostTask(
+        FROM_HERE, base::BindOnce(&ServiceConnector::BindReceiver, client_id,
                                   std::move(receiver)));
     return;
   }
@@ -74,9 +74,9 @@
   // Manager. The browser generally has access unfettered to everything.
   if (client_id == kBrowserProcessClientId) {
     auto interface_name = *receiver.interface_name();
-    content::GetSystemConnector()->BindInterface(
-        service_manager::ServiceFilter::ByName(service_name),
-        interface_name, receiver.PassPipe());
+    GetSystemConnector()->BindInterface(
+        service_manager::ServiceFilter::ByName(service_name), interface_name,
+        receiver.PassPipe());
     return;
   }
 
@@ -92,7 +92,7 @@
   }
 
   if (auto r = receiver.As<mojom::MultiroomManager>()) {
-    content::GetSystemConnector()->BindInterface(service_name, std::move(r));
+    GetSystemConnector()->BindInterface(service_name, std::move(r));
     return;
   }
 
diff --git a/chromecast/browser/service_manager_connection.h b/chromecast/browser/service_manager_connection.h
new file mode 100644
index 0000000..5d2f499
--- /dev/null
+++ b/chromecast/browser/service_manager_connection.h
@@ -0,0 +1,18 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMECAST_BROWSER_SERVICE_MANAGER_CONNECTION_H_
+#define CHROMECAST_BROWSER_SERVICE_MANAGER_CONNECTION_H_
+
+#include "content/public/common/service_manager_connection.h"
+
+namespace chromecast {
+
+// Temporary alias until the downstream internal repository can update its
+// #includes to reference this file rather than the one in Content.
+using ServiceManagerConnection = content::ServiceManagerConnection;
+
+}  // namespace chromecast
+
+#endif  // CHROMECAST_BROWSER_SERVICE_MANAGER_CONNECTION_H_
diff --git a/content/browser/service_manager/service_manager_context.cc b/chromecast/browser/service_manager_context.cc
similarity index 86%
rename from content/browser/service_manager/service_manager_context.cc
rename to chromecast/browser/service_manager_context.cc
index 31719a5..fb3e2a3 100644
--- a/content/browser/service_manager/service_manager_context.cc
+++ b/chromecast/browser/service_manager_context.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/browser/service_manager/service_manager_context.h"
+#include "chromecast/browser/service_manager_context.h"
 
 #include <map>
 #include <memory>
@@ -26,18 +26,12 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/task/post_task.h"
 #include "build/build_config.h"
-#include "content/browser/system_connector_impl.h"
-#include "content/common/service_manager/service_manager_connection_impl.h"
-#include "content/public/browser/browser_task_traits.h"
+#include "chromecast/browser/cast_content_browser_client.h"
+#include "chromecast/browser/service_manager_connection.h"
+#include "chromecast/browser/system_connector.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/child_process_data.h"
-#include "content/public/browser/content_browser_client.h"
-#include "content/public/browser/gpu_service_registry.h"
 #include "content/public/browser/service_process_host.h"
-#include "content/public/common/content_client.h"
-#include "content/public/common/content_features.h"
 #include "content/public/common/content_switches.h"
-#include "content/public/common/service_manager_connection.h"
 #include "content/public/common/service_names.mojom.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
@@ -53,22 +47,21 @@
 #include "services/service_manager/service_manager.h"
 #include "services/service_manager/service_process_host.h"
 #include "services/service_manager/service_process_launcher.h"
-#include "third_party/blink/public/strings/grit/blink_strings.h"
 #include "ui/base/buildflags.h"
 #include "ui/base/ui_base_features.h"
 
-namespace content {
+namespace chromecast {
 
 namespace {
 
 base::LazyInstance<std::unique_ptr<service_manager::Connector>>::Leaky
     g_io_thread_connector = LAZY_INSTANCE_INITIALIZER;
 
-const service_manager::Manifest& GetContentBrowserManifest() {
+const service_manager::Manifest& GetBrowserManifest() {
   static base::NoDestructor<service_manager::Manifest> manifest{
       service_manager::ManifestBuilder()
-          .WithServiceName(mojom::kBrowserServiceName)
-          .WithDisplayName("Content (browser process)")
+          .WithServiceName(content::mojom::kBrowserServiceName)
+          .WithDisplayName("Browser process")
           .WithOptions(service_manager::ManifestOptionsBuilder()
                            .CanConnectToInstancesInAnyGroup(true)
                            .CanConnectToInstancesWithAnyId(true)
@@ -80,29 +73,34 @@
   return *manifest;
 }
 
-service_manager::Manifest GetContentSystemManifest() {
+service_manager::Manifest GetSystemManifest(
+    shell::CastContentBrowserClient* cast_content_browser_client) {
   // TODO(https://crbug.com/961869): This is a bit of a temporary hack so that
   // we can make the global service instance a singleton. For now we just mirror
   // the per-BrowserContext manifest (formerly also used for the global
   // singleton instance), sans packaged services, since those are only meant to
   // be tied to a BrowserContext. The per-BrowserContext service should go away
   // soon, and then this can be removed.
-  service_manager::Manifest manifest = GetContentBrowserManifest();
-  manifest.Amend(GetContentClient()
-                     ->browser()
-                     ->GetServiceManifestOverlay(mojom::kBrowserServiceName)
-                     .value_or(service_manager::Manifest()));
-  manifest.service_name = mojom::kSystemServiceName;
+  service_manager::Manifest manifest = GetBrowserManifest();
+  manifest.Amend(
+      cast_content_browser_client
+          ->GetServiceManifestOverlay(content::mojom::kBrowserServiceName)
+          .value_or(service_manager::Manifest()));
+  manifest.service_name = content::mojom::kSystemServiceName;
   manifest.packaged_services.clear();
   manifest.options.instance_sharing_policy =
       service_manager::Manifest::InstanceSharingPolicy::kSingleton;
   return manifest;
 }
 
-void DestroyConnectorOnIOThread() { g_io_thread_connector.Get().reset(); }
+void DestroyConnectorOnIOThread() {
+  g_io_thread_connector.Get().reset();
+}
 
 // A ServiceProcessHost implementation which delegates to Content-managed
-// processes via a new UtilityProcessHost.
+// processes, either via a new UtilityProcessHost to launch new service
+// processes, or the existing GpuProcessHost to run service instances in the GPU
+// process.
 class ContentChildServiceProcessHost
     : public service_manager::ServiceProcessHost {
  public:
@@ -117,7 +115,7 @@
       LaunchCallback callback) override {
     // Start a new process for this service.
     mojo::PendingRemote<service_manager::mojom::Service> remote;
-    LaunchUtilityProcessServiceDeprecated(
+    content::LaunchUtilityProcessServiceDeprecated(
         identity.name(), display_name, sandbox_type,
         remote.InitWithNewPipeAndPassReceiver().PassPipe(),
         std::move(callback));
@@ -263,16 +261,14 @@
 
     mojo::Remote<service_manager::mojom::ProcessMetadata> metadata;
     service_manager_->RegisterService(
-        service_manager::Identity(mojom::kSystemServiceName,
+        service_manager::Identity(content::mojom::kSystemServiceName,
                                   service_manager::kSystemInstanceGroup,
                                   base::Token{}, base::Token::CreateRandom()),
         std::move(system_remote), metadata.BindNewPipeAndPassReceiver());
     metadata->SetPID(base::GetCurrentProcId());
   }
 
-  void ShutDownOnServiceManagerThread() {
-    service_manager_.reset();
-  }
+  void ShutDownOnServiceManagerThread() { service_manager_.reset(); }
 
   void StartServicesOnServiceManagerThread(
       std::vector<std::string> service_names) {
@@ -291,25 +287,27 @@
 };
 
 ServiceManagerContext::ServiceManagerContext(
+    shell::CastContentBrowserClient* cast_content_browser_client,
     scoped_refptr<base::SingleThreadTaskRunner>
         service_manager_thread_task_runner)
-    : service_manager_thread_task_runner_(
+    : cast_content_browser_client_(cast_content_browser_client),
+      service_manager_thread_task_runner_(
           std::move(service_manager_thread_task_runner)) {
   // The |service_manager_thread_task_runner_| must have been created before
   // starting the ServiceManager.
   DCHECK(service_manager_thread_task_runner_);
   std::vector<service_manager::Manifest> manifests;
-  manifests.push_back(GetContentBrowserManifest());
-  manifests.push_back(GetContentSystemManifest());
+  manifests.push_back(GetBrowserManifest());
+  manifests.push_back(GetSystemManifest(cast_content_browser_client_));
   for (auto& manifest : manifests) {
     base::Optional<service_manager::Manifest> overlay =
-        GetContentClient()->browser()->GetServiceManifestOverlay(
+        cast_content_browser_client_->GetServiceManifestOverlay(
             manifest.service_name);
     if (overlay)
       manifest.Amend(*overlay);
   }
   for (auto& extra_manifest :
-       GetContentClient()->browser()->GetExtraServiceManifests()) {
+       cast_content_browser_client_->GetExtraServiceManifests()) {
     manifests.emplace_back(std::move(extra_manifest));
   }
   in_process_context_ =
@@ -332,7 +330,7 @@
       base::BindRepeating(&ServiceManagerContext::RunServiceInstance,
                           weak_ptr_factory_.GetWeakPtr()));
   in_process_context_->StartServices(
-      GetContentClient()->browser()->GetStartupServices());
+      cast_content_browser_client_->GetStartupServices());
 }
 
 ServiceManagerContext::~ServiceManagerContext() {
@@ -354,16 +352,16 @@
 
 // static
 service_manager::Connector* ServiceManagerContext::GetConnectorForIOThread() {
-  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
   return g_io_thread_connector.Get().get();
 }
 
 void ServiceManagerContext::RunServiceInstance(
     const service_manager::Identity& identity,
     mojo::PendingReceiver<service_manager::mojom::Service> receiver) {
-  GetContentClient()->browser()->RunServiceInstance(identity, &receiver);
+  cast_content_browser_client_->RunServiceInstance(identity, &receiver);
   DLOG_IF(ERROR, receiver) << "Unhandled service request for \""
                            << identity.name() << "\"";
 }
 
-}  // namespace content
+}  // namespace chromecast
diff --git a/content/browser/service_manager/service_manager_context.h b/chromecast/browser/service_manager_context.h
similarity index 68%
rename from content/browser/service_manager/service_manager_context.h
rename to chromecast/browser/service_manager_context.h
index 1bd9a20..5fbce8c 100644
--- a/content/browser/service_manager/service_manager_context.h
+++ b/chromecast/browser/service_manager_context.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CONTENT_BROWSER_SERVICE_MANAGER_SERVICE_MANAGER_CONTEXT_H_
-#define CONTENT_BROWSER_SERVICE_MANAGER_SERVICE_MANAGER_CONTEXT_H_
+#ifndef CHROMECAST_BROWSER_SERVICE_MANAGER_CONTEXT_H_
+#define CHROMECAST_BROWSER_SERVICE_MANAGER_CONTEXT_H_
 
 #include <map>
 #include <string>
@@ -12,7 +12,6 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/single_thread_task_runner.h"
-#include "content/common/content_export.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "services/service_manager/public/cpp/identity.h"
 #include "services/service_manager/public/mojom/service.mojom.h"
@@ -21,25 +20,26 @@
 class Connector;
 }
 
-namespace content {
+namespace chromecast {
+
+namespace shell {
+class CastContentBrowserClient;
+}
 
 // ServiceManagerContext manages the browser's connection to the ServiceManager,
 // hosting a new in-process ServiceManagerContext if the browser was not
 // launched from an external one.
-class CONTENT_EXPORT ServiceManagerContext {
+class ServiceManagerContext {
  public:
-  explicit ServiceManagerContext(scoped_refptr<base::SingleThreadTaskRunner>
-                                     service_manager_thread_task_runner);
+  ServiceManagerContext(
+      shell::CastContentBrowserClient* cast_content_browser_client,
+      scoped_refptr<base::SingleThreadTaskRunner>
+          service_manager_thread_task_runner);
   ~ServiceManagerContext();
 
   // Returns a service_manager::Connector that can be used on the IO thread.
   static service_manager::Connector* GetConnectorForIOThread();
 
-  // Returns true if there is a valid process for |process_group_name|. Must be
-  // called on the IO thread.
-  static bool HasValidProcessForProcessGroup(
-      const std::string& process_group_name);
-
   // Shutdowns the ServiceManager and the connections to the ServiceManager.
   void ShutDown();
 
@@ -50,6 +50,7 @@
       const service_manager::Identity& identity,
       mojo::PendingReceiver<service_manager::mojom::Service> receiver);
 
+  shell::CastContentBrowserClient* const cast_content_browser_client_;
   scoped_refptr<base::SingleThreadTaskRunner>
       service_manager_thread_task_runner_;
   scoped_refptr<InProcessServiceManagerContext> in_process_context_;
@@ -58,6 +59,6 @@
   DISALLOW_COPY_AND_ASSIGN(ServiceManagerContext);
 };
 
-}  // namespace content
+}  // namespace chromecast
 
-#endif  // CONTENT_BROWSER_SERVICE_MANAGER_SERVICE_MANAGER_CONTEXT_H_
+#endif  // CHROMECAST_BROWSER_SERVICE_MANAGER_CONTEXT_H_
diff --git a/content/browser/system_connector_impl.cc b/chromecast/browser/system_connector.cc
similarity index 79%
rename from content/browser/system_connector_impl.cc
rename to chromecast/browser/system_connector.cc
index 668744d..f104af4 100644
--- a/content/browser/system_connector_impl.cc
+++ b/chromecast/browser/system_connector.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/browser/system_connector_impl.h"
+#include "chromecast/browser/system_connector.h"
 
 #include "base/check_op.h"
 #include "base/no_destructor.h"
@@ -12,7 +12,7 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 
-namespace content {
+namespace chromecast {
 
 namespace {
 
@@ -26,13 +26,11 @@
 
 void BindReceiverOnMainThread(
     mojo::PendingReceiver<service_manager::mojom::Connector> receiver) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   auto* main_thread_connector = GetSystemConnector();
   DCHECK(main_thread_connector)
       << "GetSystemConnector() called on background thread with no system "
-      << "Connector set on the main thread. If this is a unit test "
-      << "environment, consider calling SetSystemConnectorForTesting in test "
-         "setup.";
+      << "Connector set on the main thread.";
   main_thread_connector->BindConnectorReceiver(std::move(receiver));
 }
 
@@ -40,14 +38,15 @@
 
 service_manager::Connector* GetSystemConnector() {
   auto& storage = GetConnectorStorage();
-  if (!BrowserThread::IsThreadInitialized(BrowserThread::UI) ||
-      BrowserThread::CurrentlyOn(BrowserThread::UI)) {
+  if (!content::BrowserThread::IsThreadInitialized(
+          content::BrowserThread::UI) ||
+      content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)) {
     return storage.GetValuePointer();
   }
 
   if (!storage) {
     mojo::PendingRemote<service_manager::mojom::Connector> remote;
-    GetUIThreadTaskRunner({})->PostTask(
+    content::GetUIThreadTaskRunner({})->PostTask(
         FROM_HERE, base::BindOnce(&BindReceiverOnMainThread,
                                   remote.InitWithNewPipeAndPassReceiver()));
     storage.emplace(std::move(remote));
@@ -66,4 +65,4 @@
   GetConnectorStorage().emplace(std::move(remote));
 }
 
-}  // namespace content
+}  // namespace chromecast
diff --git a/chromecast/browser/system_connector.h b/chromecast/browser/system_connector.h
new file mode 100644
index 0000000..d4271a5
--- /dev/null
+++ b/chromecast/browser/system_connector.h
@@ -0,0 +1,25 @@
+// 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.
+
+#ifndef CHROMECAST_BROWSER_SYSTEM_CONNECTOR_H_
+#define CHROMECAST_BROWSER_SYSTEM_CONNECTOR_H_
+
+#include <memory>
+
+#include "services/service_manager/public/cpp/connector.h"
+
+namespace chromecast {
+
+// Returns a Connector which can be used to connect to service interfaces from
+// the browser process. May return null in unit testing environments.
+//
+// This function is safe to call from any thread, but the returned pointer is
+// different on each thread and is NEVER safe to retain or pass across threads.
+service_manager::Connector* GetSystemConnector();
+
+void SetSystemConnector(std::unique_ptr<service_manager::Connector> connector);
+
+}  // namespace chromecast
+
+#endif  // CHROMECAST_BROWSER_SYSTEM_CONNECTOR_H_
diff --git a/chromeos/components/diagnostics_ui/resources/realtime_cpu_chart.js b/chromeos/components/diagnostics_ui/resources/realtime_cpu_chart.js
index 663ed94..8b5bd3d 100644
--- a/chromeos/components/diagnostics_ui/resources/realtime_cpu_chart.js
+++ b/chromeos/components/diagnostics_ui/resources/realtime_cpu_chart.js
@@ -51,6 +51,12 @@
    */
   currentFrame_: 0,
 
+  /**
+   * Y-Values where we should mark ticks for the y-axis on the left.
+   * @private {!Array<number>}
+   */
+  yAxisTicks_: [0, 25, 50, 75, 100],
+
   properties: {
     /** @type {number} */
     user: {
@@ -203,7 +209,8 @@
     chartGroup.select('#gridLines')
         .call(
             d3.axisLeft(/** @type {!d3.LinearScale} */ (this.yAxisScaleFn_))
-                .ticks(3)                     // Number of y-axis ticks
+                .tickValues(this.yAxisTicks_)
+                .tickFormat((y) => this.getPercentageLabel_(y))
                 .tickSize(-this.graphWidth_)  // Extend the ticks into the
                                               // entire graph as gridlines.
         );
diff --git a/chromeos/components/scanning/scanning_handler_unittest.cc b/chromeos/components/scanning/scanning_handler_unittest.cc
index 83229dd1d..a49699b 100644
--- a/chromeos/components/scanning/scanning_handler_unittest.cc
+++ b/chromeos/components/scanning/scanning_handler_unittest.cc
@@ -24,6 +24,12 @@
 
 namespace chromeos {
 
+namespace {
+
+constexpr char kHandlerFunctionName[] = "handlerFunctionName";
+
+}  // namespace
+
 class TestSelectFilePolicy : public ui::SelectFilePolicy {
  public:
   TestSelectFilePolicy& operator=(const TestSelectFilePolicy&) = delete;
@@ -138,8 +144,20 @@
 
   void TearDown() override { ui::SelectFileDialog::SetFactory(nullptr); }
 
-  const content::TestWebUI::CallData& CallDataAtIndex(size_t index) {
-    return *web_ui_.call_data()[index];
+  // Gets the call data after a ScanningHandler WebUI call and asserts the
+  // expected response.
+  const content::TestWebUI::CallData& GetCallData(int size_before_call) {
+    const std::vector<std::unique_ptr<content::TestWebUI::CallData>>&
+        call_data_list = web_ui_.call_data();
+    EXPECT_EQ(size_before_call + 1u, call_data_list.size());
+
+    const content::TestWebUI::CallData& call_data = *call_data_list.back();
+    EXPECT_EQ("cr.webUIResponse", call_data.function_name());
+    EXPECT_EQ(kHandlerFunctionName, call_data.arg1()->GetString());
+    // True if ResolveJavascriptCallback and false if RejectJavascriptCallback
+    // is called by the handler.
+    EXPECT_TRUE(call_data.arg2()->GetBool());
+    return call_data;
   }
 
  protected:
@@ -158,16 +176,11 @@
 
   const size_t call_data_count_before_call = web_ui_.call_data().size();
   base::ListValue args;
-  args.Append("handlerFunctionName");
+  args.Append(kHandlerFunctionName);
   web_ui_.HandleReceivedMessage("requestScanToLocation", &args);
 
-  EXPECT_EQ(call_data_count_before_call + 1u, web_ui_.call_data().size());
   const content::TestWebUI::CallData& call_data =
-      CallDataAtIndex(call_data_count_before_call);
-  EXPECT_EQ("cr.webUIResponse", call_data.function_name());
-  EXPECT_EQ("handlerFunctionName", call_data.arg1()->GetString());
-  EXPECT_TRUE(call_data.arg2()->GetBool());
-
+      GetCallData(call_data_count_before_call);
   const base::DictionaryValue* selected_path_dict;
   EXPECT_TRUE(call_data.arg3()->GetAsDictionary(&selected_path_dict));
   EXPECT_EQ(base_file_path.value(),
@@ -184,16 +197,11 @@
 
   const size_t call_data_count_before_call = web_ui_.call_data().size();
   base::ListValue args;
-  args.Append("handlerFunctionName");
+  args.Append(kHandlerFunctionName);
   web_ui_.HandleReceivedMessage("requestScanToLocation", &args);
 
-  EXPECT_EQ(call_data_count_before_call + 1u, web_ui_.call_data().size());
   const content::TestWebUI::CallData& call_data =
-      CallDataAtIndex(call_data_count_before_call);
-  EXPECT_EQ("cr.webUIResponse", call_data.function_name());
-  EXPECT_EQ("handlerFunctionName", call_data.arg1()->GetString());
-  EXPECT_TRUE(call_data.arg2()->GetBool());
-
+      GetCallData(call_data_count_before_call);
   const base::DictionaryValue* selected_path_dict;
   EXPECT_TRUE(call_data.arg3()->GetAsDictionary(&selected_path_dict));
   EXPECT_EQ("", *selected_path_dict->FindStringPath("filePath"));
diff --git a/chromeos/profiles/atom.afdo.newest.txt b/chromeos/profiles/atom.afdo.newest.txt
index e9b2641..2cba3d83 100644
--- a/chromeos/profiles/atom.afdo.newest.txt
+++ b/chromeos/profiles/atom.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-atom-88-4305.0-1604314829-benchmark-88.0.4312.0-r1-redacted.afdo.xz
+chromeos-chrome-amd64-atom-88-4314.0-1605523684-benchmark-88.0.4324.12-r1-redacted.afdo.xz
diff --git a/chromeos/profiles/bigcore.afdo.newest.txt b/chromeos/profiles/bigcore.afdo.newest.txt
index bfb6599..5bd97985 100644
--- a/chromeos/profiles/bigcore.afdo.newest.txt
+++ b/chromeos/profiles/bigcore.afdo.newest.txt
@@ -1 +1 @@
-chromeos-chrome-amd64-bigcore-88-4296.0-1604316477-benchmark-88.0.4314.0-r1-redacted.afdo.xz
+chromeos-chrome-amd64-bigcore-88-4314.0-1605528048-benchmark-88.0.4324.12-r1-redacted.afdo.xz
diff --git a/chromeos/services/assistant/BUILD.gn b/chromeos/services/assistant/BUILD.gn
index 1c9693b..55fa4269 100644
--- a/chromeos/services/assistant/BUILD.gn
+++ b/chromeos/services/assistant/BUILD.gn
@@ -112,13 +112,14 @@
 
     deps += [
       ":buildflags",
-      ":cros_libassistant",
       "//chromeos/assistant/internal",
       "//chromeos/assistant/internal:libassistant",
       "//chromeos/assistant/internal/proto/google3",
       "//chromeos/dbus",
       "//chromeos/resources",
       "//chromeos/services/assistant/proxy",
+      "//chromeos/services/assistant/public/cpp/migration",
+      "//chromeos/services/assistant/public/cpp/migration",
       "//chromeos/services/network_config/public/mojom",
       "//chromeos/strings",
       "//libassistant/shared/internal_api:fuchsia_api_helper",
@@ -136,25 +137,6 @@
   }
 }
 
-# This source_set contains the border APIs that interact with Libassistant.
-# TODO(b/171748795): During the migration to a Libassistant mojom service,
-# these APIs are used both by the mojom service and from this directory.
-# Once the migration is complete these should no longer be used here and
-# everything should have been moved to the mojom service.
-
-if (enable_cros_libassistant) {
-  source_set("cros_libassistant") {
-    sources = [
-      "assistant_manager_service_delegate.h",
-      "cros_platform_api.h",
-    ]
-    deps = [
-      "//base",
-      "//libassistant/shared/public",
-    ]
-  }
-}
-
 source_set("tests") {
   testonly = true
   deps = [
@@ -201,10 +183,6 @@
       "platform/network_provider_impl_unittest.cc",
       "platform/power_manager_provider_impl_unittest.cc",
       "platform/system_provider_impl_unittest.cc",
-      "test_support/fake_assistant_manager_service_delegate.cc",
-      "test_support/fake_assistant_manager_service_delegate.h",
-      "test_support/fake_platform_api.cc",
-      "test_support/fake_platform_api.h",
       "test_support/fake_service_context.cc",
       "test_support/fake_service_context.h",
       "test_support/mock_media_manager.cc",
@@ -217,7 +195,8 @@
       "//chromeos/assistant/internal:tests",
       "//chromeos/assistant/internal/proto/google3",
       "//chromeos/dbus",
-      "//chromeos/services/assistant:cros_libassistant",
+      "//chromeos/services/assistant/public/cpp/migration",
+      "//chromeos/services/assistant/public/cpp/migration:test_support",
       "//chromeos/services/network_config/public/mojom",
       "//services/audio/public/cpp:test_support",
       "//services/device/public/cpp:test_support",
diff --git a/chromeos/services/assistant/assistant_device_settings_delegate.cc b/chromeos/services/assistant/assistant_device_settings_delegate.cc
index 9ee498f..6fb4f87 100644
--- a/chromeos/services/assistant/assistant_device_settings_delegate.cc
+++ b/chromeos/services/assistant/assistant_device_settings_delegate.cc
@@ -13,9 +13,9 @@
 #include "base/memory/weak_ptr.h"
 #include "chromeos/assistant/internal/internal_util.h"
 #include "chromeos/assistant/internal/proto/google3/assistant/api/client_op/device_args.pb.h"
-#include "chromeos/services/assistant/cros_platform_api.h"
 #include "chromeos/services/assistant/public/cpp/assistant_service.h"
 #include "chromeos/services/assistant/public/cpp/device_actions.h"
+#include "chromeos/services/assistant/public/cpp/migration/cros_platform_api.h"
 #include "chromeos/services/assistant/service_context.h"
 #include "libassistant/shared/public/platform_audio_output.h"
 
diff --git a/chromeos/services/assistant/assistant_manager_service_delegate_impl.h b/chromeos/services/assistant/assistant_manager_service_delegate_impl.h
index 0d766b20..1d0eb8586 100644
--- a/chromeos/services/assistant/assistant_manager_service_delegate_impl.h
+++ b/chromeos/services/assistant/assistant_manager_service_delegate_impl.h
@@ -8,7 +8,7 @@
 #include <memory>
 #include <string>
 
-#include "chromeos/services/assistant/assistant_manager_service_delegate.h"
+#include "chromeos/services/assistant/public/cpp/migration/assistant_manager_service_delegate.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/device/public/mojom/battery_monitor.mojom.h"
 
diff --git a/chromeos/services/assistant/assistant_manager_service_impl.cc b/chromeos/services/assistant/assistant_manager_service_impl.cc
index 6399831..ee36d71 100644
--- a/chromeos/services/assistant/assistant_manager_service_impl.cc
+++ b/chromeos/services/assistant/assistant_manager_service_impl.cc
@@ -32,14 +32,14 @@
 #include "chromeos/constants/chromeos_switches.h"
 #include "chromeos/dbus/util/version_loader.h"
 #include "chromeos/services/assistant/assistant_device_settings_delegate.h"
-#include "chromeos/services/assistant/assistant_manager_service_delegate.h"
 #include "chromeos/services/assistant/media_session/assistant_media_session.h"
 #include "chromeos/services/assistant/platform_api_impl.h"
 #include "chromeos/services/assistant/proxy/service_controller.h"
 #include "chromeos/services/assistant/public/cpp/assistant_client.h"
 #include "chromeos/services/assistant/public/cpp/device_actions.h"
 #include "chromeos/services/assistant/public/cpp/features.h"
-#include "chromeos/services/assistant/public/cpp/libassistant_v1_api.h"
+#include "chromeos/services/assistant/public/cpp/migration/assistant_manager_service_delegate.h"
+#include "chromeos/services/assistant/public/cpp/migration/libassistant_v1_api.h"
 #include "chromeos/services/assistant/public/shared/utils.h"
 #include "chromeos/services/assistant/service_context.h"
 #include "chromeos/services/assistant/utils.h"
diff --git a/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc b/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc
index 6bbadd1..eeacb78 100644
--- a/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc
+++ b/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc
@@ -21,8 +21,8 @@
 #include "chromeos/services/assistant/assistant_manager_service.h"
 #include "chromeos/services/assistant/public/cpp/assistant_service.h"
 #include "chromeos/services/assistant/public/cpp/features.h"
+#include "chromeos/services/assistant/public/cpp/migration/fake_assistant_manager_service_delegate.h"
 #include "chromeos/services/assistant/service_context.h"
-#include "chromeos/services/assistant/test_support/fake_assistant_manager_service_delegate.h"
 #include "chromeos/services/assistant/test_support/fake_service_context.h"
 #include "chromeos/services/assistant/test_support/fully_initialized_assistant_state.h"
 #include "chromeos/services/assistant/test_support/mock_assistant_interaction_subscriber.h"
diff --git a/chromeos/services/assistant/assistant_settings_impl.cc b/chromeos/services/assistant/assistant_settings_impl.cc
index c53b3d4..e68eb8f1 100644
--- a/chromeos/services/assistant/assistant_settings_impl.cc
+++ b/chromeos/services/assistant/assistant_settings_impl.cc
@@ -12,8 +12,8 @@
 #include "base/callback_helpers.h"
 #include "chromeos/dbus/util/version_loader.h"
 #include "chromeos/services/assistant/assistant_manager_service_impl.h"
-#include "chromeos/services/assistant/cros_platform_api.h"
 #include "chromeos/services/assistant/public/cpp/features.h"
+#include "chromeos/services/assistant/public/cpp/migration/cros_platform_api.h"
 #include "chromeos/services/assistant/public/proto/assistant_device_settings_ui.pb.h"
 #include "chromeos/services/assistant/public/proto/settings_ui.pb.h"
 #include "chromeos/services/assistant/service_context.h"
diff --git a/chromeos/services/assistant/platform_api_impl.h b/chromeos/services/assistant/platform_api_impl.h
index 4e35475..dcf5b0c0 100644
--- a/chromeos/services/assistant/platform_api_impl.h
+++ b/chromeos/services/assistant/platform_api_impl.h
@@ -11,13 +11,13 @@
 #include <vector>
 
 #include "chromeos/audio/cras_audio_handler.h"
-#include "chromeos/services/assistant/cros_platform_api.h"
 #include "chromeos/services/assistant/platform/audio_input_provider_impl.h"
 #include "chromeos/services/assistant/platform/audio_output_provider_impl.h"
 #include "chromeos/services/assistant/platform/file_provider_impl.h"
 #include "chromeos/services/assistant/platform/network_provider_impl.h"
 #include "chromeos/services/assistant/platform/system_provider_impl.h"
 #include "chromeos/services/assistant/public/cpp/assistant_service.h"
+#include "chromeos/services/assistant/public/cpp/migration/cros_platform_api.h"
 #include "libassistant/shared/public/platform_auth.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "services/device/public/mojom/battery_monitor.mojom.h"
diff --git a/chromeos/services/assistant/proxy/BUILD.gn b/chromeos/services/assistant/proxy/BUILD.gn
index 06c398b4..71ab9cd 100644
--- a/chromeos/services/assistant/proxy/BUILD.gn
+++ b/chromeos/services/assistant/proxy/BUILD.gn
@@ -19,8 +19,8 @@
     "//chromeos/assistant/internal",
     "//chromeos/assistant/internal/proto/google3",
     "//chromeos/constants",
-    "//chromeos/services/assistant:cros_libassistant",
     "//chromeos/services/assistant/public/cpp",
+    "//chromeos/services/assistant/public/cpp/migration",
     "//chromeos/services/libassistant",
     "//chromeos/services/libassistant/public/mojom",
     "//libassistant/shared/internal_api:fuchsia_api_helper",
diff --git a/chromeos/services/assistant/proxy/service_controller.cc b/chromeos/services/assistant/proxy/service_controller.cc
index 54d18e9..38c5a51 100644
--- a/chromeos/services/assistant/proxy/service_controller.cc
+++ b/chromeos/services/assistant/proxy/service_controller.cc
@@ -8,9 +8,9 @@
 #include "chromeos/assistant/internal/cros_display_connection.h"
 #include "chromeos/assistant/internal/internal_util.h"
 #include "chromeos/constants/chromeos_features.h"
-#include "chromeos/services/assistant/assistant_manager_service_delegate.h"
 #include "chromeos/services/assistant/public/cpp/features.h"
-#include "chromeos/services/assistant/public/cpp/libassistant_v1_api.h"
+#include "chromeos/services/assistant/public/cpp/migration/assistant_manager_service_delegate.h"
+#include "chromeos/services/assistant/public/cpp/migration/libassistant_v1_api.h"
 #include "libassistant/shared/internal_api/assistant_manager_internal.h"
 #include "libassistant/shared/internal_api/fuchsia_api_helper.h"
 
diff --git a/chromeos/services/assistant/public/cpp/BUILD.gn b/chromeos/services/assistant/public/cpp/BUILD.gn
index 4015040..82652491 100644
--- a/chromeos/services/assistant/public/cpp/BUILD.gn
+++ b/chromeos/services/assistant/public/cpp/BUILD.gn
@@ -24,8 +24,6 @@
     "device_actions.h",
     "features.cc",
     "features.h",
-    "libassistant_v1_api.cc",
-    "libassistant_v1_api.h",
   ]
 
   public_deps = [
diff --git a/chromeos/services/assistant/public/cpp/migration/BUILD.gn b/chromeos/services/assistant/public/cpp/migration/BUILD.gn
new file mode 100644
index 0000000..d901cdc
--- /dev/null
+++ b/chromeos/services/assistant/public/cpp/migration/BUILD.gn
@@ -0,0 +1,44 @@
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+import("//chromeos/assistant/assistant.gni")
+
+assert(is_chromeos)
+assert(enable_cros_libassistant)
+
+component("migration") {
+  defines = [ "IS_ASSISTANT_SERVICE_PUBLIC_MIGRATION_IMPL" ]
+
+  sources = [
+    "assistant_manager_service_delegate.h",
+    "cros_platform_api.h",
+    "libassistant_v1_api.cc",
+    "libassistant_v1_api.h",
+  ]
+
+  public_deps = [ "//libassistant/shared/public" ]
+
+  deps = [ "//base" ]
+}
+
+component("test_support") {
+  testonly = true
+
+  output_name = "migration_test_support"
+  defines = [ "IS_ASSISTANT_SERVICE_MIGRATION_TEST_SUPPORT_IMPL" ]
+
+  sources = [
+    "fake_assistant_manager_service_delegate.cc",
+    "fake_assistant_manager_service_delegate.h",
+    "fake_platform_api.cc",
+    "fake_platform_api.h",
+  ]
+
+  deps = [
+    ":migration",
+    "//base",
+    "//chromeos/assistant/internal:test_support",
+    "//chromeos/assistant/internal/proto/google3",
+    "//libassistant/shared/public",
+  ]
+}
diff --git a/chromeos/services/assistant/public/cpp/migration/README b/chromeos/services/assistant/public/cpp/migration/README
new file mode 100644
index 0000000..f5081beb
--- /dev/null
+++ b/chromeos/services/assistant/public/cpp/migration/README
@@ -0,0 +1,7 @@
+A migration is currently in progress, moving the Libassistant APIs to 
+//chromeos/services/libassistant.
+
+The files in this directory are temporary shared between 
+//chromeos/service/assistant and //chromeos/services/libassistant.
+
+Once the migration is over, this directory should be gone.
diff --git a/chromeos/services/assistant/assistant_manager_service_delegate.h b/chromeos/services/assistant/public/cpp/migration/assistant_manager_service_delegate.h
similarity index 82%
rename from chromeos/services/assistant/assistant_manager_service_delegate.h
rename to chromeos/services/assistant/public/cpp/migration/assistant_manager_service_delegate.h
index ddb5dd3..446616a5 100644
--- a/chromeos/services/assistant/assistant_manager_service_delegate.h
+++ b/chromeos/services/assistant/public/cpp/migration/assistant_manager_service_delegate.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
-#define CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
+#ifndef CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
+#define CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
 
 #include <memory>
 
@@ -49,4 +49,4 @@
 }  // namespace assistant
 }  // namespace chromeos
 
-#endif  // CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
+#endif  // CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
diff --git a/chromeos/services/assistant/cros_platform_api.h b/chromeos/services/assistant/public/cpp/migration/cros_platform_api.h
similarity index 80%
rename from chromeos/services/assistant/cros_platform_api.h
rename to chromeos/services/assistant/public/cpp/migration/cros_platform_api.h
index 82d39a8..0c93002 100644
--- a/chromeos/services/assistant/cros_platform_api.h
+++ b/chromeos/services/assistant/public/cpp/migration/cros_platform_api.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 CHROMEOS_SERVICES_ASSISTANT_CROS_PLATFORM_API_H_
-#define CHROMEOS_SERVICES_ASSISTANT_CROS_PLATFORM_API_H_
+#ifndef CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_CROS_PLATFORM_API_H_
+#define CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_CROS_PLATFORM_API_H_
 
 #include "base/macros.h"
 #include "libassistant/shared/public/platform_api.h"
@@ -34,4 +34,4 @@
 }  // namespace assistant
 }  // namespace chromeos
 
-#endif  // CHROMEOS_SERVICES_ASSISTANT_CROS_PLATFORM_API_H_
+#endif  // CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_CROS_PLATFORM_API_H_
diff --git a/chromeos/services/assistant/test_support/fake_assistant_manager_service_delegate.cc b/chromeos/services/assistant/public/cpp/migration/fake_assistant_manager_service_delegate.cc
similarity index 89%
rename from chromeos/services/assistant/test_support/fake_assistant_manager_service_delegate.cc
rename to chromeos/services/assistant/public/cpp/migration/fake_assistant_manager_service_delegate.cc
index a6de5b4..0e42d29 100644
--- a/chromeos/services/assistant/test_support/fake_assistant_manager_service_delegate.cc
+++ b/chromeos/services/assistant/public/cpp/migration/fake_assistant_manager_service_delegate.cc
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "chromeos/services/assistant/test_support/fake_assistant_manager_service_delegate.h"
+#include "chromeos/services/assistant/public/cpp/migration/fake_assistant_manager_service_delegate.h"
 
 #include "chromeos/assistant/internal/test_support/fake_assistant_manager.h"
 #include "chromeos/assistant/internal/test_support/fake_assistant_manager_internal.h"
-#include "chromeos/services/assistant/test_support/fake_platform_api.h"
+#include "chromeos/services/assistant/public/cpp/migration/fake_platform_api.h"
 
 namespace chromeos {
 namespace assistant {
diff --git a/chromeos/services/assistant/test_support/fake_assistant_manager_service_delegate.h b/chromeos/services/assistant/public/cpp/migration/fake_assistant_manager_service_delegate.h
similarity index 76%
rename from chromeos/services/assistant/test_support/fake_assistant_manager_service_delegate.h
rename to chromeos/services/assistant/public/cpp/migration/fake_assistant_manager_service_delegate.h
index 47907bd0..87a1c23 100644
--- a/chromeos/services/assistant/test_support/fake_assistant_manager_service_delegate.h
+++ b/chromeos/services/assistant/public/cpp/migration/fake_assistant_manager_service_delegate.h
@@ -2,10 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROMEOS_SERVICES_ASSISTANT_TEST_SUPPORT_FAKE_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
-#define CHROMEOS_SERVICES_ASSISTANT_TEST_SUPPORT_FAKE_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
+#ifndef CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_FAKE_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
+#define CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_FAKE_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
 
-#include "chromeos/services/assistant/assistant_manager_service_delegate.h"
+#include "base/component_export.h"
+
+#include <memory>
+#include <string>
+
+#include "chromeos/services/assistant/public/cpp/migration/assistant_manager_service_delegate.h"
 
 namespace chromeos {
 namespace assistant {
@@ -15,7 +20,8 @@
 
 // Implementation of |AssistantManagerServiceDelegate| that returns fake
 // instances for all of the member methods. Used during unittests.
-class FakeAssistantManagerServiceDelegate
+class COMPONENT_EXPORT(ASSISTANT_SERVICE_MIGRATION_TEST_SUPPORT)
+    FakeAssistantManagerServiceDelegate
     : public AssistantManagerServiceDelegate {
  public:
   FakeAssistantManagerServiceDelegate();
@@ -56,4 +62,4 @@
 }  // namespace assistant
 }  // namespace chromeos
 
-#endif  // CHROMEOS_SERVICES_ASSISTANT_TEST_SUPPORT_FAKE_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
+#endif  // CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_FAKE_ASSISTANT_MANAGER_SERVICE_DELEGATE_H_
diff --git a/chromeos/services/assistant/test_support/fake_platform_api.cc b/chromeos/services/assistant/public/cpp/migration/fake_platform_api.cc
similarity index 96%
rename from chromeos/services/assistant/test_support/fake_platform_api.cc
rename to chromeos/services/assistant/public/cpp/migration/fake_platform_api.cc
index 99748277..77560ef 100644
--- a/chromeos/services/assistant/test_support/fake_platform_api.cc
+++ b/chromeos/services/assistant/public/cpp/migration/fake_platform_api.cc
@@ -5,7 +5,7 @@
 #include <vector>
 
 #include "base/notreached.h"
-#include "chromeos/services/assistant/test_support/fake_platform_api.h"
+#include "chromeos/services/assistant//public/cpp/migration/fake_platform_api.h"
 #include "libassistant/shared/public/platform_audio_output.h"
 
 namespace chromeos {
diff --git a/chromeos/services/assistant/test_support/fake_platform_api.h b/chromeos/services/assistant/public/cpp/migration/fake_platform_api.h
similarity index 81%
rename from chromeos/services/assistant/test_support/fake_platform_api.h
rename to chromeos/services/assistant/public/cpp/migration/fake_platform_api.h
index 85d25971..49fde32a 100644
--- a/chromeos/services/assistant/test_support/fake_platform_api.h
+++ b/chromeos/services/assistant/public/cpp/migration/fake_platform_api.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROMEOS_SERVICES_ASSISTANT_TEST_SUPPORT_FAKE_PLATFORM_API_H_
-#define CHROMEOS_SERVICES_ASSISTANT_TEST_SUPPORT_FAKE_PLATFORM_API_H_
+#ifndef CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_FAKE_PLATFORM_API_H_
+#define CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_FAKE_PLATFORM_API_H_
 
 #include <memory>
 
 #include "base/macros.h"
-#include "chromeos/services/assistant/cros_platform_api.h"
+#include "chromeos/services/assistant/public/cpp/migration/cros_platform_api.h"
 
 namespace chromeos {
 namespace assistant {
@@ -42,4 +42,4 @@
 }  // namespace assistant
 }  // namespace chromeos
 
-#endif  // CHROMEOS_SERVICES_ASSISTANT_TEST_SUPPORT_FAKE_PLATFORM_API_H_
+#endif  // CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_FAKE_PLATFORM_API_H_
diff --git a/chromeos/services/assistant/public/cpp/libassistant_v1_api.cc b/chromeos/services/assistant/public/cpp/migration/libassistant_v1_api.cc
similarity index 90%
rename from chromeos/services/assistant/public/cpp/libassistant_v1_api.cc
rename to chromeos/services/assistant/public/cpp/migration/libassistant_v1_api.cc
index e462e5e..574e2e0 100644
--- a/chromeos/services/assistant/public/cpp/libassistant_v1_api.cc
+++ b/chromeos/services/assistant/public/cpp/migration/libassistant_v1_api.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 "chromeos/services/assistant/public/cpp/libassistant_v1_api.h"
+#include "chromeos/services/assistant/public/cpp/migration/libassistant_v1_api.h"
 
 #include "base/check.h"
 #include "base/check_op.h"
diff --git a/chromeos/services/assistant/public/cpp/libassistant_v1_api.h b/chromeos/services/assistant/public/cpp/migration/libassistant_v1_api.h
similarity index 81%
rename from chromeos/services/assistant/public/cpp/libassistant_v1_api.h
rename to chromeos/services/assistant/public/cpp/migration/libassistant_v1_api.h
index 1d1c4f37..f7f0a856 100644
--- a/chromeos/services/assistant/public/cpp/libassistant_v1_api.h
+++ b/chromeos/services/assistant/public/cpp/migration/libassistant_v1_api.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 CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_LIBASSISTANT_V1_API_H_
-#define CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_LIBASSISTANT_V1_API_H_
+#ifndef CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_LIBASSISTANT_V1_API_H_
+#define CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_LIBASSISTANT_V1_API_H_
 
 #include "base/component_export.h"
 
@@ -19,7 +19,7 @@
 // Only a single instance of this class may exist at any given time.
 // TODO(b/171748795): Remove once all Libassistant access has been moved in the
 // //chromeos/services/libassistant service.
-class COMPONENT_EXPORT(ASSISTANT_SERVICE_PUBLIC) LibassistantV1Api {
+class COMPONENT_EXPORT(ASSISTANT_SERVICE_PUBLIC_MIGRATION) LibassistantV1Api {
  public:
   LibassistantV1Api(
       assistant_client::AssistantManager* assistant_manager,
@@ -46,4 +46,4 @@
 }  // namespace assistant
 }  // namespace chromeos
 
-#endif  // CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_LIBASSISTANT_V1_API_H_
+#endif  // CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_LIBASSISTANT_V1_API_H_
diff --git a/chromeos/services/libassistant/BUILD.gn b/chromeos/services/libassistant/BUILD.gn
index 4ecf792..8e8d7d1 100644
--- a/chromeos/services/libassistant/BUILD.gn
+++ b/chromeos/services/libassistant/BUILD.gn
@@ -8,7 +8,10 @@
     "libassistant_service.h",
   ]
 
-  deps = [ "//chromeos/services/libassistant/public/mojom" ]
+  deps = [
+    "//chromeos/services/assistant/public/cpp/migration",
+    "//chromeos/services/libassistant/public/mojom",
+  ]
 
   defines = [ "IS_LIBASSISTANT_SERVICE_IMPL" ]
 
diff --git a/chromeos/strings/chromeos_strings_as.xtb b/chromeos/strings/chromeos_strings_as.xtb
index 45a65ea1f..30084d0 100644
--- a/chromeos/strings/chromeos_strings_as.xtb
+++ b/chromeos/strings/chromeos_strings_as.xtb
@@ -14,9 +14,12 @@
 <translation id="1398634363027580500">HTTPSৰ অতি বেছি বিলম্বতা</translation>
 <translation id="1413240736185167732">বিফল হৈছে - ফিল্টাৰ বিফল হৈছে</translation>
 <translation id="1468664791493211953">অ'ফাৰসমূহ</translation>
+<translation id="1476467821656042872"><ph name="MANAGER" />এ এই ডিভাইচটো পৰিচালনা কৰে তথা আপোনাৰ কাৰ্যকলাপো নিৰীক্ষণ কৰিব পাৰে।</translation>
 <translation id="1478594628797167447">স্কেনাৰ</translation>
+<translation id="1499900233129743732"><ph name="MANAGER" />এ এই ব্যৱহাৰকাৰীগৰাকীক পৰিচালনা কৰে আৰু হয়তো দূৰৰ পৰা ছেটিং পৰিচালনা কৰে আৰু ব্যৱহাৰকাৰীৰ কাৰ্যকলাপ নিৰীক্ষণ কৰে।</translation>
 <translation id="150962533380566081">অমান্য PUK।</translation>
 <translation id="1510238584712386396">লঞ্চাৰ</translation>
+<translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> টা থ্ৰেড)</translation>
 <translation id="1641857168437328880">নথি ফীডাৰ (এফাল থকা)</translation>
 <translation id="1644574205037202324">ইতিহাস</translation>
 <translation id="1662989795263954667">বন্ধ হৈছে - চিয়াঁহী শেষ হৈছে</translation>
@@ -80,6 +83,7 @@
 <translation id="4454245904991689773">স্কেন কৰি ইয়াত ছেভ কৰক</translation>
 <translation id="4483049906298469269">ডিফ’ল্ট হিচাপে নথকা নেটৱৰ্কৰ গে’টৱে’টোক পিং কৰাত বিফল হ'ল</translation>
 <translation id="4548483925627140043">ছিগনেল পোৱা নগ’ল</translation>
+<translation id="455835558791489930"><ph name="CHARGE_VALUE" />mAh বেটাৰী</translation>
 <translation id="458794348635939462">হ’ষ্ট সম্পৰ্কীয় সকলো সমস্যা সমাধান কৰাত বিফল হ'ল</translation>
 <translation id="4627232916386272576"><ph name="TOTAL_PAGE_NUMBER" />ৰ ভিতৰত <ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="PRINTED_PAGE_NUMBER" />। প্ৰিণ্টৰ কাৰ্যটো বাতিল কৰিবলৈ এণ্টাৰ টিপক।</translation>
 <translation id="4646949265910132906">সুৰক্ষিত ৱাই-ফাই সংযোগ</translation>
@@ -138,8 +142,10 @@
 <translation id="6766275201586212568">DNSৰ সমাধান বিফল হৈছে</translation>
 <translation id="6768237774506518020">DNSৰ সমাধান বিফল হোৱাৰ হাৰ উচ্চ</translation>
 <translation id="6839141349259399400">স্কেনাৰৰ সৈতে সংযোগ কৰিব পৰা নাই নেকি?</translation>
+<translation id="7028979494427204405"><ph name="MANAGER" />এ এই ডিভাইচটো পৰিচালনা কৰে আৰু চোৱা ৱেবপৃষ্ঠা, পাছৱৰ্ড আৰু ইমেইলকে ধৰি ব্যৱহাৰকাৰীৰ আটাইবোৰ কাৰ্যকলাপ এক্সেছ কৰিব পাৰে।</translation>
 <translation id="714876143603641390">LAN সংযোগ</translation>
 <translation id="7162487448488904999">Gallery</translation>
+<translation id="7177485034254901881">এই <ph name="DEVICE_TYPE" />টো <ph name="MANAGER" />এ পৰিচালনা কৰে। প্ৰশাসকে দূৰৰ পৰাই ডিভাইচটো কনফিগাৰ কৰিব পাৰে।</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7359657277149375382">ফাইলৰ প্রকাৰ</translation>
 <translation id="7561454561030345039">এই কাৰ্যটো আপোনাৰ প্ৰশাসকে পৰিচালনা কৰে</translation>
diff --git a/chromeos/strings/chromeos_strings_bs.xtb b/chromeos/strings/chromeos_strings_bs.xtb
index e0bbcf3..1410cbf6 100644
--- a/chromeos/strings/chromeos_strings_bs.xtb
+++ b/chromeos/strings/chromeos_strings_bs.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Usluga načina unosa Chrome OS-a</translation>
 <translation id="1947737735496445907">Odštampano</translation>
 <translation id="1979103255016296513">Vrijeme za promjenu lozinke je isteklo</translation>
+<translation id="1980044825731880088">Brzina procesora</translation>
 <translation id="2049639323467105390">Ovim uređajem upravlja domena <ph name="DOMAIN" />.</translation>
 <translation id="2080070583977670716">Više postavki</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" />%</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Uspješno</translation>
 <translation id="2375079107209812402">Broj preostalih pokušaja: <ph name="ATTEMPTS_LEFT" /></translation>
 <translation id="2391082728065870591">Pošalji izvještaj o povratnim informacijama</translation>
+<translation id="2461822463642141190">Trenutačno</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Preostao je još {0} pokušaj}one{<ph name="ERROR_MESSAGE" /> Preostao je još {0} pokušaj}few{<ph name="ERROR_MESSAGE" /> Preostala su još {0} pokušaja}other{<ph name="ERROR_MESSAGE" /> Preostalo je još {0} pokušaja}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Skeniraj</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Isključi</translation>
 <translation id="3008341117444806826">OSVJEŽI</translation>
 <translation id="3009958530611748826">Odaberite folder za pohranjivanje</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Dijagnostika povezivosti</translation>
 <translation id="3091839911843451378">Nije uspjelo – zaustavljeno</translation>
 <translation id="3188257591659621405">Moji fajlovi</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Zaustavljeno – nestalo je papira</translation>
 <translation id="4932733599132424254">Datum</translation>
 <translation id="4985509611418653372">Pokreni</translation>
+<translation id="5168185087976003268">Zdravlje baterije</translation>
 <translation id="520299634122159966">Nije dostupan nijedan skener</translation>
 <translation id="5212543919916444558">Ne mogu pronaći ništa na ekranu u vezi s čim mogu pomoći.
 Pokušajte dodirnuti mikrofon da me nešto pitate.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Pregledajte kao gost</translation>
 <translation id="54609108002486618">Upravljani</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Saznajte više u centru za pomoć.</translation>
 <translation id="5832805196449965646">Dodaj osobu</translation>
 <translation id="5895138241574237353">Ponovo pokreni</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, verzija <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Zatvori</translation>
 <translation id="6048107060512778456">Nije uspjelo – papir je zaglavljen</translation>
 <translation id="6050189528197190982">Nijanse sive</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Zadana mreža je iznad praga latentnosti</translation>
 <translation id="8919837981463578619">Nije uspjelo – nedostaje ladica</translation>
 <translation id="8928727111548978589">Nije uspjelo – nema papira</translation>
+<translation id="9088306295921699330">Trenutačna upotreba</translation>
 <translation id="910415269708673980">Osvježite tiket za <ph name="PRINCIPAL_NAME" /></translation>
 <translation id="9106415115617144481">Skenira se stranica broj <ph name="PAGE_NUMBER" /></translation>
 <translation id="9111102763498581341">Otključaj</translation>
diff --git a/chromeos/strings/chromeos_strings_ca.xtb b/chromeos/strings/chromeos_strings_ca.xtb
index fd3b0e7..d687c84 100644
--- a/chromeos/strings/chromeos_strings_ca.xtb
+++ b/chromeos/strings/chromeos_strings_ca.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Servei del mètode d'introducció de text a Chrome OS</translation>
 <translation id="1947737735496445907">Imprès</translation>
 <translation id="1979103255016296513">Canvi de contrasenya vençut</translation>
+<translation id="1980044825731880088">Velocitat de la CPU</translation>
 <translation id="2049639323467105390">Aquest dispositiu està gestionat per <ph name="DOMAIN" /></translation>
 <translation id="2080070583977670716">Més opcions de configuració</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" />%</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Comprovació superada</translation>
 <translation id="2375079107209812402">Intents restants: <ph name="ATTEMPTS_LEFT" /></translation>
 <translation id="2391082728065870591">Envia un informe de suggeriments</translation>
+<translation id="2461822463642141190">Actual</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Queda {0} intent.}other{<ph name="ERROR_MESSAGE" /> Queden {0} intents.}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> (<ph name="SOURCE_LANGUAGE_NAME" />)</translation>
 <translation id="2517472476991765520">Escaneja</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Apaga</translation>
 <translation id="3008341117444806826">ACTUALITZA</translation>
 <translation id="3009958530611748826">Selecciona en quina carpeta vols que es desi</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Diagnòstic de connectivitat</translation>
 <translation id="3091839911843451378">Error: s'ha aturat</translation>
 <translation id="3188257591659621405">Els meus fitxers</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">S'ha aturat: no hi ha paper</translation>
 <translation id="4932733599132424254">Data</translation>
 <translation id="4985509611418653372">Executa</translation>
+<translation id="5168185087976003268">Estat de la bateria</translation>
 <translation id="520299634122159966">No hi ha cap escàner disponible</translation>
 <translation id="5212543919916444558">No he trobat res a la pantalla amb què et pugui ajudar.
 Toca el micròfon per demanar-me qualsevol cosa.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Navega com a convidat</translation>
 <translation id="54609108002486618">Gestionat</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Més informació al Centre d'ajuda</translation>
 <translation id="5832805196449965646">Afegeix una persona</translation>
 <translation id="5895138241574237353">Reinicia</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versió <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Tanca</translation>
 <translation id="6048107060512778456">Error: embús de paper</translation>
 <translation id="6050189528197190982">Escala de grisos</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">La xarxa predeterminada supera el llindar de latència</translation>
 <translation id="8919837981463578619">Error: no es troba la safata</translation>
 <translation id="8928727111548978589">Error: no hi ha paper</translation>
+<translation id="9088306295921699330">Ús actual</translation>
 <translation id="910415269708673980">Actualitza el tiquet de: <ph name="PRINCIPAL_NAME" /></translation>
 <translation id="9106415115617144481">S'està cercant la pàgina <ph name="PAGE_NUMBER" /></translation>
 <translation id="9111102763498581341">Desbloqueja</translation>
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb
index 430af17..8b59348a 100644
--- a/chromeos/strings/chromeos_strings_da.xtb
+++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Indtastningsmetodetjeneste for Chrome OS</translation>
 <translation id="1947737735496445907">Udskrevet</translation>
 <translation id="1979103255016296513">Adgangskoden mangler at blive ændret</translation>
+<translation id="1980044825731880088">CPU-hastighed</translation>
 <translation id="2049639323467105390">Denne enhed administreres af <ph name="DOMAIN" />.</translation>
 <translation id="2080070583977670716">Flere indstillinger</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" /> %</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Bestået</translation>
 <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> forsøg tilbage</translation>
 <translation id="2391082728065870591">Send feedbackrapport</translation>
+<translation id="2461822463642141190">Aktuel</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} forsøg tilbage}one{<ph name="ERROR_MESSAGE" /> {0} forsøg tilbage}other{<ph name="ERROR_MESSAGE" /> {0} forsøg tilbage}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Scan</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Sluk</translation>
 <translation id="3008341117444806826">OPDATER</translation>
 <translation id="3009958530611748826">Vælg en mappe, du vil gemme i</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Diagnosticering af forbindelse</translation>
 <translation id="3091839911843451378">Handlingen mislykkedes – Stoppede</translation>
 <translation id="3188257591659621405">Mine filer</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Stoppet – Papirbakken er tom</translation>
 <translation id="4932733599132424254">Dato</translation>
 <translation id="4985509611418653372">Kør</translation>
+<translation id="5168185087976003268">Batteriets tilstand</translation>
 <translation id="520299634122159966">Der er ingen tilgængelige scannere</translation>
 <translation id="5212543919916444558">Jeg kan ikke finde noget på skærmen, jeg kan hjælpe med. Prøv at trykke på mikrofonen for at spørge mig om noget.</translation>
 <translation id="5222676887888702881">Log ud</translation>
@@ -113,8 +117,10 @@
 <translation id="5457599981699367932">Anvend som gæst</translation>
 <translation id="54609108002486618">Administreret</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Få flere oplysninger i Hjælp</translation>
 <translation id="5832805196449965646">Tilføj person</translation>
 <translation id="5895138241574237353">Genstart</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, version <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Luk</translation>
 <translation id="6048107060512778456">Handlingen mislykkedes – Papirstop</translation>
 <translation id="6050189528197190982">Gråtone</translation>
@@ -178,6 +184,7 @@
 <translation id="8910721771319628100">Standardnetværket overstiger grænsen for forsinkelse</translation>
 <translation id="8919837981463578619">Handlingen mislykkedes – Bakke mangler</translation>
 <translation id="8928727111548978589">Handlingen mislykkedes – Papirbakken er tom</translation>
+<translation id="9088306295921699330">Aktuelt forbrug</translation>
 <translation id="910415269708673980">Gendan billetten for <ph name="PRINCIPAL_NAME" /></translation>
 <translation id="9106415115617144481">Scanner side <ph name="PAGE_NUMBER" /></translation>
 <translation id="9111102763498581341">Lås op</translation>
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb
index b8360fe7..08ee3466 100644
--- a/chromeos/strings/chromeos_strings_es-419.xtb
+++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -14,9 +14,12 @@
 <translation id="1398634363027580500">Latencia de HTTPS muy alta</translation>
 <translation id="1413240736185167732">Error: Problema en el filtro</translation>
 <translation id="1468664791493211953">Ofertas</translation>
+<translation id="1476467821656042872"><ph name="MANAGER" /> administra este dispositivo y es posible que pueda supervisar tu actividad.</translation>
 <translation id="1478594628797167447">Escáner</translation>
+<translation id="1499900233129743732"><ph name="MANAGER" /> administra a este usuario y es posible que administre la configuración y supervise la actividad del usuario de forma remota.</translation>
 <translation id="150962533380566081">PUK no válida.</translation>
 <translation id="1510238584712386396">Selector</translation>
+<translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> conversaciones)</translation>
 <translation id="1641857168437328880">Alimentador de documentos (una cara)</translation>
 <translation id="1644574205037202324">Historial</translation>
 <translation id="1662989795263954667">Se detuvo: sin tinta</translation>
@@ -80,6 +83,7 @@
 <translation id="4454245904991689773">Destino del escaneo</translation>
 <translation id="4483049906298469269">no se pudo hacer ping en la puerta de enlace de la red no predeterminada</translation>
 <translation id="4548483925627140043">no se encontró la señal</translation>
+<translation id="455835558791489930">Batería de <ph name="CHARGE_VALUE" /> mAh</translation>
 <translation id="458794348635939462">no se pudieron resolver todos los hosts</translation>
 <translation id="4627232916386272576"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="PRINTED_PAGE_NUMBER" /> de un total de <ph name="TOTAL_PAGE_NUMBER" />. Presiona Intro para cancelar el trabajo de impresión.</translation>
 <translation id="4646949265910132906">Conexión Wi-Fi segura</translation>
@@ -138,8 +142,10 @@
 <translation id="6766275201586212568">Resoluciones DNS con error</translation>
 <translation id="6768237774506518020">Tasa alta de errores para la resolución de DNS</translation>
 <translation id="6839141349259399400">¿No puedes establecer conexión con los escáneres?</translation>
+<translation id="7028979494427204405"><ph name="MANAGER" /> administra este dispositivo y tiene acceso a toda la actividad del usuario, incluso las páginas web que visitó, su correo electrónico y sus contraseñas.</translation>
 <translation id="714876143603641390">Conectividad LAN</translation>
 <translation id="7162487448488904999">Galería</translation>
+<translation id="7177485034254901881"><ph name="MANAGER" /> administra el dispositivo <ph name="DEVICE_TYPE" />. Los administradores pueden configurarlo de forma remota.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7359657277149375382">Tipo de archivo</translation>
 <translation id="7561454561030345039">El administrador controla esta acción</translation>
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb
index dda6838f..910051a9 100644
--- a/chromeos/strings/chromeos_strings_es.xtb
+++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -14,9 +14,12 @@
 <translation id="1398634363027580500">Latencia de HTTPS muy alta</translation>
 <translation id="1413240736185167732">No se ha podido imprimir - Error de filtro</translation>
 <translation id="1468664791493211953">Ofertas</translation>
+<translation id="1476467821656042872"><ph name="MANAGER" /> gestiona este dispositivo, y es posible que monitorice tu actividad.</translation>
 <translation id="1478594628797167447">Escáner</translation>
+<translation id="1499900233129743732"><ph name="MANAGER" /> gestiona a este usuario, y es posible que gestione sus ajustes y supervise su actividad de forma remota.</translation>
 <translation id="150962533380566081">El PUK no es válido.</translation>
 <translation id="1510238584712386396">Menú de aplicaciones</translation>
+<translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> hilos)</translation>
 <translation id="1641857168437328880">Alimentador de documentos (una cara)</translation>
 <translation id="1644574205037202324">Historial</translation>
 <translation id="1662989795263954667">Detenido: sin tinta</translation>
@@ -80,6 +83,7 @@
 <translation id="4454245904991689773">Guardar en</translation>
 <translation id="4483049906298469269">Se ha producido un error al hacer ping en la puerta de enlace de red no predeterminada</translation>
 <translation id="4548483925627140043">Señal no encontrada</translation>
+<translation id="455835558791489930">Batería de <ph name="CHARGE_VALUE" /> mAh</translation>
 <translation id="458794348635939462">No se han podido resolver todos los hosts</translation>
 <translation id="4627232916386272576"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="PRINTED_PAGE_NUMBER" /> de <ph name="TOTAL_PAGE_NUMBER" />. Pulsa Intro para cancelar el trabajo de impresión.</translation>
 <translation id="4646949265910132906">Conexión Wi‑Fi segura</translation>
@@ -137,8 +141,10 @@
 <translation id="6766275201586212568">Errores de resoluciones de DNS</translation>
 <translation id="6768237774506518020">Tasa de errores de resolución de DNS alta</translation>
 <translation id="6839141349259399400">¿No se puede establecer conexión con ningún escáner?</translation>
+<translation id="7028979494427204405"><ph name="MANAGER" /> gestiona este dispositivo y tiene acceso a toda la actividad del usuario, incluidas las páginas web visitadas, sus contraseñas y su correo electrónico.</translation>
 <translation id="714876143603641390">Conectividad LAN</translation>
 <translation id="7162487448488904999">Galería</translation>
+<translation id="7177485034254901881"><ph name="MANAGER" /> gestiona este <ph name="DEVICE_TYPE" />. Los administradores pueden configurar el dispositivo de forma remota.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7359657277149375382">Tipo de archivo</translation>
 <translation id="7561454561030345039">Esta acción la gestiona tu administrador</translation>
diff --git a/chromeos/strings/chromeos_strings_et.xtb b/chromeos/strings/chromeos_strings_et.xtb
index 552ee33..537dbb6 100644
--- a/chromeos/strings/chromeos_strings_et.xtb
+++ b/chromeos/strings/chromeos_strings_et.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Chrome OS sisestusmeetodi teenus</translation>
 <translation id="1947737735496445907">Prinditud</translation>
 <translation id="1979103255016296513">Parooli muutmise tähtaeg on möödunud</translation>
+<translation id="1980044825731880088">Protsessori kiirus</translation>
 <translation id="2049639323467105390">Seadet haldab <ph name="DOMAIN" />.</translation>
 <translation id="2080070583977670716">Rohkem seadeid</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" />%</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Läbitud</translation>
 <translation id="2375079107209812402">Jäänud on <ph name="ATTEMPTS_LEFT" /> katset</translation>
 <translation id="2391082728065870591">Saada tagasisidearuanne</translation>
+<translation id="2461822463642141190">Praegune</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} katse jäänud}other{<ph name="ERROR_MESSAGE" />, {0} katset jäänud}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Kontrolli</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Lülita välja</translation>
 <translation id="3008341117444806826">VÄRSKENDA</translation>
 <translation id="3009958530611748826">Valige kaust, kuhu salvestada</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Ühenduvuse diagnostika</translation>
 <translation id="3091839911843451378">Ebaõnnestus – peatatud</translation>
 <translation id="3188257591659621405">Minu failid</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Peatatud – paber on otsas</translation>
 <translation id="4932733599132424254">Kuupäev</translation>
 <translation id="4985509611418653372">Käitati</translation>
+<translation id="5168185087976003268">Aku seisukord</translation>
 <translation id="520299634122159966">Ühtegi skannerit pole saadaval</translation>
 <translation id="5212543919916444558">Ma ei leia teie ekraanilt midagi, mille puhul saaksin aidata.
 Kui soovite mulle küsimuse esitada, puudutage mikrofoni.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Sirvi külalisena</translation>
 <translation id="54609108002486618">Hallatud</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Vaadake lisateavet Abikeskusest</translation>
 <translation id="5832805196449965646">Lisa inimene</translation>
 <translation id="5895138241574237353">Taaskäivitamine</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versioon <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Sulge</translation>
 <translation id="6048107060512778456">Ebaõnnestus – paberiummistus</translation>
 <translation id="6050189528197190982">Hallskaala</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Vaikevõrk ületab latentsusaja piiri</translation>
 <translation id="8919837981463578619">Ebaõnnestus – salv puudub</translation>
 <translation id="8928727111548978589">Ebaõnnestus – paber on otsas</translation>
+<translation id="9088306295921699330">Praegune kasutus</translation>
 <translation id="910415269708673980">Kasutaja <ph name="PRINCIPAL_NAME" /> pileti värskendamine</translation>
 <translation id="9106415115617144481">Lehe <ph name="PAGE_NUMBER" /> skannimine</translation>
 <translation id="9111102763498581341">Ava lukk</translation>
diff --git a/chromeos/strings/chromeos_strings_eu.xtb b/chromeos/strings/chromeos_strings_eu.xtb
index b157bf39..6752e43 100644
--- a/chromeos/strings/chromeos_strings_eu.xtb
+++ b/chromeos/strings/chromeos_strings_eu.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Chrome OS sistemako idazketa-metodoaren zerbitzua</translation>
 <translation id="1947737735496445907">Inprimatuta</translation>
 <translation id="1979103255016296513">Pasahitza iraungita dago eta aldatu egin behar da</translation>
+<translation id="1980044825731880088">PUZaren abiadura</translation>
 <translation id="2049639323467105390"><ph name="DOMAIN" /> domeinuak kudeatzen du gailu hau.</translation>
 <translation id="2080070583977670716">Ezarpen gehiago</translation>
 <translation id="2141644705054017895">% <ph name="PERCENTAGE_VALUE" /></translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Gaindituta</translation>
 <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> saiakera gelditzen dira</translation>
 <translation id="2391082728065870591">Bidali zerbitzuari buruzko iritzien txostena</translation>
+<translation id="2461822463642141190">Uneko kontsumoa</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} saiaketa gelditzen da}other{<ph name="ERROR_MESSAGE" /> {0} saiakera gelditzen dira}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Bilatu</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Itzali</translation>
 <translation id="3008341117444806826">FRESKATU</translation>
 <translation id="3009958530611748826">Hautatu zer karpetatan gorde nahi duzun</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Konexio-diagnostikoak</translation>
 <translation id="3091839911843451378">Hutsegitea - Gelditu egin da</translation>
 <translation id="3188257591659621405">Nire fitxategiak</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Geldituta: ez dago paperik</translation>
 <translation id="4932733599132424254">Data</translation>
 <translation id="4985509611418653372">Exekutatu</translation>
+<translation id="5168185087976003268">Bateriaren egoera</translation>
 <translation id="520299634122159966">Ez dago eskanerrik erabilgarri</translation>
 <translation id="5212543919916444558">Ezin dizut lagundu pantailako ezerekin.
 Sakatu mikrofonoa zerbait galdetu nahi badidazu.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Arakatu gonbidatu gisa</translation>
 <translation id="54609108002486618">Kudeatua</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Informazio gehiago lortzeko, joan Laguntza-zentroa atalera</translation>
 <translation id="5832805196449965646">Gehitu pertsona bat</translation>
 <translation id="5895138241574237353">Berrabiarazi</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, <ph name="MILESTONE_VERSION" />. bertsioa)</translation>
 <translation id="6040143037577758943">Itxi</translation>
 <translation id="6048107060512778456">Hutsegitea - Papera trabatuta dago</translation>
 <translation id="6050189528197190982">Gris-eskala</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Sare lehenetsia itxarote-denboraren atalasetik gora dago</translation>
 <translation id="8919837981463578619">Hutsegitea - Erretilua falta da</translation>
 <translation id="8928727111548978589">Hutsegitea - Ez dago paperik</translation>
+<translation id="9088306295921699330">Uneko erabilera</translation>
 <translation id="910415269708673980">Freskatu <ph name="PRINCIPAL_NAME" /> erabiltzailearen zerbitzu-eskaera</translation>
 <translation id="9106415115617144481"><ph name="PAGE_NUMBER" />. orria eskaneatzen</translation>
 <translation id="9111102763498581341">Desblokeatu</translation>
diff --git a/chromeos/strings/chromeos_strings_fi.xtb b/chromeos/strings/chromeos_strings_fi.xtb
index 39147ba..914bb83e 100644
--- a/chromeos/strings/chromeos_strings_fi.xtb
+++ b/chromeos/strings/chromeos_strings_fi.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Chrome-käyttöjärjestelmän syöttöpalvelu</translation>
 <translation id="1947737735496445907">Tulostettu</translation>
 <translation id="1979103255016296513">Salasanan vaihto myöhässä</translation>
+<translation id="1980044825731880088">Suorittimen nopeus</translation>
 <translation id="2049639323467105390">Tätä laitetta hallinnoi <ph name="DOMAIN" />.</translation>
 <translation id="2080070583977670716">Lisää asetuksia</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" /> %</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Onnistui</translation>
 <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> yritystä jäljellä</translation>
 <translation id="2391082728065870591">Lähetä palauteraportti</translation>
+<translation id="2461822463642141190">Nykyinen</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} yritys jäljellä}other{<ph name="ERROR_MESSAGE" /> {0} yritystä jäljellä}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Etsi</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Sammuta</translation>
 <translation id="3008341117444806826">PÄIVITÄ</translation>
 <translation id="3009958530611748826">Valitse tallennuskansio</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Yhteysdiagnostiikka</translation>
 <translation id="3091839911843451378">Epäonnistui – Pysäytetty</translation>
 <translation id="3188257591659621405">Omat tiedostot</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Pysähtynyt – Paperi loppu</translation>
 <translation id="4932733599132424254">Päiväys</translation>
 <translation id="4985509611418653372">Suorita</translation>
+<translation id="5168185087976003268">Akun toiminta</translation>
 <translation id="520299634122159966">Skannereita ei saatavilla</translation>
 <translation id="5212543919916444558">En löydä näytöltä mitään, minkä kanssa voisin auttaa sinua.
 Napauta mikrofonia, niin voit kysyä mitä haluat.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Selaa vierailijana</translation>
 <translation id="54609108002486618">Ylläpidetty</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Katso lisätietoja ohjekeskuksesta</translation>
 <translation id="5832805196449965646">Lisää henkilö</translation>
 <translation id="5895138241574237353">Käynnistä uudelleen</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versio <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Sulje</translation>
 <translation id="6048107060512778456">Epäonnistui – Paperitukos</translation>
 <translation id="6050189528197190982">Harmaasävy</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Oletusverkko yli viiverajan</translation>
 <translation id="8919837981463578619">Epäonnistui – Lokero puuttuu</translation>
 <translation id="8928727111548978589">Epäonnistui – Paperi loppu</translation>
+<translation id="9088306295921699330">Nykyinen käyttö</translation>
 <translation id="910415269708673980">Päivitä tukipyyntö: <ph name="PRINCIPAL_NAME" /></translation>
 <translation id="9106415115617144481">Skannataan sivu <ph name="PAGE_NUMBER" /></translation>
 <translation id="9111102763498581341">Poista lukitus</translation>
diff --git a/chromeos/strings/chromeos_strings_hi.xtb b/chromeos/strings/chromeos_strings_hi.xtb
index 143ed08..fcbd795 100644
--- a/chromeos/strings/chromeos_strings_hi.xtb
+++ b/chromeos/strings/chromeos_strings_hi.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Chrome OS के इनपुट के तरीके की सेवा</translation>
 <translation id="1947737735496445907">प्रिंट किया गया</translation>
 <translation id="1979103255016296513">पासवर्ड बदलने का समय निकल चुका है</translation>
+<translation id="1980044825731880088">सीपीयू की रफ़्तार</translation>
 <translation id="2049639323467105390">यह डिवाइस <ph name="DOMAIN" /> द्वारा प्रबंधित है.</translation>
 <translation id="2080070583977670716">ज़्यादा सेटिंग</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" />%</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">जांच में पास</translation>
 <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> बार और कोशिश कर सकते हैं</translation>
 <translation id="2391082728065870591">सुझाव, शिकायत या राय की रिपोर्ट भेजें</translation>
+<translation id="2461822463642141190">मौजूदा</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> आप {0} बार और कोशिश कर सकते हैं}one{<ph name="ERROR_MESSAGE" /> आप {0} बार और कोशिश कर सकते हैं}other{<ph name="ERROR_MESSAGE" /> आप {0} बार और कोशिश कर सकते हैं}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">स्कैन करें</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">शट डाउन करें</translation>
 <translation id="3008341117444806826">रीफ़्रेश करें</translation>
 <translation id="3009958530611748826">सेव करने के लिए कोई फ़ोल्डर चुनें</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
 <translation id="3083667275341675831">कनेक्टिविटी डाइग्नोस्टिक्स</translation>
 <translation id="3091839911843451378">प्रिंट नहीं हो पाया - प्रिंटर बंद हो गया</translation>
 <translation id="3188257591659621405">मेरी फ़ाइलें</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">बंद हो गया - काग़ज़ खत्म हो गया</translation>
 <translation id="4932733599132424254">तारीख</translation>
 <translation id="4985509611418653372">चलाएं</translation>
+<translation id="5168185087976003268">बैटरी की स्थिति</translation>
 <translation id="520299634122159966">कोई भी स्कैनर उपलब्ध नहीं है</translation>
 <translation id="5212543919916444558">मुझे आपकी स्क्रीन पर ऐसा कुछ नहीं मिला जिसमें मैं आपकी सहायता कर पाऊं.
 मुझे कुछ पूछने के लिए माइक टैप करके देखें.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">मेहमान के रूप में ब्राउज़ करें</translation>
 <translation id="54609108002486618">प्रबंधित</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">सहायता केंद्र में ज़्यादा जानें</translation>
 <translation id="5832805196449965646">व्‍यक्ति जोड़ें</translation>
 <translation id="5895138241574237353">फिर से प्रारंभ करें</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, <ph name="MILESTONE_VERSION" /> वर्शन)</translation>
 <translation id="6040143037577758943">बंद करें</translation>
 <translation id="6048107060512778456">प्रिंट नहीं हो पाया - काग़ज़ फ़ंसा है</translation>
 <translation id="6050189528197190982">ग्रेस्‍केल</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">डिफ़ॉल्ट नेटवर्क, इंतज़ार की समयसीमा से ऊपर है</translation>
 <translation id="8919837981463578619">प्रिंट नहीं हो पाया - ट्रे मौजूद नहीं है</translation>
 <translation id="8928727111548978589">प्रिंट नहीं हो पाया - काग़ज़ खत्म हो गया</translation>
+<translation id="9088306295921699330">मौजूदा इस्तेमाल</translation>
 <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> के लिए टिकट रीफ़्रेश करें</translation>
 <translation id="9106415115617144481">पेज <ph name="PAGE_NUMBER" /> को स्कैन किया जा रहा है</translation>
 <translation id="9111102763498581341">अनलॉक करें</translation>
diff --git a/chromeos/strings/chromeos_strings_hr.xtb b/chromeos/strings/chromeos_strings_hr.xtb
index dd425f1..3fd53f02 100644
--- a/chromeos/strings/chromeos_strings_hr.xtb
+++ b/chromeos/strings/chromeos_strings_hr.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Usluga načina unosa OS-a Chrome</translation>
 <translation id="1947737735496445907">Ispisano</translation>
 <translation id="1979103255016296513">Zakašnjela promjena zaporke</translation>
+<translation id="1980044825731880088">Brzina procesora</translation>
 <translation id="2049639323467105390">Ovim uređajem upravlja <ph name="DOMAIN" />.</translation>
 <translation id="2080070583977670716">Više postavki</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" />%</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Uspješno</translation>
 <translation id="2375079107209812402">Preostalo pokušaja: <ph name="ATTEMPTS_LEFT" /></translation>
 <translation id="2391082728065870591">Slanje izvješća s povratnim informacijama</translation>
+<translation id="2461822463642141190">Trenutačno</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Preostalo pokušaja: {0}}one{<ph name="ERROR_MESSAGE" /> Preostalo pokušaja: {0}}few{<ph name="ERROR_MESSAGE" /> Preostalo pokušaja: {0}}other{<ph name="ERROR_MESSAGE" /> Preostalo pokušaja: {0}}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Traži</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Isključi</translation>
 <translation id="3008341117444806826">OSVJEŽI</translation>
 <translation id="3009958530611748826">Odaberite mapu za spremanje</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Dijagnostika veze</translation>
 <translation id="3091839911843451378">Nije uspjelo – zaustavljeno</translation>
 <translation id="3188257591659621405">Moje datoteke</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Zaustavljeno – nema papira</translation>
 <translation id="4932733599132424254">Datum</translation>
 <translation id="4985509611418653372">Pokreni</translation>
+<translation id="5168185087976003268">Zdravlje baterije</translation>
 <translation id="520299634122159966">Nije dostupan nijedan skener</translation>
 <translation id="5212543919916444558">Na zaslonu ne mogu pronaći ništa u vezi s čime mogu pružiti pomoć.
 Dodirnite mikrofon da biste mi dali glasovnu naredbu.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Pregledavaj kao gost</translation>
 <translation id="54609108002486618">Upravljani</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Saznajte više u centru za pomoć.</translation>
 <translation id="5832805196449965646">Dodaj osobu</translation>
 <translation id="5895138241574237353">Ponovno pokreni</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, verzija <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Zatvori</translation>
 <translation id="6048107060512778456">Nije uspjelo – zaglavljeni papir</translation>
 <translation id="6050189528197190982">Sivi tonovi</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Zadana mreža iznad praga latencije</translation>
 <translation id="8919837981463578619">Nije uspjelo – nema ladice</translation>
 <translation id="8928727111548978589">Nije uspjelo – nema papira</translation>
+<translation id="9088306295921699330">Trenutačna upotreba</translation>
 <translation id="910415269708673980">Osvježite tiket za <ph name="PRINCIPAL_NAME" /></translation>
 <translation id="9106415115617144481">Skeniranje stranice <ph name="PAGE_NUMBER" /></translation>
 <translation id="9111102763498581341">Otključaj</translation>
diff --git a/chromeos/strings/chromeos_strings_lo.xtb b/chromeos/strings/chromeos_strings_lo.xtb
index 3d269b4..2187f96 100644
--- a/chromeos/strings/chromeos_strings_lo.xtb
+++ b/chromeos/strings/chromeos_strings_lo.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">ການບໍລິການວິທີການປ້ອນຂໍ້ມູນຂອງ Chrome OS</translation>
 <translation id="1947737735496445907">ພິມແລ້ວ</translation>
 <translation id="1979103255016296513">ກາຍກຳນົດປ່ຽນລະຫັດຜ່ານແລ້ວ</translation>
+<translation id="1980044825731880088">ຄວາມໄວ CPU</translation>
 <translation id="2049639323467105390">ອຸປະກອນນີ້ຖືກຈັດການໂດຍ <ph name="DOMAIN" /></translation>
 <translation id="2080070583977670716">ການຕັ້ງຄ່າເພີ່ມເຕີມ</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" />%</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">ຜ່ານແລ້ວ</translation>
 <translation id="2375079107209812402">ຍັງລອງໄດ້ອີກ <ph name="ATTEMPTS_LEFT" /> ຄັ້ງ</translation>
 <translation id="2391082728065870591">ສົ່ງລາຍງານຄຳຕິຊົມ</translation>
+<translation id="2461822463642141190">ປັດຈຸບັນ</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{ຍັງເຫຼືອຄວາມພະຍາຍາມອີກ <ph name="ERROR_MESSAGE" /> {0} ຄັ້ງ}other{ຍັງເຫຼືອຄວາມພະຍາຍາມອີກ <ph name="ERROR_MESSAGE" /> {0} ຄັ້ງ}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">ສະແກນ</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">ມອດ</translation>
 <translation id="3008341117444806826">ໂຫຼດຂໍ້ມູນໃໝ່</translation>
 <translation id="3009958530611748826">ເລືອກໂຟນເດີທີ່ຈະບັນທຶກໄວ້ໃນ</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
 <translation id="3083667275341675831">ການວິນິໄສການເຊື່ອມຕໍ່</translation>
 <translation id="3091839911843451378">ບໍ່ສຳເລັດ, ຢຸດແລ້ວ</translation>
 <translation id="3188257591659621405">ໄຟລ໌ຂອງຂ້ອຍ</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">ຢຸດພິມ, ເຈ້ຍໝົດ</translation>
 <translation id="4932733599132424254">ວັນ​ທີ</translation>
 <translation id="4985509611418653372">ເອີ້ນໃຊ້</translation>
+<translation id="5168185087976003268">ສະຖານະແບັດເຕີຣີ</translation>
 <translation id="520299634122159966">ບໍ່ມີເຄື່ອງສະແກນພ້ອມນຳໃຊ້</translation>
 <translation id="5212543919916444558">ຂ້ອຍບໍ່ສາມາດຊອກເຫັນອັນໃດຢູ່ໃນໜ້າຈໍຂອງທ່ານທີ່ຂ້ອຍສາມາດຊ່ວຍໄດ້.
 ລອງແຕະໄມເພື່ອຖາມຂ້ອຍອັນໃດກໍໄດ້.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">ທ່ອງເນັດເປັນແຂກ</translation>
 <translation id="54609108002486618">ຖືກຈັດການ</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">ສຶກສາເພີ່ມເຕີມໃນສູນຊ່ວຍເຫຼືອ</translation>
 <translation id="5832805196449965646">ເພີ່ມບຸກຄົນ</translation>
 <translation id="5895138241574237353">ເລີ່ມຕົ້ນໃໝ່</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, ເວີຊັນ <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">ປິດ</translation>
 <translation id="6048107060512778456">ບໍ່ສຳເລັດ, ເຈ້ຍຕິດ</translation>
 <translation id="6050189528197190982">ໂທນສີເທົາ</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">ເຄືອຂ່າຍເລີ່ມຕົ້ນສູງກວ່າເກນເວລາໃນການຕອບສະໜອງ</translation>
 <translation id="8919837981463578619">ບໍ່ສຳເລັດ, ຖາດໃສ່ເຈ້ຍຫາຍໄປ</translation>
 <translation id="8928727111548978589">ບໍ່ສຳເລັດ, ເຈ້ຍໝົດ</translation>
+<translation id="9088306295921699330">ການນຳໃຊ້ໃນປັດຈຸບັນ</translation>
 <translation id="910415269708673980">ໂຫຼດຂໍ້ມູນປີ້ສຳລັບ <ph name="PRINCIPAL_NAME" /> ໃໝ່</translation>
 <translation id="9106415115617144481">ກຳລັງສະແກນໜ້າ <ph name="PAGE_NUMBER" /></translation>
 <translation id="9111102763498581341">ປົດລັອກ</translation>
diff --git a/chromeos/strings/chromeos_strings_lt.xtb b/chromeos/strings/chromeos_strings_lt.xtb
index 6c54ab2..9257cb95 100644
--- a/chromeos/strings/chromeos_strings_lt.xtb
+++ b/chromeos/strings/chromeos_strings_lt.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">„Chrome“ OS įvesties metodo paslauga</translation>
 <translation id="1947737735496445907">Atspausdinta</translation>
 <translation id="1979103255016296513">Vėluojama pakeisti slaptažodį</translation>
+<translation id="1980044825731880088">Centrinio procesoriaus sparta</translation>
 <translation id="2049639323467105390">Įrenginys valdomas „<ph name="DOMAIN" />“.</translation>
 <translation id="2080070583977670716">Daugiau nustatymų</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" /> proc.</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Pavyko</translation>
 <translation id="2375079107209812402">Liko bandymų: <ph name="ATTEMPTS_LEFT" /></translation>
 <translation id="2391082728065870591">Siųsti atsiliepimo ataskaitą</translation>
+<translation id="2461822463642141190">Dabartinė</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Liko {0} bandymas}one{<ph name="ERROR_MESSAGE" /> Liko {0} bandymas}few{<ph name="ERROR_MESSAGE" /> Liko {0} bandymai}many{<ph name="ERROR_MESSAGE" /> Liko {0} bandymo}other{<ph name="ERROR_MESSAGE" /> Liko {0} bandymų}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Nuskaityti</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Stabdyti</translation>
 <translation id="3008341117444806826">ATNAUJINTI</translation>
 <translation id="3009958530611748826">Pasirinkite aplanką, kuriame pageidaujate išsaugoti</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Ryšio diagnostika</translation>
 <translation id="3091839911843451378">Nepavyko – sustabdyta</translation>
 <translation id="3188257591659621405">Mano failai</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Sustabdyta – baigėsi popierius</translation>
 <translation id="4932733599132424254">Data</translation>
 <translation id="4985509611418653372">Vykdyti</translation>
+<translation id="5168185087976003268">Akumuliatoriaus būsena</translation>
 <translation id="520299634122159966">Nėra pasiekiamų skaitytuvų</translation>
 <translation id="5212543919916444558">Ekrane nieko nerasta, dėl ko galėtume jums padėti.
 Palieskite mikrofoną, kad užduotumėte reikiamus klausimus.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Naršyti kaip svečiui</translation>
 <translation id="54609108002486618">Valdoma</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Sužinokite daugiau pagalbos centre</translation>
 <translation id="5832805196449965646">Pridėti asmenį</translation>
 <translation id="5895138241574237353">Paleisti iš naujo</translation>
+<translation id="5982592372228113572">(„<ph name="BOARD_NAME" />“, <ph name="MILESTONE_VERSION" /> versija)</translation>
 <translation id="6040143037577758943">Uždaryti</translation>
 <translation id="6048107060512778456">Nepavyko – įstrigęs popierius</translation>
 <translation id="6050189528197190982">Pilkumo tonas</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Numatytojo tinklo delsa viršija slenksčio vertę</translation>
 <translation id="8919837981463578619">Nepavyko – nėra dėklo</translation>
 <translation id="8928727111548978589">Nepavyko – baigėsi popierius</translation>
+<translation id="9088306295921699330">Dabartinis naudojimas</translation>
 <translation id="910415269708673980">Atnaujinkite <ph name="PRINCIPAL_NAME" /> bilietą</translation>
 <translation id="9106415115617144481">Nuskaitomas <ph name="PAGE_NUMBER" /> psl.</translation>
 <translation id="9111102763498581341">Atrakinti</translation>
diff --git a/chromeos/strings/chromeos_strings_my.xtb b/chromeos/strings/chromeos_strings_my.xtb
index b91a584..267370f 100644
--- a/chromeos/strings/chromeos_strings_my.xtb
+++ b/chromeos/strings/chromeos_strings_my.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Chrome OS လက်ကွက်ဝန်ဆောင်မှု</translation>
 <translation id="1947737735496445907">ပုံနှိပ်ထုတ်ပြီးပြီ</translation>
 <translation id="1979103255016296513">စကားဝှက်ပြောင်းလဲမှု သက်တမ်းကုန်သွားပါပြီ</translation>
+<translation id="1980044825731880088">CPU မြန်နှုန်း</translation>
 <translation id="2049639323467105390">ဤစက်ပစ္စည်းကို <ph name="DOMAIN" /> မှစီမံသည်။</translation>
 <translation id="2080070583977670716">ဆက်တင်များ ပိုမိုပြရန်</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" />%</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">အောင်မြင်သည်</translation>
 <translation id="2375079107209812402">လုပ်ဆောင်ခွင့် <ph name="ATTEMPTS_LEFT" /> ကြိမ် ကျန်သည်</translation>
 <translation id="2391082728065870591">တုံ့ပြန်ချက် အစီရင်ခံစာ ပို့ရန်</translation>
+<translation id="2461822463642141190">လက်ရှိ</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} ကြိမ် ကြိုးပမ်းနိုင်သည်}other{<ph name="ERROR_MESSAGE" /> {0} ကြိမ် ကြိုးပမ်းနိုင်သည်}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">ရှာဖွေရန်</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">ပိတ်ရန်</translation>
 <translation id="3008341117444806826">ပြန်လည်စတင်ရန်</translation>
 <translation id="3009958530611748826">သိမ်းရန် ဖိုင်တွဲကို ရွေးပါ</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
 <translation id="3083667275341675831">ချိတ်ဆက်နိုင်မှုဆိုင်ရာ အမှားရှာဖွေမှုများ</translation>
 <translation id="3091839911843451378">မအောင်မြင်ပါ - ရပ်သွားသည်</translation>
 <translation id="3188257591659621405">ကျွန်ုပ်၏ဖိုင်များ</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">ရပ်သွားသည် - စာရွက်ကုန်နေသည်</translation>
 <translation id="4932733599132424254">ရက်စွဲ</translation>
 <translation id="4985509611418653372">စဖွင့်ရန်</translation>
+<translation id="5168185087976003268">ဘက်ထရီအခြေအနေ</translation>
 <translation id="520299634122159966">စကင်ဖတ်စနစ်များ မရနိုင်ပါ</translation>
 <translation id="5212543919916444558">သင့်မျက်နှာပြင်တွင် ကျွန်ုပ်ကူညီနိုင်သည့် အကြောင်းအရာများကို မတွေ့ပါ။ မိုက်ကို တို့ပြီး နှစ်သက်ရာ မေးနိုင်ပါသည်။</translation>
 <translation id="5222676887888702881">ထွက်ခွာရန်</translation>
@@ -113,8 +117,10 @@
 <translation id="5457599981699367932">ဧည့်သည့် အဖြစ် ရှာကြည့်ရန်</translation>
 <translation id="54609108002486618">ကြီးကြပ်ထားသည်</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />− <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">'ကူညီရေးဌာန' တွင် ပိုမိုလေ့လာရန်</translation>
 <translation id="5832805196449965646">လူကို ထည့်ပေးရန်</translation>
 <translation id="5895138241574237353">ပြန်စတင်မည</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />၊ ဗားရှင်း <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">ပိတ်ရန်</translation>
 <translation id="6048107060512778456">မအောင်မြင်ပါ - စာရွက်ညပ်နေသည်</translation>
 <translation id="6050189528197190982">ဖြူမဲစကေး</translation>
@@ -178,6 +184,7 @@
 <translation id="8910721771319628100">တုံ့ပြန်ချိန် သတ်မှတ်ကာလအထက်ရှိနေသော မူလကွန်ရက်</translation>
 <translation id="8919837981463578619">မအောင်မြင်ပါ - ဗန်းမရှိပါ</translation>
 <translation id="8928727111548978589">မအောင်မြင်ပါ - စာရွက်ကုန်နေသည်</translation>
+<translation id="9088306295921699330">လက်ရှိ အသုံးပြုမှု</translation>
 <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> အတွက် လက်မှတ်ကို ပြန်လည်စတင်ပါ</translation>
 <translation id="9106415115617144481">စာမျက်နှာ <ph name="PAGE_NUMBER" /> ကို စကင်ဖတ်နေသည်</translation>
 <translation id="9111102763498581341">သော့ဖွင့်ရန်</translation>
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb
index 830ad77..218556e 100644
--- a/chromeos/strings/chromeos_strings_no.xtb
+++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Tjeneste for Chrome OS-inndatametode</translation>
 <translation id="1947737735496445907">Skrevet ut</translation>
 <translation id="1979103255016296513">Det er på høy tid å endre passordet</translation>
+<translation id="1980044825731880088">CPU-hastighet</translation>
 <translation id="2049639323467105390">Denne enheten administreres av <ph name="DOMAIN" />.</translation>
 <translation id="2080070583977670716">Flere innstillinger</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" /> %</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Bestått</translation>
 <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> forsøk igjen</translation>
 <translation id="2391082728065870591">Send tilbakemeldingsrapport</translation>
+<translation id="2461822463642141190">Nåværende</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} forsøk igjen}other{<ph name="ERROR_MESSAGE" /> {0} forsøk igjen}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Skann</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Slå av</translation>
 <translation id="3008341117444806826">OPPDATER</translation>
 <translation id="3009958530611748826">Velg mappen du vil lagre i</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Tilkoblingsdiagnostikk</translation>
 <translation id="3091839911843451378">Mislykket – stoppet</translation>
 <translation id="3188257591659621405">Mine filer</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Stoppet – tom for papir</translation>
 <translation id="4932733599132424254">Dato</translation>
 <translation id="4985509611418653372">Kjør</translation>
+<translation id="5168185087976003268">Batterihelse</translation>
 <translation id="520299634122159966">Ingen tilgjengelige skannere</translation>
 <translation id="5212543919916444558">Jeg finner ikke noe på skjermen jeg kan hjelpe deg med. 
 Prøv å trykke på mikrofonen for å spørre meg om noe.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Surf som gjest</translation>
 <translation id="54609108002486618">Administrert</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Finn ut mer i Brukerstøtte</translation>
 <translation id="5832805196449965646">Legg til person</translation>
 <translation id="5895138241574237353">Start på nytt</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versjon <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Lukk</translation>
 <translation id="6048107060512778456">Mislykket – papirstopp</translation>
 <translation id="6050189528197190982">Gråtoner</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Tidsforsinkelsen for standardnettverket er over grenseverdien</translation>
 <translation id="8919837981463578619">Mislykket – en skuff mangler</translation>
 <translation id="8928727111548978589">Mislykket – tom for papir</translation>
+<translation id="9088306295921699330">Nåværende bruk</translation>
 <translation id="910415269708673980">Oppdater saken for <ph name="PRINCIPAL_NAME" /></translation>
 <translation id="9106415115617144481">Skanner side <ph name="PAGE_NUMBER" /></translation>
 <translation id="9111102763498581341">Lås opp</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb
index abc9022..f024a5b0 100644
--- a/chromeos/strings/chromeos_strings_pl.xtb
+++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Usługa Metoda wprowadzania Chrome OS</translation>
 <translation id="1947737735496445907">Wydrukowano</translation>
 <translation id="1979103255016296513">Zaległa zmiana hasła</translation>
+<translation id="1980044825731880088">Częstotliwość taktowania CPU</translation>
 <translation id="2049639323467105390">To urządzenie jest zarządzane przez: <ph name="DOMAIN" />.</translation>
 <translation id="2080070583977670716">Więcej ustawień</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" />%</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Zaliczone</translation>
 <translation id="2375079107209812402">Pozostałe próby: <ph name="ATTEMPTS_LEFT" /></translation>
 <translation id="2391082728065870591">Prześlij zgłoszenie opinii</translation>
+<translation id="2461822463642141190">Aktualnie</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Pozostała {0} próba.}few{<ph name="ERROR_MESSAGE" /> Pozostały {0} próby.}many{<ph name="ERROR_MESSAGE" /> Pozostało {0} prób.}other{<ph name="ERROR_MESSAGE" /> Pozostało {0} próby.}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Skanuj</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Wyłącz</translation>
 <translation id="3008341117444806826">ODŚWIEŻ</translation>
 <translation id="3009958530611748826">Wybierz folder zapisu</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Diagnostyka problemów z łącznością</translation>
 <translation id="3091839911843451378">Niepowodzenie – drukarka została zatrzymana</translation>
 <translation id="3188257591659621405">Moje pliki</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Zatrzymano – brak papieru</translation>
 <translation id="4932733599132424254">Data</translation>
 <translation id="4985509611418653372">Uruchom</translation>
+<translation id="5168185087976003268">Kondycja baterii</translation>
 <translation id="520299634122159966">Brak dostępnych skanerów</translation>
 <translation id="5212543919916444558">Na Twoim ekranie nie ma nic, w czym mogę pomóc.
 Kliknij mikrofon i zadaj pytanie.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Przeglądaj jako gość</translation>
 <translation id="54609108002486618">Zarządzany</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Dowiedz się więcej w Centrum pomocy</translation>
 <translation id="5832805196449965646">Dodaj osobę</translation>
 <translation id="5895138241574237353">Uruchom ponownie</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, wersja <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Zamknij</translation>
 <translation id="6048107060512778456">Niepowodzenie – zacięcie papieru</translation>
 <translation id="6050189528197190982">Skala odcieni szarości</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Sieć domyślna przekroczyła próg opóźnienia</translation>
 <translation id="8919837981463578619">Niepowodzenie – nie znaleziono tacy</translation>
 <translation id="8928727111548978589">Niepowodzenie – brak papieru</translation>
+<translation id="9088306295921699330">Obecne wykorzystanie</translation>
 <translation id="910415269708673980">Odśwież bilet przypisany do konta <ph name="PRINCIPAL_NAME" />.</translation>
 <translation id="9106415115617144481">Skanowanie strony <ph name="PAGE_NUMBER" /></translation>
 <translation id="9111102763498581341">Odblokuj</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb
index fd2bc08..f79338dd 100644
--- a/chromeos/strings/chromeos_strings_pt-BR.xtb
+++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -14,9 +14,12 @@
 <translation id="1398634363027580500">Latência de HTTPS muito alta</translation>
 <translation id="1413240736185167732">Falha - Falha no filtro</translation>
 <translation id="1468664791493211953">Ofertas</translation>
+<translation id="1476467821656042872"><ph name="MANAGER" /> gerencia este dispositivo e pode monitorar sua atividade.</translation>
 <translation id="1478594628797167447">Scanner</translation>
+<translation id="1499900233129743732"><ph name="MANAGER" /> gerencia o usuário e pode gerenciar configurações e monitorar a atividade do usuário remotamente.</translation>
 <translation id="150962533380566081">PUK inválida.</translation>
 <translation id="1510238584712386396">Iniciador</translation>
+<translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> linhas de execução)</translation>
 <translation id="1641857168437328880">Alimentador de documentos (unilateral)</translation>
 <translation id="1644574205037202324">Histórico</translation>
 <translation id="1662989795263954667">Parado (sem tinta)</translation>
@@ -80,6 +83,7 @@
 <translation id="4454245904991689773">Salvar em</translation>
 <translation id="4483049906298469269">Falha no ping do gateway de rede não padrão</translation>
 <translation id="4548483925627140043">Sinal não encontrado</translation>
+<translation id="455835558791489930">Bateria de <ph name="CHARGE_VALUE" /> mAh</translation>
 <translation id="458794348635939462">Falha na resolução de todos os hosts</translation>
 <translation id="4627232916386272576"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="PRINTED_PAGE_NUMBER" /> de <ph name="TOTAL_PAGE_NUMBER" />. Pressione "Enter" para cancelar o trabalho de impressão.</translation>
 <translation id="4646949265910132906">Conexão Wi-Fi segura</translation>
@@ -138,8 +142,10 @@
 <translation id="6766275201586212568">Falha em resoluções de DNS</translation>
 <translation id="6768237774506518020">Taxa elevada de erro de resolução de DNS</translation>
 <translation id="6839141349259399400">Não foi possível se conectar aos scanners?</translation>
+<translation id="7028979494427204405"><ph name="MANAGER" /> gerencia este dispositivo e tem acesso a todas as atividades do usuário, incluindo páginas visitadas, senhas e e-mail.</translation>
 <translation id="714876143603641390">Conectividade LAN</translation>
 <translation id="7162487448488904999">Galeria</translation>
+<translation id="7177485034254901881">Este <ph name="DEVICE_TYPE" /> é gerenciado por <ph name="MANAGER" />. Os administradores podem configurar o dispositivo remotamente.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7359657277149375382">Tipo de arquivo</translation>
 <translation id="7561454561030345039">Essa ação é gerenciada pelo administrador</translation>
diff --git a/chromeos/strings/chromeos_strings_ro.xtb b/chromeos/strings/chromeos_strings_ro.xtb
index 9d0ebd9..f4fe546 100644
--- a/chromeos/strings/chromeos_strings_ro.xtb
+++ b/chromeos/strings/chromeos_strings_ro.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Serviciul metodei de introducere a textului din sistemul de operare Chrome</translation>
 <translation id="1947737735496445907">Printată</translation>
 <translation id="1979103255016296513">Ai depășit timpul limită pentru schimbarea parolei</translation>
+<translation id="1980044825731880088">Viteza CPU</translation>
 <translation id="2049639323467105390">Acest dispozitiv este gestionat de <ph name="DOMAIN" />.</translation>
 <translation id="2080070583977670716">Mai multe setări</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" /> %</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Reușită</translation>
 <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> încercări rămase</translation>
 <translation id="2391082728065870591">Trimite un raport de feedback</translation>
+<translation id="2461822463642141190">Actual</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} încercare rămasă}few{<ph name="ERROR_MESSAGE" /> {0} încercări rămase}other{<ph name="ERROR_MESSAGE" /> {0} de încercări rămase}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Scanează</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Închide</translation>
 <translation id="3008341117444806826">ACTUALIZEAZĂ</translation>
 <translation id="3009958530611748826">Selectează un dosar în care să salvezi</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Diagnosticare pentru conectivitate</translation>
 <translation id="3091839911843451378">Nereușită – Oprită</translation>
 <translation id="3188257591659621405">Fișierele mele</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Oprită – Hârtie epuizată</translation>
 <translation id="4932733599132424254">Data</translation>
 <translation id="4985509611418653372">Rulează</translation>
+<translation id="5168185087976003268">Buna funcționare a bateriei:</translation>
 <translation id="520299634122159966">Nu sunt disponibile scanere</translation>
 <translation id="5212543919916444558">Nu găsesc conținut pe ecran în privința căruia te-aș putea ajuta.
 Atinge microfonul și întreabă orice dorești.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Navighează ca invitat</translation>
 <translation id="54609108002486618">Gestionat</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Află mai multe din Centrul de ajutor</translation>
 <translation id="5832805196449965646">Adăugați un utilizator</translation>
 <translation id="5895138241574237353">Reîncepe</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, versiunea <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Închide</translation>
 <translation id="6048107060512778456">Nereușită – Blocaj de hârtie</translation>
 <translation id="6050189528197190982">Tonuri de gri</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Rețeaua prestabilită depășește pragul de latență</translation>
 <translation id="8919837981463578619">Nereușită – Tavă lipsă</translation>
 <translation id="8928727111548978589">Nereușită – Hârtie epuizată</translation>
+<translation id="9088306295921699330">Folosire actuală</translation>
 <translation id="910415269708673980">Actualizează tichetul pentru <ph name="PRINCIPAL_NAME" /></translation>
 <translation id="9106415115617144481">Se scanează pagina <ph name="PAGE_NUMBER" /></translation>
 <translation id="9111102763498581341">Deblochează</translation>
diff --git a/chromeos/strings/chromeos_strings_ru.xtb b/chromeos/strings/chromeos_strings_ru.xtb
index 5d21f73..b08dbdf1 100644
--- a/chromeos/strings/chromeos_strings_ru.xtb
+++ b/chromeos/strings/chromeos_strings_ru.xtb
@@ -14,9 +14,12 @@
 <translation id="1398634363027580500">очень большое время ожидания HTTPS</translation>
 <translation id="1413240736185167732">Сбой: ошибка в работе фильтра</translation>
 <translation id="1468664791493211953">Предложения</translation>
+<translation id="1476467821656042872">Этим устройством управляет <ph name="MANAGER" />. Ваши действия могут отслеживаться.</translation>
 <translation id="1478594628797167447">Сканер</translation>
+<translation id="1499900233129743732">Этим аккаунтом управляет <ph name="MANAGER" />. Администратор может отслеживать действия пользователя, а также удаленно изменять настройки.</translation>
 <translation id="150962533380566081">Неверный PUK-код.</translation>
 <translation id="1510238584712386396">Панель запуска</translation>
+<translation id="1633910004424187862"><ph name="CPU_NAME" /> (потоков: <ph name="THREAD_COUNT" />)</translation>
 <translation id="1641857168437328880">Автоподатчик документов (односторонний)</translation>
 <translation id="1644574205037202324">История</translation>
 <translation id="1662989795263954667">Печать прервана: нет чернил</translation>
@@ -80,6 +83,7 @@
 <translation id="4454245904991689773">Место сохранения</translation>
 <translation id="4483049906298469269">Не удалось выполнить проверку ping сетевого шлюза, не заданного по умолчанию.</translation>
 <translation id="4548483925627140043">Отсутствует сигнал Wi-Fi.</translation>
+<translation id="455835558791489930">Батарея <ph name="CHARGE_VALUE" /> мА·ч</translation>
 <translation id="458794348635939462">Не удалось преобразовать имена всех хостов.</translation>
 <translation id="4627232916386272576">Файл "<ph name="DOCUMENT_TITLE" />", принтер "<ph name="PRINTER_NAME" />", дата – <ph name="CREATION_TIME" />, напечатано страниц: <ph name="PRINTED_PAGE_NUMBER" /> из <ph name="TOTAL_PAGE_NUMBER" />. Чтобы отменить задание печати, нажмите клавишу "Ввод".</translation>
 <translation id="4646949265910132906">Защищенное подключение к Wi-Fi</translation>
@@ -138,8 +142,10 @@
 <translation id="6766275201586212568">невыполненные преобразования DNS</translation>
 <translation id="6768237774506518020">большое число невыполненных преобразований DNS</translation>
 <translation id="6839141349259399400">Не удается подключиться к сканерам?</translation>
+<translation id="7028979494427204405">Этим устройством управляет <ph name="MANAGER" />. Администратору доступна информация обо всех действиях пользователя, в том числе о посещенных веб-страницах, а также адрес электронной почты и пароли.</translation>
 <translation id="714876143603641390">Подключение к локальной сети</translation>
 <translation id="7162487448488904999">Галерея</translation>
+<translation id="7177485034254901881">Этим устройством <ph name="DEVICE_TYPE" /> управляет <ph name="MANAGER" />. Администраторы могут настраивать устройство удаленно.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7359657277149375382">Тип файла</translation>
 <translation id="7561454561030345039">Этим действием управляет администратор.</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb
index d300f22..c149ccb 100644
--- a/chromeos/strings/chromeos_strings_sl.xtb
+++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Storitev načina vnosa v okolju OS Chrome</translation>
 <translation id="1947737735496445907">Natisnjeno</translation>
 <translation id="1979103255016296513">Rok za spremembo gesla je potekel</translation>
+<translation id="1980044825731880088">Hitrost CPE-ja</translation>
 <translation id="2049639323467105390">To napravo upravlja <ph name="DOMAIN" />.</translation>
 <translation id="2080070583977670716">Več nastavitev</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" /> %</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Preverjanje je uspelo</translation>
 <translation id="2375079107209812402">Na voljo imate še toliko poskusov: <ph name="ATTEMPTS_LEFT" /></translation>
 <translation id="2391082728065870591">Pošiljanje poročila s povratnimi informacijami</translation>
+<translation id="2461822463642141190">Trenutno</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Še {0} poskus}one{<ph name="ERROR_MESSAGE" /> Še {0} poskus}two{<ph name="ERROR_MESSAGE" /> Še {0} poskusa}few{<ph name="ERROR_MESSAGE" /> Še {0} poskusi}other{<ph name="ERROR_MESSAGE" /> Še {0} poskusov}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Išči</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Zaustavitev</translation>
 <translation id="3008341117444806826">OSVEŽI</translation>
 <translation id="3009958530611748826">Izberite mapo za shranjevanje</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Diagnosticiranje povezav</translation>
 <translation id="3091839911843451378">Napaka – ustavljeno</translation>
 <translation id="3188257591659621405">Moje datoteke</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Ustavljeno – zmanjkalo je papirja</translation>
 <translation id="4932733599132424254">Datum</translation>
 <translation id="4985509611418653372">Izvedi</translation>
+<translation id="5168185087976003268">Stanje baterije</translation>
 <translation id="520299634122159966">Ni razpoložljivih optičnih bralnikov</translation>
 <translation id="5212543919916444558">Na zaslonu ni ničesar uporabnega.
 Poskusite vprašati tako, da se dotaknete mikrofona.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Brskajte kot gost</translation>
 <translation id="54609108002486618">Upravljan</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Preberite več o tem v centru za pomoč.</translation>
 <translation id="5832805196449965646">Dodaj osebo</translation>
 <translation id="5895138241574237353">Znova zaženi</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, različica <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Zapri</translation>
 <translation id="6048107060512778456">Napaka – zastoj papirja</translation>
 <translation id="6050189528197190982">Sivine</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Privzeto omrežje je nad pragom zakasnitve</translation>
 <translation id="8919837981463578619">Napaka – ni pladnja</translation>
 <translation id="8928727111548978589">Napaka – zmanjkalo je papirja</translation>
+<translation id="9088306295921699330">Trenutna poraba</translation>
 <translation id="910415269708673980">Osvežite kartonček za <ph name="PRINCIPAL_NAME" /></translation>
 <translation id="9106415115617144481">Optično branje <ph name="PAGE_NUMBER" />. strani</translation>
 <translation id="9111102763498581341">Odkleni</translation>
diff --git a/chromeos/strings/chromeos_strings_sr-Latn.xtb b/chromeos/strings/chromeos_strings_sr-Latn.xtb
index a69c82e..4892d48 100644
--- a/chromeos/strings/chromeos_strings_sr-Latn.xtb
+++ b/chromeos/strings/chromeos_strings_sr-Latn.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Usluga metoda unosa za Chrome OS</translation>
 <translation id="1947737735496445907">Odštampano</translation>
 <translation id="1979103255016296513">Rok za promenu lozinke je istekao</translation>
+<translation id="1980044825731880088">Brzina procesora</translation>
 <translation id="2049639323467105390">Ovim uređajem upravlja domen <ph name="DOMAIN" />.</translation>
 <translation id="2080070583977670716">Više podešavanja</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" />%</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Prošlo</translation>
 <translation id="2375079107209812402">Preostali pokušaji: <ph name="ATTEMPTS_LEFT" /></translation>
 <translation id="2391082728065870591">Pošalji izveštaj sa povratnim informacijama</translation>
+<translation id="2461822463642141190">Aktuelno</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Preostaje {0} pokušaj}one{<ph name="ERROR_MESSAGE" /> Preostaje {0} pokušaj}few{<ph name="ERROR_MESSAGE" /> Preostaju {0} pokušaja}other{<ph name="ERROR_MESSAGE" /> Preostaje {0} pokušaja}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Skeniraj</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Isključi</translation>
 <translation id="3008341117444806826">OSVEŽI</translation>
 <translation id="3009958530611748826">Izaberite folder za čuvanje</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Dijagnostika povezivosti</translation>
 <translation id="3091839911843451378">Nije uspelo – zaustavljeno je</translation>
 <translation id="3188257591659621405">Moje datoteke</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Zaustavljeno – nema više papira</translation>
 <translation id="4932733599132424254">Datum</translation>
 <translation id="4985509611418653372">Pokreni</translation>
+<translation id="5168185087976003268">Stanje baterije</translation>
 <translation id="520299634122159966">Nema dostupnih skenera</translation>
 <translation id="5212543919916444558">Ne mogu da pronađem na ekranu ništa oko čega mogu da pomognem.
 Probajte da dodirnete mikrofon da biste me pitali nešto.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Pregledajte kao gost</translation>
 <translation id="54609108002486618">Upravljani</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Saznajte više u centru za pomoć</translation>
 <translation id="5832805196449965646">Dodaj osobu</translation>
 <translation id="5895138241574237353">Pokreni ponovo</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, verzija <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Zatvori</translation>
 <translation id="6048107060512778456">Nije uspelo – papir je zaglavljen</translation>
 <translation id="6050189528197190982">Sivi tonovi</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Podrazumevana mreža premašuje graničnu vrednost za kašnjenje</translation>
 <translation id="8919837981463578619">Nije uspelo – nedostaje fioka</translation>
 <translation id="8928727111548978589">Nije uspelo – nema više papira</translation>
+<translation id="9088306295921699330">Trenutna iskorišćenost</translation>
 <translation id="910415269708673980">Osvežite tiket za <ph name="PRINCIPAL_NAME" /></translation>
 <translation id="9106415115617144481">Skenira se <ph name="PAGE_NUMBER" />. stranica</translation>
 <translation id="9111102763498581341">Otključaj</translation>
diff --git a/chromeos/strings/chromeos_strings_sr.xtb b/chromeos/strings/chromeos_strings_sr.xtb
index bd2a825..9021553 100644
--- a/chromeos/strings/chromeos_strings_sr.xtb
+++ b/chromeos/strings/chromeos_strings_sr.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Услуга метода уноса за Chrome ОС</translation>
 <translation id="1947737735496445907">Одштампано</translation>
 <translation id="1979103255016296513">Рок за промену лозинке је истекао</translation>
+<translation id="1980044825731880088">Брзина процесора</translation>
 <translation id="2049639323467105390">Овим уређајем управља домен <ph name="DOMAIN" />.</translation>
 <translation id="2080070583977670716">Више подешавања</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" />%</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">Прошло</translation>
 <translation id="2375079107209812402">Преостали покушаји: <ph name="ATTEMPTS_LEFT" /></translation>
 <translation id="2391082728065870591">Пошаљи извештај са повратним информацијама</translation>
+<translation id="2461822463642141190">Актуелно</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> Преостаје {0} покушај}one{<ph name="ERROR_MESSAGE" /> Преостаје {0} покушај}few{<ph name="ERROR_MESSAGE" /> Преостају {0} покушаја}other{<ph name="ERROR_MESSAGE" /> Преостаје {0} покушаја}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">Скенирај</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">Искључи</translation>
 <translation id="3008341117444806826">ОСВЕЖИ</translation>
 <translation id="3009958530611748826">Изаберите фолдер за чување</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" /> mA</translation>
 <translation id="3083667275341675831">Дијагностика повезивости</translation>
 <translation id="3091839911843451378">Није успело – заустављено је</translation>
 <translation id="3188257591659621405">Моје датотеке</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">Заустављено – нема више папира</translation>
 <translation id="4932733599132424254">Датум</translation>
 <translation id="4985509611418653372">Покрени</translation>
+<translation id="5168185087976003268">Стање батерије</translation>
 <translation id="520299634122159966">Нема доступних скенера</translation>
 <translation id="5212543919916444558">Не могу да пронађем на екрану ништа око чега могу да помогнем.
 Пробајте да додирнете микрофон да бисте ме питали нешто.</translation>
@@ -114,8 +118,10 @@
 <translation id="5457599981699367932">Прегледајте као гост</translation>
 <translation id="54609108002486618">Управљани</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">Сазнајте више у центру за помоћ</translation>
 <translation id="5832805196449965646">Додај особу</translation>
 <translation id="5895138241574237353">Покрени поново</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, верзија <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">Затвори</translation>
 <translation id="6048107060512778456">Није успело – папир је заглављен</translation>
 <translation id="6050189528197190982">Сиви тонови</translation>
@@ -179,6 +185,7 @@
 <translation id="8910721771319628100">Подразумевана мрежа премашује граничну вредност за кашњење</translation>
 <translation id="8919837981463578619">Није успело – недостаје фиока</translation>
 <translation id="8928727111548978589">Није успело – нема више папира</translation>
+<translation id="9088306295921699330">Тренутна искоришћеност</translation>
 <translation id="910415269708673980">Освежите тикет за <ph name="PRINCIPAL_NAME" /></translation>
 <translation id="9106415115617144481">Скенира се <ph name="PAGE_NUMBER" />. страница</translation>
 <translation id="9111102763498581341">Откључај</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb
index e768814..33ca2a7 100644
--- a/chromeos/strings/chromeos_strings_te.xtb
+++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -30,6 +30,7 @@
 <translation id="1930797645656624981">Chrome OS ఇన్‌పుట్ విధానం సేవ</translation>
 <translation id="1947737735496445907">ప్రింట్ అయింది</translation>
 <translation id="1979103255016296513">పాస్‌వర్డ్‌ మార్చాల్సిన గడువు ముగిసింది</translation>
+<translation id="1980044825731880088">CPU వేగం</translation>
 <translation id="2049639323467105390">ఈ పరికరం <ph name="DOMAIN" /> ద్వారా నిర్వహించబడుతుంది.</translation>
 <translation id="2080070583977670716">మరిన్ని సెట్టింగ్‌లు</translation>
 <translation id="2141644705054017895"><ph name="PERCENTAGE_VALUE" />%</translation>
@@ -39,6 +40,7 @@
 <translation id="2364498172489649528">ఆమోదించినవి</translation>
 <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> ప్రయత్నాలు మిగిలి ఉన్నాయి</translation>
 <translation id="2391082728065870591">ఫీడ్‌బ్యాక్ రిపోర్ట్‌ను పంపు</translation>
+<translation id="2461822463642141190">ప్రస్తుత</translation>
 <translation id="2463748424736466148">{ATTEMPTS_LEFT,plural, =1{<ph name="ERROR_MESSAGE" /> {0} ప్రయత్నం మిగిలి ఉంది}other{<ph name="ERROR_MESSAGE" /> {0} ప్రయత్నాలు మిగిలి ఉన్నాయి}}</translation>
 <translation id="249323605434939166"><ph name="QUERY_TEXT" /> · <ph name="SOURCE_LANGUAGE_NAME" /></translation>
 <translation id="2517472476991765520">స్కాన్ చేయి</translation>
@@ -46,6 +48,7 @@
 <translation id="2872961005593481000">షట్ డౌన్ చెయ్యండి</translation>
 <translation id="3008341117444806826">రిఫ్రెష్ చేయి</translation>
 <translation id="3009958530611748826">దీనిలో సేవ్ చేయడానికి ఫోల్డర్‌ను ఎంచుకోండి</translation>
+<translation id="3054177598518735801"><ph name="CURRENT_VALUE" />mA</translation>
 <translation id="3083667275341675831">కనెక్టివిటీ సమస్య విశ్లేషణ</translation>
 <translation id="3091839911843451378">విఫలమైంది - ఆగిపోయింది</translation>
 <translation id="3188257591659621405">నా ఫైల్‌లు</translation>
@@ -99,6 +102,7 @@
 <translation id="4917889632206600977">ఆగిపోయింది - పేపర్లు లేవు</translation>
 <translation id="4932733599132424254">తేదీ</translation>
 <translation id="4985509611418653372">రన్ చేయి</translation>
+<translation id="5168185087976003268">బ్యాటరీ సామర్థ్యం</translation>
 <translation id="520299634122159966">స్కానర్‌లు అందుబాటులో లేవు</translation>
 <translation id="5212543919916444558">నేను సహాయం అందించగలిగేలా మీ స్క్రీన్‌పై నాకు ఏదీ కనిపించలేదు. మైక్‌ను నొక్కి, నన్ను ఏదైనా అడగడానికి ప్రయత్నించండి.</translation>
 <translation id="5222676887888702881">సైన్ ఔట్</translation>
@@ -113,8 +117,10 @@
 <translation id="5457599981699367932">అతిథి లాగా బ్రౌజ్ చేయండి</translation>
 <translation id="54609108002486618">నిర్వహించబడింది</translation>
 <translation id="5493614766091057239"><ph name="VERDICT" />: <ph name="PROBLEMS" /></translation>
+<translation id="5551702563755460533">సహాయ కేంద్రంలో మరింత తెలుసుకోండి</translation>
 <translation id="5832805196449965646">వ్యక్తిని జోడించు</translation>
 <translation id="5895138241574237353">మళ్ళీ ప్రారంభించు</translation>
+<translation id="5982592372228113572">(<ph name="BOARD_NAME" />, వెర్షన్ <ph name="MILESTONE_VERSION" />)</translation>
 <translation id="6040143037577758943">మూసివేయి</translation>
 <translation id="6048107060512778456">విఫలమైంది - కాగితం జామ్ అయింది</translation>
 <translation id="6050189528197190982">బూడిద రంగు ప్రమాణం</translation>
@@ -178,6 +184,7 @@
 <translation id="8910721771319628100">పరిమితిని మించి ప్రతిస్పందన సమయం ఉన్న డిఫాల్ట్ నెట్‌వర్క్</translation>
 <translation id="8919837981463578619">విఫలమైంది - ట్రే అందుబాటులో లేదు</translation>
 <translation id="8928727111548978589">విఫలమైంది - పేపర్ లేదు</translation>
+<translation id="9088306295921699330">ప్రస్తుత వినియోగం</translation>
 <translation id="910415269708673980"><ph name="PRINCIPAL_NAME" /> సంబంధిత టిక్కెట్‌ను రిఫ్రెష్ చేయండి</translation>
 <translation id="9106415115617144481">పేజీ <ph name="PAGE_NUMBER" />ని స్కాన్ చేస్తోంది</translation>
 <translation id="9111102763498581341">అన్‌లాక్ చేయి</translation>
diff --git a/chromeos/strings/chromeos_strings_tr.xtb b/chromeos/strings/chromeos_strings_tr.xtb
index 2e7ff02..33ed20c 100644
--- a/chromeos/strings/chromeos_strings_tr.xtb
+++ b/chromeos/strings/chromeos_strings_tr.xtb
@@ -14,9 +14,12 @@
 <translation id="1398634363027580500">Çok yüksek HTTPS gecikmesi</translation>
 <translation id="1413240736185167732">İşlem başarısız - Filtre başarısız</translation>
 <translation id="1468664791493211953">Teklifler</translation>
+<translation id="1476467821656042872"><ph name="MANAGER" /> bu cihazı yönetiyor ve etkinliklerinizi izleyebilir.</translation>
 <translation id="1478594628797167447">Tarayıcı</translation>
+<translation id="1499900233129743732"><ph name="MANAGER" />, bu kullanıcıyı yönetir ve hem ayarları uzaktan yönetebilir hem de kullanıcı etkinliğini izleyebilir.</translation>
 <translation id="150962533380566081">Geçersiz PUK.</translation>
 <translation id="1510238584712386396">Başlatıcı</translation>
+<translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> ileti dizisi)</translation>
 <translation id="1641857168437328880">Doküman Besleyici (Tek taraflı)</translation>
 <translation id="1644574205037202324">Geçmiş</translation>
 <translation id="1662989795263954667">Durduruldu - Mürekkep bitti</translation>
@@ -80,6 +83,7 @@
 <translation id="4454245904991689773">Taramayı şuraya kaydet:</translation>
 <translation id="4483049906298469269">Varsayılan olmayan ağ geçidi pinglenemedi</translation>
 <translation id="4548483925627140043">Sinyal bulunamadı</translation>
+<translation id="455835558791489930"><ph name="CHARGE_VALUE" /> mAh Pil</translation>
 <translation id="458794348635939462">Tüm ana makineler çözümlenemedi</translation>
 <translation id="4627232916386272576"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="PRINTED_PAGE_NUMBER" />/<ph name="TOTAL_PAGE_NUMBER" /> Yazdırma işini iptal etmek için enter tuşuna basın.</translation>
 <translation id="4646949265910132906">Güvenli Kablosuz Bağlantı</translation>
@@ -138,8 +142,10 @@
 <translation id="6766275201586212568">Başarısız DNS çözümlemeleri</translation>
 <translation id="6768237774506518020">DNS çözümleme hata oranı yüksek</translation>
 <translation id="6839141349259399400">Tarayıcılara bağlanamıyor musunuz?</translation>
+<translation id="7028979494427204405"><ph name="MANAGER" /> bu cihazı yönetir ve ziyaret edilen web sayfaları, şifreler ve e-posta dahil tüm kullanıcı etkinliğine erişebilir.</translation>
 <translation id="714876143603641390">LAN Bağlantısı</translation>
 <translation id="7162487448488904999">Galeri</translation>
+<translation id="7177485034254901881">Bu <ph name="DEVICE_TYPE" />, <ph name="MANAGER" /> tarafından yönetiliyor. Yöneticiler bu cihazı uzaktan yapılandırabilir.</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7359657277149375382">Dosya türü</translation>
 <translation id="7561454561030345039">Bu işlem, yöneticiniz tarafından yönetilir.</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb
index d25dee9a..5aa1cda 100644
--- a/chromeos/strings/chromeos_strings_zh-CN.xtb
+++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -11,7 +11,7 @@
 <translation id="1330426557709298164">JPG</translation>
 <translation id="1337912285145772892">适合扫描区域</translation>
 <translation id="1397738625398125236">可以对网关执行 ping 操作</translation>
-<translation id="1398634363027580500">HTTPS 延迟非常长</translation>
+<translation id="1398634363027580500">HTTPS 延迟非常高</translation>
 <translation id="1413240736185167732">失败 - 过滤器出问题了</translation>
 <translation id="1468664791493211953">优惠</translation>
 <translation id="1478594628797167447">扫描器</translation>
@@ -144,7 +144,7 @@
 <translation id="7359657277149375382">文件类型</translation>
 <translation id="7561454561030345039">此操作由您的管理员管理</translation>
 <translation id="7569444139234840525"><ph name="QUERY_TEXT" /> · /<ph name="PHONETICS" />/</translation>
-<translation id="7648838807254605802">HTTPS 延迟较长</translation>
+<translation id="7648838807254605802">HTTPS 延迟较高</translation>
 <translation id="7658239707568436148">取消</translation>
 <translation id="7690294790491645610">再次输入新密码</translation>
 <translation id="7805768142964895445">状态</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-TW.xtb b/chromeos/strings/chromeos_strings_zh-TW.xtb
index 1332ac9..fba83ead 100644
--- a/chromeos/strings/chromeos_strings_zh-TW.xtb
+++ b/chromeos/strings/chromeos_strings_zh-TW.xtb
@@ -14,9 +14,12 @@
 <translation id="1398634363027580500">非常高的 HTTPS 延遲</translation>
 <translation id="1413240736185167732">失敗 - 無法使用過濾器</translation>
 <translation id="1468664791493211953">優惠</translation>
+<translation id="1476467821656042872"><ph name="MANAGER" /> 是這個裝置的管理員,且可能有權監控你的活動。</translation>
 <translation id="1478594628797167447">掃描器</translation>
+<translation id="1499900233129743732"><ph name="MANAGER" /> 是這個使用者的管理員,且可從遠端管理設定及監控使用者活動。</translation>
 <translation id="150962533380566081">PUK 無效。</translation>
 <translation id="1510238584712386396">啟動器</translation>
+<translation id="1633910004424187862"><ph name="CPU_NAME" /> (<ph name="THREAD_COUNT" /> 個執行緒)</translation>
 <translation id="1641857168437328880">文件送紙器 (單面)</translation>
 <translation id="1644574205037202324">歷史記錄</translation>
 <translation id="1662989795263954667">已停止 - 墨水已用盡</translation>
@@ -80,6 +83,7 @@
 <translation id="4454245904991689773">掃描檔案儲存位置</translation>
 <translation id="4483049906298469269">無法連線偵測非預設的網路閘道</translation>
 <translation id="4548483925627140043">偵測不到訊號</translation>
+<translation id="455835558791489930"><ph name="CHARGE_VALUE" /> mAh 電池</translation>
 <translation id="458794348635939462">無法解析所有主機</translation>
 <translation id="4627232916386272576"><ph name="DOCUMENT_TITLE" />,<ph name="PRINTER_NAME" />,<ph name="CREATION_TIME" />,已列印 <ph name="PRINTED_PAGE_NUMBER" /> 頁 (共 <ph name="TOTAL_PAGE_NUMBER" /> 頁)。按下 Enter 鍵即可取消列印工作。</translation>
 <translation id="4646949265910132906">安全的 WiFi 連線</translation>
@@ -138,8 +142,10 @@
 <translation id="6766275201586212568">DNS 解析失敗</translation>
 <translation id="6768237774506518020">高 DNS 解析失敗率</translation>
 <translation id="6839141349259399400">無法連線至掃描器嗎?</translation>
+<translation id="7028979494427204405"><ph name="MANAGER" /> 是這個裝置的管理員,且可存取所有使用者活動,包括網頁造訪記錄、密碼和電子郵件。</translation>
 <translation id="714876143603641390">LAN 連線狀態</translation>
 <translation id="7162487448488904999">相片庫</translation>
+<translation id="7177485034254901881">這部 <ph name="DEVICE_TYPE" /> 是由 <ph name="MANAGER" /> 管理。系統管理員可從遠端設定這部裝置。</translation>
 <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation>
 <translation id="7359657277149375382">檔案類型</translation>
 <translation id="7561454561030345039">這個動作是由系統管理員管理</translation>
diff --git a/components/embedder_support/android/metrics/android_metrics_service_client.cc b/components/embedder_support/android/metrics/android_metrics_service_client.cc
index b59d1ce..f77781a 100644
--- a/components/embedder_support/android/metrics/android_metrics_service_client.cc
+++ b/components/embedder_support/android/metrics/android_metrics_service_client.cc
@@ -141,6 +141,8 @@
       base::kPersistentHistogramsFeature, "prev_run_metrics_count_only", false);
 }
 
+// TODO(crbug.com/1152072): Unify this implementation with the one in
+// ChromeMetricsServiceClient.
 std::unique_ptr<metrics::FileMetricsProvider> CreateFileMetricsProvider(
     PrefService* pref_service,
     bool metrics_reporting_enabled) {
@@ -185,6 +187,15 @@
         active_path,
         metrics::FileMetricsProvider::SOURCE_HISTOGRAMS_ACTIVE_FILE,
         metrics::FileMetricsProvider::ASSOCIATE_CURRENT_RUN));
+  } else {
+    // When metrics reporting is not enabled, any existing files should be
+    // deleted in order to preserve user privacy.
+    base::ThreadPool::PostTask(
+        FROM_HERE,
+        {base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+         base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN},
+        base::BindOnce(base::GetDeletePathRecursivelyCallback(),
+                       std::move(browser_metrics_upload_dir)));
   }
 
   return file_metrics_provider;
@@ -240,6 +251,7 @@
   MaybeStartMetrics();
 }
 
+// TODO:(crbug.com/1148351) Make the initialization consistent with Chrome.
 void AndroidMetricsServiceClient::MaybeStartMetrics() {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   // Treat the debugging flag the same as user consent because the user set it,
@@ -248,14 +260,18 @@
   bool user_consent_or_flag = user_consent_ || IsMetricsReportingForceEnabled();
   if (IsConsentDetermined()) {
     if (app_consent_ && user_consent_or_flag) {
-      CreateMetricsService(metrics_state_manager_.get(), this, pref_service_);
+      metrics_service_ = std::make_unique<MetricsService>(
+          metrics_state_manager_.get(), this, pref_service_);
+      // Make GetSampleBucketValue() work properly.
+      metrics_state_manager_->ForceClientIdCreation();
+      is_client_id_forced_ = true;
+      RegisterMetricsProvidersAndInitState();
       // Register for notifications so we can detect when the user or app are
       // interacting with the embedder. We use these as signals to wake up the
       // MetricsService.
       RegisterForNotifications();
-      metrics_state_manager_->ForceClientIdCreation();
       OnMetricsStart();
-      is_in_sample_ = IsInSample();
+
       if (IsReportingEnabled()) {
         // We assume the embedder has no shutdown sequence, so there's no need
         // for a matching Stop() call.
@@ -270,12 +286,7 @@
   }
 }
 
-void AndroidMetricsServiceClient::CreateMetricsService(
-    MetricsStateManager* state_manager,
-    AndroidMetricsServiceClient* client,
-    PrefService* prefs) {
-  metrics_service_ =
-      std::make_unique<MetricsService>(state_manager, client, prefs);
+void AndroidMetricsServiceClient::RegisterMetricsProvidersAndInitState() {
   metrics_service_->RegisterMetricsProvider(
       std::make_unique<metrics::SubprocessMetricsProvider>());
   metrics_service_->RegisterMetricsProvider(
@@ -285,10 +296,8 @@
       std::make_unique<CPUMetricsProvider>());
   metrics_service_->RegisterMetricsProvider(
       std::make_unique<ScreenInfoMetricsProvider>());
-  if (client->IsPersistentHistogramsEnabled()) {
-    metrics_service_->RegisterMetricsProvider(CreateFileMetricsProvider(
-        pref_service_, metrics_state_manager_->IsMetricsReportingEnabled()));
-  }
+  metrics_service_->RegisterMetricsProvider(CreateFileMetricsProvider(
+      pref_service_, metrics_state_manager_->IsMetricsReportingEnabled()));
   metrics_service_->RegisterMetricsProvider(
       std::make_unique<CallStackProfileMetricsProvider>());
   metrics_service_->RegisterMetricsProvider(
@@ -407,7 +416,7 @@
   if (!app_consent_)
     return false;
   return IsMetricsReportingForceEnabled() ||
-         (EnabledStateProvider::IsReportingEnabled() && is_in_sample_);
+         (EnabledStateProvider::IsReportingEnabled() && IsInSample());
 }
 
 MetricsService* AndroidMetricsServiceClient::GetMetricsService() {
@@ -541,11 +550,12 @@
   on_final_metrics_collected_listener_ = std::move(listener);
 }
 
-int AndroidMetricsServiceClient::GetSampleBucketValue() {
+int AndroidMetricsServiceClient::GetSampleBucketValue() const {
+  DCHECK(is_client_id_forced_);
   return UintToPerMille(base::PersistentHash(metrics_service_->GetClientId()));
 }
 
-bool AndroidMetricsServiceClient::IsInSample() {
+bool AndroidMetricsServiceClient::IsInSample() const {
   // Called in MaybeStartMetrics(), after |metrics_service_| is created.
   // NOTE IsInSample and IsInPackageNameSample deliberately use the same hash to
   // guarantee we never exceed 10% of total, opted-in clients for PackageNames.
@@ -572,10 +582,6 @@
 void AndroidMetricsServiceClient::RegisterAdditionalMetricsProviders(
     MetricsService* service) {}
 
-bool AndroidMetricsServiceClient::IsPersistentHistogramsEnabled() {
-  return false;
-}
-
 std::string AndroidMetricsServiceClient::GetAppPackageName() {
   if (IsInPackageNameSample() && CanRecordPackageNameForAppType())
     return GetAppPackageNameInternal();
diff --git a/components/embedder_support/android/metrics/android_metrics_service_client.h b/components/embedder_support/android/metrics/android_metrics_service_client.h
index 7d6a9f6f..209ab1f 100644
--- a/components/embedder_support/android/metrics/android_metrics_service_client.h
+++ b/components/embedder_support/android/metrics/android_metrics_service_client.h
@@ -177,20 +177,20 @@
   // per mille value, so this integer must always be in the inclusive range [0,
   // 1000]. A value of 0 will always be out-of-sample, and a value of 1000 is
   // always in-sample.
-  virtual int GetSampleRatePerMille() = 0;
+  virtual int GetSampleRatePerMille() const = 0;
 
   // Returns a value in the inclusive range [0, 999], to be compared against a
   // per mille sample rate. This value will be based on a persisted value, so it
   // should be consistent across restarts. This value should also be mostly
   // consistent across upgrades, to avoid significantly impacting IsInSample()
   // and IsInPackageNameSample(). Virtual for testing.
-  virtual int GetSampleBucketValue();
+  virtual int GetSampleBucketValue() const;
 
   // Determines if the client is within the random sample of clients for which
   // we log metrics. If this returns false, MetricsServiceClient should
   // indicate reporting is disabled. Sampling is due to storage/bandwidth
   // considerations.
-  bool IsInSample();
+  bool IsInSample() const;
 
   // Determines if the embedder app is the type of app for which we may log the
   // package name. If this returns false, GetAppPackageName() must return empty
@@ -213,12 +213,6 @@
   // MetricsProviders. Does nothing by default.
   virtual void RegisterAdditionalMetricsProviders(MetricsService* service);
 
-  // Called by CreateMetricsService if metrics should be persisted. If the
-  // client returns true then its
-  // variations::PlatformFieldTrials::SetupFieldTrials needs to also call
-  // InstantiatePersistentHistograms.
-  virtual bool IsPersistentHistogramsEnabled();
-
   // Returns the embedding application's package name (unconditionally). Virtual
   // for testing.
   virtual std::string GetAppPackageNameInternal();
@@ -239,9 +233,7 @@
   void MaybeStartMetrics();
   void RegisterForNotifications();
 
-  void CreateMetricsService(MetricsStateManager* state_manager,
-                            AndroidMetricsServiceClient* client,
-                            PrefService* prefs);
+  void RegisterMetricsProvidersAndInitState();
   void CreateUkmService();
 
   std::unique_ptr<MetricsStateManager> metrics_state_manager_;
@@ -253,7 +245,7 @@
   bool set_consent_finished_ = false;
   bool user_consent_ = false;
   bool app_consent_ = false;
-  bool is_in_sample_ = false;
+  bool is_client_id_forced_ = false;
   bool fast_startup_for_testing_ = false;
 
   // When non-zero, this overrides the default value in
diff --git a/components/embedder_support/android/metrics/android_metrics_service_client_unittest.cc b/components/embedder_support/android/metrics/android_metrics_service_client_unittest.cc
index ac23eda0..18bc4099 100644
--- a/components/embedder_support/android/metrics/android_metrics_service_client_unittest.cc
+++ b/components/embedder_support/android/metrics/android_metrics_service_client_unittest.cc
@@ -7,14 +7,19 @@
 #include <memory>
 
 #include "base/command_line.h"
+#include "base/files/file_util.h"
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
+#include "base/metrics/persistent_histogram_allocator.h"
+#include "base/path_service.h"
 #include "base/run_loop.h"
 #include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
 #include "base/test/test_simple_task_runner.h"
 #include "components/metrics/metrics_pref_names.h"
 #include "components/metrics/metrics_service.h"
 #include "components/metrics/metrics_switches.h"
+#include "components/metrics/persistent_histograms.h"
 #include "components/prefs/testing_pref_service.h"
 #include "content/public/test/browser_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -75,9 +80,11 @@
 
   void OnMetricsNotStarted() override {}
 
-  int GetSampleBucketValue() override { return sample_bucket_value_; }
+  int GetSampleBucketValue() const override { return sample_bucket_value_; }
 
-  int GetSampleRatePerMille() override { return sampled_in_rate_per_mille_; }
+  int GetSampleRatePerMille() const override {
+    return sampled_in_rate_per_mille_;
+  }
 
   bool CanRecordPackageNameForAppType() override {
     return record_package_name_for_app_type_;
@@ -127,6 +134,10 @@
 
   const int64_t test_begin_time_;
 
+  content::BrowserTaskEnvironment* task_environment() {
+    return &task_environment_;
+  }
+
  protected:
   ~AndroidMetricsServiceClientTest() override = default;
 
@@ -366,4 +377,54 @@
   EXPECT_FALSE(client->IsRecordingActive());
 }
 
+TEST_F(AndroidMetricsServiceClientTest,
+       TestBrowserMetricsDirClearedIfReportingDisabled) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      base::kPersistentHistogramsFeature, {{"storage", "MappedFile"}});
+
+  base::FilePath metrics_dir;
+  ASSERT_TRUE(base::PathService::Get(base::DIR_ANDROID_APP_DATA, &metrics_dir));
+  InstantiatePersistentHistograms(metrics_dir);
+  base::FilePath upload_dir = metrics_dir.AppendASCII(kBrowserMetricsName);
+  ASSERT_TRUE(base::PathExists(upload_dir));
+
+  auto prefs = CreateTestPrefs();
+  auto client = std::make_unique<TestClient>();
+
+  // Setup the client isn't in sample.
+  client->SetHaveMetricsConsent(/* user_consent= */ true,
+                                /* app_consent= */ true);
+  client->SetInSample(false);
+  client->Initialize(prefs.get());
+  task_environment()->RunUntilIdle();
+
+  EXPECT_FALSE(base::PathExists(upload_dir));
+}
+
+TEST_F(AndroidMetricsServiceClientTest,
+       TestBrowserMetricsDirExistsIfReportingEnabled) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      base::kPersistentHistogramsFeature, {{"storage", "MappedFile"}});
+
+  base::FilePath metrics_dir;
+  ASSERT_TRUE(base::PathService::Get(base::DIR_ANDROID_APP_DATA, &metrics_dir));
+  InstantiatePersistentHistograms(metrics_dir);
+  base::FilePath upload_dir = metrics_dir.AppendASCII(kBrowserMetricsName);
+  ASSERT_TRUE(base::PathExists(upload_dir));
+
+  auto prefs = CreateTestPrefs();
+  auto client = std::make_unique<TestClient>();
+
+  // Setup the client is in sample.
+  client->SetHaveMetricsConsent(/* user_consent= */ true,
+                                /* app_consent= */ true);
+  client->SetInSample(true);
+  client->Initialize(prefs.get());
+  task_environment()->RunUntilIdle();
+
+  EXPECT_TRUE(base::PathExists(upload_dir));
+}
+
 }  // namespace metrics
diff --git a/components/embedder_support/origin_trials/features.cc b/components/embedder_support/origin_trials/features.cc
index 4dba61a..c0bbf717 100644
--- a/components/embedder_support/origin_trials/features.cc
+++ b/components/embedder_support/origin_trials/features.cc
@@ -17,4 +17,8 @@
     "OriginTrialsSampleAPIThirdPartyAlternativeUsage",
     base::FEATURE_ENABLED_BY_DEFAULT};
 
-}  // namespace embedder_support
\ No newline at end of file
+const base::Feature kConversionMeasurementAPIAlternativeUsage{
+    "ConversionMeasurementAPIAlternativeUsage",
+    base::FEATURE_ENABLED_BY_DEFAULT};
+
+}  // namespace embedder_support
diff --git a/components/embedder_support/origin_trials/features.h b/components/embedder_support/origin_trials/features.h
index ff06364..0674cab9 100644
--- a/components/embedder_support/origin_trials/features.h
+++ b/components/embedder_support/origin_trials/features.h
@@ -15,6 +15,11 @@
 // origin trial third party tokens.
 extern const base::Feature kOriginTrialsSampleAPIThirdPartyAlternativeUsage;
 
+// Field trial feature for controlling usage restriction of the
+// Conversion Measurement API's origin trial tokens. When disabled, the API
+// cannot be enabled by tokens using the user subset usage restriction.
+extern const base::Feature kConversionMeasurementAPIAlternativeUsage;
+
 }  // namespace embedder_support
 
-#endif  // COMPONENTS_EMBEDDER_SUPPORT_ORIGIN_TRIALS_FEATURES_H_
\ No newline at end of file
+#endif  // COMPONENTS_EMBEDDER_SUPPORT_ORIGIN_TRIALS_FEATURES_H_
diff --git a/components/embedder_support/origin_trials/origin_trial_policy_impl.cc b/components/embedder_support/origin_trials/origin_trial_policy_impl.cc
index 9f0b6502..2c8fea0 100644
--- a/components/embedder_support/origin_trials/origin_trial_policy_impl.cc
+++ b/components/embedder_support/origin_trials/origin_trial_policy_impl.cc
@@ -83,8 +83,8 @@
     const char* origin_trial_feature_name;
     const base::Feature field_trial_feature;
   } origin_trial_feature_to_field_trial_feature_map[] = {
-      {"FrobulateThirdParty",
-       kOriginTrialsSampleAPIThirdPartyAlternativeUsage}};
+      {"FrobulateThirdParty", kOriginTrialsSampleAPIThirdPartyAlternativeUsage},
+      {"ConversionMeasurement", kConversionMeasurementAPIAlternativeUsage}};
   for (const auto& mapping : origin_trial_feature_to_field_trial_feature_map) {
     if (feature == mapping.origin_trial_feature_name) {
       return !base::FeatureList::IsEnabled(mapping.field_trial_feature);
diff --git a/components/federated_learning/BUILD.gn b/components/federated_learning/BUILD.gn
index 6ea6732a..4187df0 100644
--- a/components/federated_learning/BUILD.gn
+++ b/components/federated_learning/BUILD.gn
@@ -16,7 +16,10 @@
 
   public_deps = [ "//third_party/protobuf:protobuf_lite" ]
 
-  deps = [ "//base" ]
+  deps = [
+    "//base",
+    "//components/prefs:prefs",
+  ]
 }
 
 source_set("unit_tests") {
@@ -30,6 +33,7 @@
     ":federated_learning",
     "//base",
     "//base/test:test_support",
+    "//components/prefs:test_support",
     "//testing/gtest",
   ]
 }
diff --git a/components/federated_learning/DEPS b/components/federated_learning/DEPS
index 97db67c..ad7833850 100644
--- a/components/federated_learning/DEPS
+++ b/components/federated_learning/DEPS
@@ -1,3 +1,4 @@
 include_rules = [
   "+third_party/protobuf",
+  "+components/prefs",
 ]
diff --git a/components/federated_learning/floc_constants.cc b/components/federated_learning/floc_constants.cc
index 2eb50f1..d3a37c9 100644
--- a/components/federated_learning/floc_constants.cc
+++ b/components/federated_learning/floc_constants.cc
@@ -16,6 +16,20 @@
               "Number of bits in the floc id must be greater than 0 and no "
               "greater than 64.");
 
+const char kFlocIdValuePrefKey[] = "federated_learning.floc_id.value";
+
+const char kFlocIdHistoryBeginTimePrefKey[] =
+    "federated_learning.floc_id_.history_begin_time";
+
+const char kFlocIdHistoryEndTimePrefKey[] =
+    "federated_learning.floc_id_.history_end_time";
+
+const char kFlocIdSortingLshVersionPrefKey[] =
+    "federated_learning.floc_id_.sorting_lsh_version";
+
+const char kFlocIdComputeTimePrefKey[] =
+    "federated_learning.floc_id_.compute_time";
+
 const char kManifestFlocComponentFormatKey[] = "floc_component_format";
 
 const int kCurrentFlocComponentFormatVersion = 3;
diff --git a/components/federated_learning/floc_constants.h b/components/federated_learning/floc_constants.h
index 61e393d..f5c50c7 100644
--- a/components/federated_learning/floc_constants.h
+++ b/components/federated_learning/floc_constants.h
@@ -11,24 +11,34 @@
 
 extern const uint8_t kMaxNumberOfBitsInFloc;
 
+// ---------------------------
+// For the preferences storage
+// ---------------------------
+extern const char kFlocIdValuePrefKey[];
+extern const char kFlocIdHistoryBeginTimePrefKey[];
+extern const char kFlocIdHistoryEndTimePrefKey[];
+extern const char kFlocIdSortingLshVersionPrefKey[];
+extern const char kFlocIdComputeTimePrefKey[];
 extern const char kManifestFlocComponentFormatKey[];
 
-extern const int kCurrentFlocComponentFormatVersion;
-
+// -----------------------------
+// For the sorting-lsh algorithm
+// -----------------------------
 extern const uint8_t kSortingLshMaxBits;
-
 extern const uint32_t kSortingLshBlockedMask;
-
 extern const uint32_t kSortingLshSizeMask;
 
+// ------------------------------
+// For the floc component updater
+// ------------------------------
+extern const int kCurrentFlocComponentFormatVersion;
+
 // The name of the top-level directory under the user data directory that
 // contains all files and subdirectories related to the floc.
 extern const base::FilePath::CharType kTopLevelDirectoryName[];
 
-// Paths under |kTopLevelDirectoryName|
-// ------------------------------------
-
-// The name of the file that stores the sorting-lsh clusters.
+// The name of the file that stores the sorting-lsh clusters. The file lives
+// under under |kTopLevelDirectoryName|
 extern const base::FilePath::CharType kSortingLshClustersFileName[];
 
 }  // namespace federated_learning
diff --git a/components/federated_learning/floc_id.cc b/components/federated_learning/floc_id.cc
index 122536d5..23a2df2 100644
--- a/components/federated_learning/floc_id.cc
+++ b/components/federated_learning/floc_id.cc
@@ -8,6 +8,8 @@
 #include "base/strings/string_number_conversions.h"
 #include "components/federated_learning/floc_constants.h"
 #include "components/federated_learning/sim_hash.h"
+#include "components/prefs/pref_registry_simple.h"
+#include "components/prefs/pref_service.h"
 
 namespace federated_learning {
 
@@ -65,4 +67,47 @@
                        base::NumberToString(sorting_lsh_version_)});
 }
 
+// static
+void FlocId::RegisterPrefs(PrefRegistrySimple* registry) {
+  registry->RegisterUint64Pref(kFlocIdValuePrefKey, 0);
+  registry->RegisterTimePref(kFlocIdHistoryBeginTimePrefKey, base::Time());
+  registry->RegisterTimePref(kFlocIdHistoryEndTimePrefKey, base::Time());
+  registry->RegisterUint64Pref(kFlocIdSortingLshVersionPrefKey, 0);
+  registry->RegisterTimePref(kFlocIdComputeTimePrefKey, base::Time());
+}
+
+void FlocId::SaveToPrefs(PrefService* local_state) {
+  if (!id_.has_value()) {
+    local_state->ClearPref(kFlocIdValuePrefKey);
+    return;
+  }
+
+  local_state->SetUint64(kFlocIdValuePrefKey, id_.value());
+  local_state->SetTime(kFlocIdHistoryBeginTimePrefKey, history_begin_time_);
+  local_state->SetTime(kFlocIdHistoryEndTimePrefKey, history_end_time_);
+  local_state->SetUint64(kFlocIdSortingLshVersionPrefKey, sorting_lsh_version_);
+}
+
+// static
+FlocId FlocId::ReadFromPrefs(PrefService* local_state) {
+  if (!local_state->HasPrefPath(kFlocIdValuePrefKey))
+    return FlocId();
+
+  return FlocId(local_state->GetUint64(kFlocIdValuePrefKey),
+                local_state->GetTime(kFlocIdHistoryBeginTimePrefKey),
+                local_state->GetTime(kFlocIdHistoryEndTimePrefKey),
+                local_state->GetUint64(kFlocIdSortingLshVersionPrefKey));
+}
+
+// static
+void FlocId::SaveComputeTimeToPrefs(base::Time compute_time,
+                                    PrefService* local_state) {
+  local_state->SetTime(kFlocIdComputeTimePrefKey, compute_time);
+}
+
+// static
+base::Time FlocId::ReadComputeTimeFromPrefs(PrefService* local_state) {
+  return local_state->GetTime(kFlocIdComputeTimePrefKey);
+}
+
 }  // namespace federated_learning
diff --git a/components/federated_learning/floc_id.h b/components/federated_learning/floc_id.h
index 7e3154e3..c43f9de4 100644
--- a/components/federated_learning/floc_id.h
+++ b/components/federated_learning/floc_id.h
@@ -8,12 +8,16 @@
 #include "base/optional.h"
 #include "base/time/time.h"
 #include "base/version.h"
+#include "components/prefs/prefs_export.h"
 
 #include <stdint.h>
 
 #include <string>
 #include <unordered_set>
 
+class PrefRegistrySimple;
+class PrefService;
+
 namespace federated_learning {
 
 // ID used to represent a cohort of people with similar browsing habits. For
@@ -50,6 +54,15 @@
 
   base::Time history_end_time() const { return history_end_time_; }
 
+  static void RegisterPrefs(PrefRegistrySimple* registry);
+
+  void SaveToPrefs(PrefService* local_state);
+  static FlocId ReadFromPrefs(PrefService* local_state);
+
+  static void SaveComputeTimeToPrefs(base::Time compute_time,
+                                     PrefService* local_state);
+  static base::Time ReadComputeTimeFromPrefs(PrefService* local_state);
+
  private:
   base::Optional<uint64_t> id_;
 
diff --git a/components/federated_learning/floc_id_unittest.cc b/components/federated_learning/floc_id_unittest.cc
index b2f6be0..fde16d8 100644
--- a/components/federated_learning/floc_id_unittest.cc
+++ b/components/federated_learning/floc_id_unittest.cc
@@ -4,6 +4,8 @@
 
 #include "components/federated_learning/floc_id.h"
 
+#include "components/federated_learning/floc_constants.h"
+#include "components/prefs/testing_pref_service.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace federated_learning {
@@ -37,4 +39,96 @@
   EXPECT_EQ("12345.1.2", FlocId(12345, kTime1, kTime1, 2).ToStringForJsApi());
 }
 
+TEST(FlocIdTest, ReadFromPrefs_DefaultInvalid) {
+  TestingPrefServiceSimple local_state;
+  FlocId::RegisterPrefs(local_state.registry());
+
+  FlocId floc_id = FlocId::ReadFromPrefs(&local_state);
+  EXPECT_FALSE(floc_id.IsValid());
+
+  base::Time compute_time = FlocId::ReadComputeTimeFromPrefs(&local_state);
+  EXPECT_TRUE(compute_time.is_null());
+}
+
+TEST(FlocIdTest, ReadFromPrefs_SavedInvalid) {
+  TestingPrefServiceSimple local_state;
+  FlocId::RegisterPrefs(local_state.registry());
+
+  local_state.ClearPref(kFlocIdValuePrefKey);
+  local_state.SetTime(kFlocIdHistoryBeginTimePrefKey, base::Time::FromTimeT(1));
+  local_state.SetTime(kFlocIdHistoryEndTimePrefKey, base::Time::FromTimeT(2));
+  local_state.SetUint64(kFlocIdSortingLshVersionPrefKey, 2);
+
+  FlocId floc_id = FlocId::ReadFromPrefs(&local_state);
+  EXPECT_FALSE(floc_id.IsValid());
+
+  local_state.SetTime(kFlocIdComputeTimePrefKey, base::Time());
+  base::Time compute_time = FlocId::ReadComputeTimeFromPrefs(&local_state);
+  EXPECT_TRUE(compute_time.is_null());
+}
+
+TEST(FlocIdTest, ReadFromPrefs_SavedValid) {
+  TestingPrefServiceSimple local_state;
+  FlocId::RegisterPrefs(local_state.registry());
+
+  local_state.SetUint64(kFlocIdValuePrefKey, 123);
+  local_state.SetTime(kFlocIdHistoryBeginTimePrefKey, base::Time::FromTimeT(1));
+  local_state.SetTime(kFlocIdHistoryEndTimePrefKey, base::Time::FromTimeT(2));
+  local_state.SetUint64(kFlocIdSortingLshVersionPrefKey, 2);
+
+  FlocId floc_id = FlocId::ReadFromPrefs(&local_state);
+  EXPECT_EQ(floc_id,
+            FlocId(123, base::Time::FromTimeT(1), base::Time::FromTimeT(2), 2));
+
+  local_state.SetTime(kFlocIdComputeTimePrefKey, base::Time::FromTimeT(3));
+  base::Time compute_time = FlocId::ReadComputeTimeFromPrefs(&local_state);
+  EXPECT_EQ(compute_time, base::Time::FromTimeT(3));
+}
+
+TEST(FlocIdTest, SaveToPrefs_InvalidFloc) {
+  TestingPrefServiceSimple local_state;
+  FlocId::RegisterPrefs(local_state.registry());
+
+  FlocId floc_id;
+  floc_id.SaveToPrefs(&local_state);
+
+  EXPECT_FALSE(local_state.HasPrefPath(kFlocIdValuePrefKey));
+  EXPECT_FALSE(local_state.HasPrefPath(kFlocIdHistoryBeginTimePrefKey));
+  EXPECT_FALSE(local_state.HasPrefPath(kFlocIdHistoryEndTimePrefKey));
+  EXPECT_FALSE(local_state.HasPrefPath(kFlocIdSortingLshVersionPrefKey));
+
+  EXPECT_EQ(0u, local_state.GetUint64(kFlocIdValuePrefKey));
+  EXPECT_TRUE(local_state.GetTime(kFlocIdHistoryBeginTimePrefKey).is_null());
+  EXPECT_TRUE(local_state.GetTime(kFlocIdHistoryEndTimePrefKey).is_null());
+  EXPECT_EQ(0u, local_state.GetUint64(kFlocIdSortingLshVersionPrefKey));
+
+  FlocId::SaveComputeTimeToPrefs(base::Time(), &local_state);
+  EXPECT_TRUE(local_state.GetTime(kFlocIdComputeTimePrefKey).is_null());
+}
+
+TEST(FlocIdTest, SaveToPrefs_ValidFloc) {
+  TestingPrefServiceSimple local_state;
+  FlocId::RegisterPrefs(local_state.registry());
+
+  FlocId floc_id =
+      FlocId(123, base::Time::FromTimeT(1), base::Time::FromTimeT(2), 2);
+  floc_id.SaveToPrefs(&local_state);
+
+  EXPECT_TRUE(local_state.HasPrefPath(kFlocIdValuePrefKey));
+  EXPECT_TRUE(local_state.HasPrefPath(kFlocIdHistoryBeginTimePrefKey));
+  EXPECT_TRUE(local_state.HasPrefPath(kFlocIdHistoryEndTimePrefKey));
+  EXPECT_TRUE(local_state.HasPrefPath(kFlocIdSortingLshVersionPrefKey));
+
+  EXPECT_EQ(123u, local_state.GetUint64(kFlocIdValuePrefKey));
+  EXPECT_EQ(base::Time::FromTimeT(1),
+            local_state.GetTime(kFlocIdHistoryBeginTimePrefKey));
+  EXPECT_EQ(base::Time::FromTimeT(2),
+            local_state.GetTime(kFlocIdHistoryEndTimePrefKey));
+  EXPECT_EQ(2u, local_state.GetUint64(kFlocIdSortingLshVersionPrefKey));
+
+  FlocId::SaveComputeTimeToPrefs(base::Time::FromTimeT(3), &local_state);
+  EXPECT_EQ(base::Time::FromTimeT(3),
+            local_state.GetTime(kFlocIdComputeTimePrefKey));
+}
+
 }  // namespace federated_learning
diff --git a/components/feed/features.gni b/components/feed/features.gni
index 627f7d7b..c64f6c6 100644
--- a/components/feed/features.gni
+++ b/components/feed/features.gni
@@ -21,6 +21,10 @@
 
   # Whether to include Feed V2 as a DFM in ChromeModern builds.
   dfmify_feed_v2_modern = false
+
+  # Set to "true" or "false" to override whether Feed uses
+  # doubledown. Provided for use with pinpoint.
+  override_use_doubledown_feed = "use_default"
 }
 
 if (is_android && android_channel != "default") {
diff --git a/components/metrics/metrics_service.cc b/components/metrics/metrics_service.cc
index 63ce2bb..6ad944c 100644
--- a/components/metrics/metrics_service.cc
+++ b/components/metrics/metrics_service.cc
@@ -296,7 +296,7 @@
   reporting_service_.DisableReporting();
 }
 
-std::string MetricsService::GetClientId() {
+std::string MetricsService::GetClientId() const {
   return state_manager_->client_id();
 }
 
diff --git a/components/metrics/metrics_service.h b/components/metrics/metrics_service.h
index 5e28d30..ac02374f 100644
--- a/components/metrics/metrics_service.h
+++ b/components/metrics/metrics_service.h
@@ -96,7 +96,7 @@
 
   // Returns the client ID for this client, or the empty string if metrics
   // recording is not currently running.
-  std::string GetClientId();
+  std::string GetClientId() const;
 
   // Returns the install date of the application, in seconds since the epoch.
   int64_t GetInstallDate();
diff --git a/components/no_state_prefetch/browser/prerender_manager.cc b/components/no_state_prefetch/browser/prerender_manager.cc
index 1d2bb54..ac3e969 100644
--- a/components/no_state_prefetch/browser/prerender_manager.cc
+++ b/components/no_state_prefetch/browser/prerender_manager.cc
@@ -15,6 +15,7 @@
 #include "base/bind.h"
 #include "base/callback_helpers.h"
 #include "base/check_op.h"
+#include "base/command_line.h"
 #include "base/location.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
@@ -49,6 +50,7 @@
 #include "content/public/browser/site_instance.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_delegate.h"
+#include "content/public/common/content_switches.h"
 #include "content/public/common/url_constants.h"
 #include "net/http/http_cache.h"
 #include "net/http/http_request_headers.h"
@@ -491,6 +493,13 @@
     SessionStorageNamespace* session_storage_namespace) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
+  base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+  if (command_line && command_line->HasSwitch(switches::kSingleProcess)) {
+    SkipPrerenderContentsAndMaybePreconnect(url_arg, origin,
+                                            FINAL_STATUS_SINGLE_PROCESS);
+    return nullptr;
+  }
+
   // Disallow prerendering on low end devices.
   if (IsLowEndDevice()) {
     SkipPrerenderContentsAndMaybePreconnect(url_arg, origin,
@@ -925,7 +934,7 @@
   }
 
   static_assert(
-      FINAL_STATUS_MAX == FINAL_STATUS_NAVIGATION_PREDICTOR_HOLDBACK + 1,
+      FINAL_STATUS_MAX == FINAL_STATUS_SINGLE_PROCESS + 1,
       "Consider whether a failed prerender should fallback to preconnect");
 }
 
diff --git a/components/no_state_prefetch/common/prerender_final_status.cc b/components/no_state_prefetch/common/prerender_final_status.cc
index ead7cd0..0029e8c 100644
--- a/components/no_state_prefetch/common/prerender_final_status.cc
+++ b/components/no_state_prefetch/common/prerender_final_status.cc
@@ -74,6 +74,7 @@
     "GWS Holdback",
     "Unknown",
     "Navigation Predictor Holdback",
+    "Single Process Mode",
     "Max",
 };
 static_assert(base::size(kFinalStatusNames) == FINAL_STATUS_MAX + 1,
diff --git a/components/no_state_prefetch/common/prerender_final_status.h b/components/no_state_prefetch/common/prerender_final_status.h
index 4e608b5..e827c2dd 100644
--- a/components/no_state_prefetch/common/prerender_final_status.h
+++ b/components/no_state_prefetch/common/prerender_final_status.h
@@ -79,6 +79,7 @@
   FINAL_STATUS_GWS_HOLDBACK = 59,
   FINAL_STATUS_UNKNOWN = 60,
   FINAL_STATUS_NAVIGATION_PREDICTOR_HOLDBACK = 61,
+  FINAL_STATUS_SINGLE_PROCESS = 62,
   FINAL_STATUS_MAX,
 };
 
@@ -88,4 +89,4 @@
 
 }  // namespace prerender
 
-#endif  // COMPONENTS_NO_STATE_PREFETCH_COMMON_PRERENDER_FINAL_STATUS_H_
\ No newline at end of file
+#endif  // COMPONENTS_NO_STATE_PREFETCH_COMMON_PRERENDER_FINAL_STATUS_H_
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc
index 32bc9c31..ff651f2a 100644
--- a/components/password_manager/core/common/password_manager_features.cc
+++ b/components/password_manager/core/common/password_manager_features.cc
@@ -30,6 +30,12 @@
 const base::Feature kEditPasswordsInSettings = {
     "EditPasswordsInSettings", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enables UI in settings that allows the user to move multiple passwords to the
+// account storage.
+const base::Feature kEnableMovingMultiplePasswordsToAccount = {
+    "EnableMovingMultiplePasswordsToAccount",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enables the overwriting of prefilled username fields if the server predicted
 // the field to contain a placeholder value.
 const base::Feature kEnableOverwritingPlaceholderUsernames{
diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h
index 097b5ec..2eac713 100644
--- a/components/password_manager/core/common/password_manager_features.h
+++ b/components/password_manager/core/common/password_manager_features.h
@@ -21,6 +21,7 @@
 extern const base::Feature kChangePasswordAffiliationInfo;
 extern const base::Feature kEditPasswordsInSettings;
 extern const base::Feature kDetectFormSubmissionOnFormClear;
+extern const base::Feature kEnableMovingMultiplePasswordsToAccount;
 extern const base::Feature kEnableOverwritingPlaceholderUsernames;
 extern const base::Feature kEnablePasswordsAccountStorage;
 extern const base::Feature KEnablePasswordGenerationForClearTextFields;
diff --git a/components/payments/content/android/BUILD.gn b/components/payments/content/android/BUILD.gn
index 8320d92..91bfc62 100644
--- a/components/payments/content/android/BUILD.gn
+++ b/components/payments/content/android/BUILD.gn
@@ -135,6 +135,7 @@
     "java/src/org/chromium/components/payments/PaymentRequestService.java",
     "java/src/org/chromium/components/payments/PaymentRequestServiceUtil.java",
     "java/src/org/chromium/components/payments/PaymentRequestSpec.java",
+    "java/src/org/chromium/components/payments/PaymentResponseHelper.java",
     "java/src/org/chromium/components/payments/PaymentResponseHelperInterface.java",
     "java/src/org/chromium/components/payments/PaymentUiServiceTestInterface.java",
     "java/src/org/chromium/components/payments/PaymentValidator.java",
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/BrowserPaymentRequest.java b/components/payments/content/android/java/src/org/chromium/components/payments/BrowserPaymentRequest.java
index 1f88701..1a643df 100644
--- a/components/payments/content/android/java/src/org/chromium/components/payments/BrowserPaymentRequest.java
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/BrowserPaymentRequest.java
@@ -60,11 +60,11 @@
     void complete(int result, Runnable onCompleteHandled);
 
     /**
-     * The browser part of the {@link PaymentRequest#retry} implementation.
+     * Called when {@link PaymentRequest#retry} is invoked.
      * @param errors The merchant-defined error message strings, which are used to indicate to the
      *         end-user that something is wrong with the data of the payment response.
      */
-    void retry(PaymentValidationErrors errors);
+    void onRetry(PaymentValidationErrors errors);
 
     /**
      * Close this instance. The callers of this method should stop referencing this instance upon
@@ -73,18 +73,18 @@
     void close();
 
     /**
-     * Modifies the given method data.
+     * Modifies the given method data if needed, called when methodData is created.
      * @param methodData A map of method names to PaymentMethodData, could be null. This parameter
      * could be modified in place.
      */
-    default void modifyMethodData(@Nullable Map<String, PaymentMethodData> methodData) {}
+    default void modifyMethodDataIfNeeded(@Nullable Map<String, PaymentMethodData> methodData) {}
 
     /**
-     * Called when queryForQuota is created.
+     * Modifies queryForQuota if needed, called when queryForQuota is created.
      * @param queryForQuota The created queryForQuota, which could be modified in place.
      * @param paymentOptions The payment options specified by the merchant.
      */
-    default void onQueryForQuotaCreated(
+    default void modifyQueryForQuotaCreatedIfNeeded(
             Map<String, PaymentMethodData> queryForQuota, PaymentOptions paymentOptions) {}
 
     /**
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java
index 55bcabbe..5a3b214 100644
--- a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentRequestService.java
@@ -494,7 +494,7 @@
                 googlePayBridgeEligible, mWebContents, rawMethodData);
         @Nullable
         Map<String, PaymentMethodData> methodData = getValidatedMethodData(rawMethodData);
-        mBrowserPaymentRequest.modifyMethodData(methodData);
+        mBrowserPaymentRequest.modifyMethodDataIfNeeded(methodData);
         if (methodData == null) {
             mJourneyLogger.setAborted(AbortReason.INVALID_DATA_FROM_RENDERER);
             disconnectFromClientWithDebugMessage(
@@ -504,7 +504,7 @@
         methodData = Collections.unmodifiableMap(methodData);
 
         mQueryForQuota = new HashMap<>(methodData);
-        mBrowserPaymentRequest.onQueryForQuotaCreated(mQueryForQuota, mPaymentOptions);
+        mBrowserPaymentRequest.modifyQueryForQuotaCreatedIfNeeded(mQueryForQuota, mPaymentOptions);
 
         if (!PaymentValidator.validatePaymentDetails(details)) {
             mJourneyLogger.setAborted(AbortReason.INVALID_DATA_FROM_RENDERER);
@@ -1133,7 +1133,7 @@
         assert mSpec != null;
         assert !mSpec.isDestroyed() : "mSpec should not be used after being destroyed.";
         mSpec.retry(errors);
-        mBrowserPaymentRequest.retry(errors);
+        mBrowserPaymentRequest.onRetry(errors);
     }
 
     /** The component part of the {@link PaymentRequest#canMakePayment} implementation. */
diff --git a/components/payments/content/android/java/src/org/chromium/components/payments/PaymentResponseHelper.java b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentResponseHelper.java
new file mode 100644
index 0000000..b06b1010
--- /dev/null
+++ b/components/payments/content/android/java/src/org/chromium/components/payments/PaymentResponseHelper.java
@@ -0,0 +1,54 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.payments;
+
+import org.chromium.payments.mojom.PayerDetail;
+import org.chromium.payments.mojom.PaymentOptions;
+import org.chromium.payments.mojom.PaymentResponse;
+
+/**
+ * The helper class that generates a {@link PaymentResponse} with the input of payment details.
+ * Compared to ChromePaymentResponseHelper, this helper does not handle the Autofill data, and so
+ * can be used for WebLayerPaymentRequestService.
+ */
+public class PaymentResponseHelper implements PaymentResponseHelperInterface {
+    private final PaymentResponse mPaymentResponse;
+    private final PaymentOptions mPaymentOptions;
+    private final boolean mPaymentAppHandlesShippingAddress;
+
+    /**
+     * Creates an instance of the helper.
+     * @param paymentAppHandlesShippingAddress Whether the selected payment app handles shipping
+     *        address.
+     * @param paymentOptions The payment options specified in the payment request.
+     */
+    public PaymentResponseHelper(
+            boolean paymentAppHandlesShippingAddress, PaymentOptions paymentOptions) {
+        mPaymentAppHandlesShippingAddress = paymentAppHandlesShippingAddress;
+        mPaymentOptions = paymentOptions;
+        mPaymentResponse = new PaymentResponse();
+        mPaymentResponse.payer = new PayerDetail();
+    }
+
+    @Override
+    public void generatePaymentResponse(String methodName, String stringifiedDetails,
+            PayerData payerData, PaymentResponseResultCallback resultCallback) {
+        mPaymentResponse.methodName = methodName;
+        mPaymentResponse.stringifiedDetails = stringifiedDetails;
+        // Set up the shipping section of the response when it comes from payment app.
+        if (mPaymentOptions.requestShipping && mPaymentAppHandlesShippingAddress) {
+            mPaymentResponse.shippingAddress =
+                    PaymentAddressTypeConverter.convertAddressToMojoPaymentAddress(
+                            payerData.shippingAddress);
+            mPaymentResponse.shippingOption = payerData.selectedShippingOptionId;
+        }
+
+        mPaymentResponse.payer.name = payerData.payerName;
+        mPaymentResponse.payer.phone = payerData.payerPhone;
+        mPaymentResponse.payer.email = payerData.payerEmail;
+
+        resultCallback.onPaymentResponseReady(mPaymentResponse);
+    }
+}
diff --git a/components/payments/content/payment_request.cc b/components/payments/content/payment_request.cc
index 4198010..86d0702 100644
--- a/components/payments/content/payment_request.cc
+++ b/components/payments/content/payment_request.cc
@@ -95,13 +95,13 @@
       journey_logger_(delegate_->IsOffTheRecord(),
                       ukm::GetSourceIdForWebContentsDocument(web_contents())) {
   receiver_.Bind(std::move(receiver));
-  // OnConnectionTerminated will be called when the Mojo pipe is closed. This
+  // TerminateConnection will be called when the Mojo pipe is closed. This
   // will happen as a result of many renderer-side events (both successful and
   // erroneous in nature).
   // TODO(crbug.com/683636): Investigate using
   // set_connection_error_with_reason_handler with Binding::CloseWithReason.
   receiver_.set_disconnect_handler(base::BindOnce(
-      &PaymentRequest::OnConnectionTerminated, weak_ptr_factory_.GetWeakPtr()));
+      &PaymentRequest::TerminateConnection, weak_ptr_factory_.GetWeakPtr()));
 
   payment_handler_host_ = std::make_unique<PaymentHandlerHost>(
       web_contents(), weak_ptr_factory_.GetWeakPtr());
@@ -118,7 +118,7 @@
 
   if (is_initialized_) {
     log_.Error(errors::kAttemptedInitializationTwice);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -130,7 +130,7 @@
   const GURL last_committed_url = delegate_->GetLastCommittedURL();
   if (!blink::network_utils::IsOriginSecure(last_committed_url)) {
     log_.Error(errors::kNotInASecureOrigin);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -155,20 +155,35 @@
     client_->OnError(
         mojom::PaymentErrorReason::NOT_SUPPORTED_FOR_INVALID_ORIGIN_OR_SSL,
         reject_show_error_message_);
-    OnConnectionTerminated();
+    TerminateConnection();
+    return;
+  }
+
+  if (method_data.empty()) {
+    log_.Error(errors::kMethodDataRequired);
+    TerminateConnection();
+    return;
+  }
+
+  if (std::any_of(method_data.begin(), method_data.end(),
+                  [](const auto& datum) {
+                    return !datum || datum->supported_method.empty();
+                  })) {
+    log_.Error(errors::kMethodNameRequired);
+    TerminateConnection();
     return;
   }
 
   std::string error;
   if (!ValidatePaymentDetails(ConvertPaymentDetails(details), &error)) {
     log_.Error(error);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
   if (!details->total) {
     log_.Error(errors::kTotalRequired);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -176,7 +191,7 @@
       content::RenderFrameHost::FromID(initiator_frame_routing_id_);
   if (!initiator_frame) {
     log_.Error(errors::kInvalidInitiatorFrame);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -246,13 +261,13 @@
 void PaymentRequest::Show(bool is_user_gesture, bool wait_for_updated_details) {
   if (!IsInitialized()) {
     log_.Error(errors::kCannotShowWithoutInit);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
   if (is_show_called_) {
     log_.Error(errors::kCannotShowTwice);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -271,7 +286,7 @@
         JourneyLogger::NOT_SHOWN_REASON_CONCURRENT_REQUESTS);
     client_->OnError(mojom::PaymentErrorReason::ALREADY_SHOWING,
                      errors::kAnotherUiShowing);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -282,7 +297,7 @@
     journey_logger_.SetNotShown(JourneyLogger::NOT_SHOWN_REASON_OTHER);
     client_->OnError(mojom::PaymentErrorReason::USER_CANCEL,
                      errors::kCannotShowInBackgroundTab);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -316,13 +331,13 @@
 void PaymentRequest::Retry(mojom::PaymentValidationErrorsPtr errors) {
   if (!IsInitialized()) {
     log_.Error(errors::kCannotRetryWithoutInit);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
   if (!IsThisPaymentRequestShowing()) {
     log_.Error(errors::kCannotRetryWithoutShow);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -331,7 +346,7 @@
                                                                 &error)) {
     log_.Error(error);
     client_->OnError(mojom::PaymentErrorReason::USER_CANCEL, error);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -346,20 +361,20 @@
 void PaymentRequest::UpdateWith(mojom::PaymentDetailsPtr details) {
   if (!IsInitialized()) {
     log_.Error(errors::kCannotUpdateWithoutInit);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
   if (!IsThisPaymentRequestShowing()) {
     log_.Error(errors::kCannotUpdateWithoutShow);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
   std::string error;
   if (!ValidatePaymentDetails(ConvertPaymentDetails(details), &error)) {
     log_.Error(error);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -367,7 +382,7 @@
       !PaymentsValidators::IsValidAddressErrorsFormat(
           details->shipping_address_errors, &error)) {
     log_.Error(error);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -409,13 +424,13 @@
   // be more verbose.
   if (!IsInitialized()) {
     log_.Error(errors::kNotInitialized);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
   if (!IsThisPaymentRequestShowing()) {
     log_.Error(errors::kNotShown);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -430,19 +445,19 @@
 void PaymentRequest::Abort() {
   if (!IsInitialized()) {
     log_.Error(errors::kCannotAbortWithoutInit);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
   if (!IsThisPaymentRequestShowing()) {
     log_.Error(errors::kCannotAbortWithoutShow);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
   // The API user has decided to abort. If a successful abort message is
   // returned to the renderer, the Mojo message pipe is closed, which triggers
-  // PaymentRequest::OnConnectionTerminated, which destroys this object.
+  // PaymentRequest::TerminateConnection, which destroys this object.
   // Otherwise, the abort promise is rejected and the pipe is not closed.
   // The abort is only successful if the payment app wasn't yet invoked.
   // TODO(crbug.com/716546): Add a merchant abort metric
@@ -462,13 +477,13 @@
 void PaymentRequest::Complete(mojom::PaymentComplete result) {
   if (!IsInitialized()) {
     log_.Error(errors::kCannotCompleteWithoutInit);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
   if (!IsThisPaymentRequestShowing()) {
     log_.Error(errors::kCannotAbortWithoutShow);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -492,7 +507,7 @@
     delegate_->GetPrefService()->SetBoolean(kPaymentsFirstTransactionCompleted,
                                             true);
     // When the renderer closes the connection,
-    // PaymentRequest::OnConnectionTerminated will be called.
+    // PaymentRequest::TerminateConnection will be called.
     client_->OnComplete();
     state_->RecordUseStats();
   }
@@ -501,7 +516,7 @@
 void PaymentRequest::CanMakePayment() {
   if (!IsInitialized()) {
     log_.Error(errors::kCannotCallCanMakePaymentWithoutInit);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -522,7 +537,7 @@
 void PaymentRequest::HasEnrolledInstrument() {
   if (!IsInitialized()) {
     log_.Error(errors::kCannotCallHasEnrolledInstrumentWithoutInit);
-    OnConnectionTerminated();
+    TerminateConnection();
     return;
   }
 
@@ -621,7 +636,7 @@
                          (error_message.empty() ? "" : " " + error_message));
     if (observer_for_testing_)
       observer_for_testing_->OnNotSupportedError();
-    OnConnectionTerminated();
+    TerminateConnection();
   }
 }
 
@@ -814,10 +829,10 @@
   // torn down anyways when RenderFrameHost is destroyed. It's not safe to call
   // UserCancelled() here because it is not re-entrant.
   // TODO(crbug.com/1121841) Make UserCancelled re-entrant.
-  OnConnectionTerminated();
+  TerminateConnection();
 }
 
-void PaymentRequest::OnConnectionTerminated() {
+void PaymentRequest::TerminateConnection() {
   // We are here because of a browser-side error, or likely as a result of the
   // disconnect_handler on |receiver_|, which can mean that the renderer
   // has decided to close the pipe for various reasons (see all uses of
diff --git a/components/payments/content/payment_request.h b/components/payments/content/payment_request.h
index e394c3c..e218b69d7 100644
--- a/components/payments/content/payment_request.h
+++ b/components/payments/content/payment_request.h
@@ -105,7 +105,7 @@
 
   // Called when the user explicitly cancelled the flow. Will send a message
   // to the renderer which will indirectly destroy this object (through
-  // OnConnectionTerminated).
+  // TerminateConnection).
   void UserCancelled();
 
   // Called when the main frame attached to this PaymentRequest is navigating to
@@ -122,7 +122,7 @@
   // closure (e.g. there was an error on the renderer side, or payment was
   // successful), this method is called. It is responsible for cleaning up,
   // such as possibly closing the dialog.
-  void OnConnectionTerminated();
+  void TerminateConnection();
 
   // Called when the user clicks on the "Pay" button.
   void Pay();
diff --git a/components/permissions/BUILD.gn b/components/permissions/BUILD.gn
index dc13b61..10c8d34 100644
--- a/components/permissions/BUILD.gn
+++ b/components/permissions/BUILD.gn
@@ -19,6 +19,8 @@
     "contexts/font_access_permission_context.h",
     "contexts/geolocation_permission_context.cc",
     "contexts/geolocation_permission_context.h",
+    "contexts/payment_handler_permission_context.cc",
+    "contexts/payment_handler_permission_context.h",
     "contexts/webxr_permission_context.cc",
     "contexts/webxr_permission_context.h",
     "notification_permission_ui_selector.cc",
diff --git a/chrome/browser/payments/payment_handler_permission_context.cc b/components/permissions/contexts/payment_handler_permission_context.cc
similarity index 94%
rename from chrome/browser/payments/payment_handler_permission_context.cc
rename to components/permissions/contexts/payment_handler_permission_context.cc
index 2872651..02021ad 100644
--- a/chrome/browser/payments/payment_handler_permission_context.cc
+++ b/components/permissions/contexts/payment_handler_permission_context.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/payments/payment_handler_permission_context.h"
+#include "components/permissions/contexts/payment_handler_permission_context.h"
 
 #include "base/notreached.h"
 #include "components/content_settings/core/common/content_settings_types.h"
diff --git a/chrome/browser/payments/payment_handler_permission_context.h b/components/permissions/contexts/payment_handler_permission_context.h
similarity index 82%
rename from chrome/browser/payments/payment_handler_permission_context.h
rename to components/permissions/contexts/payment_handler_permission_context.h
index c9c006c..7a2e134 100644
--- a/chrome/browser/payments/payment_handler_permission_context.h
+++ b/components/permissions/contexts/payment_handler_permission_context.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CHROME_BROWSER_PAYMENTS_PAYMENT_HANDLER_PERMISSION_CONTEXT_H_
-#define CHROME_BROWSER_PAYMENTS_PAYMENT_HANDLER_PERMISSION_CONTEXT_H_
+#ifndef COMPONENTS_PERMISSIONS_CONTEXTS_PAYMENT_HANDLER_PERMISSION_CONTEXT_H_
+#define COMPONENTS_PERMISSIONS_CONTEXTS_PAYMENT_HANDLER_PERMISSION_CONTEXT_H_
 
 #include "base/macros.h"
 #include "components/permissions/permission_context_base.h"
@@ -43,4 +43,4 @@
 
 }  // namespace payments
 
-#endif  // CHROME_BROWSER_PAYMENTS_PAYMENT_HANDLER_PERMISSION_CONTEXT_H_
+#endif  // COMPONENTS_PERMISSIONS_CONTEXTS_PAYMENT_HANDLER_PERMISSION_CONTEXT_H_
diff --git a/components/policy/core/browser/configuration_policy_pref_store_test.cc b/components/policy/core/browser/configuration_policy_pref_store_test.cc
index 12e8354..4d51266 100644
--- a/components/policy/core/browser/configuration_policy_pref_store_test.cc
+++ b/components/policy/core/browser/configuration_policy_pref_store_test.cc
@@ -29,6 +29,8 @@
                     /* allow_all_future_policies*/ true) {
   EXPECT_CALL(provider_, IsInitializationComplete(_))
       .WillRepeatedly(Return(false));
+  ON_CALL(provider_, IsFirstPolicyLoadComplete(_)).WillByDefault(Return(false));
+
   provider_.Init();
   providers_.push_back(&provider_);
   policy_service_ = std::make_unique<PolicyServiceImpl>(providers_);
diff --git a/components/policy/core/browser/configuration_policy_pref_store_test.h b/components/policy/core/browser/configuration_policy_pref_store_test.h
index d404fd4e..65cd2b0 100644
--- a/components/policy/core/browser/configuration_policy_pref_store_test.h
+++ b/components/policy/core/browser/configuration_policy_pref_store_test.h
@@ -35,7 +35,7 @@
 
   PolicyServiceImpl::Providers providers_;
   ConfigurationPolicyHandlerList handler_list_;
-  MockConfigurationPolicyProvider provider_;
+  testing::NiceMock<MockConfigurationPolicyProvider> provider_;
   std::unique_ptr<PolicyServiceImpl> policy_service_;
   scoped_refptr<ConfigurationPolicyPrefStore> store_;
   base::test::SingleThreadTaskEnvironment task_environment_;
diff --git a/components/policy/core/browser/policy_pref_mapping_test.cc b/components/policy/core/browser/policy_pref_mapping_test.cc
index ce60f8e..f0d41a4 100644
--- a/components/policy/core/browser/policy_pref_mapping_test.cc
+++ b/components/policy/core/browser/policy_pref_mapping_test.cc
@@ -35,6 +35,21 @@
 // to be parsed.
 const char kTemplateSampleTest[] = "-- Template --";
 
+enum class PrefLocation {
+  kUserProfile,
+  kLocalState,
+};
+
+PrefLocation GetPrefLocation(const base::Value& settings) {
+  const std::string* location = settings.FindStringKey("location");
+  if (!location || *location == "user_profile")
+    return PrefLocation::kUserProfile;
+  if (*location == "local_state")
+    return PrefLocation::kLocalState;
+  NOTREACHED() << "Unknown pref location: " << *location;
+  return PrefLocation::kUserProfile;
+}
+
 std::string GetPolicyName(const std::string& policy_name_decorated) {
   const size_t offset = policy_name_decorated.find('.');
   if (offset != std::string::npos)
@@ -93,7 +108,7 @@
   explicit PrefTestCase(const std::string& name, const base::Value& settings) {
     const base::Value* value = settings.FindKey("value");
     const base::Value* indicator_test = settings.FindDictKey("indicator_test");
-    is_local_state_ = settings.FindBoolKey("local_state").value_or(false);
+    location_ = GetPrefLocation(settings);
     check_for_mandatory_ =
         settings.FindBoolKey("check_for_mandatory").value_or(true);
     check_for_recommended_ =
@@ -116,7 +131,7 @@
   const std::string& pref() const { return pref_; }
   const base::Value* value() const { return value_.get(); }
 
-  bool is_local_state() const { return is_local_state_; }
+  PrefLocation location() const { return location_; }
 
   bool check_for_mandatory() const { return check_for_mandatory_; }
 
@@ -131,7 +146,7 @@
  private:
   std::string pref_;
   std::unique_ptr<base::Value> value_;
-  bool is_local_state_;
+  PrefLocation location_;
   bool check_for_mandatory_;
   bool check_for_recommended_;
   bool expect_default_;
@@ -233,10 +248,6 @@
       }
     }
 
-    const base::Value* test_policy = test_case.FindDictKey("test_policy");
-    if (test_policy)
-      test_policy_ = test_policy->CreateDeepCopy();
-
     const base::Value* policy_pref_mapping_tests =
         test_case.FindListKey("policy_pref_mapping_tests");
     if (policy_pref_mapping_tests) {
@@ -285,8 +296,6 @@
     return IsOsSupported();
   }
 
-  const base::Value* test_policy() const { return test_policy_.get(); }
-
   const std::vector<std::unique_ptr<PolicyPrefMappingTest>>&
   policy_pref_mapping_test() const {
     return policy_pref_mapping_test_;
@@ -297,7 +306,6 @@
   bool is_official_only_;
   bool can_be_recommended_;
   std::vector<std::string> supported_os_;
-  std::unique_ptr<base::Value> test_policy_;
   std::vector<std::unique_ptr<PolicyPrefMappingTest>> policy_pref_mapping_test_;
 };
 
@@ -395,7 +403,7 @@
 
     // This can only be a warning as many policies are not really testable
     // this way and only present as a single line in the file.
-    // Although they could at least contain the "os" and "test_policy" fields.
+    // Although they could at least contain the "os" fields.
     // See http://crbug.com/791125.
     LOG_IF(WARNING, !has_test_case_for_this_os)
         << "Policy " << policy->first
@@ -463,7 +471,8 @@
             continue;
 
           PrefService* prefs =
-              pref_case->is_local_state() ? local_state : user_prefs;
+              pref_case->location() == PrefLocation::kLocalState ? local_state
+                                                                 : user_prefs;
           // The preference must have been registered.
           const PrefService::Preference* pref =
               prefs->FindPreference(pref_case->pref().c_str());
diff --git a/components/policy/core/common/cloud/enterprise_metrics.cc b/components/policy/core/common/cloud/enterprise_metrics.cc
index e56b98d..971cf1f 100644
--- a/components/policy/core/common/cloud/enterprise_metrics.cc
+++ b/components/policy/core/common/cloud/enterprise_metrics.cc
@@ -14,9 +14,6 @@
 const char kMetricUserPolicyInvalidationsFcm[] =
     "Enterprise.FCMInvalidationService.PolicyInvalidations";
 
-const char kMetricUserPolicyChromeOSSessionAbort[] =
-    "Enterprise.UserPolicyChromeOS.SessionAbort";
-
 const char kMetricDevicePolicyRefresh[] = "Enterprise.DevicePolicyRefresh3";
 const char kMetricDevicePolicyRefreshFcm[] =
     "Enterprise.FCMInvalidationService.DevicePolicyRefresh3";
diff --git a/components/policy/core/common/cloud/enterprise_metrics.h b/components/policy/core/common/cloud/enterprise_metrics.h
index a790c9d..428339f 100644
--- a/components/policy/core/common/cloud/enterprise_metrics.h
+++ b/components/policy/core/common/cloud/enterprise_metrics.h
@@ -202,31 +202,6 @@
   kMaxValue = kInvalid,  // Must be the last.
 };
 
-#if defined(OS_CHROMEOS)
-// Events related to Chrome OS user policy which cause session abort.
-// This enum is used to define the buckets for an enumerated UMA histogram.
-// Hence,
-//   (a) existing enumerated constants should never be deleted or reordered, and
-//   (b) new constants should only be appended at the end of the enumeration
-//       (update tools/metrics/histograms/enums.xml as well).
-enum class MetricUserPolicyChromeOSSessionAbortType {
-  // Abort of asynchronous user policy initialization when the user is managed
-  // with the Google cloud management.
-  kInitWithGoogleCloudManagement = 0,
-  // Abort of asynchronous user policy initialization when the user is managed
-  // with the Active Directory management.
-  kInitWithActiveDirectoryManagement = 1,
-  // Abort of blocking (synchronous) user policy initialization when the user is
-  // managed with the Google cloud management.
-  kBlockingInitWithGoogleCloudManagement = 2,
-  // Abort of blocking (synchronous) user policy initialization when the user is
-  // managed with the Active Directory management.
-  kBlockingInitWithActiveDirectoryManagement = 3,
-
-  kCount,  // Must be the last.
-};
-#endif  // defined(OS_CHROMEOS)
-
 // Names for the UMA counters. They are shared from here since the events
 // from the same enum above can be triggered in different files, and must use
 // the same UMA histogram name.
@@ -237,7 +212,6 @@
 POLICY_EXPORT extern const char kMetricUserPolicyRefreshFcm[];
 POLICY_EXPORT extern const char kMetricUserPolicyInvalidations[];
 POLICY_EXPORT extern const char kMetricUserPolicyInvalidationsFcm[];
-POLICY_EXPORT extern const char kMetricUserPolicyChromeOSSessionAbort[];
 
 POLICY_EXPORT extern const char kMetricDevicePolicyRefresh[];
 POLICY_EXPORT extern const char kMetricDevicePolicyRefreshFcm[];
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 53404886..f0d26f6f 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -2290,7 +2290,7 @@
       'default': True,
       'example_value': False,
       'id': 803,
-      'caption': '''Enable or disable the display of connection related UI on the host desktop when a connection is active.''',
+      'caption': '''Enable connection-related UI on the host desktop when a connection is active''',
       'tags': [],
       'desc': '''If this policy is disabled, connection related UI (e.g. the disconnect window) will not be shown for non-curtained remote access connections. Curtained remote access sessions and remote support sessions are not affected by this policy.
 
@@ -3290,7 +3290,7 @@
     },
     {
       'name': 'AutofillAddressEnabled',
-      'owners': ['file://src/components/autofill/OWNERS'],
+      'owners': ['file://components/autofill/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': [
@@ -6158,7 +6158,7 @@
     },
     {
       'name': 'DefaultFileSystemReadGuardSetting',
-      'owners': ['mek@chromium.org', 'file://content/browser/native_file_system/OWNERS'],
+      'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'],
       'type': 'int-enum',
       'schema': {
         'type': 'integer',
@@ -6192,7 +6192,7 @@
     },
     {
       'name': 'DefaultFileSystemWriteGuardSetting',
-      'owners': ['mek@chromium.org', 'file://content/browser/native_file_system/OWNERS'],
+      'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'],
       'type': 'int-enum',
       'schema': {
         'type': 'integer',
@@ -6226,7 +6226,7 @@
     },
     {
       'name': 'FileSystemReadAskForUrls',
-      'owners': ['mek@chromium.org', 'file://content/browser/native_file_system/OWNERS'],
+      'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'],
       'type': 'list',
       'schema': {
         'type': 'array',
@@ -6251,7 +6251,7 @@
     },
     {
       'name': 'FileSystemReadBlockedForUrls',
-      'owners': ['mek@chromium.org', 'file://content/browser/native_file_system/OWNERS'],
+      'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'],
       'type': 'list',
       'schema': {
         'type': 'array',
@@ -6276,7 +6276,7 @@
     },
     {
       'name': 'FileSystemWriteAskForUrls',
-      'owners': ['mek@chromium.org', 'file://content/browser/native_file_system/OWNERS'],
+      'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'],
       'type': 'list',
       'schema': {
         'type': 'array',
@@ -6301,7 +6301,7 @@
     },
     {
       'name': 'FileSystemWriteBlockedForUrls',
-      'owners': ['mek@chromium.org', 'file://content/browser/native_file_system/OWNERS'],
+      'owners': ['mek@chromium.org', 'file://content/browser/file_system_access/OWNERS'],
       'type': 'list',
       'schema': {
         'type': 'array',
@@ -8651,7 +8651,7 @@
     },
     {
       'name': 'DisableSSLRecordSplitting',
-      'owners': ['file://src/crypto/OWNERS'],
+      'owners': ['file://crypto/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome.*:18-46', 'chrome_os:18-46'],
@@ -8670,7 +8670,7 @@
     },
     {
       'name': 'EnableOnlineRevocationChecks',
-      'owners': ['file://src/net/cert/OWNERS'],
+      'owners': ['file://net/cert/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome.*:19-', 'chrome_os:19-'],
@@ -8690,7 +8690,7 @@
     },
     {
       'name': 'RequireOnlineRevocationChecksForLocalAnchors',
-      'owners': ['file://src/net/cert/OWNERS'],
+      'owners': ['file://net/cert/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome_os:30-', 'chrome.linux:30-', 'chrome.win:30-'],
@@ -8740,7 +8740,7 @@
     },
     {
       'name': 'EnableCommonNameFallbackForLocalAnchors',
-      'owners': ['file://src/net/cert/OWNERS'],
+      'owners': ['file://net/cert/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome.*:58-65', 'chrome_os:58-65', 'android:58-65'],
@@ -8761,7 +8761,7 @@
     },
     {
       'name': 'EnableSymantecLegacyInfrastructure',
-      'owners': ['file://src/net/cert/OWNERS'],
+      'owners': ['file://net/cert/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome.*:66-75', 'chrome_os:66-75', 'android:66-75'],
@@ -10255,7 +10255,7 @@
     },
     {
       'name': 'ManagedGuestSessionPrivacyWarningsEnabled',
-      'owners': ['file: //components/policy/resources/OWNERS', 'ayaelattar@chromium.org'],
+      'owners': ['file://components/policy/resources/OWNERS', 'ayaelattar@chromium.org'],
       'device_only': True,
       'type': 'main',
       'schema': { 'type': 'boolean' },
@@ -11697,7 +11697,7 @@
     },
     {
       'name': 'AllowWakeLocks',
-      'owners': ['file://src/chrome/browser/chromeos/login/demo_mode/OWNERS'],
+      'owners': ['file://chrome/browser/chromeos/login/demo_mode/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome_os:71-'],
@@ -13737,7 +13737,7 @@
     },
     {
       'name': 'EasyUnlockAllowed',
-      'owners': ['file://src/chrome/browser/chromeos/login/easy_unlock/OWNERS'],
+      'owners': ['file://chrome/browser/chromeos/login/easy_unlock/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome_os:38-'],
@@ -13906,7 +13906,7 @@
     },
     {
       'name': 'SSLVersionMin',
-      'owners': ['file://src/crypto/OWNERS'],
+      'owners': ['file://crypto/OWNERS'],
       'type': 'string-enum',
       'schema': {
         'type': 'string',
@@ -13952,7 +13952,7 @@
     },
     {
       'name': 'SSLVersionFallbackMin',
-      'owners': ['file://src/crypto/OWNERS'],
+      'owners': ['file://crypto/OWNERS'],
       'type': 'string-enum',
       'schema': {
         'type': 'string',
@@ -13997,7 +13997,7 @@
     },
     {
       'name': 'SSLVersionMax',
-      'owners': ['file://src/crypto/OWNERS'],
+      'owners': ['file://crypto/OWNERS'],
       'type': 'string-enum',
       'schema': {
         'type': 'string',
@@ -14040,7 +14040,7 @@
     },
     {
       'name': 'CertificateTransparencyEnforcementDisabledForUrls',
-      'owners': ['file://src/components/certificate_transparency/OWNERS'],
+      'owners': ['file://components/certificate_transparency/OWNERS'],
       'type': 'list',
       'schema': {
         'type': 'array',
@@ -14067,7 +14067,7 @@
     },
     {
       'name': 'CertificateTransparencyEnforcementDisabledForCas',
-      'owners': ['file://src/components/certificate_transparency/OWNERS'],
+      'owners': ['file://components/certificate_transparency/OWNERS'],
       'type': 'list',
       'schema': {
         'type': 'array',
@@ -14100,7 +14100,7 @@
     },
     {
       'name': 'CertificateTransparencyEnforcementDisabledForLegacyCas',
-      'owners': ['file://src/components/certificate_transparency/OWNERS'],
+      'owners': ['file://components/certificate_transparency/OWNERS'],
       'type': 'list',
       'schema': {
         'type': 'array',
@@ -14127,7 +14127,7 @@
     },
     {
       'name': 'RC4Enabled',
-      'owners': ['file://src/crypto/OWNERS'],
+      'owners': ['file://crypto/OWNERS'],
       'type': 'main',
       'schema': {
         'type': 'boolean',
@@ -14152,7 +14152,7 @@
     },
     {
       'name': 'DHEEnabled',
-      'owners': ['file://src/crypto/OWNERS'],
+      'owners': ['file://crypto/OWNERS'],
       'type': 'main',
       'schema': {
         'type': 'boolean',
@@ -15381,7 +15381,7 @@
     },
     {
       'name': 'ComponentUpdatesEnabled',
-      'owners': ['file://src/components/update_client/OWNERS'],
+      'owners': ['file://components/update_client/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome.*:54-', 'chrome_os:54-'],
@@ -17731,7 +17731,7 @@
     },
     {
       'name': 'RestrictAccountsToPatterns',
-      'owners': ['bsazonov@chromium.org', 'file://src/components/signin/OWNERS'],
+      'owners': ['bsazonov@chromium.org', 'file://components/signin/OWNERS'],
       'type': 'list',
       'schema': {
         'type': 'array',
@@ -19565,7 +19565,7 @@
     },
     {
       'name': 'ScreenBrightnessPercent',
-      'owners': ['file://src/chrome/browser/chromeos/login/demo_mode/OWNERS'],
+      'owners': ['file://chrome/browser/chromeos/login/demo_mode/OWNERS'],
       'type': 'dict',
       'schema': {
         'type': 'object',
@@ -20059,7 +20059,7 @@
     },
     {
       'name': 'ParentAccessCodeConfig',
-      'owners': ['file://src/chrome/browser/chromeos/child_accounts/OWNERS'],
+      'owners': ['file://chrome/browser/chromeos/child_accounts/OWNERS'],
       'type': 'dict',
       'schema': {
         'sensitiveValue': True,
@@ -20224,7 +20224,7 @@
     },
     {
       'name': 'ForceNetworkInProcess',
-      'owners': ['services/network/OWNERS'],
+      'owners': ['file://services/network/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome.win:72-83'],
@@ -21837,7 +21837,7 @@
     },
     {
       'name': 'AudioSandboxEnabled',
-      'owners': ['services/audio/OWNERS'],
+      'owners': ['file://services/audio/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome.win:79-', 'chrome.linux:79-', 'chrome.mac:79-'],
@@ -22554,7 +22554,7 @@
     },
     {
       'name': 'PaymentMethodQueryEnabled',
-      'owners': ['file://components/payments/core/OWNERS'],
+      'owners': ['file://components/payments/OWNERS'],
       'type': 'main',
       'schema': { 'type': 'boolean' },
       'supported_on': ['chrome.*:80-', 'chrome_os:80-', 'android:80-'],
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index 5047485..c18b23fb 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Zulassen, dass Nutzer einen anonymen Google-Dienst verwenden, um automatische Beschreibungen für unbeschriftete Bilder zu erhalten</translation>
 <translation id="1087437665304381368">Mit dieser Richtlinie wird nur der <ph name="PRODUCT_OS_NAME" />-Entwicklermodus gesteuert. Wenn Sie den Zugriff auf Android-Entwickleroptionen verhindern möchten, müssen Sie die Richtlinie "<ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />" konfigurieren.</translation>
 <translation id="1087707496788636333">Die Adresse der Chrome Enterprise-Richtlinienliste wird geändert. Bitte ändern Sie sie in Ihren Lesezeichen zu <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
-<translation id="1093082332347834239">Ist diese Einstellung aktiviert, läuft der Host für Remote-Unterstützung in einem Prozess mit <ph name="UIACCESS_PERMISSION_NAME" />-Berechtigungen. So kann der Remote-Nutzer mit geöffneten Fenstern auf dem lokalen Desktop arbeiten.
-
-          Ist diese Einstellung deaktiviert oder nicht konfiguriert, läuft der Host für Remote-Unterstützung nur im Nutzerbereich. Remote-Nutzer können nicht mit geöffneten Fenstern auf dem Desktop arbeiten.</translation>
 <translation id="1095209545735032039">Serial API auf diesen Websites blockieren</translation>
 <translation id="1096105751829466145">Standardsuchmaschine</translation>
 <translation id="1099282607296956954">Website-Isolierung für jede Website aktivieren</translation>
@@ -593,9 +590,6 @@
 <translation id="2040479044912658454">Rasterdruckmodus</translation>
 <translation id="2043749682619281558">Hiermit wird die Funktion "Mauscursor hervorheben" auf dem Anmeldebildschirm aktiviert</translation>
 <translation id="2043770014371753404">Deaktivierte Unternehmensdrucker</translation>
-<translation id="2050629715135525072">Damit wird gesteuert, ob ein Nutzer, der mit einem Host für den Remotezugriff verbunden ist, Dateien zwischen Client und Host übertragen kann. Verbindungen zur Remoteunterstützung sind hiervon ausgenommen, da sie keine Dateiübertragung unterstützen.
-
-          Wenn diese Einstellung deaktiviert ist, können keine Dateien übertragen werden. Ist die Einstellung aktiviert oder nicht konfiguriert, ist eine Dateiübertragung möglich.</translation>
 <translation id="2057317273526988987">Zugriff auf eine Liste mit URLs erlauben</translation>
 <translation id="2061810934846663491">Erforderliche Domainnamen für Remotezugriff-Hosts konfigurieren</translation>
 <translation id="2069350366303315077">Wenn die Richtlinie aktiviert ist, erzwingt <ph name="PRODUCT_NAME" /> Gastsitzungen und verhindert die Anmeldung über Nutzerprofile. Gastsitzungen sind <ph name="PRODUCT_NAME" />-Profile, bei denen die Fenster im Inkognitomodus ausgeführt werden.
@@ -1086,13 +1080,6 @@
 <translation id="2801065672151277034">Zertifikatverwaltungseinstellungen</translation>
 <translation id="2801155097555584385">Den Akkuladestand (%) für benutzerdefiniertes Starten des Ladevorgangs festlegen</translation>
 <translation id="2805707493867224476">Anzeige von Pop-ups für alle Websites zulassen</translation>
-<translation id="2808013382476173118">Aktiviert den Einsatz von STUN-Servern, wenn Remote-Clients versuchen, eine Verbindung zu diesem Computer herzustellen
-
-          Wenn diese Einstellung aktiviert wird, können Remote-Clients diesen Computer finden und eine Verbindung herstellen, selbst wenn er sich hinter einer Firewall befindet.
-
-          Falls die Einstellung deaktiviert ist und ausgehende UDP-Verbindungen von der Firewall gefiltert werden, erlaubt dieser Computer nur Verbindungen von Clientcomputern im lokalen Netzwerk.
-
-          Wenn diese Richtlinie nicht konfiguriert ist, wird die Einstellung aktiviert.</translation>
 <translation id="2813281962735757923">Über diese Richtlinie wird der Zeitraum festgelegt, in dem das <ph name="PRODUCT_OS_NAME" />-Gerät nicht automatisch nach Updates suchen darf.
       Folgendes passiert, wenn diese Richtlinie auf eine nicht leere Liste von Zeiträumen festgelegt wird:
       Geräte können während der festgelegten Zeiträume nicht automatisch nach Updates suchen. Auf Geräten, für die ein Rollback erforderlich ist oder die eine Version von <ph name="PRODUCT_OS_NAME" /> ausführen, die unter der Mindestversion liegt, hat diese Richtlinie aufgrund potenzieller Sicherheitsprobleme keine Auswirkungen. Außerdem blockiert diese Richtlinie keine Prüfungen auf Updates, die von Nutzern oder Administratoren angefordert werden.
@@ -1697,9 +1684,6 @@
       Ist sie deaktiviert oder nicht konfiguriert, melden registrierte Geräte keine Statistiken.</translation>
 <translation id="3736879847913515635">"Person hinzufügen" im Nutzermanager aktivieren</translation>
 <translation id="3750220015372671395">Schlüsselgenerierung auf diesen Websites blockieren</translation>
-<translation id="375266612405883748">Schränkt den vom Host für den Remotezugriff verwendeten UDP-Portbereich auf diesem Computer ein.
-
-          Wenn diese Richtlinie nicht konfiguriert oder auf eine leere Zeichenfolge festgelegt wird, kann der Host für den Remotezugriff alle verfügbaren Ports nutzen. Falls die Richtlinie "<ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" />" deaktiviert ist, verwendet der Host für den Remotezugriff jedoch nur die UDP-Ports im Bereich 12400–12409.</translation>
 <translation id="3755237588083934849">Die Konfiguration der Richtlinie legt fest, wie oft Uploads mit dem Gerätestatus vorgenommen werden (in Millisekunden). Die geringste zulässige Häufigkeit beträgt 60 Sekunden.
 
       Wenn die Richtlinie nicht konfiguriert ist, betragen die Intervalle standardmäßig 3 Stunden.</translation>
@@ -2026,11 +2010,6 @@
           Wenn Sie diese Richtlinie konfigurieren, kann sie vom Nutzer nicht geändert oder überschrieben werden.
 
           Ist die Richtlinie nicht konfiguriert, ist "Automatisch klicken" anfangs deaktiviert, kann jedoch vom Nutzer jederzeit aktiviert werden.</translation>
-<translation id="4214536984333857724">Wenn diese Einstellung aktiviert ist, werden Anfragen zur Gnubby-Authentifizierung bei einer Remote-Host-Verbindung über einen Proxy weitergeleitet.
-
-          Damit diese Funktion richtig funktioniert, sind zusätzliche Komponenten erforderlich, die außerhalb der Netzwerkumgebung von Google nicht verfügbar sind.
-
-          Ist diese Einstellung deaktiviert, wird für Anfragen zur Gnubby-Authentifizierung kein Proxy verwendet.</translation>
 <translation id="4224610387358583899">Verzögerungen für die Bildschirmsperre</translation>
 <translation id="4225260426043444650">Diese Einstellung ermöglicht es Nutzern, den <ph name="LACROS_NAME" />-Browser zu verwenden.
 
@@ -2203,9 +2182,6 @@
       Sie wird für <ph name="PRODUCT_NAME" /> nur angewendet, wenn das Gerät mit <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> registriert ist.
       Für <ph name="PRODUCT_OS_NAME" /> wird diese Richtlinie immer angewendet.</translation>
 <translation id="4578265298946081589">Nach Nutzerabmeldung nicht neu starten.</translation>
-<translation id="4578912515887794133">Wenn diese Einstellung aktiviert ist, vergleicht der Host für den Remotezugriff den Namen des mit dem Host verknüpften lokalen Nutzers mit dem Namen des Google-Kontos, das als Hosteigentümer registriert ist (z. B. "maxmustermann", wenn der Hosteigentümer das Google-Konto "maxmustermann@example.com" ist).  Der Host für den Remotezugriff wird nicht gestartet, wenn der Name des Hosteigentümers vom Namen des mit dem Host verknüpften lokalen Nutzers abweicht.  Die Richtlinie "RemoteAccessHostMatchUsername" sollte in Kombination mit "RemoteAccessHostDomain" verwendet werden, wenn Sie erzwingen möchten, dass das Google-Konto des Hosteigentümers mit einer bestimmten Domain (z. B. "example.com") verknüpft ist.
-
-          Ist diese Einstellung deaktiviert oder nicht konfiguriert, kann der Host für den Remotezugriff mit jedem lokalen Nutzer verknüpft sein.</translation>
 <translation id="4587365491100112056">Wenn die Richtlinie konfiguriert ist, wird die Cachelebensdauer für Authentifizierungsdaten in Stunden festgelegt. Im Cache befinden sich Daten zu Bereichen, die der Computer als vertrauenswürdig einstuft, d. h. verwandte Bereiche. Das Speichern von Authentifizierungsdaten im Cache beschleunigt die Anmeldung. Im Cache werden keine nutzerspezifischen Daten und auch keine Daten zu nicht verwandten Bereichen gespeichert.
 
       Wenn die Richtlinie auf „0“ gesetzt ist, wird die Speicherung der Authentifizierungsdaten deaktiviert. Bereichsspezifische Daten werden bei jeder Anmeldung abgerufen, daher kann ein Ausschalten der Speicherung von Authentifizierungsdaten die Nutzeranmeldung erheblich verlangsamen.
@@ -2348,15 +2324,6 @@
 <translation id="487460824085252184">Automatisch migrieren, ohne die Zustimmung des Nutzers einzuholen</translation>
 <translation id="4874982543810021567">WebUSB auf diesen Websites blockieren</translation>
 <translation id="4876805738539874299">SSL-Höchstversion aktiviert</translation>
-<translation id="487928067861956387">Konfiguriert die erforderlichen Domainnamen der Hosts für den Remotezugriff und verhindert, dass diese von Nutzern geändert werden können.
-
-          Wenn diese Einstellung aktiviert und für eine oder mehrere Domains konfiguriert ist, können Hosts nur über Konten gemeinsam genutzt werden, die unter einem der angegebenen Domainnamen registriert sind.
-
-          Ist sie deaktiviert oder nicht konfiguriert oder ist eine leere Liste festgelegt, können Hosts über alle Konten gemeinsam genutzt werden.
-
-          Sofern vorhanden, wird <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" /> mit dieser Einstellung überschrieben.
-
-          Siehe auch <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="4887274746092315609">Erlaubt SAML-Nutzern das Ändern des Passworts während einer Sitzung</translation>
 <translation id="4892647988357350237">Standardmäßig werden die Nutzungsbedingungen bei der ersten Ausführung von CCT angezeigt. Wenn diese Richtlinie auf <ph name="SKIP_TOS_DIALOG" /> gesetzt ist, wird das Dialogfeld mit den Nutzungsbedingungen weder bei der ersten noch bei weiteren Ausführungen angezeigt. Wenn die Richtlinie auf <ph name="STANDARD_TOS_DIALOG" /> gesetzt oder nicht konfiguriert ist, wird das Dialogfeld mit den Nutzungsbedingungen bei der ersten Ausführung angezeigt. Beachten Sie Folgendes:
 
@@ -2620,15 +2587,6 @@
 
       Mit "Version" ist entweder eine exakte Versionsangabe wie "61.0.3163.120" oder ein Versionspräfix wie "61.0" gemeint.  </translation>
 <translation id="5247006254130721952">Gefährliche Downloads blockieren</translation>
-<translation id="5249303875508803168">Konfiguriert die erforderlichen Domainnamen der Clients für den Remotezugriff und verhindert, dass diese von Nutzern geändert werden können.
-
-          Wenn diese Einstellung aktiviert und für eine oder mehrere Domains konfiguriert ist, können nur Clients aus einer der angegebenen Domains eine Verbindung zum Host herstellen.
-
-          Ist sie deaktiviert oder nicht konfiguriert oder ist eine leere Liste festgelegt, wird die Standardrichtlinie für den Verbindungstyp angewendet. Zu Zwecken der Remote-Unterstützung können Clients aus jeder beliebigen Domain eine Verbindung zum Host herstellen, bei einem stetigen Remotezugriff kann nur der Hosteigentümer eine Verbindung herstellen.
-
-          Sofern vorhanden, wird <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" /> mit dieser Einstellung überschrieben.
-
-          Siehe auch <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="5249453807420671499">Nutzer können Kerberos-Konten hinzufügen</translation>
 <translation id="5252995168844634755">Wenn die Richtlinie auf "True" gesetzt ist, wird Unified Desktop aktiviert. So können sich Apps über mehrere Bildschirme erstrecken. Nutzer können Unified Desktop für einzelne Displays deaktivieren.
 
@@ -2765,11 +2723,6 @@
 <translation id="5390083518957894426">Aktiviert für SAML-Nutzer die erneute Online-Authentifizierung auf dem Sperrbildschirm.</translation>
 <translation id="5391388690191341203">Lokales Gerätekonto für die Anmeldung</translation>
 <translation id="5393009997533871906">Nur Drucker in der Zulassungsliste werden Nutzern angezeigt</translation>
-<translation id="5395271912574071439">Aktiviert die Zugangsbeschränkung für Remotezugriff-Hosts bei bestehender Verbindung
-
-          Wenn diese Einstellung aktiviert ist, werden die physischen Ein- und Ausgabegeräte des Hosts bei bestehender Remote-Verbindung deaktiviert.
-
-          Wenn diese Einstellung deaktiviert oder nicht festgelegt ist, können lokale und Remote-Nutzer mit dem Host interagieren, sofern dieser freigegeben ist.</translation>
 <translation id="5401696449591951427"><ph name="CHROME_DEVICES_LINK" /> aktivieren</translation>
 <translation id="5405289061476885481">Konfiguriert, welche Tastaturlayouts auf der <ph name="PRODUCT_OS_NAME" />-Anmeldeseite erlaubt sind.
 
@@ -3396,9 +3349,6 @@
 <translation id="6401669939808766804">Nutzer abmelden</translation>
 <translation id="640244877779556713">Emoji-Vorschläge aktivieren</translation>
 <translation id="6407093060083181305">Sperrliste für Installation von Erweiterungen konfigurieren</translation>
-<translation id="6408233796253901198">Wenn diese Richtlinie festgelegt ist, verwendet der Host für den Remotezugriff diese URL zur Validierung von Authentifizierungstokens von Clients für den Remotezugriff, um Verbindungen zu akzeptieren. Die Richtlinie muss in Verbindung mit "RemoteAccessHostTokenUrl" verwendet werden.
-
-          Diese Funktion wird deaktiviert, wenn sie leer oder nicht konfiguriert ist.</translation>
 <translation id="6417265370957905582">Google Assistant</translation>
 <translation id="6422575351619065453">Im Kioskmodus legt diese Einstellung fest, ob das unverankerte Menü für Bedienungshilfen angezeigt wird.
 
@@ -4036,9 +3986,6 @@
       Wenn die Richtlinie deaktiviert oder nicht konfiguriert ist, wird die KDC-Richtlinie auf unterstützten Plattformen ignoriert und nur die Richtlinie "<ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />" berücksichtigt.
 
       Unter <ph name="MS_WIN_NAME" /> wird die KDC-Richtlinie immer umgesetzt.</translation>
-<translation id="7273823081800296768">Wenn diese Einstellung aktiviert oder nicht konfiguriert ist, kann der Nutzer beim Herstellen der Verbindung Clients und Hosts koppeln. Dadurch braucht nicht jedes Mal eine PIN eingegeben zu werden.
-
-          Bei Deaktivierung dieser Einstellung ist diese Funktion nicht verfügbar.</translation>
 <translation id="7274077256421167535">Gemeinsame Stromversorgung per USB aktivieren</translation>
 <translation id="7275334191706090484">Verwaltete Lesezeichen</translation>
 <translation id="7278854311116092134">Namen der Hosts für natives Messaging, die von der Sperrliste ausgenommen werden sollen</translation>
@@ -4167,9 +4114,6 @@
 
       Diese Richtlinie wurde eingestellt. Bitte verwenden Sie stattdessen die Richtlinie "<ph name="PRINTERS_POLICY_NAME" />".
       </translation>
-<translation id="7504632989711326175">Wenn diese Richtlinie festgelegt ist, verwendet der Host ein Clientzertifikat mit dem angegebenen Aussteller-CN zur Authentifizierung bei "RemoteAccessHostTokenValidationUrl". Verwenden Sie "*", um ein beliebiges verfügbares Clientzertifikat zu nutzen.
-
-          Diese Funktion wird deaktiviert, wenn sie leer oder nicht konfiguriert ist.</translation>
 <translation id="7506745375479451616">Mit dieser Richtlinie wird der Befehl konfiguriert, mit dem URLs in <ph name="PRODUCT_NAME" /> geöffnet werden, wenn von <ph name="IE_PRODUCT_NAME" /> dorthin gewechselt wird. Diese Richtlinie kann mit einem Pfad zur ausführbaren Datei oder <ph name="PRODUCT_NAME_PLACEHOLDER" /> konfiguriert werden, damit das Verzeichnis von <ph name="PRODUCT_NAME" /> automatisch erkannt wird.
 
       Ist die Richtlinie nicht konfiguriert, erkennt <ph name="IE_PRODUCT_NAME" /> den Pfad zur ausführbaren Datei von <ph name="PRODUCT_NAME" /> automatisch, wenn <ph name="PRODUCT_NAME" /> über Internet Explorer geöffnet wird.
@@ -4761,13 +4705,6 @@
 <translation id="8371178326720637170">Ermöglicht verwalteten Erweiterungen, die Enterprise Hardware Platform API zu verwenden</translation>
 <translation id="8375817202037102567">Schreibzugriff auf Dateien und Verzeichnisse auf diesen Websites blockieren</translation>
 <translation id="8379317372795444261"><ph name="BASIC_AUTH" />-Authentifizierung ist bei HTTP-Verbindungen zulässig</translation>
-<translation id="8380490658357556620">Ermöglicht den Einsatz von Relayservern, wenn Remote-Clients versuchen, eine Verbindung zu diesem Computer herzustellen.
-
-          Ist diese Einstellung aktiviert, können Remote-Clients über Relayserver eine Verbindung zu diesem Computer herstellen, sofern keine direkte Verbindung verfügbar ist, zum Beispiel aufgrund von Firewallbeschränkungen.
-
-          Diese Richtlinie wird ignoriert, falls die Richtlinie "<ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" />" deaktiviert ist.
-
-          Wenn diese Richtlinie nicht konfiguriert ist, wird die Einstellung aktiviert.</translation>
 <translation id="838056554726401140">Eine Liste von URLs, die angibt, auf welche URLs "<ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />" angewendet wird. Diese Richtlinie hat keine Auswirkung auf automatisch geöffnete Werte, die vom Nutzer festgelegt sind.
 
       Wenn Sie diese Richtlinie konfigurieren, werden Dateien nur automatisch von ihr geöffnet, wenn die URL Teil dieses Satzes ist und der Dateityp in "<ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />" aufgelistet ist. Wenn eine der Bedingungen auf "false" gesetzt ist, wird der Download nicht automatisch von der Richtlinie geöffnet.
@@ -4931,9 +4868,6 @@
       Wenn sie auf "true" gesetzt ist, können diese Tabs deaktiviert werden. Durch die Deaktivierung von Tabs werden CPU, Akku und Arbeitsspeicher entlastet. Bei <ph name="PRODUCT_NAME" /> wird eine Heuristik genutzt, um Tabs zu erkennen, die zwar im Hintergrund ausgeführt werden, jedoch aktiviert bleiben sollten, weil auf ihnen beispielsweise Benachrichtigungen angezeigt, Ton wiedergegeben oder Videos gestreamt werden. Webentwickler können die Deaktivierung ihrer Website auch unterbinden (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Wenn die Richtlinie auf "false" gesetzt ist, werden Tabs nicht deaktiviert.</translation>
-<translation id="8622378389102774881">Wenn diese Richtlinie konfiguriert ist, verlangt der Host für den Remotezugriff von Clients, die sich authentifizieren, ein Authentifizierungstoken von dieser URL, damit eine Verbindung aufgebaut werden kann. Diese Richtlinie muss in Verbindung mit "RemoteAccessHostTokenValidationUrl" verwendet werden.
-
-          Diese Funktion wird deaktiviert, wenn sie leer oder nicht konfiguriert ist.</translation>
 <translation id="8631434304112909927">Bis Version <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">Die Liste der Notizen-Apps, die auf dem Sperrbildschirm von <ph name="PRODUCT_OS_NAME" /> zulässig sind</translation>
 <translation id="8649763579836720255">Chrome OS-Geräte können mithilfe einer Remote-Bescheinigung für überprüften Zugriff ein von der Chrome OS-Zertifizierungsstelle herausgegebenes Zertifikat erhalten, das die Berechtigung des Geräts für die Wiedergabe geschützter Medien nachweist. Bei diesem Vorgang werden Informationen zur Bestätigung der Hardware an die Chrome OS-Zertifizierungsstelle gesendet, anhand derer das Gerät eindeutig identifiziert werden kann.
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index 548c3db..965721a8 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Permite que los usuarios usen un servicio anónimo de Google para obtener descripciones automáticas de las imágenes sin etiquetar</translation>
 <translation id="1087437665304381368">Esta política controla solo el modo de desarrollador de <ph name="PRODUCT_OS_NAME" />. Si quieres impedir el acceso a las Opciones para desarrolladores de Android, deberás configurar la política <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation>
 <translation id="1087707496788636333">La lista de políticas de Chrome Enterprise cambia de sitio. Guarda <ph name="POLICY_DOCUMENTATION_URL" /> en tus favoritos.</translation>
-<translation id="1093082332347834239">Si esta opción de configuración está inhabilitada, el host de asistencia remota se ejecutará en un proceso con los permisos <ph name="UIACCESS_PERMISSION_NAME" />. De esta manera, los usuarios remotos podrán interactuar con las ventanas con permisos elevados en el escritorio del usuario local.
-
-          Si esta opción de configuración está inhabilitada o no se configura, el host de asistencia remota se ejecutará en el contexto del usuario, y los usuarios remotos no podrán interactuar con las ventanas con permisos elevados en el escritorio.</translation>
 <translation id="1095209545735032039">Bloquea la API de Serial en estos sitios</translation>
 <translation id="1096105751829466145">Proveedor de búsqueda predeterminado</translation>
 <translation id="1099282607296956954">Permite el aislamiento de todos los sitios</translation>
@@ -217,6 +214,7 @@
 <translation id="1393485621820363363">Impresoras empresariales habilitadas asociadas a dispositivos</translation>
 <translation id="1397855852561539316">Dirección URL sugerida para el proveedor de búsqueda predeterminado</translation>
 <translation id="1413936351612032792">Informar datos sobre el uso de las apps de Linux</translation>
+<translation id="1418387035898607074">Omite las verificaciones de la Navegación segura en archivos descargados de fuentes de confianza</translation>
 <translation id="142346659686073702">Permitir que los usuarios no afiliados usen Crostini</translation>
 <translation id="1425551776320718592">Impide que los usuarios de este dispositivo apliquen la transferencia de ADB y fuerza la opción de Powerwash, lo que puede provocar una vulnerabilidad en la seguridad del dispositivo</translation>
 <translation id="1426170570389588560">Establece el período en días para almacenar los metadatos de los trabajos de impresión</translation>
@@ -444,9 +442,15 @@
       Si la estableces como falsa, los usuarios no podrán agregar, quitar ni modificar favoritos, pero podrán seguir utilizando los existentes.</translation>
 <translation id="1715151459541210849">Habilita la función de accesibilidad de dictado</translation>
 <translation id="172374442286684480">Permitir a todos los sitios establecer datos locales</translation>
+<translation id="1729169799290004131">Si estableces la política, se especificará el porcentaje de brillo de la pantalla y se desactivarán las funciones de brillo automático. Se ajustará el brillo inicial de la pantalla conforme al valor de la política, pero los usuarios podrán cambiar este valor.
+
+      Si no estableces la política, no se verán afectados los controles de la pantalla ni las funciones de brillo automático.
+
+      Nota: Los valores de la política deben especificarse en porcentajes del 0 al 100.</translation>
 <translation id="1736269219679256369">Permitir continuar desde la página de advertencia de SSL</translation>
 <translation id="174765717426930019">Permitir que se abran todas ventanas emergentes destinadas a <ph name="BLANK_PAGE_NAME" /> para interactuar con la página que abrió la ventana emergente, a menos que esta página inhabilite esta interacción de forma explícita </translation>
 <translation id="1750315445671978749">Bloquear todas las descargas</translation>
+<translation id="1755310913456007816">Usa la configuración existente de controles de revocación en línea</translation>
 <translation id="1760951637494635692">Permite la API de Serial en estos sitios</translation>
 <translation id="1765512315997108908">Controla a qué impresoras de <ph name="DEVICE_PRINTERS_POLICY_NAME" /> pueden acceder los usuarios.
 
@@ -493,6 +497,7 @@
 <translation id="1844972978764975668">Permite que las consultas enviadas a un servidor de Google recuperen una marca de tiempo precisa</translation>
 <translation id="1845405905602899692">Configuración del kiosco</translation>
 <translation id="1845429996559814839">Restringe el modo de impresión con PIN</translation>
+<translation id="1846545322805269573">Los usuarios no pueden personalizar el fondo de la página Nueva pestaña</translation>
 <translation id="1847960418907100918">Especifica los parámetros utilizados al realizar búsquedas instantáneas con POST. Se compone de pares de nombre/valor separados por coma. Si un valor es un parámetro de plantilla, como {searchTerms} en el ejemplo anterior, se reemplazará por datos de términos de búsqueda reales.
 
           Esta política es opcional. Si no se establece, la solicitud de búsqueda instantánea se enviará mediante el método GET.
@@ -556,6 +561,37 @@
 <translation id="1971991630422430420">Si habilitas esta política, significa que se usará la Transición rápida cuando el punto de acceso inalámbrico lo admita. Se aplica a todos los usuarios y las interfaces del dispositivo.
 
       Si la inhabilitas o no la estableces, no se podrá usar la Transición rápida.</translation>
+<translation id="197744850608781984">Si estableces la política, se controlará la estrategia de administración de energía cuando el usuario está inactivo.
+
+      Hay 4 acciones:
+
+      * La pantalla se atenúa si el usuario está inactivo durante el tiempo indicado en <ph name="SCREEN_DIM_FIELD_NAME" />.
+
+      * La pantalla se apaga si el usuario está inactivo durante el tiempo indicado en <ph name="SCREEN_OFF_FIELD_NAME" />.
+
+      * Se muestra un diálogo de advertencia si el usuario permanece inactivo durante el tiempo indicado en <ph name="IDLE_WARNING_FIELD_NAME" />. Advierte al usuario que se ejecutará la acción de inactividad y que solo se mostrará si la acción de inactividad es salir de la cuenta o apagar el dispositivo.
+
+      * Se implementa la acción especificada en <ph name="IDLE_ACTION_FIELD_NAME" /> si el usuario permanece inactivo durante el tiempo indicado en el campo de inactividad.
+
+      Para las acciones anteriores, el tiempo de espera debe establecerse en milisegundos. El valor debe ser mayor que cero para activar la acción correspondiente. Si estableces el tiempo de espera en cero, <ph name="PRODUCT_OS_NAME" /> no realizará la acción correspondiente.
+
+      Si no estableces una duración específica para cada uno de los tiempos de espera anteriores, se utilizará un valor predeterminado.
+
+      Los valores de <ph name="SCREEN_DIM_FIELD_NAME" /> deben ser menores o iguales que <ph name="SCREEN_OFF_FIELD_NAME" />. Los valores de <ph name="SCREEN_OFF_FIELD_NAME" /> y <ph name="IDLE_WARNING_FIELD_NAME" /> deben ser menores o iguales que el valor indicado en el campo de inactividad.
+
+      <ph name="IDLE_ACTION_FIELD_NAME" /> puede ser una de 4 acciones:
+
+      * <ph name="IDLE_ACTION_ENUM_SUSPEND" />
+
+      * <ph name="IDLE_ACTION_ENUM_LOGOUT" />
+
+      * <ph name="IDLE_ACTION_ENUM_SHUTDOWN" />
+
+      * <ph name="IDLE_ACTION_ENUM_DO_NOTHING" />
+
+      Si no estableces <ph name="IDLE_ACTION_FIELD_NAME" />, se utilizará <ph name="IDLE_ACTION_ENUM_SUSPEND" />.
+
+      Nota: Existen opciones de configuración para la alimentación de CA y la batería.</translation>
 <translation id="1988345404999458987">Ofrece opciones de configuración de servidores de impresión disponibles.
 
       Esta política permite ofrecer archivos JSON de configuración de servidores de impresión externos para dispositivos con el <ph name="PRODUCT_OS_NAME" />.
@@ -619,9 +655,6 @@
 <translation id="2040479044912658454">Modo de rasterización de impresiones</translation>
 <translation id="2043749682619281558">Habilita la función para resaltar el cursor en la pantalla de acceso</translation>
 <translation id="2043770014371753404">Impresoras empresariales inhabilitadas</translation>
-<translation id="2050629715135525072">Controla la capacidad que tiene un usuario conectado a un host de acceso remoto para transferir archivos entre el cliente y el host. Esto no se aplica a las conexiones de asistencia remota, que no admiten la transferencia de archivos.
-
-          Si se inhabilita esta configuración, no se permitirá la transferencia de archivos. Si se habilita o no se establece esta configuración, se permitirá la transferencia de archivos.</translation>
 <translation id="2057317273526988987">Permitir el acceso a una lista de URL</translation>
 <translation id="2061810934846663491">Configurar los nombres de dominio obligatorios para hosts de acceso remoto</translation>
 <translation id="2069350366303315077">Si habilitas la política, <ph name="PRODUCT_NAME" /> aplicará las sesiones de invitado y no permitirá acceder a los perfiles. Los accesos de invitado son perfiles de <ph name="PRODUCT_NAME" /> en donde todas las ventanas están en el modo Incógnito.
@@ -637,6 +670,7 @@
 <translation id="209586405398070749">Canal estable</translation>
 <translation id="2098658257603918882">Habilitar informes de uso y datos relacionados con bloqueos</translation>
 <translation id="2104418465060359056">Enviar información de extensiones y complementos</translation>
+<translation id="2106166591774188922">Permite que los usuarios de SAML cambien sus contraseñas de SAML durante la sesión en chrome://password-change</translation>
 <translation id="2106627642643925514">Anula el modo de impresión con PIN predeterminado. Si el modo no está disponible, se ignorará esta política.</translation>
 <translation id="2107563874993284076">Si habilitas la política, los usuarios usarán la función Network File Shares para <ph name="PRODUCT_NAME" />. Si inhabilitas la política, los usuarios no podrán usar esta función.</translation>
 <translation id="2107601598727098402">
@@ -1115,13 +1149,6 @@
 <translation id="2801065672151277034">Configuración de la administración de certificados</translation>
 <translation id="2801155097555584385">Establecer el porcentaje del nivel de la batería en el que debe comenzar la carga</translation>
 <translation id="2805707493867224476">Permitir que todos los sitios muestren ventanas emergentes.</translation>
-<translation id="2808013382476173118">Habilita el uso de servidores STUN cuando los clientes remotos intentan establecer una conexión con esta computadora.
-
-          Si se habilita esta configuración, los clientes remotos podrán descubrir estas computadoras y conectarse a ellas aunque estén separados por un firewall.
-
-          Si se inhabilita esta configuración y el firewall filtra las conexiones UDP de salida, esta computadora solo permitirá las conexiones de computadoras cliente que se encuentren en la red local.
-
-          Si esta política no se establece, la configuración estará habilitada.</translation>
 <translation id="2813281962735757923">Esta política controla los períodos durante los cuales el dispositivo <ph name="PRODUCT_OS_NAME" /> no puede comprobar automáticamente si hay actualizaciones disponibles.
       Cuando se configura esta política con una lista no vacía de períodos:
       Los dispositivos no podrán comprobar automáticamente si hay actualizaciones disponibles durante los períodos especificados. Debido a posibles problemas de seguridad, esta política no afectará a los dispositivos que necesiten una reversión o tengan versiones anteriores a la mínima de <ph name="PRODUCT_OS_NAME" />. Además, esta política no bloqueará comprobaciones de actualizaciones que soliciten los usuarios o administradores.
@@ -1227,6 +1254,7 @@
 <translation id="2957513448235202597">Tipo de cuenta para la autenticación <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959469725686993410">Enviar siempre puntos de acceso de Wi-Fi al servidor mientras se determina la zona horaria</translation>
 <translation id="2959898425599642200">Reglas de omisión de proxy</translation>
+<translation id="2960013482187484833">Utiliza la impresora que se usó por última vez como la opción predeterminada en la vista previa de impresión</translation>
 <translation id="2960128438010718932">El programa de etapas para aplicar una actualización nueva</translation>
 <translation id="2960691910306063964">Habilitar o inhabilitar la autenticación sin PIN para hosts de acceso remoto</translation>
 <translation id="2964373560810620158">Evitar que los usuarios utilicen el navegador <ph name="LACROS_NAME" /></translation>
@@ -1324,6 +1352,7 @@
 <translation id="3072847235228302527">Establecer las Condiciones del Servicio para la cuenta local del dispositivo</translation>
 <translation id="3086995894968271156">Configura Cast Receiver en <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3091832372132789233">Cargar la batería para dispositivos que están principalmente conectados a una fuente de alimentación externa</translation>
+<translation id="3092059499596000593">Utiliza la impresora predeterminada del sistema como la opción predeterminada en la vista previa de impresión</translation>
 <translation id="309416443108680956">Especifica lo que sucede cuando un usuario que se autentica mediante un token de seguridad (p. ej., con una tarjeta inteligente) quita ese token durante una sesión activa. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />: No pasa nada. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />: Se bloquea la pantalla hasta que el usuario se vuelva a autenticar. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />: Se cierra la sesión y el usuario sale. Si no estableces esta política, se aplicará la configuración predeterminada <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />.</translation>
 <translation id="3096595567015595053">Lista de complementos habilitados</translation>
 <translation id="3101501961102569744">Elegir cómo especificar la configuración del servidor proxy</translation>
@@ -1377,6 +1406,11 @@
 <translation id="3219421230122020860">Modo incógnito disponible</translation>
 <translation id="3220624000494482595">Si la Aplicación de kiosko es una app de Android, esta no tendrá control sobre la versión de <ph name="PRODUCT_OS_NAME" />, incluso si esta política se establece como <ph name="TRUE" />.</translation>
 <translation id="322359555555487980">Determinar la disponibilidad de las variaciones en el <ph name="PRODUCT_OS_NAME" /></translation>
+<translation id="3231617925177241750">Si habilitas la política y estableces <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_POLICY_NAME" /> y <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_POLICY_NAME" />, se mantendrá activada la carga fuera del horario pico (cuando lo admita el dispositivo). La política para la administración de carga fuera del horario pico es una política destinada a ahorrar energía que minimiza el uso de corriente alterna en horas pico. Puedes establecer una hora de inicio y finalización para ejecutar el modo de carga fuera del horario pico en cada día de la semana. Siempre que la batería esté por encima del umbral especificado, el sistema se ejecutará mediante la batería en los horarios establecidos (incluso si está conectado a la corriente alterna). Después de la hora de finalización especificada, el sistema funcionará mediante corriente alterna (en caso de estar conectado), pero no cargará la batería. El sistema volverá a funcionar con normalidad a través de corriente alterna y cargará la batería después de la hora de inicio especificada.
+
+      Si inhabilitas la política, la carga fuera del horario pico se mantendrá desactivada.
+
+      Si no la estableces, la carga fuera del horario pico estará desactivada en primera instancia. Los usuarios no podrán cambiar esta configuración.</translation>
 <translation id="3231837273069128027">Si estableces la política, se configurará la disponibilidad y el comportamiento de las actualizaciones del firmware<ph name="TPM_FIRMWARE_UPDATE_TPM" />.
 
       Podrás especificar opciones de configuración específicas en las propiedades de JSON:
@@ -1723,9 +1757,6 @@
       Si la inhabilitas o no la estableces, los dispositivos inscritos no informarán sobre estas estadísticas.</translation>
 <translation id="3736879847913515635">Habilitar la opción para agregar una persona en el Administrador de usuarios</translation>
 <translation id="3750220015372671395">Bloquear generación de claves en estos sitios</translation>
-<translation id="375266612405883748">Restringe el intervalo de puertos UDP que utiliza el host de acceso remoto en esta computadora.
-
-          Si esta política no se configura o se configura en una string vacía, el host de acceso remoto podrá utilizar cualquier puerto disponible, a menos que la política <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> esté inhabilitada. En ese caso, el host de acceso remoto utilizará puertos UDP en el intervalo de 12400 a 12409.</translation>
 <translation id="3755237588083934849">Si estableces la política, se determinará la frecuencia con la que se envían las cargas de estado del dispositivo (expresado en milisegundos). El mínimo permitido es 60 segundos.
 
       Si no la estableces, se aplicará el intervalo predeterminado de 3 horas.</translation>
@@ -1750,6 +1781,7 @@
       Si inhabilitas la política o no la estableces, <ph name="PRODUCT_OS_NAME" /> permitirá apagar el dispositivo.</translation>
 <translation id="3765260570442823273">Duración del mensaje que advierte al usuario que saldrá del navegador porque se encuentra inactivo</translation>
 <translation id="377044054160169374">Intervención ante experiencias abusivas</translation>
+<translation id="3778689139323007309">Comprueba la revocación de los certificados del servidor validados correctamente y firmados por certificados de CA instalados de manera local</translation>
 <translation id="3780152581321609624">Incluir puerto no estándar en el SPN de Kerberos</translation>
 <translation id="3788662722837364290">Configuración de la administración de energía cuando el usuario está inactivo</translation>
 <translation id="3790085888761753785">Si se habilita esta configuración, los usuarios podrán acceder a sus cuentas mediante Smart Lock. Este método es más permisivo que el comportamiento normal de Smart Lock, que solo permite a los usuarios desbloquear las pantallas.
@@ -2053,11 +2085,6 @@
           Si estableces esta política, los usuarios no podrán cambiarla ni anularla.
 
           Si no la estableces, el clic automático estará inicialmente inhabilitado, pero el usuario podrá habilitarlo en cualquier momento.</translation>
-<translation id="4214536984333857724">Si habilitas esta configuración, las solicitudes de autenticación gnubby se almacenarán en un servidor proxy a través de una conexión de host remota.
-
-          Debe tenerse en cuenta que, para que tenga un funcionamiento correcto, esta función requiere componentes adicionales que no están disponibles fuera del entorno de red de Google.
-
-          Si inhabilitas esta configuración, las solicitudes de autenticación gnubby no se almacenarán en un servidor proxy.</translation>
 <translation id="4224610387358583899">Demoras de bloqueo de pantalla</translation>
 <translation id="4225260426043444650">Esta configuración permite a los usuarios acceder al navegador <ph name="LACROS_NAME" />.
 
@@ -2230,9 +2257,6 @@
       Esta política solo será válida si la máquina está inscrita en <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> para <ph name="PRODUCT_NAME" />.
       Esta política siempre será válida para <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="4578265298946081589">No reiniciar el sistema cuando el usuario salga de su cuenta</translation>
-<translation id="4578912515887794133">Si se habilita esta configuración, el host de acceso remoto comparará el nombre del usuario local (con el que está asociado el host) y el nombre de la Cuenta de Google registrada como propietario del host (es decir, "juanperez" si el host pertenece a la Cuenta de Google "juanperez@ejemplo.com").  No se iniciará el host de acceso remoto si el nombre del propietario del host es diferente del nombre del usuario local con el que está asociado el host.  Se debe usar la política RemoteAccessHostMatchUsername junto con RemoteAccessHostDomain para exigir también que la Cuenta de Google del propietario del host esté asociada a un dominio específico (es decir, "ejemplo.com").
-
-          Si se inhabilita esta configuración o no se establece, el host de acceso remoto se podrá asociar con cualquier usuario local.</translation>
 <translation id="4587365491100112056">Si estableces la política, se especificará el tiempo (expresado en horas) de almacenamiento en caché de los datos de autenticación. La caché contiene datos sobre dominios en los que confía el dominio de la máquina (dominios afiliados). Por lo tanto, el almacenamiento en caché de los datos de autenticación permite agilizar el acceso. No se almacenan en caché los datos específicos del usuario ni los datos de dominios no afiliados.
 
       Si se establece la política en 0, se desactivará el almacenamiento en caché de los datos de autenticación. En todos los accesos, se recuperan los datos específicos del dominio. Por lo tanto, si se desactiva el almacenamiento en caché de los datos de autenticación, es posible que se reduzca drásticamente la velocidad de acceso del usuario.
@@ -2375,15 +2399,6 @@
 <translation id="487460824085252184">Migra automáticamente y no solicita el consentimiento del usuario.</translation>
 <translation id="4874982543810021567">Bloquea WebUSB en estos sitios</translation>
 <translation id="4876805738539874299">Versión de SSL máxima habilitada</translation>
-<translation id="487928067861956387">Configura los nombres de dominios de host obligatorios que se aplicarán en los hosts de acceso remoto y evita que los usuarios los cambien.
-
-          Si habilitas esta configuración y la estableces en uno o más dominios, los hosts solo podrán compartirse mediante cuentas registradas en uno de los nombres de dominio especificados.
-
-          Si inhabilitas esta configuración, no la estableces o la estableces como una lista vacía, podrán compartirse los hosts mediante una cuenta.
-
-          Esta configuración anulará <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" />, si se aplica.
-
-          Consulta también <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="4887274746092315609">Habilita una página para cambiar la contraseña dentro de la sesión para usuarios de SAML</translation>
 <translation id="4892647988357350237">De forma predeterminada, se muestran las Condiciones del Servicio cuando se ejecuta CCT por primera vez. Si estableces esta política como <ph name="SKIP_TOS_DIALOG" />, no se mostrará el diálogo de las Condiciones del Servicio en la primera ejecución ni en las subsiguientes. Si la estableces como <ph name="STANDARD_TOS_DIALOG" /> o no la estableces, se mostrará el diálogo de las Condiciones del Servicio en la primera ejecución. Ten en cuenta las siguientes salvedades:
 
@@ -2644,15 +2659,6 @@
 
       Aquí la "versión" puede ser exacta, como "61.0.3163.120", o el prefijo de una versión, como "61.0".  </translation>
 <translation id="5247006254130721952">Bloquear las descargas peligrosas</translation>
-<translation id="5249303875508803168">Configura los nombres de dominio de cliente obligatorios que se aplicarán en los clientes de acceso remoto y evita que los usuarios los cambien.
-
-          Si habilitas esta configuración y la estableces en uno o más dominios, solo los clientes de uno de los dominios especificados podrán conectarse al host.
-
-          Si la inhabilitas, no la estableces o la estableces como una lista vacía, se aplicará la política predeterminada para el tipo de conexión. Para la asistencia remota, esta política permite que los clientes de cualquier dominio se conecten al host. Solo el propietario del host puede conectarse para acceder de forma remota en cualquier momento.
-
-          Esta configuración anulará <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" />, si se aplica.
-
-          Consulta también <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="5249453807420671499">Los usuarios pueden agregar cuentas de Kerberos</translation>
 <translation id="5252995168844634755">Si estableces la política como verdadera, se activará el modo de escritorio unificado, el cual permite que las aplicaciones abarquen varias pantallas. Los usuarios podrán desactivar este modo en el caso de usar una sola pantalla.
 
@@ -2764,6 +2770,7 @@
           Si está configurada en verdadero o si no está configurada, este usuario podrá crear y administrar usuarios supervisados.</translation>
 <translation id="5369937289900051171">Solo impresión a color</translation>
 <translation id="5370279767682621504">Habilitar la compatibilidad con HTTP/0.9 en puertos no predeterminados</translation>
+<translation id="5371152055157582429">Los usuarios pueden personalizar el fondo de la página Nueva pestaña</translation>
 <translation id="5377606826822211923">Controla la forma en que el usuario usa las apps para Android de fuentes no confiables</translation>
 <translation id="5377668121137111316">Si estableces el valor "True" para la política, se activará el teclado en pantalla. Si estableces el valor "False", se desactivará el teclado en pantalla.
 
@@ -2789,7 +2796,6 @@
 <translation id="5390083518957894426">Permite la reautenticación en línea en la pantalla de bloqueo para los usuarios de SAML</translation>
 <translation id="5391388690191341203">Cuenta local del dispositivo con acceso automático</translation>
 <translation id="5393009997533871906">Los usuarios solo ven las impresoras que se encuentran en la lista de elementos permitidos</translation>
-<translation id="5395271912574071439">Habilita el modo de cortina para los hosts de acceso remoto durante una conexión. Si se habilita esta opción, los dispositivos físicos de entrada y salida del host se inhabilitan durante la conexión remota. Si se inhabilita o no se configura esta opción, tanto los usuarios locales como los remotos pueden interactuar con el host cuando se comparte.</translation>
 <translation id="5401696449591951427">Habilita <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">Establece los diseños de teclado compatibles con la pantalla de acceso de <ph name="PRODUCT_OS_NAME" />.
 
@@ -3006,6 +3012,14 @@
 <translation id="572155275267014074">Configuración de Android</translation>
 <translation id="5728154254076636808">Habilita la creación de las copias de itinerancia para los datos de perfil de <ph name="PRODUCT_NAME" /></translation>
 <translation id="5732972008943405952">Importar el formulario de Autocompletar del navegador predeterminado en la primera ejecución</translation>
+<translation id="5733040281451845496">Si habilitas la política, se iniciarán los tiempos de espera para la administración de la energía y los límites de extensión de la sesión después de la primera actividad del usuario en una sesión.
+
+      Si la inhabilitas o no la estableces, se iniciarán los tiempos de espera para la administración de la energía y el límite de tiempo inmediatamente al iniciarse la sesión.</translation>
+<translation id="5738766588683307797">Si inhabilitas <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> y estableces <ph name="USER_ACTIVITY_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" />, se especificará el porcentaje de escala del tiempo de espera para la atenuación de la pantalla cuando hay actividad del usuario mientras se atenúa la pantalla o poco después de que esta se haya apagado. Cuando se escala el tiempo de espera para la atenuación de la pantalla, se ajustan los tiempos de espera para el apagado, el bloqueo y la inactividad de la pantalla a fin de mantener las mismas distancias con respecto al tiempo de espera para la atenuación de la pantalla según la configuración original.
+
+      Si no estableces la política, se utilizará el factor de escala predeterminado.
+
+      Nota: El factor de escala debe ser 100% o más.</translation>
 <translation id="574098933844699859">Especifica si se muestra (o se oculta) siempre la información del sistema (p. ej., la versión del Sistema operativo Chrome o el número de serie del dispositivo) en la pantalla de acceso.
 
       Si se establece la política como verdadera, se mostrará la información del sistema de manera forzada.
@@ -3414,9 +3428,6 @@
 <translation id="6401669939808766804">Salir de la cuenta de usuario</translation>
 <translation id="640244877779556713">Habilita la sugerencia de emojis</translation>
 <translation id="6407093060083181305">Configura la lista de extensiones que se permiten instalar</translation>
-<translation id="6408233796253901198">Si estableces esta política, el host de acceso remoto usará esta URL para validar los tokens de autenticación de los clientes de acceso remoto, a fin de aceptar las conexiones. Debe usarse junto con RemoteAccessHostTokenUrl.
-
-          Si dejas la política vacía o no la estableces, se inhabilitará esta función.</translation>
 <translation id="6417265370957905582">Asistente de Google</translation>
 <translation id="6422575351619065453">En el modo kiosko, esta política controla si se muestra el menú de accesibilidad flotante.
 
@@ -3424,6 +3435,7 @@
 
       Si esta política se configura como habilitada o no se configura, nunca se mostrará el menú de accesibilidad flotante.</translation>
 <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation>
+<translation id="6424486395812679373">Realiza las verificaciones de la Navegación segura en todos los archivos descargados</translation>
 <translation id="6438364096042399634">Si estableces la política, se definirá la lista de dispositivos USB que el usuario puede desconectar del controlador de kernel para usarlos a través de la API chrome.usb directamente en una aplicación web. Las entradas son pares formados por el identificador del producto y el identificador del proveedor USB que permiten reconocer hardware específico.
 
       Si no estableces la política, la lista de dispositivos USB que se pueden desconectar estará vacía.
@@ -3510,6 +3522,9 @@
 <translation id="6553143066970470539">Porcentaje del brillo de pantalla</translation>
 <translation id="6558362593755624474">Si estableces la política, se especificará la clave de licencia <ph name="PLUGIN_VM_NAME" /> para este dispositivo.</translation>
 <translation id="6559057113164934677">No permitir que ningún sitio acceda a la cámara ni al micrófono</translation>
+<translation id="6559221564468029245">Si habilitas la política o no la estableces, no se considerará que el usuario está inactivo cuando se esté reproduciendo audio. Esto evitará que se alcance el tiempo de espera de inactividad y se tome la medida de inactividad. Sin embargo, la pantalla aún se atenuará, apagará y bloqueará después de los tiempos de espera configurados, independientemente de la actividad del audio.
+
+      Si inhabilitas la política, el sistema podrá considerar que el usuario está inactivo, independientemente de la actividad del audio.</translation>
 <translation id="6559475864956112261">Esta política dejó de estar disponible. Usa <ph name="PROXY_SETTINGS_POLICY_NAME" /> en su lugar.
 
        Si la habilitas, podrás especificar el servidor proxy que usa Chrome y evitar que los usuarios cambien la configuración del proxy. Chrome y las apps de ARC ignorarán todas las opciones relacionadas con el proxy que se especificaron en la línea de comandos. Esta política solo tendrá efecto si no se especifica la política <ph name="PROXY_SETTINGS_POLICY_NAME" />.
@@ -3927,6 +3942,9 @@
 <translation id="7072208053150563108">Frecuencia de cambio de la contraseña del dispositivo</translation>
 <translation id="7072567600438630966">Permite habilitar Phone Hub</translation>
 <translation id="7079519252486108041">Bloquear ventanas emergentes en estos sitios</translation>
+<translation id="7081784525008938771">Si habilitas la política o no la estableces, no se considerará que el usuario está inactivo cuando se esté reproduciendo video. Esto evitará que se alcancen los tiempos espera de inactividad, atenuación de la pantalla, pantalla apagada y bloqueo de pantalla, y que se tomen las medidas correspondientes.
+
+      Si inhabilitas la política, el sistema podrá considerar que el usuario está inactivo, independientemente de la actividad del video.</translation>
 <translation id="7086720321892395256">Controla las políticas de dispositivo y usuario para la función de la pantalla de privacidad.</translation>
 <translation id="7091842872805965910">Habilita la función de envío automático de PIN en la pantalla de bloqueo y de acceso</translation>
 <translation id="7093294902558672021">Envía información sobre los ventiladores de un dispositivo.
@@ -4052,9 +4070,6 @@
       Si inhabilitas la política o no la estableces, se ignorará la política de KDC en las plataformas admitidas y solo se respetará la política <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />.
 
       En <ph name="MS_WIN_NAME" />, siempre se respeta la política de KDC.</translation>
-<translation id="7273823081800296768">Si esta opción está habilitada o no está configurada, los usuarios podrán sincronizar los clientes y los hosts en el momento de la conexión, lo que elimina la necesidad de ingresar siempre un PIN.
-
-          Si no se habilita esta opción, esta función no estará disponible.</translation>
 <translation id="7274077256421167535">Habilitar el uso compartido de energía por USB</translation>
 <translation id="7275334191706090484">Favoritos administrados</translation>
 <translation id="7278854311116092134">Nombres de hosts de mensajería nativa que deben excluirse de la lista de elementos bloqueados</translation>
@@ -4157,6 +4172,11 @@
 
       Si no la estableces, se aplicará la política <ph name="ASK_NOTIFICATIONS_POLICY_NAME" />, pero los usuarios podrán cambiar esta configuración.</translation>
 <translation id="747275827471712187">Revierte el comportamiento de las cookies en estos sitios conforme al atributo heredado <ph name="ATTRIBUTE_SAMESITE_NAME" /></translation>
+<translation id="7476447711788742702">Si estableces la política, se especificará la acción que debe realizar <ph name="PRODUCT_OS_NAME" /> cuando el usuario cierra la tapa del dispositivo.
+
+      Si no estableces la política, se suspenderá el sistema.
+
+      Nota: Si la acción es la suspensión, <ph name="PRODUCT_OS_NAME" /> se podrá configurar por separado para que la pantalla se bloquee o no antes de la suspensión.</translation>
 <translation id="7476621944304431784">Si habilitas esta configuración, los usuarios podrán sincronizar los ajustes de la red Wi-Fi entre sus dispositivos con <ph name="PRODUCT_OS_NAME" /> y un teléfono Android conectado. Para poder sincronizar los ajustes de la red Wi-Fi, los usuarios deben habilitar esta función de forma explícita completando un flujo de configuración.
 
       Si inhabilitas esta configuración, los usuarios no podrán sincronizar los ajustes de la red Wi-Fi.
@@ -4184,9 +4204,6 @@
 
       Esta política dejó de estar disponible; usa la política <ph name="PRINTERS_POLICY_NAME" /> en su lugar.
       </translation>
-<translation id="7504632989711326175">Si configuras esta política, el host usará un certificado de cliente con el CN del emisor determinado para autenticar RemoteAccessHostTokenValidationUrl. Para usar cualquier certificado de cliente disponible, establece la política como "*".
-
-          Si dejas la política vacía o no la estableces, se inhabilitará esta función.</translation>
 <translation id="7506745375479451616">Esta política controla el comando que se usará en las URL abiertas en <ph name="PRODUCT_NAME" /> cuando te cambias de <ph name="IE_PRODUCT_NAME" />. Puedes establecer esta política como una ruta de archivos ejecutable o <ph name="PRODUCT_NAME_PLACEHOLDER" /> para que detecte la ubicación de <ph name="PRODUCT_NAME" /> de forma automática.
 
       Si no estableces la política, <ph name="IE_PRODUCT_NAME" /> detectará la propia ruta ejecutable de <ph name="PRODUCT_NAME" /> de forma automática cuando se ejecuta <ph name="PRODUCT_NAME" /> desde Internet Explorer.
@@ -4463,6 +4480,11 @@
 <translation id="7891884447851425349">Si activas <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />, establecer <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> especificará la URL del motor de búsqueda utilizado en una búsqueda predeterminada. La URL debe incluir la string <ph name="SEARCH_TERM_MARKER" />, que se reemplazará en la búsqueda por los términos del usuario.
 
       Puedes especificar la URL de búsqueda de Google de la siguiente manera: <ph name="GOOGLE_SEARCH_URL" />.</translation>
+<translation id="7894185046683379696">Si estableces la política, se especificará el período (en milisegundos) sin intervención del usuario después del cual se bloqueará la pantalla cuando el dispositivo esté funcionando con CA o batería. En <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />, se establecerán los valores de modo que sean inferiores al tiempo de espera de inactividad.
+
+      Si se establece el valor cero, <ph name="PRODUCT_OS_NAME" /> no bloqueará la pantalla cuando el usuario esté inactivo. Si no se establece, se utilizará un período predeterminado.
+
+      Recomendación: Para bloquear la pantalla cuando está inactiva, activa el bloqueo de pantalla en la suspensión y que se suspenda <ph name="PRODUCT_OS_NAME" /> después del tiempo de espera de inactividad. Esta política solo debe usarse si el bloqueo de pantalla ocurre mucho antes que la suspensión o si no se desea la suspensión por inactividad.</translation>
 <translation id="7895553628261067384">Acceso remoto</translation>
 <translation id="7902040092815978832">Muestra el teclado numérico para la contraseña</translation>
 <translation id="7904177352786629708">Si habilitas la política, se omitirá la búsqueda de CNAME. Se usará el nombre del servidor tal como se haya introducido al generar el SPN de Kerberos.
@@ -4576,6 +4598,9 @@
           Si se habilita esta política, se agregará la lista de cuentas definida por la política a la configuración de cuentas de Kerberos.
 
           Si se inhabilita o no se establece, no se agregarán cuentas a la configuración de cuentas de Kerberos y se quitarán todas las cuentas que haya agregado anteriormente esta política. Los usuarios podrán seguir agregando cuentas manualmente si se habilita la política "Los usuarios pueden agregar cuentas de Kerberos".</translation>
+<translation id="8078297389450285582">Si habilitas la política o no la estableces, se activará el modelo de atenuación inteligente y podrá extenderse el tiempo indicado para la atenuación de la pantalla. Si se cambia el tiempo de espera, se modificarán el apagado de la pantalla, el bloqueo de pantalla y los tiempos de espera de inactividad para mantener las mismas distancias desde el tiempo de espera de atenuación de la pantalla, como se configuraron en un primer momento.
+
+      Si inhabilitas la política, el modelo de atenuación inteligente no influenciará la atenuación de la pantalla.</translation>
 <translation id="8099880303030573137">Demora de inactividad con batería</translation>
 <translation id="8101381354936029836">Grupo atómico de la política:</translation>
 <translation id="8101937907822293485">Habilita el envío anónimo de datos sobre el uso y los fallos de <ph name="PRODUCT_NAME" /> a Google y evita que los usuarios cambien esta configuración.
@@ -4722,6 +4747,11 @@
       Si no la estableces, los sitios web podrán solicitar acceso, pero los usuarios podrán cambiar esta configuración.</translation>
 <translation id="8274603902181597201">Borra el directorio principal de eCryptfs del usuario y crea un nuevo directorio principal ext4 encriptado.</translation>
 <translation id="8284296539558710573">Solicitudes de autenticación HTTP de origen cruzado</translation>
+<translation id="8284527236880877730">Si inhabilitas <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" />, la configuración <ph name="PRESENTATION_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" /> especificará el porcentaje en el que debe escalarse el tiempo de espera de atenuación de la pantalla cuando el dispositivo está en el modo de presentación. Cuando se escala el tiempo de espera de atenuación de la pantalla, se modifican el apagado de la pantalla, el bloqueo de pantalla y los tiempos de espera de inactividad para mantener las mismas distancias desde el tiempo de espera de atenuación de la pantalla, como se configuraron en un primer momento.
+
+      Si no estableces la política, se utilizará el factor de escala predeterminado.
+
+      Nota: El factor de escala debe ser 100% o más.</translation>
 <translation id="8285435910062771358">La lupa de pantalla completa está habilitada.</translation>
 <translation id="8288199156259560552">Habilita el servicio de ubicación de Google para Android</translation>
 <translation id="8290875622178450531">Habilita la función de accesibilidad de dictado.
@@ -4791,13 +4821,6 @@
 <translation id="8371178326720637170">Habilitar las extensiones administradas para usar la API de Enterprise Hardware Platform</translation>
 <translation id="8375817202037102567">Bloquea el acceso de escritura a archivos y directorios en estos sitios</translation>
 <translation id="8379317372795444261">Se permite la autenticación <ph name="BASIC_AUTH" /> en las conexiones de HTTP</translation>
-<translation id="8380490658357556620">Habilita el uso de servidores de retransmisión cuando los clientes remotos intentan establecer una conexión con esta computadora.
-
-          Si se habilita esta configuración, los clientes remotos podrán utilizar servidores de retransmisión para conectarse a esta computadora si no hay ninguna conexión directa disponible (por ejemplo, a causa de restricciones del firewall).
-
-          Ten en cuenta que si se inhabilita la política <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" />, se ignorará esta política.
-
-          Si no se establece esta política, se habilitará la configuración.</translation>
 <translation id="838056554726401140">Lista de las URL en las que se aplicará <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Esta política no afecta los valores abiertos automáticamente que configuran los usuarios.
 
       Si configuras esta política, se abrirán los archivos automáticamente solo cuando la URL forme parte de este conjunto y el tipo de archivo se incluya en <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Si no se cumple alguna de las dos condiciones, la descarga no se abrirá automáticamente.
@@ -4973,9 +4996,6 @@
       Si se establece la política como verdadera, es posible que las pestañas que hayan estado en segundo plano por al menos 5 minutos queden inmovilizadas. Cuando se inmovilizan las pestañas, se reduce el uso de la CPU, la batería y la memoria. <ph name="PRODUCT_NAME" /> utiliza heurísticas para evitar que se inmovilicen las pestañas que realizan tareas útiles en segundo plano (p. ej., muestran notificaciones de pantalla, reproducen sonidos o transmiten video). Los desarrolladores web también pueden inhabilitar la inmovilización en sus sitios (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Si se establece la política como falsa, no se inmovilizará ninguna pestaña.</translation>
-<translation id="8622378389102774881">Si estableces esta política, el host de acceso remoto requerirá que los clientes que se autentiquen obtengan un token de autenticación de esta URL para conectarse. Esta política se debe usar junto con RemoteAccessHostTokenValidationUrl.
-
-          Si dejas la política vacía o no la estableces, se inhabilitará esta función.</translation>
 <translation id="8631434304112909927">hasta la versión <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">Lista de apps para tomar notas permitidas en la pantalla de bloqueo de <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="8649763579836720255">Los dispositivos con Sistema operativo Chrome pueden utilizar la confirmación remota (acceso verificado) para obtener un certificado emitido por la entidad de certificación del Sistema operativo Chrome que afirme que el dispositivo es apto para reproducir contenido protegido. Este proceso implica el envío de información de aprobación del hardware a la entidad de certificación del Sistema operativo Chrome, la cual identifica el dispositivo de forma única.
@@ -5070,9 +5090,19 @@
 
       Nota: Consulta la lista de las variables que puedes utilizar (https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables).</translation>
 <translation id="8777369558049831576">Muestra la casilla de verificación "Always open" en un cuadro de diálogo del protocolo externo</translation>
+<translation id="8786409859071107656">Si habilitas la política, se activará la política para la administración del uso compartido de energía por USB.
+
+      Ciertos dispositivos tienen un puerto USB específico, marcado con un ícono de rayo o de batería, para cargar dispositivos con la batería del sistema. Esta política afecta el comportamiento de carga de este puerto mientras el sistema está apagado o en suspensión. No afecta los demás puertos USB ni el comportamiento de carga mientras el sistema está activado (el puerto USB siempre suministrará energía).
+
+      Si el equipo está en suspensión, al puerto USB suministrará energía cuando el dispositivo esté conectado a un enchufe o cuando el nivel de la batería sea superior al 50%. Si el equipo está apagado, el puerto USB suministrará energía cuando el dispositivo esté conectado a un enchufe.
+
+      Si inhabilitas la política, el puerto USB no suministrará energía.
+
+      Si no la estableces, la política estará activada, y los usuarios no podrán desactivarla.</translation>
 <translation id="8798099450830957504">Predeterminado</translation>
 <translation id="8800453707696044281">Establecer el porcentaje del nivel de la batería en el que se debe detener la carga</translation>
 <translation id="8801680448782904838">Notificar a un usuario que se recomienda o es obligatorio reiniciar el navegador o el dispositivo</translation>
+<translation id="8816671955985738552">No permite cambiar las contraseñas de SAML durante la sesión en chrome://password-change</translation>
 <translation id="8817960019535659860">No permitir que los usuarios canjeen ofertas a través del Registro de Chrome OS</translation>
 <translation id="8818173863808665831">Informa la ubicación geográfica del dispositivo.
 
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 23cb44a..181ea2d 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Permitir a los usuarios elegir usar un servicio de Google anónimo para proporcionar descripciones automáticas para las imágenes no etiquetadas</translation>
 <translation id="1087437665304381368">Esta política permite controlar únicamente el modo desarrollador de <ph name="PRODUCT_OS_NAME" />. Si quieres impedir el acceso a las opciones para desarrolladores de Android, debes asignar un valor a la política <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation>
 <translation id="1087707496788636333">La lista de políticas de Chrome Enterprise se traslada a otra URL. Modifica tus marcadores para que incluyan la URL actualizada: <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
-<translation id="1093082332347834239">Si se habilita esta opción, el host de asistencia remota se ejecutará en un proceso con permisos de <ph name="UIACCESS_PERMISSION_NAME" />. Esto permitirá que los usuarios remotos interactúen con ventanas a las que se puede acceder con permisos de administrador en el ordenador del usuario local.
-
-          Si esta opción no se configura o se inhabilita, el host de asistencia remota se ejecutará en el contexto del usuario y los usuarios remotos no podrán interactuar con las ventanas que requieren permisos de administrador en el ordenador.</translation>
 <translation id="1095209545735032039">Bloquear la API Serial en estos sitios web</translation>
 <translation id="1096105751829466145">Proveedor de búsquedas predeterminadas</translation>
 <translation id="1099282607296956954">Habilitar el aislamiento de todos los sitios web</translation>
@@ -217,6 +214,7 @@
 <translation id="1393485621820363363">Impresoras de dispositivos de empresa habilitadas</translation>
 <translation id="1397855852561539316">URL de sugerencia del proveedor de búsquedas predeterminadas</translation>
 <translation id="1413936351612032792">Proporcionar información sobre el uso de aplicaciones de Linux</translation>
+<translation id="1418387035898607074">Saltar comprobaciones de Navegación segura para las descargas de archivos desde fuentes de confianza</translation>
 <translation id="142346659686073702">Permitir que los usuarios no afiliados utilicen Crostini</translation>
 <translation id="1425551776320718592">Impide que los usuarios de este dispositivo utilicen la instalación de fuente desconocida adb sin forzar un Powerwash, lo cual puede dejar el dispositivo en un estado de seguridad vulnerable</translation>
 <translation id="1426170570389588560">Define el periodo, en número de días, durante el que se almacenarán los metadatos de los trabajos de impresión</translation>
@@ -443,9 +441,15 @@
       Si se le asigna el valor "Falso", los usuarios no podrán añadir, quitar ni modificar marcadores. Sin embargo, podrán usar los marcadores existentes.</translation>
 <translation id="1715151459541210849">Habilita la función de accesibilidad de dictado</translation>
 <translation id="172374442286684480">Permitir que todos los sitios establezcan datos locales</translation>
+<translation id="1729169799290004131">Si se le asigna un valor a esta política, se especifica el porcentaje de brillo de la pantalla y se desactivan las funciones de brillo automático. El brillo inicial de la pantalla se ajusta al del valor de la política, pero los usuarios pueden cambiarlo.
+
+      Si no se configura esta política, las funciones de brillo automático y los controles de pantalla del usuario no se ven afectados.
+
+      Nota: Los valores que se asignen a esta política deben ser porcentajes de 0 a 100.</translation>
 <translation id="1736269219679256369">Permitir que se continúe desde la página de advertencia de SSL</translation>
 <translation id="174765717426930019">Permitir que todas las ventanas emergentes abiertas con <ph name="BLANK_PAGE_NAME" /> como objetivo interactúen con la página que ha solicitado abrir la ventana emergente a no ser que esa página haya rechazado explícitamente dicha interacción </translation>
 <translation id="1750315445671978749">Bloquear todas las descargas</translation>
+<translation id="1755310913456007816">Usar la configuración de comprobación de revocación online actual</translation>
 <translation id="1760951637494635692">Permitir la API Serial en estos sitios web</translation>
 <translation id="1765512315997108908">Controla qué impresoras de la política <ph name="DEVICE_PRINTERS_POLICY_NAME" /> están disponibles para los usuarios.
 
@@ -496,6 +500,7 @@
 <translation id="1844972978764975668">Permitir que consultas ocasionales a un servidor de Google obtengan una marca de tiempo precisa</translation>
 <translation id="1845405905602899692">Configuración de kiosco</translation>
 <translation id="1845429996559814839">Restringir el modo de impresión con PIN</translation>
+<translation id="1846545322805269573">Los usuarios no pueden personalizar el fondo de la página Nueva pestaña</translation>
 <translation id="1847960418907100918">Especifica los parámetros utilizados al hacer búsquedas instantáneas con POST. Se compone de pares de nombre/valor separados por comas. Si un valor es un parámetro de plantilla, como {searchTerms} en el ejemplo anterior, se sustituirá con datos de términos de búsqueda reales.
 
           Esta política es opcional. Si no se establece, la solicitud de búsqueda instantánea se enviará mediante el método GET.
@@ -559,6 +564,37 @@
 <translation id="1971991630422430420">Si se habilita esta política, se usará la transición rápida cuando el punto de acceso inalámbrico lo permita. Este ajuste se aplicará a todos los usuarios e interfaces del dispositivo.
 
       Si se inhabilita esta política o no se le asigna ningún valor, no se usará la transición rápida.</translation>
+<translation id="197744850608781984">Esta política controla la estrategia de gestión de la batería cuando el usuario está inactivo.
+
+      Hay 4 acciones:
+
+      * La pantalla se atenúa si el usuario permanece inactivo durante el tiempo especificado en <ph name="SCREEN_DIM_FIELD_NAME" />.
+
+      * La pantalla se apaga si el usuario permanece inactivo durante el tiempo especificado en <ph name="SCREEN_OFF_FIELD_NAME" />.
+
+      * Aparece un cuadro de diálogo de advertencia si el usuario permanece inactivo durante el tiempo especificado en <ph name="IDLE_WARNING_FIELD_NAME" />. El mensaje avisa al usuario de que se va a habilitar el modo de inactividad y solo se muestra si el modo de inactividad implica cerrar la sesión o apagar el dispositivo.
+
+      * Se realiza la acción especificada en <ph name="IDLE_ACTION_FIELD_NAME" /> si el usuario permanece inactivo durante el tiempo especificado en Idle.
+
+      En cada una de las acciones anteriores, el retraso debe especificarse en milisegundos y el valor asignado debe ser superior a cero para activar la acción correspondiente. Si se le asigna el valor cero al retraso, <ph name="PRODUCT_OS_NAME" /> no realizará la acción correspondiente.
+
+      En cada uno de los retrasos anteriores, se utiliza un valor predeterminado si no se establece el tiempo transcurrido.
+
+      Los valores de <ph name="SCREEN_DIM_FIELD_NAME" /> deben ser inferiores o iguales a los de <ph name="SCREEN_OFF_FIELD_NAME" />. Los valores de <ph name="SCREEN_OFF_FIELD_NAME" /> y <ph name="IDLE_WARNING_FIELD_NAME" /> deben ser inferiores o iguales a los de Idle.
+
+      La política <ph name="IDLE_ACTION_FIELD_NAME" /> puede realizar una de estas 4 acciones:
+
+      * <ph name="IDLE_ACTION_ENUM_SUSPEND" />
+
+      * <ph name="IDLE_ACTION_ENUM_LOGOUT" />
+
+      * <ph name="IDLE_ACTION_ENUM_SHUTDOWN" />
+
+      * <ph name="IDLE_ACTION_ENUM_DO_NOTHING" />
+
+      Si no se establece <ph name="IDLE_ACTION_FIELD_NAME" />, se utiliza <ph name="IDLE_ACTION_ENUM_SUSPEND" />.
+
+      Nota: Existen opciones independientes para la conexión a la red eléctrica y la batería.</translation>
 <translation id="1988345404999458987">Proporciona la configuración de los servidores de impresión disponibles.
 
       Esta política permite enviar archivos JSON de configuración de servidores de impresión externos a dispositivos con <ph name="PRODUCT_OS_NAME" />.
@@ -623,9 +659,6 @@
 <translation id="2040479044912658454">Modo de rasterización de impresión</translation>
 <translation id="2043749682619281558">Habilita el resaltado del cursor en la pantalla de inicio de sesión</translation>
 <translation id="2043770014371753404">Impresoras de empresa inhabilitadas</translation>
-<translation id="2050629715135525072">Controla la capacidad de los usuarios conectados a un host de acceso remoto de transferir archivos entre el cliente y el host. No se aplica a las conexiones de asistencia remota, ya que no admiten la transferencia de archivos.
-
-          Si se inhabilita esta opción, no se permitirá la transferencia de archivos. Si se habilita esta opción o no se configura, se permitirá la transferencia de archivos.</translation>
 <translation id="2057317273526988987">Permitir el acceso a una lista de URL</translation>
 <translation id="2061810934846663491">Configurar los nombres de dominio obligatorios para hosts de acceso remoto</translation>
 <translation id="2069350366303315077">Si se habilita la política, <ph name="PRODUCT_NAME" /> usará sesiones de invitado e impedirá inicios de sesión de perfiles. Las sesiones de invitado son perfiles de <ph name="PRODUCT_NAME" /> en los que las ventanas están en modo de incógnito.
@@ -641,6 +674,7 @@
 <translation id="209586405398070749">Canal estable</translation>
 <translation id="2098658257603918882">Habilitar informes de uso y de datos sobre fallos</translation>
 <translation id="2104418465060359056">Recoger información sobre extensiones y complementos</translation>
+<translation id="2106166591774188922">Permitir que los usuarios de SAML cambien sus contraseñas de SAML dentro de la sesión en chrome://password-change</translation>
 <translation id="2106627642643925514">Anula el modo predeterminado de impresión con PIN Si este modo no está disponible, se ignorará esta política.</translation>
 <translation id="2107563874993284076">Si se habilita esta política, se permitirá que los usuarios usen sistemas de archivos compartidos en red para <ph name="PRODUCT_NAME" />. Si se inhabilita, los usuarios no podrán usar esta función.</translation>
 <translation id="2107601598727098402">
@@ -1121,13 +1155,6 @@
 <translation id="2801065672151277034">Ajustes de gestión de certificados</translation>
 <translation id="2801155097555584385">Define un porcentaje personalizado de inicio de carga de la batería</translation>
 <translation id="2805707493867224476">Permitir que todos los sitios muestren ventanas emergentes</translation>
-<translation id="2808013382476173118">Habilita el uso de servidores STUN cuando los clientes remotos intentan establecer conexión con este ordenador.
-
-      Si se habilita esta opción, los clientes remotos podrán detectar estos ordenadores y establecer conexión con ellos aunque haya un cortafuegos que los separe.
-
-      Si se inhabilita esta opción y el cortafuegos filtra las conexiones UDP salientes, este ordenador solo permitirá conexiones de ordenadores cliente que se encuentren en la red local.
-
-      Si no se establece esta política, se habilitará la opción.</translation>
 <translation id="2813281962735757923">Esta política controla los intervalos de tiempo durante los cuales el dispositivo <ph name="PRODUCT_OS_NAME" /> no tiene permiso para buscar actualizaciones automáticamente.
       Si a esta política se le asigna una lista de intervalos de tiempo que no esté vacía:
       Los dispositivos no podrán buscar actualizaciones automáticamente durante los intervalos especificados. Por motivos de seguridad, los dispositivos que deban restaurarse, o cuya versión del sistema operativo sea anterior a <ph name="PRODUCT_OS_NAME" />, no se verán afectados por esta política. Esta política no bloqueará las comprobaciones de actualizaciones solicitadas por los usuarios o administradores.
@@ -1233,6 +1260,7 @@
 <translation id="2957513448235202597">Tipo de cuenta para la autenticación <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959469725686993410">Enviar siempre los puntos de acceso Wi‑Fi al servidor mientras se detecta la zona horaria</translation>
 <translation id="2959898425599642200">Reglas de omisión de proxy</translation>
+<translation id="2960013482187484833">Utilizar la última impresora que has usado como opción predeterminada en la vista previa de impresión</translation>
 <translation id="2960128438010718932">La programación de lanzamiento progresivo para aplicar una nueva actualización</translation>
 <translation id="2960691910306063964">Habilitar o inhabilitar la autenticación sin PIN para host de acceso remoto</translation>
 <translation id="2964373560810620158">Evitar que los usuarios usen el navegador <ph name="LACROS_NAME" /></translation>
@@ -1330,6 +1358,7 @@
 <translation id="3072847235228302527">Establecer los Términos del Servicio para una cuenta de dispositivo local</translation>
 <translation id="3086995894968271156">Configura Cast Receiver en <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3091832372132789233">Carga la batería de los dispositivos que están conectados principalmente a una fuente de alimentación externa.</translation>
+<translation id="3092059499596000593">Utilizar la impresora predeterminada del sistema como opción predeterminada en la vista previa de impresión</translation>
 <translation id="309416443108680956">Especifica qué ocurre cuando un usuario que se autentica mediante un token de seguridad (por ejemplo, con una tarjeta inteligente) quita ese token durante una sesión. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />: no ocurre nada. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />: se bloquea la pantalla hasta que el usuario se vuelva a autenticar. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />: la sesión finaliza y se cierra la sesión del usuario. Si no se define esta política, se utiliza <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" /> de forma predeterminada.</translation>
 <translation id="3096595567015595053">Lista de complementos habilitados</translation>
 <translation id="3101501961102569744">Seleccionar la forma de especificar la configuración del servidor proxy</translation>
@@ -1383,6 +1412,11 @@
 <translation id="3219421230122020860">Modo de incógnito disponible</translation>
 <translation id="3220624000494482595">Si la aplicación de kiosco es una aplicación para Android, no tendrá control sobre la versión de <ph name="PRODUCT_OS_NAME" />, incluso si se asigna el valor <ph name="TRUE" /> a esta política.</translation>
 <translation id="322359555555487980">Determinar la disponibilidad de variaciones en <ph name="PRODUCT_OS_NAME" /></translation>
+<translation id="3231617925177241750">Si se habilita la política y se establecen <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_POLICY_NAME" /> y <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_POLICY_NAME" />, se mantiene activado el cambio de alimentación en picos (en caso de ser compatible con el dispositivo). La política de gestión del cambio de alimentación en picos es una política de ahorro de energía que minimiza el uso de corriente alterna durante las horas en las que más energía se utiliza del día. Para ejecutar el modo de cambio de alimentación en picos, se puede configurar una hora de inicio y de finalización para cada día de la semana. Siempre y cuando la batería se mantenga por encima del umbral especificado, el sistema se ejecuta desde la batería durante esas horas (aunque esté conectada la corriente alterna). Después del tiempo especificado, el sistema funciona con corriente alterna, pero no carga la batería. El sistema volverá a funcionar con normalidad usando la corriente alterna y cargando la batería después de la hora de inicio especificada.
+
+      Si se inhabilita esta política, el cambio de alimentación en picos queda desactivado.
+
+      Si no se establece, el cambio de alimentación en picos está desactivado en un principio. Los usuarios no pueden cambiar esta opción.</translation>
 <translation id="3231837273069128027">Si se define esta política, se configura la disponibilidad y el comportamiento de las actualizaciones de firmware de <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
 
       Especifica ajustes individuales en las propiedades archivo JSON:
@@ -1732,9 +1766,6 @@
       Si se inhabilita la política o no se establece, los dispositivos registrados no enviarán estadísticas.</translation>
 <translation id="3736879847913515635">Habilitar Añadir persona en el administrador de usuarios</translation>
 <translation id="3750220015372671395">Bloquear la generación de claves en estos sitios web</translation>
-<translation id="375266612405883748">Permite restringir el intervalo de puertos UDP utilizado por el host de acceso remoto en este ordenador.
-
-      Si no se asigna ningún valor a esta política o se le asigna una cadena vacía, el host de acceso remoto podrá utilizar cualquier puerto disponible, a menos que la política <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> esté inhabilitada, en cuyo caso el host de acceso remoto utilizará puertos UDP en el intervalo de 12.400 a 12.409.</translation>
 <translation id="3755237588083934849">Si se define esta política, determinará la frecuencia con la que se envían informes del estado del dispositivo (en milisegundos). El valor mínimo es 60 segundos.
 
       Si no se establece esta política, se aplicará el intervalo predeterminado de 3 horas.</translation>
@@ -1759,6 +1790,7 @@
       Si se inhabilita esta política o no se le asigna ningún valor, <ph name="PRODUCT_OS_NAME" /> permitirá a los usuarios apagar el dispositivo.</translation>
 <translation id="3765260570442823273">Duración del mensaje que advierte al usuario de que se cerrará la sesión porque se encuentra inactivo</translation>
 <translation id="377044054160169374">Aplicar intervención de experiencia abusiva</translation>
+<translation id="3778689139323007309">Realizar comprobaciones de revocación de los certificados del servidor validados correctamente y firmados por certificados de CA instalados localmente</translation>
 <translation id="3780152581321609624">Incluir un puerto no estándar en SPN de Kerberos</translation>
 <translation id="3788662722837364290">Configuración de la administración de energía cuando el usuario está inactivo</translation>
 <translation id="3790085888761753785">Si este ajuste está habilitado, los usuarios pueden iniciar sesión en su cuenta con Smart Lock. Es más permisivo que el funcionamiento habitual de Smart Lock, que solo permite a los usuarios desbloquear la pantalla.
@@ -2062,11 +2094,6 @@
           Si se asigna un valor a esta política, los usuarios no podrán cambiarlo ni anularlo.
 
           Si no le asignas ningún valor, el clic automático se inhabilitará al inicio, pero los usuarios podrán habilitarlo en cualquier momento.</translation>
-<translation id="4214536984333857724">Si se habilita esta opción, las solicitudes de autenticación gnubby se enviarán a una conexión de host remota mediante un proxy.
-
-          Ten en cuenta que esta función necesita componentes adicionales que solo están disponibles en el entorno de red de Google para funcionar correctamente.
-
-          Si se inhabilita esta opción, las solicitudes de autenticación gnubby no se enviarán mediante un proxy.</translation>
 <translation id="4224610387358583899">Retrasos de bloqueo de pantalla</translation>
 <translation id="4225260426043444650">Esta opción permite que los usuarios usen el navegador <ph name="LACROS_NAME" />.
 
@@ -2239,9 +2266,6 @@
       Para <ph name="PRODUCT_NAME" />, esta política solo es efectiva si el equipo está registrado en <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" />.
       Para <ph name="PRODUCT_OS_NAME" />, esta política siempre es efectiva.</translation>
 <translation id="4578265298946081589">No reiniciar cuando el usuario cierre sesión.</translation>
-<translation id="4578912515887794133">Si esta opción está habilitada, el host de acceso remoto compara el nombre del usuario local (al que está asociado el host) con el nombre de la cuenta de Google registrado como el propietario del host (es decir, "juanmartinez" si el host pertenece a la cuenta de Google juanmartinez@example.com).  El host de acceso remoto no se iniciará si el nombre del propietario del host es diferente del nombre del usuario local al que el host está asociado.  La política RemoteAccessHostMatchUsername debe utilizarse junto con la política RemoteAccessHostDomain para establecer que la cuenta de Google del propietario del host esté asociada a un dominio específico (es decir, "example.com").
-
-          Si se inhabilita esta opción o no se le asigna ningún valor, el host de acceso remoto puede asociarse a cualquier usuario local.</translation>
 <translation id="4587365491100112056">Si se establece esta política, se especificará en horas el tiempo de vida en caché de los datos de autenticación. La caché contiene datos sobre los dominios de confianza del dominio del equipo (dominios afiliados). Almacenar datos de autenticación en caché ayuda a acelerar el inicio de sesión. No se almacena en caché ningún dato específico del usuario ni ningún dato de dominios no afiliados.
 
       Si se asigna el valor "0" a esta política, se desactivará el almacenamiento de datos de autenticación en caché. Los datos específicos del dominio se obtendrán en cada inicio de sesión, por lo que desactivar el almacenamiento de datos de autenticación en caché puede ralentizar notablemente el inicio de sesión de los usuarios.
@@ -2384,15 +2408,6 @@
 <translation id="487460824085252184">Migrar automáticamente sin solicitar el consentimiento de los usuarios.</translation>
 <translation id="4874982543810021567">Bloquear WebUSB en estos sitios web</translation>
 <translation id="4876805738539874299">Versión máxima de SSL habilitada</translation>
-<translation id="487928067861956387">Permite configurar los nombres de dominio del host obligatorios que se aplicarán a los hosts de acceso remoto e impide que los usuarios los modifiquen.
-
-          Si se habilita esta opción y se le asignan uno o varios dominios, los hosts solo se podrán compartir con cuentas registradas en uno de los nombres de dominio especificados.
-
-          Si se inhabilita esta opción, no se establece o se le asigna una lista vacía, los hosts se podrán compartir con cualquier cuenta.
-
-          Esta opción anulará <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" /> (si está presente).
-
-          Consulta también <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="4887274746092315609">Habilita una página para cambiar la contraseña dentro de la sesión para usuarios de SAML</translation>
 <translation id="4892647988357350237">De forma predeterminada, se mostrarán los Términos del Servicio la primera vez que se ejecute CCT. Si se asigna el valor <ph name="SKIP_TOS_DIALOG" /> a esta política, no se mostrará el cuadro de diálogo de Términos del Servicio la primera vez que se ejecute ni posteriormente. Si se le asigna el valor <ph name="STANDARD_TOS_DIALOG" /> o no se le asigna ninguno, se mostrará el cuadro de diálogo de Términos del Servicio la primera vez que se ejecute. A continuación se describen otras advertencias:
 
@@ -2657,15 +2672,6 @@
 
       "Versión" puede hacer referencia a una versión exacta, como "61.0.3163.120", o al prefijo de una versión, como "61.0".  </translation>
 <translation id="5247006254130721952">Bloquear descargas peligrosas</translation>
-<translation id="5249303875508803168">Permite configurar los nombres de dominio de cliente obligatorios que se aplicarán a los clientes de acceso remoto e impide que los usuarios los modifiquen.
-
-          Si se habilita esta opción y se le asignan uno o varios dominios, solo se podrán conectar al host los clientes de uno de los dominios especificados.
-
-          Si se inhabilita esta opción, no se establece o se le asigna una lista vacía, se aplicará la política predeterminada para el tipo de conexión. Para la asistencia remota, permite que los clientes de cualquier dominio puedan conectarse al host. En el caso del acceso remoto en cualquier momento, solo puede conectarse el propietario del host.
-
-          Esta opción anulará <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" /> (si está presente).
-
-          Consulta también <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="5249453807420671499">Los usuarios pueden añadir cuentas de Kerberos</translation>
 <translation id="5252995168844634755">Si se le asigna el valor True a esta política, se activará el escritorio unificado, lo que permitirá que las aplicaciones ocupen varias pantallas. Los usuarios pueden desactivar el escritorio unificado para pantallas individuales.
 
@@ -2777,6 +2783,7 @@
           Si se establece el valor "true" o no se configura la política, el usuario podrá crear y administrar usuarios supervisados.</translation>
 <translation id="5369937289900051171">Solo impresión en color</translation>
 <translation id="5370279767682621504">Habilitar la compatibilidad con HTTP/0.9 en puertos no utilizados de forma predeterminada</translation>
+<translation id="5371152055157582429">Los usuarios pueden personalizar el fondo de la página Nueva pestaña</translation>
 <translation id="5377606826822211923">Controlar el uso de aplicaciones Android de fuentes que no son de confianza para el usuario</translation>
 <translation id="5377668121137111316">Si se le asigna el valor "true" a esta política, el teclado en pantalla permanece activado. Si se le asigna el valor "false", el teclado en pantalla permanece desactivado.
 
@@ -2802,11 +2809,6 @@
 <translation id="5390083518957894426">Habilita la reautenticación online en la pantalla de bloqueo para usuarios de SAML</translation>
 <translation id="5391388690191341203">Cuenta local del dispositivo para el inicio de sesión automático</translation>
 <translation id="5393009997533871906">Solo se muestran a los usuarios las impresoras incluidas en la lista de permitidos.</translation>
-<translation id="5395271912574071439">Permite activar el modo de cortina en los hosts de acceso remoto durante una conexión.
-
-          Si se habilita esta opción, los dispositivos físicos de entrada y salida del host se inhabilitan durante la conexión remota.
-
-          Si se inhabilita esta opción o no se configura, tanto los usuarios locales como los remotos pueden interactuar con el host cuando se comparte.</translation>
 <translation id="5401696449591951427">Habilitar <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">Establece los diseños de teclado que se permiten en la pantalla de inicio de sesión de <ph name="PRODUCT_OS_NAME" />.
 
@@ -3025,6 +3027,14 @@
 <translation id="572155275267014074">Configuración de Android</translation>
 <translation id="5728154254076636808">Habilitar la creación de copias de itinerancia de los datos del perfil de <ph name="PRODUCT_NAME" /></translation>
 <translation id="5732972008943405952">Importar los datos autocompletados del navegador predeterminado en la primera ejecución</translation>
+<translation id="5733040281451845496">Si se habilita esta política, los retrasos de administración de energía y los límites de duración de sesión no comienzan hasta después de la primera actividad inicial del usuario en una sesión.
+
+      Si se inhabilita esta política o no se establece, los retrasos de administración de energía y el límite de tiempo comienzan en cuanto empieza la sesión.</translation>
+<translation id="5738766588683307797">Si la política <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> está inhabilitada y se establece la política <ph name="USER_ACTIVITY_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" />, se especifica el porcentaje de ajuste del tiempo de espera de inactividad de la pantalla cuando se observe la actividad del usuario con la pantalla atenuada o poco después de que esta se haya desactivado. Si se ajusta el retraso de atenuación, se ajustan los retrasos de apagado, bloqueo e inactividad de la pantalla para mantener las mismas distancias del retraso de atenuación de pantalla que tenía la configuración original.
+
+      Si no se establece esta política, se usará el factor de escala predeterminado.
+
+      Nota: El factor de escala debe ser igual o superior a 100 %.</translation>
 <translation id="574098933844699859">Especifica si la información del sistema (p. ej., la versión de Chrome OS o el número de serie del dispositivo) aparecerá o se ocultará siempre en la pantalla de inicio de sesión.
 
       Si se asigna el valor "True" a esta política, se forzará que aparezca la información del sistema.
@@ -3435,9 +3445,6 @@
 <translation id="6401669939808766804">Cerrar la sesión del usuario</translation>
 <translation id="640244877779556713">Habilitar sugerencias de emojis</translation>
 <translation id="6407093060083181305">Configurar lista de bloqueados de instalación de extensiones</translation>
-<translation id="6408233796253901198">Si se asigna un valor a esta política, el host de acceso remoto utilizará esta URL para validar los tokens de autenticación de los clientes de acceso remoto y para aceptar las conexiones. Se debe utilizar junto con RemoteAccessHostTokenUrl.
-
-          Esta función está inhabilitada si está vacía o no se le asigna ningún valor.</translation>
 <translation id="6417265370957905582">Asistente de Google</translation>
 <translation id="6422575351619065453">En modo kiosco, permite controlar si se muestra el menú de accesibilidad flotante.
 
@@ -3445,6 +3452,7 @@
 
       Si se inhabilita esta política o no se establece, el menú de accesibilidad flotante no se mostrará nunca.</translation>
 <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation>
+<translation id="6424486395812679373">Realizar comprobaciones de Navegación segura en todos los archivos descargados</translation>
 <translation id="6438364096042399634">Si se asigna un valor a esta política, se definirá la lista de dispositivos USB que los usuarios pueden desvincular de su controlador de kernel para utilizarse en la API chrome.usb directamente en una aplicación web. Las entradas son pares de identificador de producto e identificador de proveedor del USB que permiten identificar hardware específico.
 
       Si no se le asigna ningún valor, la lista de dispositivos USB que se pueden desvincular estará vacía.
@@ -3531,6 +3539,9 @@
 <translation id="6553143066970470539">Porcentaje de brillo de la pantalla</translation>
 <translation id="6558362593755624474">Establecer esta política permite especificar la clave de licencia de <ph name="PLUGIN_VM_NAME" /> para este dispositivo.</translation>
 <translation id="6559057113164934677">No permitir que ningún sitio acceda a la cámara y al micrófono</translation>
+<translation id="6559221564468029245">Si se habilita la política o no se establece, no se considerará que el usuario está inactivo mientras se reproduzca audio. Esto impide que se alcance el tiempo de espera de inactividad y que se entre en modo de inactividad. Sin embargo, se llevarán a cabo la atenuación de pantalla, la desconexión de pantalla y el bloqueo de pantalla tras los tiempos de espera configurados, a pesar de la actividad del audio.
+
+      Si se inhabilita la política, la actividad de audio no impedirá que se considere al usuario como inactivo.</translation>
 <translation id="6559475864956112261">Esta política está obsoleta. Se debe usar la política <ph name="PROXY_SETTINGS_POLICY_NAME" /> en su lugar.
 
        Si se habilita esta política, se permite especificar el servidor proxy que debe usar Chrome y se evita que los usuarios cambien los ajustes del proxy. Chrome y las aplicaciones ARC ignorarán todas las opciones relacionadas con el proxy especificadas en la línea de comandos. Esta política solo tiene validez si no se especifica la política <ph name="PROXY_SETTINGS_POLICY_NAME" />.
@@ -3949,6 +3960,9 @@
 <translation id="7072208053150563108">Frecuencia de cambio de contraseña de dispositivo</translation>
 <translation id="7072567600438630966">Permite habilitar Mi teléfono.</translation>
 <translation id="7079519252486108041">Bloquear pop-ups en estos sitios</translation>
+<translation id="7081784525008938771">Si se habilita la política o no se establece, no se considerará que el usuario está inactivo mientras se reproduzca vídeo. Esto impide que se alcancen el retraso de inactividad, el retraso de atenuación de pantalla y el retraso de bloqueo de pantalla y que se lleven a cabo las acciones correspondientes.
+
+      Si se inhabilita la política, la actividad de vídeo no impedirá que se considere al usuario como inactivo.</translation>
 <translation id="7086720321892395256">Controla las políticas de usuarios y dispositivos para la función de pantalla de privacidad.</translation>
 <translation id="7091842872805965910">Habilita la función de introducir PINs automáticamente en las pantallas de inicio de sesión y bloqueo.</translation>
 <translation id="7093294902558672021">Envía información sobre los ventiladores del dispositivo.
@@ -4075,9 +4089,6 @@
       Si se inhabilita esta política o no se le asigna ningún valor, se ignorará la política del KDC en las plataformas admitidas y solo se respetará la política <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />.
 
       En <ph name="MS_WIN_NAME" />, la política del KDC se respeta siempre.</translation>
-<translation id="7273823081800296768">Si esta opción está habilita o no configurada, los usuarios podrán sincronizar los clientes y los hosts en el momento de la conexión, lo que elimina la necesidad de introducir siempre un PIN.
-
-          Si no se habilita esta opción, esta función no estará disponible.</translation>
 <translation id="7274077256421167535">Habilita la potencia compartida por USB</translation>
 <translation id="7275334191706090484">Marcadores administrados</translation>
 <translation id="7278854311116092134">Nombres de hosts de mensajes nativos que se deben excluir de la lista de bloqueados</translation>
@@ -4182,6 +4193,11 @@
 
       Si no se le asigna ningún valor, se aplicará la política <ph name="ASK_NOTIFICATIONS_POLICY_NAME" />, pero los usuarios podrán cambiar esta opción.</translation>
 <translation id="747275827471712187">Volver a la configuración antigua de comportamiento de cookies de <ph name="ATTRIBUTE_SAMESITE_NAME" /> en estos sitios web</translation>
+<translation id="7476447711788742702">Si se le asigna un valor a esta política, se especifica la acción que realiza <ph name="PRODUCT_OS_NAME" /> cuando el usuario cierra la tapa del dispositivo.
+
+      Si no se le asigna ningún valor, la acción será la suspensión.
+
+      Nota: Si la acción es la suspensión, <ph name="PRODUCT_OS_NAME" /> se puede configurar por separado para bloquear o no la pantalla antes de entrar en modo de suspensión.</translation>
 <translation id="7476621944304431784">Si se habilita esta opción, los usuarios podrán sincronizar las configuraciones de la red Wi‑Fi en sus dispositivos <ph name="PRODUCT_OS_NAME" /> y en un teléfono Android conectado. Para poder sincronizar las configuraciones de la red Wi‑Fi, los usuarios deben aceptar explícitamente esta función completando un proceso de configuración.
 
       Si se inhabilita esta opción, los usuarios no podrán sincronizar las configuraciones de la red Wi‑Fi.
@@ -4209,9 +4225,6 @@
 
       Esta política está obsoleta. Usa la política <ph name="PRINTERS_POLICY_NAME" /> en su lugar.
       </translation>
-<translation id="7504632989711326175">Si se asigna un valor a esta política, el host utilizará un certificado de cliente con el CN de emisor especificado para autenticarse en RemoteAccessHostTokenValidationUrl. Si se le asigna el valor "*", se utilizará cualquier certificado de cliente disponible.
-
-          Esta función está inhabilitada si está vacía o no se le asigna ningún valor.</translation>
 <translation id="7506745375479451616">Esta política controla el comando que se utilizará para abrir las URL al cambiar de <ph name="IE_PRODUCT_NAME" /> a <ph name="PRODUCT_NAME" />. A esta política se le puede asignar la ruta de un archivo ejecutable o el valor <ph name="PRODUCT_NAME_PLACEHOLDER" /> para detectar automáticamente la ubicación de <ph name="PRODUCT_NAME" />.
 
       Si no se asigna ningún valor a esta política, <ph name="IE_PRODUCT_NAME" /> detectará automáticamente la ruta ejecutable de <ph name="PRODUCT_NAME" /> al iniciar <ph name="PRODUCT_NAME" /> desde Internet Explorer.
@@ -4489,6 +4502,11 @@
 <translation id="7891884447851425349">Si <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> está activada y se asigna un valor a <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" />, se especificará la URL del buscador usada durante una búsqueda predeterminada. La URL debe incluir la cadena <ph name="SEARCH_TERM_MARKER" />, que en la consulta se sustituirá por los términos de búsqueda del usuario.
 
       Puedes especificar la URL de la Búsqueda de Google introduciendo lo siguiente: <ph name="GOOGLE_SEARCH_URL" />.</translation>
+<translation id="7894185046683379696">Si se establece la política, permite especificar el tiempo (en milisegundos) que debe transcurrir sin que el usuario realice ninguna acción antes de que la pantalla se bloquee (con conexión a la red eléctrica o batería). Los valores deben ser inferiores al retraso de inactividad indicado en <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
+
+      Cuando se le asigna el valor cero, <ph name="PRODUCT_OS_NAME" /> no bloquea la pantalla cuando el usuario pasa a estar inactivo. Si no se establece, se utiliza un valor de tiempo predeterminado.
+
+      Recomendación: Bloquea la pantalla en modo de inactividad activando el bloqueo de pantalla en el modo de suspensión y configurando <ph name="PRODUCT_OS_NAME" /> para que realice la suspensión después del periodo de inactividad indicado. Utiliza esta política únicamente si el bloqueo de la pantalla debería producirse mucho antes que la suspensión, o cuando no quieras que se produzca la suspensión en modo de inactividad.</translation>
 <translation id="7895553628261067384">Acceso remoto</translation>
 <translation id="7902040092815978832">Muestra el teclado numérico para introducir la contraseña</translation>
 <translation id="7904177352786629708">Si se asigna el valor "Enabled" a esta política, se omitirá la consulta de CNAME. El nombre del servidor se usará tal como se haya introducido al generar el SPN de Kerberos.
@@ -4607,6 +4625,9 @@
           Si se habilita la política, la lista de cuentas que defina la política se añade a la configuración de las cuentas de Kerberos.
 
           Si no se asigna ningún valor a esta política o se inhabilita, no se añadirá ninguna cuenta a la configuración de las cuentas de Kerberos y se eliminarán todas las cuentas que se hayan añadido con esta política. Si la política "Los usuarios pueden añadir cuentas de Kerberos" está habilitada, los usuarios podrán añadir cuentas manualmente.</translation>
+<translation id="8078297389450285582">Si se habilita la política o no se establece, se activa el modelo de atenuación inteligente y se puede alargar el tiempo que pasa hasta que la pantalla se atenúe. Si retrasa el tiempo, se ajustan los retrasos de apagado de pantalla, bloqueo de pantalla e inactividad para mantener las mismas distancias del retraso de atenuación de pantalla que tenía la configuración original.
+
+      Si se inhabilita la política, el modelo de atenuación inteligente no influirá en la atenuación de la pantalla.</translation>
 <translation id="8099880303030573137">Retraso de inactividad cuando el dispositivo funciona con la batería</translation>
 <translation id="8101381354936029836">Grupo atómico de la política:</translation>
 <translation id="8101937907822293485">Habilita el envío anónimo de informes de uso y de datos sobre fallos de <ph name="PRODUCT_NAME" /> a Google e impide que los usuarios modifiquen esta opción.
@@ -4740,6 +4761,11 @@
       Si no se le asigna ningún valor, los sitios web podrán solicitar acceso, pero los usuarios podrán cambiar esta opción.</translation>
 <translation id="8274603902181597201">Borrar los eCryptfs del directorio principal del usuario y empezar con un nuevo directorio principal cifrado con ext4.</translation>
 <translation id="8284296539558710573">Solicitudes de autenticación HTTP de origen cruzado</translation>
+<translation id="8284527236880877730">Si se inhabilita la política <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> y se establece <ph name="PRESENTATION_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" />, se especifica el porcentaje del retraso de atenuación de pantalla cuando el dispositivo esté en el modo de presentación. Si se ajusta el retraso de atenuación de pantalla, se ajustan los retrasos de apagado de pantalla, bloqueo de pantalla e inactividad para mantener las mismas distancias del retraso de atenuación de pantalla que tenía la configuración original.
+
+      Si no se establece esta política, se usará el factor de escala predeterminado.
+
+      Nota: El factor de escala debe ser igual o superior a 100 %.</translation>
 <translation id="8285435910062771358">Lupa de pantalla completa habilitada</translation>
 <translation id="8288199156259560552">Habilitar los servicios de ubicación de Google para aplicaciones de Android</translation>
 <translation id="8290875622178450531">Habilita la función de accesibilidad de dictado.
@@ -4809,13 +4835,6 @@
 <translation id="8371178326720637170">Permite que las extensiones gestionadas usen la API Enterprise Hardware Platform</translation>
 <translation id="8375817202037102567">Bloquear el acceso de escritura a archivos y directorios en estos sitios web</translation>
 <translation id="8379317372795444261">Se permite la autenticación <ph name="BASIC_AUTH" /> en conexiones HTTP</translation>
-<translation id="8380490658357556620">Permite habilitar el uso de servidores de retransmisión cuando los clientes remotos intentan conectarse a este ordenador.
-
-          Si se habilita esta opción, los clientes remotos podrán utilizar servidores de retransmisión para conectarse a este ordenador cuando no haya disponible una conexión directa (por ejemplo, debido a restricciones del cortafuegos).
-
-          Ten en cuenta que si la política <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> está inhabilitada, se ignorará.
-
-          Si no se asigna ningún valor a esta política, se habilitará la opción.</translation>
 <translation id="838056554726401140">Lista de URL que especifica a qué URL se aplicará <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Esta política no afecta a los valores abiertos automáticamente por los usuarios.
 
       Si se le asigna un valor a esta política, los archivos se abrirán automáticamente solo si la URL está incluida en la lista y el tipo de archivo aparece en <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Si no se cumple alguna de las dos condiciones, la política no abrirá automáticamente el archivo descargado.
@@ -4983,9 +5002,6 @@
       Si se asigna el valor "true" a esta política, las pestañas que hayan estado en segundo plano durante un mínimo de 5 minutos podrían inmovilizarse. Inmovilizar las pestañas reduce el consumo de CPU, batería y memoria. <ph name="PRODUCT_NAME" /> usa métodos heurísticos para evitar inmovilizar pestañas que realicen funciones útiles en segundo plano, como mostrar notificaciones, reproducir sonidos o emitir vídeos en streaming. Los desarrolladores web pueden inhabilitar la inmovilización en sus sitios web (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Si se asigna el valor "false" a esta política, no se inmovilizará ninguna pestaña.</translation>
-<translation id="8622378389102774881">Si se asigna un valor a esta política, el host de acceso remoto necesitará la autenticación de los clientes para obtener un token de autenticación de esta URL y poder conectarse. Debe utilizarse junto con RemoteAccessHostTokenValidationUrl.
-
-          Esta función está inhabilitada si está vacía o no se le asigna ningún valor.</translation>
 <translation id="8631434304112909927">hasta la versión <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">La lista de aplicaciones para tomar notas que están permitidas en la pantalla de bloqueo de <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="8649763579836720255">Los dispositivos Chrome OS pueden utilizar la confirmación remota (acceso verificado) para obtener un certificado emitido por la autoridad de certificación de Chrome OS que afirme que el dispositivo puede reproducir contenido protegido. Este proceso implica el envío de información de aprobación del hardware a la autoridad de certificación de Chrome OS que identifica el dispositivo de forma única.
@@ -5080,9 +5096,19 @@
 
       Nota: Consulta una lista de variables que puedes utilizar en esta página: https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables.</translation>
 <translation id="8777369558049831576">Permite mostrar la casilla Siempre abierto en el cuadro de diálogo de un protocolo externo.</translation>
+<translation id="8786409859071107656">Si se habilita esta política, se activa la política de gestión de energía compartida por USB.
+
+      Algunos dispositivos tienen un puerto USB específico marcado con un icono de rayo o de batería para cargar dispositivos usando la batería del sistema. Esta política afecta al comportamiento de carga de este puerto cuando el sistema está en modo de suspensión o apagado, pero no afecta a los otros puertos USB ni al comportamiento de carga mientras el sistema está activo. En este caso, el puerto USB siempre suministra energía.
+
+      Cuando está en modo de suspensión, se suministra energía al puerto USB cuando el dispositivo está conectado al cargador de pared o el nivel de carga de la batería es superior al 50 %. Cuando está apagado, se suministra energía al puerto USB cuando el dispositivo está enchufado al cargador de pared.
+
+      Si se inhabilita esta política, no se suministra energía.
+
+      Si no se le asigna ningún valor a esta política, implica que está activada y los usuarios no pueden desactivarla.</translation>
 <translation id="8798099450830957504">Predeterminado</translation>
 <translation id="8800453707696044281">Define un porcentaje personalizado de la parada de carga de la batería</translation>
 <translation id="8801680448782904838">Informar al usuario de que es necesario o recomendable reiniciar el navegador o el dispositivo</translation>
+<translation id="8816671955985738552">No permitir cambios de contraseña de SAML dentro de la sesión en chrome://password-change</translation>
 <translation id="8817960019535659860">Evitar que los usuarios canjeen ofertas a través del registro de Chrome OS</translation>
 <translation id="8818173863808665831">Informa de la ubicación geográfica del dispositivo.
 
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index 656bf6f3..046cb63 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Laisser les utilisateurs choisir s'ils veulent employer un service Google anonyme pour qu'une description soit ajoutée automatiquement aux images sans libellé</translation>
 <translation id="1087437665304381368">Cette règle permet de ne contrôler que le mode développeur <ph name="PRODUCT_OS_NAME" />. Si vous voulez bloquer l'accès aux options pour les développeurs Android, vous devez définir la règle <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation>
 <translation id="1087707496788636333">La liste des règles Chrome Enterprise a changé d'adresse ! Pensez à mettre à jour vos favoris. Le lien correct est le suivant : <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
-<translation id="1093082332347834239">Si ce paramètre est activé, l'hôte d'assistance à distance est exécuté dans un processus avec des autorisations <ph name="UIACCESS_PERMISSION_NAME" />. Cela permet aux utilisateurs distants d'interagir avec des fenêtres élevées sur le bureau de l'utilisateur local.
-
-          Si ce paramètre est désactivé ou non configuré, l'hôte d'assistance à distance est exécuté dans le contexte de l'utilisateur et les utilisateurs distants ne peuvent pas interagir avec des fenêtres élevées sur le Bureau.</translation>
 <translation id="1095209545735032039">Bloquer l'API Serial sur ces sites</translation>
 <translation id="1096105751829466145">Moteur de recherche par défaut</translation>
 <translation id="1099282607296956954">Activer l'isolation des sites pour tous les sites</translation>
@@ -625,9 +622,6 @@
 <translation id="2040479044912658454">Mode de rastérisation pour l'impression</translation>
 <translation id="2043749682619281558">Activer la mise en surbrillance du curseur sur l'écran de connexion</translation>
 <translation id="2043770014371753404">Imprimantes d'entreprise désactivées</translation>
-<translation id="2050629715135525072">Vérifie la possibilité pour un utilisateur connecté à un hôte distant de transférer des fichiers entre le client et l'hôte. Cette règle ne s'applique pas aux connexions d'assistance à distance, qui ne sont pas compatibles avec le transfert de fichiers.
-
-          Si ce paramètre est désactivé, le transfert de fichiers est interdit. Si ce paramètre est activé ou s'il n'est pas configuré, le transfert de fichiers est autorisé.</translation>
 <translation id="2057317273526988987">Autoriser l'accès à une liste d'URL</translation>
 <translation id="2061810934846663491">Configurer les noms de domaines requis pour les hôtes d'accès à distance</translation>
 <translation id="2069350366303315077">Si cette règle est activée, <ph name="PRODUCT_NAME" /> force l'ouverture des sessions Invité et empêche les connexions de profils. Les connexions en mode Invité sont des profils <ph name="PRODUCT_NAME" /> où les fenêtres s'ouvrent en mode navigation privée.
@@ -1122,13 +1116,6 @@
 <translation id="2801065672151277034">Paramètres de gestion des certificats</translation>
 <translation id="2801155097555584385">Personnaliser le pourcentage auquel la batterie doit commencer à être rechargée</translation>
 <translation id="2805707493867224476">Autoriser tous les sites à afficher des fenêtres pop-up</translation>
-<translation id="2808013382476173118">Permet l'utilisation de serveurs STUN lorsque les clients distants tentent d'établir une connexion avec ce poste.
-
-          Si ce paramètre est activé, les clients distants peuvent détecter ce poste et s'y connecter même s'ils en sont séparés par un pare-feu.
-
-          Si ce paramètre est désactivé et si les connexions UDP sortantes sont filtrées par le pare-feu, ce poste autorise uniquement les connexions émanant des postes clients au sein du réseau local.
-
-          Si cette règle n'est pas configurée, le paramètre est activé.</translation>
 <translation id="2813281962735757923">Cette règle permet de définir les périodes durant lesquelles l'appareil <ph name="PRODUCT_OS_NAME" /> n'est pas autorisé à rechercher automatiquement des mises à jour.
       Si des périodes sont définies lors de la configuration de cette règle :
       Aucune recherche automatique de mises à jour n'est effectuée pendant ces périodes. Les appareils nécessitant un rollback ou équipés d'une version antérieure à <ph name="PRODUCT_OS_NAME" /> ne sont pas concernés par cette règle en raison de problèmes de sécurité potentiels. Sachez également que cette règle n'empêche pas l'utilisateur ni l'administrateur de procéder à une recherche de mises à jour.
@@ -1727,9 +1714,6 @@
       Si cette règle est désactivée ou qu'elle n'est pas configurée, les appareils enregistrés ne fournissent pas ces statistiques.</translation>
 <translation id="3736879847913515635">Autoriser l'ajout de personnes dans le gestionnaire d'utilisateurs</translation>
 <translation id="3750220015372671395">Bloquer la génération de clé sur ces sites</translation>
-<translation id="375266612405883748">Limite la plage de ports UDP utilisés par l'hôte d'accès à distance sur ce poste.
-
-          Si cette règle n'est pas configurée ou si elle est définie sur une chaîne vide, l'hôte d'accès à distance est autorisé à utiliser n'importe quel port disponible, sauf si la règle <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> est désactivée. Dans ce cas, l'hôte d'accès à distance utilise les ports UDP 12400 à 12409.</translation>
 <translation id="3755237588083934849">Permet de spécifier la fréquence d'envoi (en millisecondes) des informations sur l'état de l'appareil. La fréquence minimale autorisée est de 60 secondes.
 
       Si cette règle n'est pas configurée, la valeur par défaut (trois heures) est appliquée.</translation>
@@ -2057,11 +2041,6 @@
           Si vous configurez cette règle, les utilisateurs ne peuvent pas la modifier ni l'ignorer.
 
           Si elle n'est pas définie, le clic automatique est désactivé au départ, mais les utilisateurs peuvent l'activer à tout moment.</translation>
-<translation id="4214536984333857724">Si ce paramètre est activé, les requêtes d'authentification gnubby sont envoyées par un proxy via une connexion hôte à distance.
-
-          Notez que cette fonctionnalité nécessite des composants supplémentaires qui ne sont pas disponibles en dehors de l'environnement réseau de Google pour fonctionner correctement.
-
-          Si ce paramètre est désactivé, les requêtes d'authentification gnubby ne sont pas envoyées par un proxy.</translation>
 <translation id="4224610387358583899">Délais de verrouillage de l'écran</translation>
 <translation id="4225260426043444650">Ce paramètre permet aux utilisateurs d'avoir recours au navigateur <ph name="LACROS_NAME" />.
 
@@ -2234,9 +2213,6 @@
       Concernant <ph name="PRODUCT_NAME" />, cette règle n'est appliquée que si l'ordinateur est enregistré avec la règle <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" />.
       Cette règle est toujours appliquée pour <ph name="PRODUCT_OS_NAME" />.</translation>
 <translation id="4578265298946081589">Ne pas redémarrer en cas de déconnexion de l'utilisateur.</translation>
-<translation id="4578912515887794133">Si ce paramètre est activé, l'hôte d'accès à distance compare le nom de l'utilisateur local (auquel l'hôte est associé) au nom du compte Google enregistré en tant que propriétaire de l'hôte (par exemple, "pierredupont" si l'hôte appartient au compte Google pierredupont@example.com).  L'hôte d'accès à distance ne démarre pas si le nom du propriétaire de l'hôte diffère du nom de l'utilisateur local auquel l'hôte est associé.  La règle RemoteAccessHostMatchUsername doit être utilisée avec la règle RemoteAccessHostDomain pour faire également en sorte que le compte Google du propriétaire de l'hôte soit associé à un domaine spécifique (soit example.com).
-
-          Si ce paramètre est désactivé ou n'est pas configuré, l'hôte d'accès à distance peut être associé à n'importe quel utilisateur local.</translation>
 <translation id="4587365491100112056">Cette règle permet de spécifier la durée de mise en cache des données d'authentification, en heures. Le cache contient des données sur les domaines approuvés par le domaine de la machine (domaines affiliés). La mise en cache des données d'authentification permet donc d'accélérer la connexion. Les données spécifiques à l'utilisateur et celles relatives à des domaines non affiliés ne sont pas mises en cache.
 
       Si cette règle est définie sur 0, la mise en cache des données d'authentification est désactivée. Les données spécifiques à un domaine étant récupérées à chaque connexion, la désactivation de la mise en cache des données d'authentification peut considérablement ralentir la connexion des utilisateurs.
@@ -2379,15 +2355,6 @@
 <translation id="487460824085252184">Effectuer automatiquement la migration, sans demander l'autorisation de l'utilisateur.</translation>
 <translation id="4874982543810021567">Bloquer WebUSB sur ces sites</translation>
 <translation id="4876805738539874299">Version SSL maximale activée</translation>
-<translation id="487928067861956387">Permet de configurer les noms de domaines obligatoires de l'hôte qui seront imposés aux hôtes d'accès à distance et d'empêcher les utilisateurs de les modifier.
-
-          Si ce paramètre est activé et défini sur un ou plusieurs domaines, les hôtes ne peuvent être partagés qu'à l'aide des comptes enregistrés sur les noms de domaines spécifiés.
-
-          Si ce paramètre est désactivé, qu'il n'est pas défini ou qu'aucun domaine ne figure dans la liste, les hôtes peuvent être partagés via n'importe quel compte.
-
-          Ce paramètre ignore la règle <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" />, le cas échéant.
-
-          Voir également la règle <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="4887274746092315609">Affiche une page permettant aux utilisateurs SAML de changer de mot de passe en cours de session</translation>
 <translation id="4892647988357350237">Par défaut, les conditions d'utilisation sont affichées la première fois que des onglets personnalisés Chrome sont exécutés. Si cette règle est définie sur <ph name="SKIP_TOS_DIALOG" />, la boîte de dialogue des conditions d'utilisation ne s'affiche ni à la première exécution, ni lors des suivantes. Si cette règle est définie sur <ph name="STANDARD_TOS_DIALOG" /> ou qu'elle n'est pas configurée, la boîte de dialogue des conditions d'utilisation s'affiche à la première exécution. Notez également les points suivants :
 
@@ -2648,15 +2615,6 @@
 
       Dans le cas présent, le terme "version" peut désigner une version exacte telle que "61.0.3163.120" ou le préfixe d'une version tel que "61.0".  </translation>
 <translation id="5247006254130721952">Bloquer les téléchargements dangereux</translation>
-<translation id="5249303875508803168">Permet de configurer les noms de domaines obligatoires du client qui sont imposés aux clients d'accès à distance et d'empêcher les utilisateurs de les modifier.
-
-          Si ce paramètre est activé et défini sur un ou plusieurs domaines, seuls les clients de l'un des domaines indiqués peuvent se connecter à l'hôte.
-
-          Si ce paramètre est désactivé, qu'il n'est pas défini ou qu'aucun domaine ne figure dans la liste, la règle par défaut pour le type de connexion concerné est appliquée. Dans le cadre d'une assistance à distance, cela permet aux clients de n'importe quel domaine de se connecter à l'hôte. Concernant l'accès à distance à tout moment, seul le propriétaire de l'hôte peut se connecter.
-
-          Ce paramètre ignore la règle <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" />, le cas échéant.
-
-          Voir également la règle <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="5249453807420671499">Les utilisateurs peuvent ajouter des comptes Kerberos</translation>
 <translation id="5252995168844634755">Si cette règle est définie sur "True", le mode bureau unifié est activé, ce qui permet aux applications de couvrir plusieurs écrans. En cas d'écrans individuels, les utilisateurs peuvent désactiver ce mode.
 
@@ -2793,11 +2751,6 @@
 <translation id="5390083518957894426">Permettre la réauthentification en ligne sur l'écran de verrouillage des utilisateurs via SAML</translation>
 <translation id="5391388690191341203">Compte local de l'appareil avec connexion automatique</translation>
 <translation id="5393009997533871906">Seules les imprimantes figurant dans la liste d'autorisation sont proposées aux utilisateurs</translation>
-<translation id="5395271912574071439">Active la protection des hôtes d'accès à distance lorsqu'une connexion est en cours.
-
-          En cas d'activation de ce paramètre, les appareils d'entrée et de sortie physiques des hôtes sont désactivés tant qu'une connexion est en cours.
-
-          En cas de désactivation ou de non-configuration de ce paramètre, l'utilisateur local ainsi que l'utilisateur à distance peuvent interagir avec l'hôte tant que ce celui-ci est partagé.</translation>
 <translation id="5401696449591951427">Activer <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">Détermine les dispositions de clavier autorisées sur l'écran de connexion <ph name="PRODUCT_OS_NAME" />.
 
@@ -3423,9 +3376,6 @@
 <translation id="6401669939808766804">Déconnecter l'utilisateur</translation>
 <translation id="640244877779556713">Activer la suggestion d'emoji</translation>
 <translation id="6407093060083181305">Configurer la liste de blocage concernant l'installation des extensions</translation>
-<translation id="6408233796253901198">Si cette règle est définie, l'hôte d'accès à distance utilise cette URL pour valider les jetons d'authentification provenant des clients d'accès à distance afin d'accepter les connexions. Elle doit être utilisée avec la règle RemoteAccessHostTokenUrl.
-
-          Cette fonctionnalité est désactivée si la règle est vide ou n'est pas configurée.</translation>
 <translation id="6417265370957905582">Assistant Google</translation>
 <translation id="6422575351619065453">En mode Kiosque, cette règle permet de déterminer si le menu d'accessibilité flottant est affiché.
 
@@ -4056,9 +4006,6 @@
       Si cette règle est désactivée, la règle KDC est ignorée sur les plates-formes compatibles, et seule la règle <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> est respectée.
 
       Sous <ph name="MS_WIN_NAME" />, la règle KDC est toujours respectée.</translation>
-<translation id="7273823081800296768">Si ce paramètre est activé ou qu'il n'est pas configuré, les utilisateurs peuvent alors choisir d'associer les clients et les hôtes au moment de la connexion, ce qui permet d'éliminer la nécessité de saisir systématiquement un code d'accès.
-
-          S'il est désactivé, cette fonctionnalité est alors indisponible.</translation>
 <translation id="7274077256421167535">Activer le partage d'alimentation USB</translation>
 <translation id="7275334191706090484">Favoris gérés</translation>
 <translation id="7278854311116092134">Noms des hôtes de messagerie native à exclure de la liste de blocage</translation>
@@ -4191,9 +4138,6 @@
 
       Cette règle étant obsolète, veuillez utiliser la règle <ph name="PRINTERS_POLICY_NAME" /> à la place.
       </translation>
-<translation id="7504632989711326175">Si cette règle est définie, l'hôte utilise un certificat client avec le nom commun de l'émetteur pour s'identifier auprès de RemoteAccessHostTokenValidationUrl. Définissez-la sur "*" pour utiliser tout certificat client disponible.
-
-          Cette fonctionnalité est désactivée si la règle est vide ou n'est pas configurée.</translation>
 <translation id="7506745375479451616">Permet de spécifier la commande à utiliser pour ouvrir les URL dans <ph name="PRODUCT_NAME" /> lors du changement de navigateur depuis <ph name="IE_PRODUCT_NAME" />. Cette règle peut être définie sur le chemin d'accès à un fichier exécutable ou sur <ph name="PRODUCT_NAME_PLACEHOLDER" /> pour détecter automatiquement l'emplacement d'installation de <ph name="PRODUCT_NAME" />.
 
       Si cette règle n'est pas configurée, <ph name="IE_PRODUCT_NAME" /> détecte automatiquement le chemin d'accès au fichier exécutable de <ph name="PRODUCT_NAME" /> lors du lancement de <ph name="PRODUCT_NAME" /> depuis Internet Explorer.
@@ -4794,13 +4738,6 @@
 <translation id="8371178326720637170">Autorise les extensions gérées à utiliser l'API Enterprise Hardware Platform</translation>
 <translation id="8375817202037102567">Bloquer l'accès en écriture aux fichiers et répertoires pour ces sites</translation>
 <translation id="8379317372795444261">Authentification <ph name="BASIC_AUTH" /> autorisée sur les connexions HTTP</translation>
-<translation id="8380490658357556620">Permet l'utilisation de serveurs relais lorsque les clients distants tentent d'établir une connexion avec ce poste.
-
-          Si ce paramètre est activé, les clients distants peuvent utiliser des serveurs relais pour se connecter à ce poste lorsque aucune connexion directe n'est disponible (par exemple, en raison de restrictions du pare-feu).
-
-          Notez que si la règle <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> est désactivée, cette règle est ignorée.
-
-          Si cette règle n'est pas configurée, le paramètre est activé.</translation>
 <translation id="838056554726401140">Liste d'URL indiquant les URL pour lesquelles la règle <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> s'applique. Cette règle n'a aucune incidence sur les valeurs définies par les utilisateurs pour l'ouverture automatique.
 
       Si cette règle est définie, les fichiers seront ouverts automatiquement à condition que la règle s'applique à l'URL et que le type de fichier figure dans <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Si l'une des deux conditions est fausse, le fichier téléchargé ne s'ouvrira pas automatiquement suivant cette règle.
@@ -4964,9 +4901,6 @@
       Si cette règle est définie sur "True", les onglets en arrière-plan depuis au moins cinq minutes peuvent être figés. En figeant ces onglets, vous sollicitez moins le processeur, la batterie et la mémoire. <ph name="PRODUCT_NAME" /> utilise des heuristiques pour ne pas figer les onglets qui exécutent une tâche utile en arrière-plan (par exemple, l'affichage de notifications, la lecture audio d'un contenu, la diffusion d'une vidéo en streaming). Notez que les développeurs Web peuvent également choisir de ne pas figer les pages de leur site (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Si cette règle est définie sur "False", aucun onglet n'est figé.</translation>
-<translation id="8622378389102774881">Si cette règle est définie, l'hôte d'accès à distance exigera des clients qui s'authentifient qu'ils obtiennent un jeton d'authentification à partir de cette URL pour se connecter. Elle doit être utilisée avec la règle RemoteAccessHostTokenValidationUrl.
-
-          Cette fonctionnalité est désactivée si la règle est vide ou n'est pas configurée.</translation>
 <translation id="8631434304112909927">jusqu'à la version <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">Liste des applications de prise de notes autorisées sur l'écran de verrouillage de <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="8649763579836720255">Il est possible d'utiliser l'attestation à distance (accès vérifié) pour les appareils Chrome OS afin d'obtenir un certificat délivré par Chrome OS CA qui atteste que vous pouvez lire du contenu protégé sur cet appareil. Ce processus implique l'envoi d'informations relatives au matériel à Chrome OS CA qui permettent d'identifier l'appareil de façon unique.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index ae54a12..1cc21cef 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Izinkan pengguna memilih menggunakan layanan Google anonim untuk memberikan deskripsi otomatis untuk gambar tanpa label</translation>
 <translation id="1087437665304381368">Kebijakan ini hanya mengontrol mode developer<ph name="PRODUCT_OS_NAME" />. Jika ingin mencegah akses ke Opsi Developer Android, Anda perlu menetapkan kebijakan <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation>
 <translation id="1087707496788636333">Daftar kebijakan Chrome Enterprise berpindah! Update bookmark ke <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
-<translation id="1093082332347834239">Jika setelan ini diaktifkan, host bantuan jarak jauh akan dijalankan dalam proses dengan izin <ph name="UIACCESS_PERMISSION_NAME" />.  Hal ini akan memungkinkan pengguna jarak jauh untuk berinteraksi dengan jendela yang berada jauh di desktop pengguna lokal.
-
-          Jika setelan ini dinonaktifkan atau tidak dikonfigurasi, host bantuan jarak jauh akan dijalankan dalam konteks pengguna dan pengguna jarak jauh tidak dapat berinteraksi dengan jendela yang berada jauh di desktop.</translation>
 <translation id="1095209545735032039">Memblokir Serial API di situs ini</translation>
 <translation id="1096105751829466145">Penyedia penelusuran default</translation>
 <translation id="1099282607296956954">Aktifkan Isolasi Situs untuk setiap situs</translation>
@@ -662,9 +659,6 @@
 <translation id="2040479044912658454">Mode Rasterisasi Cetak</translation>
 <translation id="2043749682619281558">Mengaktifkan sorotan kursor di layar login</translation>
 <translation id="2043770014371753404">Menonaktifkan printer perusahaan</translation>
-<translation id="2050629715135525072">Mengontrol kemampuan pengguna yang terhubung ke host akses jarak jauh untuk mentransfer file antara klien dan host. Kebijakan ini tidak berlaku untuk sambungan bantuan jarak jauh, yang tidak mendukung transfer file.
-
-          Jika setelan ini dinonaktifkan, transfer file tidak akan diizinkan. Jika setelan ini diaktifkan atau tidak disetel, transfer file akan diizinkan.</translation>
 <translation id="2057317273526988987">Izinkan akses ke daftar URL</translation>
 <translation id="2061810934846663491">Mengonfigurasi nama domain wajib untuk host akses jarak jauh</translation>
 <translation id="2069350366303315077">Jika kebijakan disetel ke Aktif, <ph name="PRODUCT_NAME" /> akan menerapkan sesi tamu dan mencegah login profil. Login tamu adalah profil <ph name="PRODUCT_NAME" /> saat semua jendela berada dalam mode Samaran.
@@ -1161,13 +1155,6 @@
 <translation id="2801065672151277034">Setelan pengelolaan sertifikat</translation>
 <translation id="2801155097555584385">Menetapkan nilai awal pengisian daya baterai kustom dalam persen</translation>
 <translation id="2805707493867224476">Izinkan semua situs menampilkan pop-up</translation>
-<translation id="2808013382476173118">Memungkinkan penggunaan server STUN saat klien jarak jauh mencoba untuk membuat koneksi ke komputer ini.
-
-          Jika setelan ini diaktifkan, klien jarak jauh dapat menemukan dan tersambung ke komputer ini meskipun terpisah oleh firewall.
-
-          Jika setelan ini dinonaktifkan dan koneksi UDP yang keluar disaring oleh firewall, komputer ini hanya akan mengizinkan koneksi dari komputer klien dalam jaringan lokal.
-
-          Jika kebijakan ini dibiarkan tidak disetel, setelan tersebut akan diaktifkan.</translation>
 <translation id="2813281962735757923">Kebijakan ini mengontrol rentang waktu kapan perangkat <ph name="PRODUCT_OS_NAME" /> tidak diizinkan untuk memeriksa update secara otomatis.
       Jika kebijakan ini ditetapkan ke sebuah daftar tidak kosong yang memuat interval waktu:
       Perangkat tidak akan dapat memeriksa ketersediaan update secara otomatis selama interval waktu yang ditentukan. Perangkat yang memerlukan rollback atau menjalankan <ph name="PRODUCT_OS_NAME" /> versi di bawah minimum tidak akan terpengaruh oleh kebijakan ini karena potensi masalah keamanan. Selain itu, kebijakan ini tidak akan memblokir pemeriksaan update yang diminta oleh pengguna atau administrator.
@@ -1425,7 +1412,7 @@
 <translation id="3219421230122020860">Mode samaran tersedia</translation>
 <translation id="3220624000494482595">Jika aplikasi kios adalah aplikasi Android, aplikasi tersebut tidak akan memiliki kontrol terhadap versi <ph name="PRODUCT_OS_NAME" />, meski kebijakan ini disetel ke <ph name="TRUE" />.</translation>
 <translation id="322359555555487980">Menentukan ketersediaan variasi di <ph name="PRODUCT_OS_NAME" /></translation>
-<translation id="3231617925177241750">Menyetel kebijakan ke Aktif serta menyetel <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_POLICY_NAME" /> dan <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_POLICY_NAME" /> akan mengaktifkan pengaktifan daya baterai, jika didukung di perangkat. Kebijakan manajemen pengaktifan daya baterai adalah kebijakan penghematan daya yang meminimalkan penggunaan arus listrik AC selama waktu penggunaan puncak. Untuk setiap hari kerja, Anda dapat menyetel waktu mulai dan waktu akhir untuk menjalankan sistem dalam mode pengaktifan daya baterai. Selama baterai tetap berada di atas nilai minimum yang ditentukan, sistem akan berjalan menggunakan daya baterai (meski arus listrik AC terhubung) selama waktu tersebut. Setelah waktu akhir yang ditentukan, sistem akan berjalan menggunakan arus listrik AC (jika terhubung), tetapi tidak akan mengisi daya baterai. Sistem akan berfungsi kembali secara normal menggunakan arus listrik AC dan mengisi ulang daya baterai setelah waktu mulai yang ditentukan.
+<translation id="3231617925177241750">Menyetel kebijakan ke Aktif serta menyetel <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_POLICY_NAME" /> dan <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_POLICY_NAME" /> akan terus memicu pengaktifan daya baterai, jika didukung di perangkat. Kebijakan manajemen pengaktifan daya baterai adalah kebijakan penghematan daya yang meminimalkan penggunaan arus listrik AC selama waktu penggunaan puncak. Untuk setiap hari kerja, Anda dapat menyetel waktu mulai dan waktu akhir untuk menjalankan sistem dalam mode pengaktifan daya baterai. Selama baterai tetap berada di atas nilai minimum yang ditentukan, sistem akan berjalan menggunakan daya baterai (meski arus listrik AC terhubung) selama waktu tersebut. Setelah waktu akhir yang ditentukan, sistem akan berjalan menggunakan arus listrik AC (jika terhubung), tetapi tidak akan mengisi daya baterai. Sistem akan berfungsi kembali secara normal menggunakan arus listrik AC dan mengisi ulang daya baterai setelah waktu mulai yang ditentukan.
 
       Jika kebijakan disetel ke Nonaktif, pengaktifan daya baterai akan tetap nonaktif.
 
@@ -1778,9 +1765,6 @@
       Jika kebijakan disetel ke Nonaktif atau tidak disetel, perangkat yang terdaftar tidak akan melaporkan statistik.</translation>
 <translation id="3736879847913515635">Mengaktifkan penambahan orang di pengelola pengguna</translation>
 <translation id="3750220015372671395">Blokir pembuatan kunci di situs ini</translation>
-<translation id="375266612405883748">Membatasi rentang port UDP yang digunakan oleh host akses jarak jauh di komputer ini.
-
-          Jika kebijakan ini tidak ditetapkan, atau ditetapkan ke string kosong, host akses jarak jauh akan diizinkan menggunakan port apa pun yang tersedia, kecuali jika kebijakan <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> dinonaktifkan, yang dalam hal ini host akses jarak jauh akan menggunakan port UDP dalam rentang 12400-12409.</translation>
 <translation id="3755237588083934849">Menyetel kebijakan akan menentukan frekuensi pengiriman upload status perangkat, dalam milidetik. Batas minimum yang diizinkan adalah 60 detik.
 
       Jika tidak disetel, interval default 3 jam akan berlaku.</translation>
@@ -2110,11 +2094,6 @@
           Jika Anda menetapkan kebijakan ini, pengguna tidak dapat mengubah atau menggantinya.
 
           Jika kebijakan ini tidak ditetapkan, klik otomatis mula-mula akan dinonaktifkan, tetapi dapat diaktifkan oleh pengguna kapan saja.</translation>
-<translation id="4214536984333857724">Jika setelan ini diaktifkan, permintaan autentikasi gnubby akan dijadikan proxy di seluruh koneksi host jarak jauh.
-
-          Perlu diperhatikan bahwa fitur ini memerlukan komponen tambahan yang tidak tersedia di luar lingkungan jaringan Google agar dapat berfungsi sebagaimana mestinya.
-
-          Jika setelan ini dinonaktifkan, permintaan autentikasi gnubby tidak akan dijadikan proxy.</translation>
 <translation id="4224610387358583899">Penundaan kunci layar</translation>
 <translation id="4225260426043444650">Setelan ini memungkinkan pengguna menggunakan browser <ph name="LACROS_NAME" />.
 
@@ -2287,9 +2266,6 @@
       Untuk <ph name="PRODUCT_NAME" />, Kebijakan ini hanya berlaku saat perangkat didaftarkan dengan <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" />.
       Untuk <ph name="PRODUCT_OS_NAME" />, kebijakan ini selalu berlaku.</translation>
 <translation id="4578265298946081589">Jangan reboot saat pengguna logout.</translation>
-<translation id="4578912515887794133">Jika setelan ini diaktifkan, maka host akses jarak jauh akan membandingkan nama pengguna lokal (yang dikaitkan dengan host) dengan nama akun Google yang terdaftar sebagai pemilik host (misalnya, "johan" jika host adalah milik akun Google "johan@example.com").  Host akses jarak jauh tidak akan dimulai jika nama pemilik host berbeda dengan nama pengguna lokal yang dikaitkan dengan host tersebut.  Kebijakan RemoteAccessHostMatchUsername harus digunakan bersama RemoteAccessHostDomain untuk menegaskan bahwa akun Google pemilik host dikaitkan dengan domain tertentu (misalnya "example.com").
-
-          Jika setelan ini dinonaktifkan atau tidak ditetapkan, host akses jarak jauh dapat dikaitkan dengan pengguna lokal mana pun.</translation>
 <translation id="4587365491100112056">Menyetel kebijakan akan menentukan masa berlaku cache data autentikasi dalam hitungan jam. Cache memiliki data tentang realm yang dipercaya oleh realm perangkat (realm terafiliasi). Oleh karena itu, penyimpanan data autentikasi ke cache akan membantu mempercepat login. Data khusus pengguna dan data untuk realm yang tidak terafiliasi tidak akan di-cache.
 
       Menyetel kebijakan ke 0 akan menonaktifkan penyimpanan data autentikasi ke cache. Data khusus realm diambil setiap login sehingga menonaktifkan penyimpanan data autentikasi ke cache dapat memperlambat login pengguna secara signifikan.
@@ -2434,15 +2410,6 @@
 <translation id="487460824085252184">Migrasi otomatis, jangan tanya persetujuan pengguna.</translation>
 <translation id="4874982543810021567">Blokir WebUSB di situs ini</translation>
 <translation id="4876805738539874299">Versi SSL maksimum diaktifkan</translation>
-<translation id="487928067861956387">Mengonfigurasi nama domain host wajib yang akan diberlakukan pada host akses jarak jauh dan mencegah pengguna mengubahnya.
-
-          Jika setelan ini diaktifkan dan disetel ke satu atau beberapa domain, host hanya dapat dibagikan menggunakan akun yang terdaftar pada salah satu nama domain yang telah ditentukan.
-
-          Jika setelan ini dinonaktifkan, tidak disetel, atau disetel ke daftar kosong, host dapat dibagikan menggunakan akun apa pun.
-
-          Setelan ini akan menggantikan <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" />, jika ada.
-
-          Lihat juga <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="4887274746092315609">Mengaktifkan halaman untuk pengubahan sandi dalam-sesi bagi pengguna SAML</translation>
 <translation id="4892647988357350237">Secara default, Persyaratan Layanan akan ditampilkan saat CCT pertama kali dijalankan. Jika kebijakan ini disetel ke <ph name="SKIP_TOS_DIALOG" />, dialog Persyaratan Layanan tidak akan muncul saat pengalaman pertama kali dijalankan atau dijalankan untuk selanjutnya. Jika kebijakan ini disetel ke <ph name="STANDARD_TOS_DIALOG" /> atau tidak disetel, dialog Persyaratan Layanan akan muncul saat pengalaman pertama kali dijalankan. Peringatan lainnya:
 
@@ -2701,15 +2668,6 @@
 
       "Versi" di sini bisa merupakan versi yang tepat seperti '61.0.3163.120' atau awalan versi, seperti '61.0'  </translation>
 <translation id="5247006254130721952">Blokir download berbahaya</translation>
-<translation id="5249303875508803168">Mengonfigurasi nama domain klien wajib yang akan diberlakukan pada klien akses jarak jauh dan mencegah pengguna mengubahnya.
-
-          Jika setelan ini diaktifkan dan disetel ke satu atau beberapa domain, hanya klien dari salah satu domain yang telah ditentukan yang dapat terhubung ke host.
-
-          Jika setelan ini dinonaktifkan, tidak disetel, atau disetel ke daftar kosong, kebijakan default untuk jenis koneksi akan berlaku. Untuk bantuan jarak jauh, setelan ini memungkinkan klien dari domain mana pun terhubung ke host; untuk akses jarak jauh kapan saja, hanya pemilik host yang dapat terhubung.
-
-          Setelan ini akan menggantikan <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" />, jika ada.
-
-          Lihat juga <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="5249453807420671499">Pengguna dapat menambahkan akun Kerberos</translation>
 <translation id="5252995168844634755">Jika kebijakan ditetapkan ke Benar (True), Desktop Terpadu akan diaktifkan, yang memungkinkan aplikasi ditampilkan di beberapa layar. Pengguna dapat menonaktifkan Desktop Terpadu untuk tampilan individu.
 
@@ -2847,11 +2805,6 @@
 <translation id="5390083518957894426">Mengaktifkan autentikasi ulang online di layar kunci untuk pengguna SAML</translation>
 <translation id="5391388690191341203">Akun lokal perangkat untuk login otomatis</translation>
 <translation id="5393009997533871906">Hanya printer yang tercantum dalam daftar yang diizinkan yang ditampilkan kepada pengguna</translation>
-<translation id="5395271912574071439">Mengaktifkan pemberian tirai hosting akses jarak jauh saat sambungan berlangsung.
-
-          Jika setelan ini diaktifkan, perangkat keluaran dan masukan fisik hosting akan dinonaktifkan saat sambungan jarak jauh berlangsung.
-
-          Jika setelan ini dinonaktifkan atau tidak disetel, baik pengguna lokal maupun pengguna jarak jauh dapat berinteraksi dengan hosting ketika sedang dibagikan.</translation>
 <translation id="5401696449591951427">Mengaktifkan <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">Mengonfigurasi tata letak keyboard yang diizinkan di layar login <ph name="PRODUCT_OS_NAME" />.
 
@@ -3487,9 +3440,6 @@
 <translation id="6401669939808766804">Keluarkan pengguna</translation>
 <translation id="640244877779556713">Mengaktifkan Saran Emoji</translation>
 <translation id="6407093060083181305">Mengonfigurasi daftar penginstalan ekstensi yang tidak diizinkan</translation>
-<translation id="6408233796253901198">Jika kebijakan ini disetel, host akses jarak jauh akan menggunakan URL ini untuk memvalidasi token autentikasi dari klien akses jarak jauh, agar dapat menerima sambungan. Harus digunakan bersama RemoteAccessHostTokenUrl.
-
-          Jika kebijakan tidak disetel atau disetel ke kosong, fitur ini akan dinonaktifkan.</translation>
 <translation id="6417265370957905582">Asisten Google</translation>
 <translation id="6422575351619065453">Dalam mode kios, kebijakan akan mengontrol apakah menu aksesibilitas mengambang akan ditampilkan.
 
@@ -4132,9 +4082,6 @@
       Jika kebijakan disetel ke Nonaktif atau tidak disetel, kebijakan KDC akan diabaikan di platform yang didukung dan hanya <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> yang akan dipatuhi.
 
       Di <ph name="MS_WIN_NAME" />, kebijakan KDC selalu dipatuhi.</translation>
-<translation id="7273823081800296768">Jika setelan diaktifkan atau dikonfigurasikan, pengguna dapat memilih untuk menyandingkan klien dan host pada waktu tersambung, menghilangkan keharusan untuk memasukkan PIN setiap waktu.
-
-          Jika setelan ini dinonaktifkan, fitur ini tidak akan tersedia.</translation>
 <translation id="7274077256421167535">Mengaktifkan berbagi daya USB</translation>
 <translation id="7275334191706090484">Bookmark yang Terkelola</translation>
 <translation id="7278854311116092134">Nama hosting pesan native untuk dikeluarkan dari daftar yang tidak diizinkan</translation>
@@ -4269,9 +4216,6 @@
 
       Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan <ph name="PRINTERS_POLICY_NAME" />.
       </translation>
-<translation id="7504632989711326175">Jika kebijakan ini disetel, host akan menggunakan sertifikat klien dengan CN penerbit yang diberikan untuk mengautentikasi ke RemoteAccessHostTokenValidationUrl. Setel ke "*" untuk menggunakan sertifikat klien mana pun yang tersedia.
-
-          Jika kebijakan tidak disetel atau disetel ke kosong, fitur ini akan dinonaktifkan.</translation>
 <translation id="7506745375479451616">Kebijakan ini mengontrol perintah yang akan digunakan untuk membuka URL di <ph name="PRODUCT_NAME" /> saat beralih dari <ph name="IE_PRODUCT_NAME" />. Kebijakan ini dapat disetel ke jalur file yang dapat dijalankan atau <ph name="PRODUCT_NAME_PLACEHOLDER" /> untuk otomatis mendeteksi lokasi dari <ph name="PRODUCT_NAME" />.
 
       Tidak menyetel kebijakan berarti <ph name="IE_PRODUCT_NAME" /> otomatis mendeteksi jalur yang dapat dijalankan milik <ph name="PRODUCT_NAME" /> saat meluncurkan <ph name="PRODUCT_NAME" /> dari Internet Explorer.
@@ -4666,7 +4610,7 @@
           Jika kebijakan ini diaktifkan, daftar akun yang ditentukan oleh kebijakan akan ditambahkan ke setelan Akun Kerberos.
 
           Jika kebijakan ini dinonaktifkan atau tidak ditetapkan, tidak ada akun yang akan ditambahkan ke setelan Akun Kerberos dan semua akun yang sebelumnya ditambahkan dengan kebijakan ini akan dihapus. Pengguna masih dapat menambahkan akun secara manual jika kebijakan 'Pengguna dapat menambahkan akun Kerberos' diaktifkan.</translation>
-<translation id="8078297389450285582">Jika kebijakan disetel ke Aktif atau tidak disetel, model redup smart akan diaktifkan dan dapat memperpanjang waktu hingga layar diredupkan. Jika model menunda waktu peredupan, penundaan penonaktifan layar, penguncian layar, dan tidak ada aktivitas akan disesuaikan untuk mempertahankan jarak waktu yang sama dari penundaan peredupan layar seperti yang disetel sebelumnya.
+<translation id="8078297389450285582">Jika kebijakan disetel ke Aktif atau tidak disetel, model redup smart akan diaktifkan dan dapat memperpanjang waktu hingga layar diredupkan. Jika model tersebut menunda waktu peredupan, penundaan penonaktifan layar, penguncian layar, dan tidak ada aktivitas akan disesuaikan untuk mempertahankan jarak waktu yang sama dari penundaan peredupan layar seperti yang disetel sebelumnya.
 
       Jika kebijakan disetel ke Nonaktif, model redup smart tidak akan memengaruhi peredupan layar.</translation>
 <translation id="8099880303030573137">Menunda waktu menganggur saat menggunakan daya baterai</translation>
@@ -4876,13 +4820,6 @@
 <translation id="8371178326720637170">Memungkinkan ekstensi terkelola untuk menggunakan Enterprise Hardware Platform API</translation>
 <translation id="8375817202037102567">Blokir akses tulis ke file dan direktori di situs ini</translation>
 <translation id="8379317372795444261">Autentikasi <ph name="BASIC_AUTH" /> diizinkan di koneksi HTTP</translation>
-<translation id="8380490658357556620">Memungkinkan penggunaan server relai saat klien jarak jauh mencoba membuat koneksi ke komputer ini.
-
-          Jika setelan ini diaktifkan, klien jarak jauh dapat menggunakan server relai untuk tersambung ke komputer ini saat koneksi langsung tidak tersedia (misalnya karena pembatasan firewall).
-
-          Perhatikan bahwa jika kebijakan <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> dinonaktifkan, kebijakan ini akan diabaikan.
-
-          Jika kebijakan ini tidak ditetapkan, setelan tersebut akan diaktifkan.</translation>
 <translation id="838056554726401140">Daftar URL yang menentukan URL tempat <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> akan diterapkan. Kebijakan ini tidak berdampak pada nilai yang terbuka otomatis yang ditetapkan oleh pengguna.
 
       Jika kebijakan ini ditetapkan, file hanya akan otomatis terbuka oleh kebijakan jika URL merupakan bagian dari daftar ini dan jenis file tercantum di <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Jika salah satu kondisinya ditetapkan ke salah (false), hasil download tidak akan dibuka otomatis oleh kebijakan.
@@ -5046,9 +4983,6 @@
       Jika kebijakan ini ditetapkan ke true, tab yang telah berjalan di latar belakang selama setidaknya 5 menit dapat dibekukan. Pembekuan tab mengurangi penggunaan CPU, baterai, dan memori. <ph name="PRODUCT_NAME" /> menggunakan heuristik untuk menghindari pembekuan tab yang sedang aktif di latar belakang (misalnya, menampilkan notifikasi, memutar suara, streaming video). Developer web juga dapat memilih untuk tidak membekukan situsnya (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Jika kebijakan ditetapkan ke false, tidak ada tab yang akan dibekukan.</translation>
-<translation id="8622378389102774881">Jika kebijakan ini disetel, host akses jarak jauh akan mewajibkan autentikasi klien untuk memperoleh token autentikasi dari URL ini agar dapat tersambung. Harus digunakan bersama RemoteAccessHostTokenValidationUrl.
-
-          Jika kebijakan tidak disetel atau disetel ke kosong, fitur ini akan dinonaktifkan.</translation>
 <translation id="8631434304112909927">sampai versi <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">Daftar aplikasi pencatat yang diizinkan di layar kunci <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="8649763579836720255">Perangkat Chrome OS dapat menggunakan atestasi jarak jauh (Akses Terverifikasi) untuk mendapatkan sertifikat yang diberikan oleh Chrome OS CA yang menyatakan bahwa perangkat tersebut memenuhi syarat untuk memutar konten yang dilindungi. Proses ini mencakup pengiriman informasi dukungan hardware ke Chrome OS CA yang mengidentifikasi perangkat tersebut secara unik.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index 8cf66a7..0d67e7a 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Consenti agli utenti di scegliere un servizio Google anonimo per fornire descrizioni automatiche alle immagini senza etichetta</translation>
 <translation id="1087437665304381368">Questa norma consente di controllare esclusivamente la modalità sviluppatore di <ph name="PRODUCT_OS_NAME" />. Se vuoi impedire l'accesso alle Opzioni sviluppatore Android, devi impostare la norma <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation>
 <translation id="1087707496788636333">L'elenco dei criteri di Chrome Enterprise è in fase di trasferimento. Aggiorna i tuoi preferiti con l'URL <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
-<translation id="1093082332347834239">Se l'impostazione viene attivata, l'host per l'assistenza remota viene eseguito in un processo con le autorizzazioni <ph name="UIACCESS_PERMISSION_NAME" />. In questo modo gli utenti remoti possono interagire con finestre con privilegi più elevati sul desktop dell'utente locale.
-
-          Se l'impostazione viene disattivata o non configurata, l'host dell'assistenza remota viene eseguito nel contesto dell'utente e gli utenti remoti non possono interagire con finestre con privilegi più elevati sul desktop.</translation>
 <translation id="1095209545735032039">Blocca l'API Serial su questi siti</translation>
 <translation id="1096105751829466145">Provider di ricerca predefinito</translation>
 <translation id="1099282607296956954">Attiva isolamento sito per ogni sito</translation>
@@ -604,9 +601,6 @@
 <translation id="2040479044912658454">Modalità rasterizzazione stampa</translation>
 <translation id="2043749682619281558">Attiva l'evidenziazione del cursore sulla schermata di accesso</translation>
 <translation id="2043770014371753404">Stampanti aziendali disattivate</translation>
-<translation id="2050629715135525072">Controlla la capacità di un utente connesso a un host di accesso remoto di trasferire file dal client all'host e viceversa. Questa norma non si applica alle connessioni di assistenza remota, le quali non supportano il trasferimento di file.
-
-          Se questa impostazione è disattivata, il trasferimento di file non sarà concesso. Se questa impostazione è attivata o non configurata, il trasferimento di file sarà concesso.</translation>
 <translation id="2057317273526988987">Consenti l'accesso a un elenco di URL</translation>
 <translation id="2061810934846663491">Configura i nomi di dominio richiesti per gli host di accesso remoto</translation>
 <translation id="2069350366303315077">Se il criterio viene impostato su Attivato, <ph name="PRODUCT_NAME" /> applica le sessioni Ospite e impedisce gli accessi ai profili. Gli accessi Ospite sono profili di <ph name="PRODUCT_NAME" /> in cui le finestre sono nella modalità di navigazione in incognito.
@@ -1103,13 +1097,6 @@
 <translation id="2801065672151277034">Impostazioni di gestione dei certificati</translation>
 <translation id="2801155097555584385">Imposta il valore personalizzato espresso in percentuale raggiunto il quale la batteria avvia la ricarica</translation>
 <translation id="2805707493867224476">Consenti la visualizzazione di popup in tutti i siti</translation>
-<translation id="2808013382476173118">Consente di attivare l'utilizzo di server STUN quando i client remoti tentano di stabilire una connessione con questo computer.
-
-          Se questa impostazione viene attivata, i client remoti possono rilevare questo computer e collegarsi a esso anche se sono separati da un firewall.
-
-          Se questa impostazione viene disattivata e le connessioni UDP in uscita vengono filtrate dal firewall, questo computer consentirà soltanto connessioni da computer client all'interno della rete locale.
-
-          Se questa norma non viene impostata l'impostazione verrà attivata.</translation>
 <translation id="2813281962735757923">Questa norma consente di regolare gli intervalli di tempo durante i quali al dispositivo <ph name="PRODUCT_OS_NAME" /> non è consentito verificare automaticamente la disponibilità di aggiornamenti.
       Quando questa norma è impostata su un elenco valido di intervalli di tempo:
       Ai dispositivi non sarà consentito verificare automaticamente la disponibilità di aggiornamenti durante gli intervalli di tempo specificati. A causa di possibili problemi di sicurezza, questa norma non avrà conseguenze sui dispositivi che richiedono il rollback o dispongono di una versione inferiore alla versione minima di <ph name="PRODUCT_OS_NAME" />. Inoltre, questa norma non impedirà le verifiche degli aggiornamenti richieste dagli utenti o dagli amministratori.
@@ -1711,9 +1698,6 @@
       Se il criterio viene impostato su Disattivato o se non viene configurato, i dispositivi registrati non segnalano le statistiche.</translation>
 <translation id="3736879847913515635">Attiva la funzione Aggiungi persona in Gestione utenti</translation>
 <translation id="3750220015372671395">Blocca la generazione di chiavi su questi siti</translation>
-<translation id="375266612405883748">Limita l'intervallo di porte UDP utilizzate dall'host di accesso remoto in questo computer.
-
-          Se questa norma non è impostata o se viene impostata una stringa vuota, l'host di accesso remoto potrà utilizzare qualsiasi porta, a meno che la norma <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> sia disattivata; in questo caso l'host di accesso remoto utilizzerà le porte UDP nell'intervallo 12400-12409.</translation>
 <translation id="3755237588083934849">Questo criterio consente di stabilire la frequenza di invio, in millisecondi, dei caricamenti dello stato del dispositivo. Il valore minimo consentito è 60 secondi.
 
       Se il criterio non viene configurato, viene applicato l'intervallo predefinito di 3 ore.</translation>
@@ -2041,11 +2025,6 @@
           Se imposti questo criterio, gli utenti non potranno modificarlo o ignorarlo.
 
           Se questo criterio non viene impostato, inizialmente il clic automatico è disattivato, ma l'utente può attivarlo in qualsiasi momento.</translation>
-<translation id="4214536984333857724">Se questa impostazione viene attivata, le richieste di autenticazione Gnubby verranno trasferite al proxy tramite una connessione host remota.
-
-          Tieni presente che per il corretto comportamento di questa funzionalità sono necessari componenti aggiuntivi non disponibili al di fuori dell'ambiente della rete Google.
-
-          Se questa impostazione viene disattivata, le richieste di autenticazione Gnubby non verranno trasferite al proxy.</translation>
 <translation id="4224610387358583899">Ritardi del blocco schermo</translation>
 <translation id="4225260426043444650">Questa impostazione consente agli utenti di usare il browser <ph name="LACROS_NAME" />.
 
@@ -2218,9 +2197,6 @@
       Per <ph name="PRODUCT_NAME" />, questo criterio viene applicato soltanto se la macchina viene registrata con il criterio <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" />.
       Per <ph name="PRODUCT_OS_NAME" />, questo criterio viene sempre applicato.</translation>
 <translation id="4578265298946081589">Non riavviare all'uscita dell'utente.</translation>
-<translation id="4578912515887794133">Se questa impostazione viene attivata, l'host di accesso remoto confronta il nome dell'utente locale (a cui è associato l'host) con il nome dell'Account Google registrato come proprietario dell'host (ad es. "mariorossi" se l'host è di proprietà dell'Account Google "mariorossi@example.com").  L'host di accesso remoto non viene avviato se il nome del proprietario dell'host non coincide con quello dell'utente locale a cui è associato l'host.  La norma RemoteAccessHostMatchUsername deve essere utilizzata insieme a RemoteAccessHostDomain per far sì che l'Account Google del proprietario dell'host sia associato a un dominio specifico (ad es. "example.com").
-
-          Se questa impostazione viene disattivata o non viene impostata, l'host di accesso remoto può essere associato a qualsiasi utente locale.</translation>
 <translation id="4587365491100112056">La configurazione del criterio consente di specificare la durata in ore dei dati di autenticazione nella cache. La cache include dati relativi alle aree di autenticazione ritenute attendibili dall'area di autenticazione della macchina (aree di autenticazione delle affiliate). Pertanto, la memorizzazione nella cache dei dati di autenticazione consente di velocizzare l'accesso. I dati specifici degli utenti e quelli per le aree di autenticazione non delle affiliate non vengono memorizzati nella cache.
 
       Se il criterio viene impostato su 0, la memorizzazione nella cache dei dati di autenticazione viene disattivata. I dati specifici dell'area di autenticazione vengono recuperati a ogni accesso, quindi la relativa memorizzazione nella cache può rallentare in modo significativo l'accesso degli utenti.
@@ -2365,15 +2341,6 @@
 <translation id="487460824085252184">Esegui automaticamente la migrazione senza chiedere il consenso dell'utente</translation>
 <translation id="4874982543810021567">Blocca WebUSB su questi siti</translation>
 <translation id="4876805738539874299">Versione SSL massima abilitata</translation>
-<translation id="487928067861956387">Consente di configurare i nomi di dominio dell'host che verranno imposti sugli host di accesso remoto e impedisce agli utenti di modificarli.
-
-          Se questa impostazione viene attivata e configurata su uno o più domini, gli host possono essere condivisi solo utilizzando gli account registrati su uno dei nomi di dominio specificati.
-
-          Se questa impostazione viene disattivata, non viene configurata o viene impostato un elenco vuoto, gli host possono essere condivisi utilizzando qualsiasi account.
-
-          Questa impostazione sostituirà <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" />, se presente.
-
-          Vedi anche <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="4887274746092315609">Attiva una pagina per la modifica della password all'interno della sessione per gli utenti SAML</translation>
 <translation id="4892647988357350237">Per impostazione predefinita, i Termini di servizio vengono mostrati alla prima esecuzione di CCT. Se questo criterio viene impostato su <ph name="SKIP_TOS_DIALOG" />, la finestra di dialogo dei Termini di servizio non viene visualizzata né alla prima esecuzione né a quelle successive. Se questo criterio viene impostato su <ph name="STANDARD_TOS_DIALOG" /> o se non viene configurato, la finestra di dialogo dei Termini di servizio viene visualizzata alla prima esecuzione. Altre condizioni:
 
@@ -2634,15 +2601,6 @@
 
       Per "versione" si intende sia una versione esatta, ad esempio "61.0.3163.120", sia un prefisso di versione, ad esempio "61.0".  </translation>
 <translation id="5247006254130721952">Blocca download pericolosi</translation>
-<translation id="5249303875508803168">Consente di configurare i nomi di dominio client richiesti che verranno imposti ai client di accesso remoto e impedisce agli utenti di modificarli.
-
-          Se questa impostazione viene attivata e configurata su uno o più domini, solo i client di uno dei domini specificati potranno connettersi all'host.
-
-          Se questa impostazione viene disattivata, non viene configurata o viene impostato un elenco vuoto, viene applicato il criterio predefinito per il tipo di connessione. Per l'assistenza remota, l'impostazione consente ai client di qualsiasi dominio di connettersi all'host; per l'accesso remoto in qualsiasi momento, può connettersi solo il proprietario dell'host.
-
-          Questa impostazione sostituirà <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" />, se presente.
-
-          Vedi anche <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="5249453807420671499">Gli utenti possono aggiungere account Kerberos</translation>
 <translation id="5252995168844634755">Se il criterio viene impostato su True, viene attivata la modalità Desktop unificato, che consente di visualizzare le applicazioni su più schermi. Gli utenti possono disattivare questa modalità per singoli schermi.
 
@@ -2779,11 +2737,6 @@
 <translation id="5390083518957894426">Consenti la riautenticazione online nella schermata di blocco per gli utenti SAML</translation>
 <translation id="5391388690191341203">Account locale del dispositivo per l'accesso automatico</translation>
 <translation id="5393009997533871906">Agli utenti vengono mostrate soltanto le stampanti indicate nella lista consentita</translation>
-<translation id="5395271912574071439">Consente di attivare la separazione degli host di accesso remoto durante una connessione.
-
-Se questa impostazione viene attivata, i dispositivi di input e output fisici degli host verranno disattivati durante una connessione remota.
-
-Se questa impostazione viene disattivata o non viene impostata, sia gli utenti locali che remoti potranno interagire con l'host quando viene condiviso.</translation>
 <translation id="5401696449591951427">Attiva <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">Consente di configurare i layout da tastiera consentiti nella schermata di accesso di <ph name="PRODUCT_OS_NAME" />.
 
@@ -3411,9 +3364,6 @@
 <translation id="6401669939808766804">Disconnetti l'utente</translation>
 <translation id="640244877779556713">Attiva suggerimento di emoji</translation>
 <translation id="6407093060083181305">Configura la lista bloccata di installazione delle estensioni</translation>
-<translation id="6408233796253901198">Se questo criterio è impostato, l'host di accesso remoto utilizzerà questo URL per convalidare i token di autenticazione dai client di accesso remoto allo scopo di accettare connessioni. Deve essere usato insieme a RemoteAccessHostTokenUrl.
-
-          Questa funzionalità viene disattivata se il criterio è vuoto o non impostato.</translation>
 <translation id="6417265370957905582">Assistente Google</translation>
 <translation id="6422575351619065453">In modalità kiosk, consente di controllare se visualizzare o meno il menu Accessibilità mobile.
 
@@ -4051,9 +4001,6 @@
       Se il criterio viene impostato su Disattivato o se non viene configurato, il criterio KDC viene ignorato sulle piattaforme supportate e viene rispettato solo il criterio <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />.
 
       Su <ph name="MS_WIN_NAME" />, il criterio KDC viene sempre rispettato.</translation>
-<translation id="7273823081800296768">Se questa impostazione viene attivata o non viene configurata, gli utenti possono decidere di accoppiare client e host in fase di connessione, evitando di dover inserire un codice PIN ogni volta.
-
-Se l'impostazione viene disattivata, questa funzione non sarà disponibile.</translation>
 <translation id="7274077256421167535">Attiva la condivisione dell'alimentazione USB</translation>
 <translation id="7275334191706090484">Preferiti gestiti</translation>
 <translation id="7278854311116092134">Nomi degli host di messaggi nativi da escludere dalla lista bloccata</translation>
@@ -4182,9 +4129,6 @@
 
       Questo criterio è deprecato. Usa il criterio <ph name="PRINTERS_POLICY_NAME" />.
       </translation>
-<translation id="7504632989711326175">Se questo criterio è impostato, l'host utilizzerà un certificato client con il nome comune dell'emittente indicato per eseguire l'autenticazione su RemoteAccessHostTokenValidationUrl. Imposta il criterio su "*" per utilizzare qualsiasi certificato client disponibile.
-
-          Questa funzionalità viene disattivata se il criterio è vuoto o non impostato.</translation>
 <translation id="7506745375479451616">Questo criterio consente di stabilire il comando da usare per aprire gli URL in <ph name="PRODUCT_NAME" /> anziché in <ph name="IE_PRODUCT_NAME" />. Per questo criterio è possibile impostare un percorso file eseguibile o un valore <ph name="PRODUCT_NAME_PLACEHOLDER" /> per rilevare automaticamente la posizione di <ph name="PRODUCT_NAME" />.
 
       Se il criterio non viene impostato, <ph name="IE_PRODUCT_NAME" /> rileva automaticamente il percorso eseguibile di <ph name="PRODUCT_NAME" /> all'avvio di <ph name="PRODUCT_NAME" /> da Internet Explorer.
@@ -4781,13 +4725,6 @@
 <translation id="8371178326720637170">Consente alle estensioni gestite di utilizzare l'API Enterprise Hardware Platform</translation>
 <translation id="8375817202037102567">Blocca l'accesso di scrittura di file e directory su questi siti</translation>
 <translation id="8379317372795444261">L'autenticazione <ph name="BASIC_AUTH" /> è consentita per le connessioni HTTP</translation>
-<translation id="8380490658357556620">Attiva l'utilizzo dei relay server quando i client remoti tentano di stabilire una connessione con il computer.
-
-          Se questa impostazione viene attivata, i client remoti possono utilizzare relay server per collegarsi al computer quando non è disponibile una connessione diretta (ad es. a causa di limitazioni del firewall).
-
-          Tieni presente che questa norma viene ignorata, se <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> viene disattivata.
-
-          Se questa norma non è impostata, l'impostazione viene attivata.</translation>
 <translation id="838056554726401140">Elenco di URL che specifica a quali URL è applicato <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Questo criterio non influisce sui valori di apertura automatica impostati dagli utenti.
 
       Se il criterio è impostato, i file saranno aperti automaticamente dal criterio se l'URL fa parte di questo insieme e il tipo di file è elencato in <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Se una delle condizioni è falsa, il criterio non aprirà automaticamente i download.
@@ -4951,9 +4888,6 @@
       Se il criterio viene impostato su true, le schede che sono in secondo piano da almeno cinque minuti potrebbero essere bloccate. Il blocco delle schede riduce l'utilizzo di CPU, batteria e memoria. <ph name="PRODUCT_NAME" /> usa l'euristica per evitare di bloccare le schede in secondo piano che hanno una funzione utile (ad esempio visualizzare notifiche, riprodurre audio, riprodurre video in streaming). Gli sviluppatori web possono anche disattivare il blocco nei loro siti (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Se il criterio viene impostato su false, le schede non verranno bloccate.</translation>
-<translation id="8622378389102774881">Se questo criterio viene impostato, l'host di accesso remoto richiederà che i client che eseguono l'autenticazione ottengano un token di autenticazione da questo URL perché la connessione avvenga. Deve essere utilizzato insieme a RemoteAccessHostTokenValidationUrl.
-
-          Questa funzionalità viene disattivata se il criterio è vuoto o non impostato.</translation>
 <translation id="8631434304112909927">fino alla versione <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">L'elenco delle app per scrivere note consentite nella schermata di blocco di <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="8649763579836720255">I dispositivi Chrome OS possono utilizzare un'attestazione remota (Accesso verificato) per ottenere un certificato emesso dalla CA di Chrome OS in cui si afferma che il dispositivo è idoneo a riprodurre contenuti protetti. Questo processo comporta l'invio alla CA di Chrome OS di informazioni di approvazione dell'hardware che identificano in modo univoco il dispositivo.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index 9f17fc38..aebed110 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -69,9 +69,6 @@
 <translation id="1082802595100075771">匿名の Google サービスを使用して、ラベル付けがない画像の説明を自動的に取得するかどうかをユーザーが選択できる</translation>
 <translation id="1087437665304381368">このポリシーでは、<ph name="PRODUCT_OS_NAME" /> のデベロッパー モードのみを管理します。Android 開発者向けオプションへのアクセスを禁止するには、<ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /> ポリシーを設定する必要があります。</translation>
 <translation id="1087707496788636333">Chrome Enterprise ポリシーのリストは別のページに移動しました。ブックマークを <ph name="POLICY_DOCUMENTATION_URL" /> に変更してください。</translation>
-<translation id="1093082332347834239">この設定が有効になっている場合、リモート アシスタンス ホストは <ph name="UIACCESS_PERMISSION_NAME" /> 権限を持つプロセスで実行されます。リモート ユーザーはローカル ユーザーのデスクトップ上の権限昇格ウィンドウとやり取りできるようになります。
-
-          この設定が無効な場合や設定されていない場合、リモート アシスタンス ホストはユーザーのコンテキストで実行され、リモート ユーザーはデスクトップ上の権限昇格ウィンドウとやり取りできません。</translation>
 <translation id="1095209545735032039">シリアル API をブロックするサイトを指定します</translation>
 <translation id="1096105751829466145">デフォルトの検索プロバイダ</translation>
 <translation id="1099282607296956954">すべてのサイトに対してサイト分離を有効にする</translation>
@@ -610,9 +607,6 @@
 <translation id="2040479044912658454">印刷のラスターモード</translation>
 <translation id="2043749682619281558">ログイン画面でカーソルによるハイライト表示を有効にする</translation>
 <translation id="2043770014371753404">無効な企業プリンタ</translation>
-<translation id="2050629715135525072">リモート アクセス ホストに接続しているユーザーが、クライアントとホスト間でファイルを転送できるかどうかを管理します。この設定は、リモート サポート接続には適用されません。リモート サポート接続ではファイル転送がサポートされていません。
-
-          この設定が無効な場合、ファイル転送は許可されません。この設定が有効か、設定されていない場合は、ファイル転送が許可されます。</translation>
 <translation id="2057317273526988987">URL のリストへのアクセスを許可する</translation>
 <translation id="2061810934846663491">リモート アクセス ホストの必須のドメイン名を設定する</translation>
 <translation id="2069350366303315077">このポリシーを有効に設定した場合、<ph name="PRODUCT_NAME" /> ではゲスト セッションが強制的に適用され、プロフィールのログインはできなくなります。ゲストログインでは、ウィンドウがシークレット モードで開く <ph name="PRODUCT_NAME" /> プロフィールが使用されます。この設定を無効に設定するか未設定のままにした場合、またはブラウザのゲストモードを無効にした場合(<ph name="BROWSER_GUEST_MODE_ENABLED_POLICY_NAME" /> を使用)、新しいプロフィールと既存のプロフィールのどちらも使用できます。</translation>
@@ -1092,13 +1086,6 @@
 <translation id="2801065672151277034">証明書の管理設定</translation>
 <translation id="2801155097555584385">バッテリー充電のカスタムの充電開始設定(%)を行う</translation>
 <translation id="2805707493867224476">すべてのサイトに対してポップアップ表示を許可する</translation>
-<translation id="2808013382476173118">リモート クライアントがこのコンピュータへの接続を試行するときに STUN サーバーを使用できるようにします。
-
-          この設定が有効な場合、リモート クライアントはファイアウォールの有無にかかわらずこのコンピュータを検出して接続できます。
-
-          この設定が無効な場合で発信 UDP 接続がファイアウォールによって除外されている場合は、ローカル ネットワーク内のクライアント コンピュータのみがこのコンピュータに接続できます。
-
-          このポリシーが未設定の場合、この設定は有効になります。</translation>
 <translation id="2813281962735757923"><ph name="PRODUCT_OS_NAME" /> デバイスでアップデートの自動チェックを行わない時間帯を制御します。
       このポリシーで、空ではない時間帯のリストが設定されている場合は、次のようになります。
       指定された時間帯にアップデートの自動チェックは行われません。ただし、ロールバックが必要なデバイスや <ph name="PRODUCT_OS_NAME" /> の最小バージョンよりも低いバージョンのデバイスは、セキュリティの問題が発生するおそれがあるため、このポリシーの影響を受けません。また、このポリシーによって、ユーザーや管理者が指定したアップデート チェックが妨げられることはありません。
@@ -1691,9 +1678,6 @@
       このポリシーを無効にするか、未設定のままにすると、登録済みのデバイスは統計情報を報告しません。</translation>
 <translation id="3736879847913515635">ユーザー管理画面でのユーザー追加を許可する</translation>
 <translation id="3750220015372671395">指定サイトでのキー生成をブロックする</translation>
-<translation id="375266612405883748">このパソコンでリモート アクセス ホストが使用する UDP ポートの範囲を制限します。
-
-          このポリシーを未設定のままにするか、空白の文字列に設定した場合、ポリシー <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> が無効でない限り、リモート アクセス ホストは利用可能なすべてのポートを使用できます。無効の場合、リモート アクセス ホストは 12400~12409 の範囲の UDP ポートを使用します。</translation>
 <translation id="3755237588083934849">このポリシーの設定により、デバイス ステータスのアップロードを送信する頻度(ミリ秒単位)が決定されます。許可される最小値は 60 秒です。
 
       設定しなかった場合は、デフォルトの 3 時間間隔が適用されます。</translation>
@@ -2020,11 +2004,6 @@
           このポリシーを設定した場合、ユーザーによる変更やオーバーライドはできません。
 
           このポリシーを未設定のままにした場合、自動クリックが無効(初期設定)になりますが、ユーザーはいつでも有効にできます。</translation>
-<translation id="4214536984333857724">この設定を有効にした場合、gnubby 認証リクエストはリモートホスト接続でプロキシ送信されます。
-
-          この機能を正常に動作させるには、Google ネットワーク環境外では使用できない追加のコンポーネントが必要となります。
-
-          この設定を無効にした場合、gnubby 認証リクエストはプロキシ送信されません。</translation>
 <translation id="4224610387358583899">画面ロック遅延時間</translation>
 <translation id="4225260426043444650">ユーザーに <ph name="LACROS_NAME" /> ブラウザの使用を許可します。
 
@@ -2195,9 +2174,6 @@
       <ph name="PRODUCT_NAME" /> の場合、このポリシーは <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> で登録されたマシンでのみ有効です。
       <ph name="PRODUCT_OS_NAME" /> の場合、このポリシーは常に有効です。</translation>
 <translation id="4578265298946081589">ユーザーのログアウト時に再起動しません。</translation>
-<translation id="4578912515887794133">この設定が有効な場合、リモート アクセス ホストは、ローカル ユーザーの名前(ホストが関連付けられている名前)と、ホストの所有者として登録されている Google アカウントの名前(たとえば、ホストの所有者の Google アカウントが「johndoe@example.com」の場合は「johndoe」)を比較します。ホストの所有者の名前と、ホストが関連付けられているローカル ユーザーの名前が異なる場合、リモート アクセス ホストは起動しません。RemoteAccessHostMatchUsername ポリシーは RemoteAccessHostDomain と一緒に使用して、ホストの所有者の Google アカウントを特定のドメイン(「example.com」など)に関連付けることも必要です。
-
-          この設定が無効または未設定の場合、リモート アクセス ホストはどのローカル ユーザーにも関連付けることができます。</translation>
 <translation id="4587365491100112056">このポリシーでは、認証データのキャッシュ期間(時間単位)を指定できます。キャッシュには、マシンのレルムにより信頼されているレルム(関連レルム)に関するデータが保存されます。したがって、認証データのキャッシュを使うことでログインがスピーディーになります。ユーザー固有のデータや関連のないレルムに関するデータはキャッシュされません。
 
       このポリシーを 0 に設定した場合、認証データのキャッシュは無効になります。この場合、レルム固有のデータはログインのたびに取り込まれるため、ユーザーのログイン処理時間が大幅に長くなる可能性があります。
@@ -2338,15 +2314,6 @@
 <translation id="487460824085252184">ユーザーの同意を求めずに自動的に移行する</translation>
 <translation id="4874982543810021567">WebUSB をブロックするサイト</translation>
 <translation id="4876805738539874299">有効な SSL の最大バージョン</translation>
-<translation id="487928067861956387">リモート アクセス ホストに適用する必須のホストドメイン名を設定します。ユーザーはこのドメイン名を変更できません。
-
-          この設定を有効にして、ドメインを 1 つ以上指定した場合、ホストの共有に使用できるのは、指定されたいずれかのドメイン名に登録されているアカウントのみとなります。
-
-          この設定を無効にするか未設定のままにした場合、または空のリストに設定した場合は、どのアカウントを使用してもホストを共有できます。
-
-          この設定は <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" /> より優先されます(指定されている場合)。
-
-          <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" /> も参照してください。</translation>
 <translation id="4887274746092315609">SAML ユーザーに対して、セッション内でのパスワード変更用のページを有効にする</translation>
 <translation id="4892647988357350237">デフォルトでは、利用規約は CCT の初回実行時に表示されます。このポリシーを <ph name="SKIP_TOS_DIALOG" /> に設定した場合、利用規約のダイアログは初回実行時もその後の実行時にも表示されません。このポリシーを <ph name="STANDARD_TOS_DIALOG" /> に設定するか未設定のままにした場合、利用規約のダイアログは初回実行時に表示されます。その他の注意事項:
 
@@ -2595,15 +2562,6 @@
 
       「バージョン」には、正確なバージョン(61.0.3163.120 など)かバージョンのプレフィックス(61.0 など)を指定できます。  </translation>
 <translation id="5247006254130721952">危険なダウンロードをブロックする</translation>
-<translation id="5249303875508803168">リモート アクセス クライアントに適用する必須のクライアント ドメイン名を設定します。ユーザーはこの設定を変更できません。
-
-          この設定を有効にして、ドメインを 1 つ以上指定した場合、ホストに接続できるのは、指定されたいずれかのドメインのクライアントのみとなります。
-
-          この設定を無効にするか未設定のままにした場合、または空のリストに設定した場合は、この接続タイプに対するデフォルトのポリシーが適用されます。リモート サポートの場合は、どのドメインのクライアントでもホストに接続できます。常時リモート アクセスの場合は、ホストの所有者のみが接続できます。
-
-          この設定は <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" /> より優先されます(指定されている場合)。
-
-          <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" /> も参照してください。</translation>
 <translation id="5249453807420671499">ユーザーに Kerberos アカウントの追加を許可する</translation>
 <translation id="5252995168844634755">このポリシーを True に設定した場合、統合デスクトップがオンになり、複数のディスプレイをまたいでアプリケーションを表示できるようになります。ユーザーは個々のディスプレイで統合デスクトップをオフにできます。
 
@@ -2738,11 +2696,6 @@
 <translation id="5390083518957894426">SAML ユーザーのロック画面でのオンライン再認証を有効にします</translation>
 <translation id="5391388690191341203">デバイスのローカル アカウントの自動ログイン</translation>
 <translation id="5393009997533871906">許可リストに登録されているプリンタのみをユーザーに表示する</translation>
-<translation id="5395271912574071439">接続中にリモート アクセス ホストのカーテンを有効にします。
-
-          この設定を有効にすると、リモート接続の間、ホストの物理的な入出力デバイスが無効になります。
-
-          この設定を無効にするか未設定にすると、ローカル ユーザーとリモート ユーザーのどちらも共有状態のホストにアクセスできます。</translation>
 <translation id="5401696449591951427"><ph name="CHROME_DEVICES_LINK" /> を有効にする</translation>
 <translation id="5405289061476885481"><ph name="PRODUCT_OS_NAME" /> のログイン画面で選択可能にするキーボード配列を設定します。
 
@@ -3350,9 +3303,6 @@
 <translation id="6401669939808766804">ユーザーをログアウトする</translation>
 <translation id="640244877779556713">絵文字の候補を有効にします</translation>
 <translation id="6407093060083181305">拡張機能インストールの拒否リストを設定する</translation>
-<translation id="6408233796253901198">このポリシーが設定されている場合、リモート アクセス ホストは、この URL を使用してリモート アクセス クライアントからの認証トークンを検証し、接続を受け入れるかどうかを判断します。このポリシーは RemoteAccessHostTokenUrl と一緒に使用してください。
-
-          このポリシーを空白にした場合または設定しない場合、この機能は無効になります。</translation>
 <translation id="6417265370957905582">Google アシスタント</translation>
 <translation id="6422575351619065453">キオスクモードでフローティング ユーザー補助機能メニューを表示するかどうかを管理します。
 
@@ -3965,9 +3915,6 @@
       このポリシーを無効に設定するか未設定のままにした場合、KDC ポリシーはサポートされているプラットフォームで無視され、<ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> のみが適用されます。
 
       <ph name="MS_WIN_NAME" /> では、KDC ポリシーが常に適用されます。</translation>
-<translation id="7273823081800296768">この設定が有効または設定されていない場合、ユーザーは接続時にクライアントとホストをペア設定するよう選択できます。そうすると、毎回 PIN を入力する手間が省けます。
-
-          この設定が無効な場合、この機能は利用できません。</translation>
 <translation id="7274077256421167535">USB 電力共有を有効にする</translation>
 <translation id="7275334191706090484">管理対象のブックマーク</translation>
 <translation id="7278854311116092134">拒否リストから除外するネイティブ メッセージング ホストの名前</translation>
@@ -4096,9 +4043,6 @@
 
       このポリシーはサポートが終了しています。代わりに <ph name="PRINTERS_POLICY_NAME" /> を使用してください。
       </translation>
-<translation id="7504632989711326175">このポリシーを設定した場合、ホストは発行元の CN が指定されたクライアント証明書を使用して RemoteAccessHostTokenValidationUrl に対し認証を行います。このポリシーを「*」に設定した場合、利用可能な任意のクライアント証明書が使用されます。
-
-          このポリシーを空白にした場合または設定しない場合、この機能は無効になります。</translation>
 <translation id="7506745375479451616">このポリシーでは、<ph name="IE_PRODUCT_NAME" /> から <ph name="PRODUCT_NAME" /> に切り替えて URL を開くときに使用するコマンドを管理します。このポリシーは、実行ファイルのパスに設定するか <ph name="PRODUCT_NAME_PLACEHOLDER" /> に設定することで、<ph name="PRODUCT_NAME" /> の場所を自動検出できます。
 
       このポリシーを未設定のままにした場合、<ph name="PRODUCT_NAME" /> が Internet Explorer から起動する際に <ph name="IE_PRODUCT_NAME" /> が <ph name="PRODUCT_NAME" /> の実行パスを自動検出します。注: <ph name="IE_PRODUCT_NAME" /> の従来のブラウザをサポートするアドインがインストールされていない場合、このポリシーは無視されます。</translation>
@@ -4681,13 +4625,6 @@
 <translation id="8371178326720637170">管理対象の拡張機能で Enterprise Hardware Platform API を使用できるようにする</translation>
 <translation id="8375817202037102567">ファイルとディレクトリへの書き込みアクセスをブロックするサイトを指定する</translation>
 <translation id="8379317372795444261">HTTP 接続で <ph name="BASIC_AUTH" /> 認証を許可する</translation>
-<translation id="8380490658357556620">リモート クライアントがこのパソコンへの接続を試みるときに中継サーバーの使用を有効にします。
-
-          この設定が有効な場合、リモート クライアントは、ファイアウォールによる制限などが原因で直接接続を確立できない場合に中継サーバーを使用してこのパソコンに接続できます。
-
-          ポリシー <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> が無効の場合、このポリシーは無視されます。
-
-          このポリシーが未設定の場合、この設定は有効になります。</translation>
 <translation id="838056554726401140"><ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> を適用する URL を指定した URL リストです。このポリシーは、自動的に開くかどうかについてユーザーが設定した値には影響しません。
 
       このポリシーを設定した場合、URL がこの設定に含まれていて、ファイル形式が <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> のリストで指定されているファイルのみがこのポリシーにより自動的に開きます。どちらかの条件を満たさない場合は、ダウンロード ファイルがポリシーにより自動的に開くことはありません。
@@ -4853,9 +4790,6 @@
       このポリシーを true に設定した場合、5 分以上バックグラウンドになっているタブは凍結可能になります。タブを凍結すると、CPU、バッテリー、メモリの使用量が削減されます。<ph name="PRODUCT_NAME" /> ではヒューリスティックにより、バックグラウンドで有用な処理(通知の表示、サウンドの再生、動画のストリーミングなど)を行うタブが凍結の対象から外されます。ウェブ デベロッパーが自身のサイトを凍結の対象から外すこともできます(https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md)。
 
       このポリシーを false に設定した場合は、どのタブも凍結されません。</translation>
-<translation id="8622378389102774881">このポリシーが設定されている場合、リモート アクセス ホストは、認証するクライアントに対し、接続するにはこの URL から認証トークンを取得することを要求します。このポリシーは RemoteAccessHostTokenValidationUrl と一緒に使用してください。
-
-          このポリシーを空白にした場合または設定しない場合、この機能は無効になります。</translation>
 <translation id="8631434304112909927">バージョン <ph name="UNTIL_VERSION" /> まで</translation>
 <translation id="8631437968147930597"><ph name="PRODUCT_OS_NAME" /> のロック画面で許可されるメモアプリのリスト</translation>
 <translation id="8649763579836720255">Chrome OS デバイスは、Chrome OS CA(デバイスが保護コンテンツを再生可能であることを証明)によって発行される証明書を取得するため、リモート認証(確認済みアクセス)を使用できます。これには、デバイスを特定するハードウェア署名情報を Chrome OS CA に送信する処理も含まれます。
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 80521a04..7477a8d 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">사용자가 익명의 Google 서비스를 통해 라벨이 지정되지 않은 이미지에 관해 자동으로 생성된 설명을 들을지 선택하도록 허용</translation>
 <translation id="1087437665304381368">이 정책은 <ph name="PRODUCT_OS_NAME" /> 개발자 모드만 제어합니다. Android 개발자 옵션에 액세스하지 못하게 하려면 <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /> 정책을 설정해야 합니다.</translation>
 <translation id="1087707496788636333">Chrome Enterprise 정책 목록이 이동됩니다. 북마크를 <ph name="POLICY_DOCUMENTATION_URL" /> 페이지로 업데이트하세요.</translation>
-<translation id="1093082332347834239">이 설정을 사용 설정하면 <ph name="UIACCESS_PERMISSION_NAME" /> 권한을 사용하여 원격 지원 호스트가 실행됩니다. 이 경우 원격 사용자가 로컬 사용자의 데스크톱에서 관리자 창으로 상호 작용하도록 허용합니다.
-
-          이 설정을 사용 중지하거나 설정하지 않으면 원격 지원 호스트가 사용자의 컨텍스트에서 실행되며 원격 사용자는 데스크톱에서 관리자 창으로 상호 작용할 수 없습니다.</translation>
 <translation id="1095209545735032039">이 사이트에서 Serial API 차단</translation>
 <translation id="1096105751829466145">기본 검색 공급자</translation>
 <translation id="1099282607296956954">모든 사이트에 사이트 격리 사용 설정</translation>
@@ -659,9 +656,6 @@
 <translation id="2040479044912658454">인쇄 래스터화 모드</translation>
 <translation id="2043749682619281558">로그인 화면에서 커서 강조표시 사용</translation>
 <translation id="2043770014371753404">사용 중지된 엔터프라이즈 프린터</translation>
-<translation id="2050629715135525072">원격 액세스 호스트에 연결된 사용자가 클라이언트와 호스트 사이에 파일을 전송할 수 있는 기능을 제어합니다. 원격 지원 연결은 파일 전송을 지원하지 않으므로 이 설정이 적용되지 않습니다.
-
-          이 설정을 사용 중지하면 파일을 전송할 수 없습니다. 이 설정을 사용하면 파일을 전송할 수 있습니다.</translation>
 <translation id="2057317273526988987">URL 목록 액세스 허용</translation>
 <translation id="2061810934846663491">원격 액세스 호스트에 필요한 도메인 이름을 설정합니다.</translation>
 <translation id="2069350366303315077">정책을 사용 설정하면 <ph name="PRODUCT_NAME" />에서 게스트 세션을 실행하고 프로필 로그인을 차단합니다. 게스트 로그인은 창이 시크릿 모드인 <ph name="PRODUCT_NAME" /> 프로필입니다.
@@ -1158,13 +1152,6 @@
 <translation id="2801065672151277034">인증서 관리 설정</translation>
 <translation id="2801155097555584385">배터리 충전을 시작할 지점을 퍼센트로 맞춤설정합니다.</translation>
 <translation id="2805707493867224476">모든 사이트에서 팝업 표시 허용</translation>
-<translation id="2808013382476173118">원격 클라이언트가 이 컴퓨터에 연결하려고 할 때 STUN 서버를 사용 설정합니다.
-
-          이 설정을 사용하면 방화벽에 의해 차단된 경우에도 원격 클라이언트가 컴퓨터를 검색하여 연결할 수 있습니다.
-
-          이 설정을 사용 중지하고 발신 UDP 연결이 방화벽에 의해 필터링되면 컴퓨터는 로컬 네트워크 내에 있는 클라이언트 컴퓨터의 연결만 허용합니다.
-
-          이 정책을 설정하지 않은 상태로 두면 설정이 사용됩니다.</translation>
 <translation id="2813281962735757923">이 정책은 <ph name="PRODUCT_OS_NAME" /> 기기가 업데이트를 자동으로 확인하도록 허용되지 않는 기간을 관리할 수 있습니다.
       정책이 비어 있지 않은 기간 목록으로 설정된 경우:
       기기에서 지정된 기간 동안 업데이트를 자동으로 확인할 수 없게 됩니다. 롤백이 필요하거나 최소 <ph name="PRODUCT_OS_NAME" /> 버전 미만을 실행하는 기기는 잠재적인 보안 문제로 인해 이 정책의 영향을 받지 않습니다. 또한 이 정책은 사용자 또는 관리자가 요청한 업데이트 확인을 차단하지 않습니다.
@@ -1773,9 +1760,6 @@
       정책을 사용 중지하거나 설정하지 않으면 등록된 기기에서 통계를 보고하지 않습니다.</translation>
 <translation id="3736879847913515635">사용자 관리자에서 사용자 추가 허용</translation>
 <translation id="3750220015372671395">이 사이트에서 키 생성 차단</translation>
-<translation id="375266612405883748">이 컴퓨터에서 원격 액세스 호스트가 사용하는 UDP 포트 범위를 제한합니다.
-
-          이 정책이 설정되지 않았거나 빈 문자열로 설정되면 <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> 정책이 사용 중지되지 않는 한 원격 액세스 호스트는 가용 포트를 사용할 수 있습니다. 이때 원격 액세스 호스트는 12400~12409번의 UDP 포트를 사용합니다.</translation>
 <translation id="3755237588083934849">정책을 설정하면 기기 상태 업로드를 전송할 빈도를 밀리초 단위로 결정할 수 있습니다. 허용된 최솟값은 60초입니다.
 
       정책이 설정되지 않으면 기본 간격인 3시간이 적용됩니다.</translation>
@@ -2104,11 +2088,6 @@
           정책이 설정되면 사용자가 변경하거나 재정의할 수 없습니다.
 
           정책이 설정되지 않은 경우 처음에는 자동 클릭이 사용 중지되어 있으나 사용자가 언제든지 사용하도록 설정할 수 있습니다.</translation>
-<translation id="4214536984333857724">설정을 사용하면 gnubby 인증 요청이 원격 호스트 연결을 통해 프록시됩니다.
-
-          이 기능을 사용하려면 올바른 작동을 위해 Google 네트워크 환경 외부에서는 제공되지 않는 추가 구성요소가 필요합니다.
-
-          설정을 사용 중지하면 gnubby 인증 요청이 프록시되지 않습니다.</translation>
 <translation id="4224610387358583899">화면 잠금 지연</translation>
 <translation id="4225260426043444650">이 설정은 사용자가 <ph name="LACROS_NAME" /> 브라우저를 사용하도록 허용합니다.
 
@@ -2281,9 +2260,6 @@
       <ph name="PRODUCT_NAME" />의 경우 이 정책은 기기가 <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" />에 등록되어 있을 때만 적용됩니다.
       <ph name="PRODUCT_OS_NAME" />의 경우 이 정책이 항상 적용됩니다.</translation>
 <translation id="4578265298946081589">사용자 로그아웃 시 재부팅하지 않습니다.</translation>
-<translation id="4578912515887794133">이 설정을 사용하도록 설정하면 원격 액세스 호스트가 호스트와 연결된 로컬 사용자의 이름과 호스트 소유자로 등록된 Google 계정 이름(예: 호스트 소유자의 Google 계정이 'johndoe@example.com'인 경우 'johndoe')을 비교합니다.  호스트 소유자 이름이 호스트와 연결된 로컬 사용자 이름과 다르면 원격 액세스 호스트가 작동하지 않습니다.  Google 계정이 특정 도메인(예: 'example.com')에 연결되도록 RemoteAccessHostMatchUsername 정책과 RemoteAccessHostDomain을 함께 사용해야 합니다.
-
-          이 설정을 사용 중지하거나 설정하지 않으면 원격 액세스 호스트를 모든 로컬 사용자와 연결할 수 있습니다.</translation>
 <translation id="4587365491100112056">정책을 설정하면 인증 데이터 캐시의 전체 기간이 시간 단위로 지정됩니다. 캐시에는 기기 영역에서 신뢰되는 영역(연결 영역)에 관한 데이터가 포함되어 있습니다. 따라서 인증 데이터를 캐시하면 로그인 속도가 빨라집니다. 사용자별 데이터 및 연결되지 않은 영역의 데이터는 캐시되지 않습니다.
 
       정책을 0으로 설정하면 인증 데이터 캐시가 사용 중지됩니다. 영역별 데이터는 로그인할 때마다 가져오므로 인증 데이터 캐시를 사용 중지하면 사용자 로그인 속도가 크게 느려집니다.
@@ -2428,15 +2404,6 @@
 <translation id="487460824085252184">사용자의 동의를 구하지 않고 자동으로 이전합니다.</translation>
 <translation id="4874982543810021567">이 사이트에서 WebUSB 차단</translation>
 <translation id="4876805738539874299">최대 SSL 버전 사용 설정됨</translation>
-<translation id="487928067861956387">원격 액세스 호스트에 제공되는 필수 호스트 도메인 이름을 구성하여 사용자가 변경하지 못하게 합니다.
-
-          이 설정을 켜고 1개 이상의 도메인에 설정하면 지정된 도메인 이름에 등록된 계정을 사용할 때만 호스트를 공유할 수 있습니다.
-
-          설정을 끄거나, 설정하지 않거나, 빈 목록으로 설정하면 어떤 계정을 사용하든 호스트를 공유할 수 있습니다.
-
-          <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" />이 있더라도 이 설정이 우선 적용됩니다.
-
-          <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />도 참고하세요.</translation>
 <translation id="4887274746092315609">SAML 사용자가 세션 중에 비밀번호를 변경할 수 있는 페이지를 허용합니다.</translation>
 <translation id="4892647988357350237">CCT를 처음 실행할 때 서비스 약관이 기본으로 표시됩니다. 정책을 <ph name="SKIP_TOS_DIALOG" />로 설정하면 첫 실행 환경 또는 이후 실행 중 서비스 약관 대화상자가 나타나지 않습니다. <ph name="STANDARD_TOS_DIALOG" />로 설정하거나 설정하지 않으면 첫 실행 환경에서 서비스 약관 대화상자가 나타납니다. 다른 주의사항은 다음과 같습니다.
 
@@ -2700,15 +2667,6 @@
 
       이때 '버전'은 '61.0.3163.120'과 같은 정확한 버전 또는 '61.0'과 같은 버전 접두어 중 하나를 의미합니다.  </translation>
 <translation id="5247006254130721952">위험한 다운로드 차단</translation>
-<translation id="5249303875508803168">원격 액세스 클라이언트에 제공되는 필수 클라이언트 도메인 이름을 구성하여 사용자가 변경하지 못하도록 합니다.
-
-          설정을 켜고 1개 이상의 도메인에 설정하면 지정된 도메인의 클라이언트만 호스트에 연결할 수 있습니다.
-
-          설정을 끄거나, 설정하지 않거나, 빈 목록으로 설정하면 연결 유형에 관한 기본 정책이 적용됩니다. 원격 지원의 경우 이 정책은 어떤 도메인의 클라이언트든 호스트에 연결할 수 있도록 허용합니다. 단, 상시 원격 액세스의 경우 호스트 소유자만이 연결할 수 있습니다.
-
-          <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" />이 있더라도 이 설정이 우선 적용됩니다.
-
-          <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />도 참고하세요.</translation>
 <translation id="5249453807420671499">사용자가 Kerberos 계정을 추가할 수 있음</translation>
 <translation id="5252995168844634755">정책을 True로 설정하면 통합 바탕화면이 사용 설정되어, 애플리케이션이 여러 디스플레이로 확장될 수 있습니다. 사용자는 개별 디스플레이의 통합 바탕화면을 사용 중지할 수 있습니다.
 
@@ -2846,11 +2804,6 @@
 <translation id="5390083518957894426">SAML 사용자를 위해 잠금 화면에서 온라인 재인증 사용 설정</translation>
 <translation id="5391388690191341203">자동 로그인 기기 로컬 계정</translation>
 <translation id="5393009997533871906">허용 목록에 있는 프린터만 사용자에게 표시됨</translation>
-<translation id="5395271912574071439">연결이 진행 중일 때 원격 액세스 호스트 차단을 사용합니다.
-
-          이 설정을 사용하도록 설정하면 원격 연결이 진행 중일 때 호스트의 물리적인 입력/출력 기기가 사용 중지됩니다.
-
-          이 설정이 사용 중지되거나 설정되지 않으면 공유 중일 때 로컬 및 원격 사용자가 모두 호스트와 상호작용할 수 있습니다.</translation>
 <translation id="5401696449591951427"><ph name="CHROME_DEVICES_LINK" /> 사용 설정</translation>
 <translation id="5405289061476885481"><ph name="PRODUCT_OS_NAME" /> 로그인 화면에서 허용되는 키보드 레이아웃을 구성합니다.
 
@@ -3486,9 +3439,6 @@
 <translation id="6401669939808766804">사용자 로그아웃</translation>
 <translation id="640244877779556713">추천 그림 이모티콘 사용 설정</translation>
 <translation id="6407093060083181305">확장 프로그램 설치 차단 목록 설정</translation>
-<translation id="6408233796253901198">이 정책이 설정되면 원격 액세스 호스트가 연결 수락을 위해 이 URL을 사용하여 원격 액세스 클라이언트가 전송한 인증 토큰을 검사합니다. RemoteAccessHostTokenUrl과 함께 사용되어야 합니다.
-
-          비어 있거나 설정되어 있지 않으면 이 기능이 사용 중지됩니다.</translation>
 <translation id="6417265370957905582">Google 어시스턴트</translation>
 <translation id="6422575351619065453">키오스크 모드에서 플로팅 접근성 메뉴를 표시할지 제어합니다.
 
@@ -4134,9 +4084,6 @@
       정책을 사용 안함으로 설정하거나 설정하지 않으면 지원되는 플랫폼에서 KDC 정책이 무시되고 <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> 정책만 인정됩니다.
 
       <ph name="MS_WIN_NAME" />에서는 KDC 정책이 항상 인정됩니다.</translation>
-<translation id="7273823081800296768">이 설정을 사용하도록 설정했거나 설정하지 않은 경우 사용자는 매번 PIN을 입력하지 않아도 되도록 연결 시간에 클라이언트와 호스트를 페어링하도록 선택할 수 있습니다.
-
-          이 설정이 사용 중지되면 이 기능을 사용할 수 없습니다.</translation>
 <translation id="7274077256421167535">USB 전력 공유 사용</translation>
 <translation id="7275334191706090484">관리 북마크</translation>
 <translation id="7278854311116092134">차단 목록에 적용되지 않는 기본 메시지 호스트의 이름</translation>
@@ -4273,9 +4220,6 @@
 
       이 정책은 지원 중단되었으므로 <ph name="PRINTERS_POLICY_NAME" /> 정책을 대신 사용하세요.
       </translation>
-<translation id="7504632989711326175">이 정책이 설정되면 호스트가 RemoteAccessHostTokenValidationUrl을 인증하기 위해 특정 발급자 CN이 포함된 클라이언트 인증서를 사용합니다. '*' 기호로 설정하여 사용 가능한 모든 클라이언트 인증서를 사용하세요.
-
-          비어 있거나 설정되어 있지 않으면 이 기능이 사용 중지됩니다.</translation>
 <translation id="7506745375479451616">이 정책은 <ph name="IE_PRODUCT_NAME" />에서 전환할 때 <ph name="PRODUCT_NAME" />에서 URL을 여는 데 사용할 명령을 제어합니다. 정책을 실행 파일 경로로 설정하거나 <ph name="PRODUCT_NAME_PLACEHOLDER" />으로 설정하여 <ph name="PRODUCT_NAME" />의 위치를 자동으로 감지할 수 있습니다.
 
       정책을 설정하지 않으면 Internet Explorer에서 <ph name="PRODUCT_NAME" />을 실행할 때 <ph name="IE_PRODUCT_NAME" />에서 <ph name="PRODUCT_NAME" />의 자체 실행 경로를 자동으로 감지합니다.
@@ -4889,13 +4833,6 @@
 <translation id="8371178326720637170">관리되는 확장 프로그램에서 Enterprise Hardware Platform API를 사용할 수 있도록 허용합니다.</translation>
 <translation id="8375817202037102567">다음 사이트에서 파일 및 디렉터리 쓰기 액세스 차단</translation>
 <translation id="8379317372795444261">HTTP 연결에서 <ph name="BASIC_AUTH" /> 인증 허용</translation>
-<translation id="8380490658357556620">원격 클라이언트가 이 컴퓨터에 연결을 설정하려고 할 때 릴레이 서버를 사용 설정합니다.
-
-          이 설정을 사용하면 직접 연결을 사용할 수 없을 때 원격 클라이언트가 릴레이 서버를 사용하여 이 컴퓨터에 연결할 수 있습니다(예: 방화벽으로 인해 제한되는 경우).
-
-          <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> 정책을 사용 중지하면 이 정책은 무시됩니다.
-
-          이 정책을 설정하지 않은 상태로 두면 설정이 사용됩니다.</translation>
 <translation id="838056554726401140"><ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />이(가) 적용될 URL을 지정하는 URL 목록입니다. 이 정책은 사용자가 설정한 자동으로 열리는 값에 영향을 미치지 않습니다.
 
       정책을 설정하면 URL이 이 집합에 속하고 파일 형식이 <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />에 표시된 경우에만 정책에 의해 자동으로 파일이 열립니다. 두 가지 조건 중 하나라도 False이면 다운로드한 항목이 정책에 따라 자동으로 열리지 않습니다.
@@ -5067,9 +5004,6 @@
       정책이 True로 설정되어 있으면 5분 이상 백그라운드에 있는 탭이 중단될 수 있습니다. 탭이 중단되면 CPU, 배터리, 메모리 사용량이 줄어듭니다. <ph name="PRODUCT_NAME" />은(는) 휴리스틱을 사용하여 백그라운드에서 유용한 작업(예: 디스플레이 알림, 사운드 재생, 동영상 스트리밍)을 하는 탭이 중단되지 않도록 합니다. 웹 개발자는 사이트가 중단되지 않도록 선택할 수도 있습니다(https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       False로 설정되어 있으면 어떠한 탭도 중단되지 않습니다.</translation>
-<translation id="8622378389102774881">이 정책을 설정하면 원격 액세스 호스트에서 연결을 위해 인증 클라이언트에 이 URL로부터 인증 토큰을 받을 것을 요구합니다. RemoteAccessHostTokenValidationUrl과 함께 사용되어야 합니다.
-
-          비어 있거나 설정되어 있지 않으면 이 기능이 사용 중지됩니다.</translation>
 <translation id="8631434304112909927">버전 <ph name="UNTIL_VERSION" /> 이하</translation>
 <translation id="8631437968147930597"><ph name="PRODUCT_OS_NAME" /> 잠금 화면에서 허용된 메모 앱 목록</translation>
 <translation id="8649763579836720255">Chrome OS 기기는 기기에서 보호된 콘텐츠를 재생할 수 있음을 인증하는 Chrome OS CA에서 발행한 인증서를 받기 위해 원격 인증(인증된 액세스)을 사용할 수 있습니다.  이 프로세스는 기기를 고유하게 식별하는 Chrome OS CA로 하드웨어 보증 정보를 전송하는 과정을 포함합니다.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index aad945f..c8e51147 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Gebruikers laten kiezen of ze een anonieme Google-service willen gebruiken voor automatische beschrijvingen van niet-gelabelde afbeeldingen</translation>
 <translation id="1087437665304381368">Met dit beleid wordt alleen de ontwikkelaarsmodus van <ph name="PRODUCT_OS_NAME" /> bepaald. Als je de toegang tot de ontwikkelaarsopties van Android wilt blokkeren, moet je het beleid <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /> instellen.</translation>
 <translation id="1087707496788636333">De Chrome Enterprise-beleidslijst wordt verplaatst. Update je bookmarks naar <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
-<translation id="1093082332347834239">Als de instelling is ingeschakeld, wordt de host voor ondersteuning op afstand uitgevoerd in een proces met <ph name="UIACCESS_PERMISSION_NAME" />-rechten. Zodoende kan een externe gebruiker de vensters met een verhoogde bevoegdheid op de desktop van de lokale gebruiker gebruiken.
-
-          Als deze instelling is uitgeschakeld of niet geconfigureerd, wordt de host voor ondersteuning op afstand uitgevoerd in de context van de gebruiker en kan de externe gebruiker geen vensters met een verhoogde bevoegdheid op de desktop gebruiken.</translation>
 <translation id="1095209545735032039">De Serial API op deze sites blokkeren</translation>
 <translation id="1096105751829466145">Standaardzoekprovider</translation>
 <translation id="1099282607296956954">Site-isolatie inschakelen voor elke site</translation>
@@ -640,9 +637,6 @@
 <translation id="2040479044912658454">Modus voor afdrukrastering</translation>
 <translation id="2043749682619281558">De cursormarkering op het inlogscherm inschakelen</translation>
 <translation id="2043770014371753404">Bedrijfsprinters uitgeschakeld</translation>
-<translation id="2050629715135525072">Regelt de mogelijkheid van een gebruiker die is verbonden met een host voor externe toegang om bestanden over te zetten tussen de client en de host. Dit is niet van toepassing op verbindingen voor hulp op afstand, die geen bestandsoverdracht ondersteunen.
-
-          Als deze instelling is uitgeschakeld, is bestandsoverdracht niet toegestaan. Als deze instelling is ingeschakeld of niet is ingesteld, is bestandsoverdracht toegestaan.</translation>
 <translation id="2057317273526988987">Toegang verlenen aan een lijst met URL's</translation>
 <translation id="2061810934846663491">De vereiste domeinnamen configureren voor hosts voor externe toegang</translation>
 <translation id="2069350366303315077">Als je dit beleid inschakelt, dwingt <ph name="PRODUCT_NAME" /> gastsessies af en wordt voorkomen dat gebruikers inloggen bij profielen. Gastlogins zijn <ph name="PRODUCT_NAME" />-profielen waarbij alle vensters in de incognitomodus zijn.
@@ -1134,13 +1128,6 @@
 <translation id="2801065672151277034">Instellingen voor certificaatbeheer</translation>
 <translation id="2801155097555584385">Een custom startpunt voor batterijoplading opgeven in procenten</translation>
 <translation id="2805707493867224476">Alle sites toestaan pop-ups weer te geven</translation>
-<translation id="2808013382476173118">Maakt het gebruik van STUN-servers mogelijk wanneer externe clients verbinding proberen te maken met dit apparaat.
-
-          Als deze instelling is ingeschakeld, kunnen externe clients deze apparaten zien en hiermee verbinding maken, zelfs als ze worden gescheiden door een firewall.
-
-          Als deze instelling is uitgeschakeld en uitgaande UDP-verbindingen worden gefilterd door de firewall, staat dit apparaat alleen verbindingen toe met clientapparaten binnen het lokale netwerk.
-
-          Als dit beleid niet wordt ingesteld, wordt de instelling ingeschakeld.</translation>
 <translation id="2813281962735757923">Met dit beleid wordt bepaald in welke perioden het <ph name="PRODUCT_OS_NAME" />-apparaat geen toestemming heeft om automatisch op updates te controleren.
       Wanneer dit beleid is ingesteld op een niet-lege lijst met perioden geldt het volgende:
       Apparaten kunnen tijdens de opgegeven perioden niet automatisch controleren op updates. Apparaten die een rollback vereisen of die een lagere versie dan de minimum <ph name="PRODUCT_OS_NAME" />-versie gebruiken, worden niet beïnvloed door dit beleid vanwege mogelijke beveiligingsproblemen. Bovendien blokkeert dit beleid geen updatecontroles die door gebruikers of beheerders worden aangevraagd.
@@ -1745,9 +1732,6 @@
       Als je het beleid uitschakelt of niet instelt, rapporteren ingeschreven apparaten de statistieken niet.</translation>
 <translation id="3736879847913515635">'Persoon toevoegen' inschakelen in gebruikersbeheer</translation>
 <translation id="3750220015372671395">Het genereren van sleutels op deze sites blokkeren</translation>
-<translation id="375266612405883748">Hiermee wordt het UDP-poortbereik beperkt dat wordt gebruikt door de host voor externe toegang op dit apparaat.
-
-          Als dit beleid niet is ingesteld, of als het is ingesteld op een lege reeks, heeft de host voor externe toegang toestemming om elke beschikbare poort te gebruiken, tenzij het beleid <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> is uitgeschakeld. In dat geval gebruikt de host voor externe toegang UDP-poorten binnen het bereik 12400-12409.</translation>
 <translation id="3755237588083934849">Met dit beleid bepaal je hoe vaak (in milliseconden) apparaatstatusuploads moeten worden gestuurd. Het toegestane minimum is 60 seconden.
 
       Als dit beleid niet is ingesteld, wordt het standaardinterval van 3 uur toegepast.</translation>
@@ -2076,11 +2060,6 @@
           Als je dit beleid instelt, kunnen gebruikers het niet wijzigen of overschrijven.
 
           Als dit beleid niet is ingesteld, is de functie voor automatisch klikken in eerste instantie uitgeschakeld, maar kan de gebruiker deze op elk gewenst moment inschakelen.</translation>
-<translation id="4214536984333857724">Als je deze instelling inschakelt, worden gnubby-verificatieverzoeken gestuurd via een proxy met een externe hostverbinding.
-
-          Houd er rekening mee dat voor een correcte werking van deze functie extra componenten vereist zijn die niet beschikbaar zijn buiten de Google-netwerkomgeving.
-
-          Als je deze instelling uitschakelt, worden gnubby-verificatieverzoeken niet via een proxy gestuurd.</translation>
 <translation id="4224610387358583899">Drempels voor schermvergrendeling</translation>
 <translation id="4225260426043444650">Met deze instelling kunnen gebruikers de <ph name="LACROS_NAME" />-browser gebruiken.
 
@@ -2253,9 +2232,6 @@
       Voor <ph name="PRODUCT_NAME" /> is dit beleid alleen van kracht als de machine is ingeschreven met <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" />.
       Voor <ph name="PRODUCT_OS_NAME" /> is dit beleid altijd van kracht.</translation>
 <translation id="4578265298946081589">Niet opnieuw opstarten na uitloggen gebruiker.</translation>
-<translation id="4578912515887794133">Als deze instelling is ingeschakeld, vergelijkt de host voor externe toegang de naam van de lokale gebruiker (waaraan de host is gekoppeld) met de naam van het Google-account dat is geregistreerd als eigenaar van de host (bijvoorbeeld 'jansmits' als de host eigendom is van het Google-account jansmits@voorbeeld.nl).  De host voor externe toegang wordt niet gestart als de naam van de hosteigenaar anders is dan de naam van de lokale gebruiker waaraan de host is gekoppeld.  Het beleid RemoteAccessHostMatchUsername moet samen met het beleid RemoteAccessHostDomain worden gebruikt om ook te zorgen dat het Google-account van de hosteigenaar aan een specifiek domein wordt gekoppeld (zoals 'voorbeeld.nl').
-
-          Als deze instelling is uitgeschakeld of niet ingesteld, kan de host voor externe toegang aan elke lokale gebruiker worden gekoppeld.</translation>
 <translation id="4587365491100112056">Als je het beleid instelt, geef je aan hoeveel uur verificatiegegevens in het cachegeheugen worden bewaard. Het cachegeheugen bevat gegevens over realms die door de machine realm worden vertrouwd (aangesloten realms). Verificatiegegevens worden opgeslagen in het cachegeheugen zodat je sneller kunt inloggen. Er worden geen gebruikersspecifieke gegevens en geen gegevens voor niet-aangesloten realms in het cachegeheugen opgeslagen.
 
       Als je het beleid instelt op 0, wordt de opslag van verificatiegegevens in het cachegeheugen uitgeschakeld. Realmspecifieke gegevens worden elke keer opgehaald als de gebruiker inlogt. Als verificatiegegevens niet meer in het cachegeheugen worden opgeslagen, kan het inlogproces voor gebruikers aanzienlijk worden vertraagd.
@@ -2398,15 +2374,6 @@
 <translation id="487460824085252184">Automatisch migreren, niet om toestemming van de gebruiker vragen.</translation>
 <translation id="4874982543810021567">WebUSB blokkeren op deze sites</translation>
 <translation id="4876805738539874299">Maximale SSL-versie ingeschakeld</translation>
-<translation id="487928067861956387">Hiermee configureer je de vereiste domeinnamen die worden opgelegd aan hosts voor externe toegang en voorkom je dat gebruikers deze wijzigen.
-
-          Als je deze instelling inschakelt en instelt op een of meer domeinen, kunnen hosts alleen worden gedeeld met accounts die zijn geregistreerd op een van de gespecificeerde domeinnamen.
-
-          Als je deze instelling uitschakelt, niet instelt of instelt op een lege lijst, kunnen hosts worden gedeeld via elk account.
-
-          Deze instelling heeft voorrang op <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" /> (indien aanwezig).
-
-          Zie ook <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="4887274746092315609">Schakelt een pagina in voor wachtwoordwijziging tijdens een sessie voor SAML-gebruikers</translation>
 <translation id="4892647988357350237">De servicevoorwaarden worden standaard weergegeven als CCT voor het eerst wordt uitgevoerd. Als je dit beleid instelt op <ph name="SKIP_TOS_DIALOG" />, wordt het dialoogvenster met servicevoorwaarden niet weergegeven tijdens de eerste uitvoering of de daaropvolgende uitvoeringen. Als je dit beleid instelt op <ph name="STANDARD_TOS_DIALOG" /> of niet instelt, wordt het dialoogvenster met servicevoorwaarden weergegeven tijdens de eerste uitvoering. De andere belangrijke aspecten zijn:
 
@@ -2668,15 +2635,6 @@
 
       'Versie' kan in dit geval een exacte versie zijn (zoals '61.0.3163.120') of een versievoorvoegsel (zoals '61.0').  </translation>
 <translation id="5247006254130721952">Gevaarlijke downloads blokkeren</translation>
-<translation id="5249303875508803168">Hiermee configureer je de vereiste client-domeinnamen die worden opgelegd aan clients voor externe toegang en voorkom je dat gebruikers deze wijzigen.
-
-          Als je deze instelling inschakelt en instelt op een of meer domeinen, kunnen uitsluitend clients van een van de gespecificeerde domeinen verbinding maken met de host.
-
-          Als je deze instelling uitschakelt, niet instelt of instelt op een lege lijst, wordt het standaardbeleid voor het verbindingstype toegepast. In het geval van externe assistentie kunnen clients van elk domein verbinding maken met de host. In het geval van externe toegang op elk gewenst moment kan alleen de eigenaar van de host verbinding maken.
-
-          Deze instelling heeft voorrang op <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" /> (indien aanwezig).
-
-          Zie ook <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="5249453807420671499">Gebruikers kunnen Kerberos-accounts toevoegen</translation>
 <translation id="5252995168844634755">Als je het beleid instelt op 'True', wordt 'Geïntegreerde desktop' ingeschakeld, waarmee apps kunnen worden weergegeven over meerdere schermen. Gebruikers kunnen 'Geïntegreerde desktop' uitschakelen voor afzonderlijke schermen.
 
@@ -2814,11 +2772,6 @@
 <translation id="5390083518957894426">Schakelt online opnieuw verifiëren op vergrendelscherm in voor SAML-gebruikers</translation>
 <translation id="5391388690191341203">Lokaal account op apparaat voor automatisch inloggen</translation>
 <translation id="5393009997533871906">Alleen printers op de toelatingslijst worden weergegeven aan gebruikers</translation>
-<translation id="5395271912574071439">Schakelt afscherming van hosts voor externe toegang in terwijl een verbinding tot stand wordt gebracht.
-
-          Als deze instelling is ingeschakeld, worden de fysieke invoer- en uitvoerapparaten van hosts uitgeschakeld terwijl een externe verbinding tot stand wordt gebracht.
-
-          Als deze instelling is uitgeschakeld of niet is ingesteld, kunnen zowel lokale als externe gebruikers met de host communiceren terwijl deze wordt gedeeld.</translation>
 <translation id="5401696449591951427"><ph name="CHROME_DEVICES_LINK" /> inschakelen</translation>
 <translation id="5405289061476885481">Hiermee configureer je welke toetsenbordindelingen zijn toegestaan voor het inlogscherm van <ph name="PRODUCT_OS_NAME" />.
 
@@ -3451,9 +3404,6 @@
 <translation id="6401669939808766804">De gebruiker uitloggen</translation>
 <translation id="640244877779556713">Suggestie voor emoji's inschakelen</translation>
 <translation id="6407093060083181305">Blokkeringslijst voor installatie van extensies configureren</translation>
-<translation id="6408233796253901198">Als dit beleid is ingesteld, gebruikt de host voor externe toegang deze URL om verificatietokens van clients voor externe toegang te valideren om zo connecties te accepteren. Moet samen met RemoteAccessHostTokenUrl worden gebruikt.
-
-          De functie is uitgeschakeld als deze leeg of niet ingesteld is.</translation>
 <translation id="6417265370957905582">Google Assistent</translation>
 <translation id="6422575351619065453">In de kioskmodus beheert dit of het zwevende toegankelijkheidsmenu wordt weergegeven.
 
@@ -4096,9 +4046,6 @@
       Als je het beleid uitschakelt of niet instelt, wordt het KDC-beleid genegeerd op ondersteunde platforms en wordt alleen <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> gerespecteerd.
 
       Op <ph name="MS_WIN_NAME" /> wordt het KDC-beleid altijd gerespecteerd.</translation>
-<translation id="7273823081800296768">Als deze instelling is ingeschakeld of niet is geconfigureerd, kunnen gebruikers clients en hosts aanmelden op het moment dat verbinding wordt gemaakt, zodat er niet elke keer een pincode hoeft te worden opgegeven.
-
-          Als deze instelling is uitgeschakeld, is deze functie niet beschikbaar.</translation>
 <translation id="7274077256421167535">Energie delen via USB inschakelen</translation>
 <translation id="7275334191706090484">Beheerde bookmarks</translation>
 <translation id="7278854311116092134">Namen van de hosts voor systeemeigen berichten die moeten worden vrijgesteld van de blokkeringslijst</translation>
@@ -4236,9 +4183,6 @@
 
       Dit beleid is verouderd. Gebruik in plaats daarvan <ph name="PRINTERS_POLICY_NAME" />.
       </translation>
-<translation id="7504632989711326175">Als dit beleid is ingesteld, gebruikt de host een clientcertificaat met het CN van de opgegeven verstrekker voor verificatie voor RemoteAccessHostTokenValidationUrl. Stel dit in op '*' om een willekeurig beschikbaar clientcertificaat te gebruiken.
-
-          De functie is uitgeschakeld als deze leeg of niet ingesteld is.</translation>
 <translation id="7506745375479451616">Met dit beleid wordt bepaald welke opdracht wordt gebruikt om URL's te openen in <ph name="PRODUCT_NAME" /> bij overschakeling vanuit <ph name="IE_PRODUCT_NAME" />. Dit beleid kan worden ingesteld op een pad naar een uitvoerbaar bestand of op <ph name="PRODUCT_NAME_PLACEHOLDER" /> om de locatie van <ph name="PRODUCT_NAME" /> automatisch te detecteren.
 
       Als je het beleid niet instelt, detecteert <ph name="IE_PRODUCT_NAME" /> het eigen pad van <ph name="PRODUCT_NAME" /> naar een uitvoerbaar bestand als <ph name="PRODUCT_NAME" /> wordt gestart vanuit Internet Explorer.
@@ -4848,13 +4792,6 @@
 <translation id="8371178326720637170">Hiermee kunnen beheerde extensies de Enterprise Hardware Platform-API gebruiken</translation>
 <translation id="8375817202037102567">Schrijftoegang tot bestanden en directory's voor deze sites blokkeren</translation>
 <translation id="8379317372795444261"><ph name="BASIC_AUTH" />-verificatie is toegestaan voor HTTP-verbindingen</translation>
-<translation id="8380490658357556620">Hiermee wordt het gebruik van relayservers ingeschakeld wanneer externe clients proberen een verbinding met dit apparaat tot stand te brengen.
-
-          Als deze instelling is ingeschakeld, kunnen externe clients relayservers gebruiken om verbinding met dit apparaat te maken wanneer er geen rechtstreekse verbinding beschikbaar is (bijvoorbeeld wegens beperkingen van de firewall).
-
-          Als het beleid <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> is uitgeschakeld, wordt het dit beleid genegeerd.
-
-          Als dit beleid niet is ingesteld, wordt de instelling ingeschakeld.</translation>
 <translation id="838056554726401140">Lijst met URL's waarin wordt aangegeven op welke URL's <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> van toepassing is. Dit beleid is niet van invloed op waarden voor automatisch openen die zijn ingesteld door gebruikers.
 
       Als dit beleid is ingesteld, worden bestanden alleen geopend op basis van het beleid als de URL onderdeel is van deze set en het bestandstype wordt vermeld in <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Als een van de voorwaarden False is, wordt de download niet automatisch geopend op basis van het beleid.
@@ -5018,9 +4955,6 @@
       Als het beleid is ingesteld op 'True', kunnen tabbladen die minimaal vijf minuten op de achtergrond actief zijn worden vastgezet. Het vastzetten van tabbladen verlaagt het CPU-, batterij- en geheugengebruik. <ph name="PRODUCT_NAME" /> gebruikt bepaalde methoden om te voorkomen dat tabbladen worden vastgezet die nuttig werk op de achtergrond leveren (zoals meldingen weergeven, geluid afspelen en video streamen). Webontwikkelaars kunnen daarnaast hun toestemming intrekken voor het vastzetten van hun site (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Als het beleid is ingesteld op 'False', worden er geen tabbladen vastgezet.</translation>
-<translation id="8622378389102774881">Als dit beleid is ingesteld, moet de host voor externe toegang clients verifiëren om een verificatietoken van deze URL te verkrijgen en zo verbinding te kunnen maken. Moet samen met RemoteAccessHostTokenValidationUrl worden gebruikt.
-
-          De functie is uitgeschakeld als deze leeg of niet ingesteld is.</translation>
 <translation id="8631434304112909927">tot versie <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">De lijst met notitie-apps die zijn toegestaan op het <ph name="PRODUCT_OS_NAME" />-vergrendelscherm</translation>
 <translation id="8649763579836720255">Chrome OS-apparaten kunnen externe bevestiging (geverifieerde toegang) gebruiken om een certificaat door Chrome OS te laten uitgeven waarin het apparaat uniek wordt geïdentificeerd en geschikt bevonden voor beschermde content.
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index 3ec3039f..93bbd952 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Permitir que os usuários escolham usar um Serviço do Google anônimo para oferecer descrições automáticas para imagens que não têm um texto alternativo</translation>
 <translation id="1087437665304381368">Essa política controla apenas o modo de desenvolvedor do <ph name="PRODUCT_OS_NAME" />. Se quiser impedir o acesso às Opções do desenvolvedor do Android, configure a política <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation>
 <translation id="1087707496788636333">A lista de políticas do Chrome Enterprise está de mudança. Atualize seus favoritos para <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
-<translation id="1093082332347834239">Se esta configuração for ativada, o host de assistência remota será executado em um processo com permissões <ph name="UIACCESS_PERMISSION_NAME" />. Isso permitirá que os usuários remotos interajam com janelas elevadas na área de trabalho do usuário local.
-
-          Se esta configuração for desativada ou não for configurada, o host de assistência remota será executado no contexto do usuário, e os usuários remotos não poderão interagir com janelas elevadas na área de trabalho.</translation>
 <translation id="1095209545735032039">Bloquear a API Serial nesses sites</translation>
 <translation id="1096105751829466145">Provedor de pesquisa padrão</translation>
 <translation id="1099282607296956954">Ativar o Isolamento de todos os sites</translation>
@@ -213,6 +210,7 @@
 <translation id="1393485621820363363">Impressoras empresariais ativadas</translation>
 <translation id="1397855852561539316">URL sugerido do provedor de pesquisa padrão</translation>
 <translation id="1413936351612032792">Enviar informações sobre o uso de apps Linux</translation>
+<translation id="1418387035898607074">Pular as verificações do "Navegação segura" para arquivos transferidos por download de fontes confiáveis</translation>
 <translation id="142346659686073702">Permitir que usuários sem afiliação utilizem o Crostini</translation>
 <translation id="1425551776320718592">Impede que os usuários deste dispositivo usem sideload com adb, sem forçar um Powerwash, o que pode deixar o dispositivo em um estado questionável de segurança</translation>
 <translation id="1426170570389588560">Define a duração, em dias, do armazenamento de metadados de trabalhos de impressão</translation>
@@ -430,9 +428,15 @@
       Se ela for definida como falsa, os usuários não poderão adicionar, remover ou modificar favoritos. Eles ainda poderão usar os favoritos já existentes.</translation>
 <translation id="1715151459541210849">Ativar recurso de acessibilidade de ditado</translation>
 <translation id="172374442286684480">Permitir que todos os sites definam dados locais</translation>
+<translation id="1729169799290004131">Se a política for definida, a porcentagem de brilho da tela será especificada, desativando os recursos do brilho automático. O brilho inicial da tela será ajustado para o valor da política, mas os usuários poderão mudá-lo.
+
+      Se a política não for definida, os controles da tela pelo usuário ou os recursos de brilho automático não serão afetados.
+
+      Observação: os valores da política precisam ser especificados em porcentagens de 0 a 100.</translation>
 <translation id="1736269219679256369">Permitir a continuação na página de aviso SSL</translation>
 <translation id="174765717426930019">Permitir que todos os pop-ups abertos com direcionamento para <ph name="BLANK_PAGE_NAME" /> interajam com a página que abriu o pop-up, a menos que ela rejeite explicitamente a interação </translation>
 <translation id="1750315445671978749">Bloquear todos os downloads</translation>
+<translation id="1755310913456007816">Usar as configurações on-line existentes de verificação da revogação</translation>
 <translation id="1760951637494635692">Permitir a API Serial nesses sites</translation>
 <translation id="1765512315997108908">Controla quais impressoras da <ph name="DEVICE_PRINTERS_POLICY_NAME" /> são disponibilizadas para os usuários.
 
@@ -479,6 +483,7 @@
 <translation id="1844972978764975668">Permitir consultas a um servidor do Google para recuperar um carimbo de data/hora preciso</translation>
 <translation id="1845405905602899692">Configurações de quiosque</translation>
 <translation id="1845429996559814839">Restringir modo de impressão com PIN</translation>
+<translation id="1846545322805269573">Os usuários não podem personalizar o plano de fundo da página Nova guia</translation>
 <translation id="1847960418907100918">Especifica os parâmetros usados ao fazer pesquisa instantânea com POST. Consiste em pares de nomes/valores separados por vírgula. Se um valor for um parâmetro de modelo, como {searchTerms} no exemplo acima, ele será substituído por dados de termos de pesquisa reais.
 
           Esta política é opcional. Se não for definida, a solicitação de pesquisa instantânea será enviada usando o método GET.
@@ -542,6 +547,37 @@
 <translation id="1971991630422430420">Se a política for definida como "Ativada", a transição rápida será usada quando for compatível com o ponto de acesso sem fio. Isso se aplica a todos os usuários e interfaces no dispositivo.
 
       Se a política for definida como "Desativada" ou não for definida, a transição rápida não será usada.</translation>
+<translation id="197744850608781984">Se a política for definida, ela controlará a estratégia de gerenciamento de energia quando o usuário estiver inativo.
+
+      Há quatro ações:
+
+      * A tela escurece quando o usuário fica inativo pelo tempo especificado por <ph name="SCREEN_DIM_FIELD_NAME" />.
+
+      * A tela é desligada quando o usuário fica inativo pelo tempo especificado por <ph name="SCREEN_OFF_FIELD_NAME" />.
+
+      * Uma caixa de diálogo de alerta é exibida quando o usuário permanece inativo pelo tempo especificado por <ph name="IDLE_WARNING_FIELD_NAME" />. Ela avisa que a ação de inatividade será realizada, sendo exibida apenas quando essa ação consistir em sair da sessão ou desligar o dispositivo.
+
+      * A ação especificada por <ph name="IDLE_ACTION_FIELD_NAME" /> é realizada quando o usuário fica inativo pelo tempo especificado por Inativo.
+
+      Para cada ação acima, o tempo de inatividade precisa ser especificado em milissegundos e definido como um valor maior que zero para ativar a ação correspondente. Se o tempo de inatividade for definido como zero, o <ph name="PRODUCT_OS_NAME" /> não realizará a ação correspondente.
+
+      Para cada período descrito acima, quando a duração não for definida, um valor padrão será usado.
+
+      Os valores de <ph name="SCREEN_DIM_FIELD_NAME" /> serão ajustados para serem menores ou iguais a <ph name="SCREEN_OFF_FIELD_NAME" />. <ph name="SCREEN_OFF_FIELD_NAME" /> e <ph name="IDLE_WARNING_FIELD_NAME" /> serão ajustados para serem menores ou iguais a Inativo.
+
+      <ph name="IDLE_ACTION_FIELD_NAME" /> pode ser uma de quatro ações:
+
+      * <ph name="IDLE_ACTION_ENUM_SUSPEND" />
+
+      * <ph name="IDLE_ACTION_ENUM_LOGOUT" />
+
+      * <ph name="IDLE_ACTION_ENUM_SHUTDOWN" />
+
+      * <ph name="IDLE_ACTION_ENUM_DO_NOTHING" />
+
+      Se <ph name="IDLE_ACTION_FIELD_NAME" /> não for definida, a ação <ph name="IDLE_ACTION_ENUM_SUSPEND" /> será realizada.
+
+      Observação: há configurações separadas para bateria e alimentação CA.</translation>
 <translation id="1988345404999458987">Oferece as configurações dos servidores de impressão disponíveis.
 
       Esta política permite fornecer a configuração de servidores de impressão externos no formato de arquivo JSON para dispositivos <ph name="PRODUCT_OS_NAME" />.
@@ -606,9 +642,6 @@
 <translation id="2040479044912658454">Modo de varredura de impressão</translation>
 <translation id="2043749682619281558">Ativa o destaque de cursor na tela de login</translation>
 <translation id="2043770014371753404">Impressoras empresariais desativadas</translation>
-<translation id="2050629715135525072">Controla a habilidade de um usuário de transferir arquivos entre o cliente e o host quando ele está conectado a um host de acesso remoto. Isso não se aplica a conexões de assistência remota, que não são compatíveis com transferência de arquivos.
-
-          Se essa configuração for desativada, a transferência de arquivos não será permitida. Se essa configuração for ativada ou não for definida, a transferência de arquivos será permitida.</translation>
 <translation id="2057317273526988987">Permitir acesso a uma lista de URLs</translation>
 <translation id="2061810934846663491">Configurar os nomes de domínio obrigatórios para hosts de acesso remoto</translation>
 <translation id="2069350366303315077">Definir a política como "Ativada" faz com que o <ph name="PRODUCT_NAME" /> aplique sessões de visitante e impeça logins de perfis. Logins de visitante são perfis do <ph name="PRODUCT_NAME" /> em que as janelas estão no modo de navegação anônima.
@@ -624,6 +657,7 @@
 <translation id="209586405398070749">Canal Stable</translation>
 <translation id="2098658257603918882">Ativar relato de uso e dados relacionados a falhas</translation>
 <translation id="2104418465060359056">Fornecer informações sobre extensões e plug-ins</translation>
+<translation id="2106166591774188922">Permitir que usuários do SAML mudem as senhas do SAML durante a sessão em chrome://password-change</translation>
 <translation id="2106627642643925514">Modifica o modo padrão de impressão com PIN. Se o modo não estiver disponível, a política será ignorada.</translation>
 <translation id="2107563874993284076">A definição da política como "Ativada" permitirá que os usuários usem Compartilhamentos de arquivos de rede para o <ph name="PRODUCT_NAME" />. Se a política for definida como "Desativada", os usuários não poderão usar esse recurso.</translation>
 <translation id="2107601598727098402">
@@ -1104,13 +1138,6 @@
 <translation id="2801065672151277034">Configurações de gerenciamento do certificado</translation>
 <translation id="2801155097555584385">Configurar o início do carregamento personalizado da bateria, em porcentagem</translation>
 <translation id="2805707493867224476">Permitir que todos os sites exibam pop-ups</translation>
-<translation id="2808013382476173118">Permite o uso de servidores STUN quando clientes remotos estiverem tentando estabelecer uma conexão com a máquina.
-
-          Se esta configuração for ativada, clientes remotos poderão descobrir e conectar-se a estas máquinas, mesmo quando separados por um firewall.
-
-          Se esta configuração for desativada e as conexões de saída UDP forem filtradas pelo firewall, esta máquina permitirá somente conexões a partir de máquinas clientes da rede local.
-
-          Se esta política não for definida, a configuração será ativada.</translation>
 <translation id="2813281962735757923">Essa política controla os períodos durante os quais o dispositivo <ph name="PRODUCT_OS_NAME" /> não tem permissão para procurar atualizações automaticamente.
       Veja o que acontece quando ela é definida como uma lista não vazia de intervalos de tempo:
       Os dispositivos não podem procurar atualizações automaticamente durante os intervalos especificados. Os dispositivos que precisam de uma reversão ou que são anteriores à versão mínima do <ph name="PRODUCT_OS_NAME" /> não são afetados por essa política para evitar possíveis problemas de segurança. Além disso, a política não bloqueia verificações de atualização solicitadas por usuários ou administradores.
@@ -1216,6 +1243,7 @@
 <translation id="2957513448235202597">Tipo de conta para autenticação <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959469725686993410">Sempre enviar pontos de acesso Wi-Fi para o servidor ao determinar o fuso horário</translation>
 <translation id="2959898425599642200">Regras de proxies ignoráveis</translation>
+<translation id="2960013482187484833">Usar a impressora usada mais recentemente como a escolha padrão na visualização de impressão</translation>
 <translation id="2960128438010718932">Cronograma de testes para aplicação de uma nova atualização</translation>
 <translation id="2960691910306063964">Ativar ou desativar autenticação sem PIN para hosts de acesso remoto</translation>
 <translation id="2964373560810620158">Impedir que os usuários usem o navegador <ph name="LACROS_NAME" /></translation>
@@ -1313,6 +1341,7 @@
 <translation id="3072847235228302527">Definir os Termos de Serviço para uma conta local do dispositivo</translation>
 <translation id="3086995894968271156">Configura a política Cast Receiver no <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3091832372132789233">Carregar a bateria de dispositivos que ficam a maior parte do tempo conectados a uma fonte de energia externa.</translation>
+<translation id="3092059499596000593">Usar a impressora padrão do sistema como a escolha padrão na visualização de impressão</translation>
 <translation id="309416443108680956">Especifica o que acontece quando um usuário que está fazendo a autenticação com um token de segurança (por exemplo, com um cartão inteligente) remove o token durante a sessão. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />: nada acontece. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />: a tela é bloqueada até que o usuário faça a autenticação novamente. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />: a sessão é encerrada e o usuário é desconectado. Se esta política não for definida, o comportamento padrão será <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />.</translation>
 <translation id="3096595567015595053">Lista de plug-ins ativados</translation>
 <translation id="3101501961102569744">Escolher o modo de especificar as configurações do servidor proxy</translation>
@@ -1366,6 +1395,11 @@
 <translation id="3219421230122020860">Modo de navegação anônima disponível</translation>
 <translation id="3220624000494482595">Se o aplicativo de quiosque for um app Android, ele não terá nenhum controle sobre a versão do <ph name="PRODUCT_OS_NAME" />, mesmo se esta política estiver definida como <ph name="TRUE" />.</translation>
 <translation id="322359555555487980">Determina a disponibilidade de variações no <ph name="PRODUCT_OS_NAME" /></translation>
+<translation id="3231617925177241750">Se a política for definida como "Ativada" e <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_POLICY_NAME" /> e <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_POLICY_NAME" /> forem definidas, a economia de energia no período de pico permanecerá ativa, caso ela seja compatível com o dispositivo. A política de gerenciamento de energia no período de pico diz respeito a uma política que economiza energia pela redução do uso de corrente alternada nos períodos de alto consumo. É possível definir um horário de início e término do modo de economia de energia no período de pico para cada dia da semana. Durante esses períodos, o sistema será executado usando a bateria mesmo se estiver conectado à corrente alternada, desde que a bateria se mantenha acima do limite especificado. Depois do horário de término especificado, o sistema será executado usando energia de corrente alternada (se conectado), mas a bateria não será carregada. O sistema voltará a funcionar normalmente, usando corrente alternada e carregando a bateria, depois do horário de início especificado.
+
+      Se a política for definida como "Desativada", a economia de energia no período de pico permanecerá desativada.
+
+      Se a política não for definida, a economia de energia no período de pico será desativada inicialmente. Não é possível mudar essa configuração.</translation>
 <translation id="3231837273069128027">A definição da política configura a disponibilidade e o comportamento das atualizações de firmware para <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
 
       Especifique configurações individuais nas propriedades JSON:
@@ -1707,9 +1741,6 @@
       Se a política for definida como "Desativada" ou não for definida, as estatísticas não serão informadas pelos dispositivos registrados.</translation>
 <translation id="3736879847913515635">Ativar adição de uma pessoa no gerenciador de usuários</translation>
 <translation id="3750220015372671395">Bloquear a geração de chaves nesses sites</translation>
-<translation id="375266612405883748">Restringe o intervalo da porta UDP usada pelo host de aceso remoto desta máquina.
-
-          Se esta política não for definida ou se for definida como uma string vazia, o host de acesso remoto poderá usar qualquer porta disponível, a não ser que a política <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> esteja desativada. Nesse caso, o host de acesso remoto usará portas UDP no intervalo 12400-12409.</translation>
 <translation id="3755237588083934849">Se a política for definida, a frequência do envio de uploads de status do dispositivo será determinada, em milissegundos. O mínimo permitido é 60 segundos.
 
       Se não for definida, o intervalo padrão será de 3 horas.</translation>
@@ -1734,6 +1765,7 @@
       Se a política for definida como "Desativada" ou não for definida, o <ph name="PRODUCT_OS_NAME" /> permitirá o desligamento do dispositivo.</translation>
 <translation id="3765260570442823273">Duração da mensagem de aviso de saída de usuário ocioso</translation>
 <translation id="377044054160169374">Aplicação de intervenção de experiência ofensiva</translation>
+<translation id="3778689139323007309">Realizar verificações de revogação para certificados de servidor validados com assinatura dos certificados de CA locais</translation>
 <translation id="3780152581321609624">Incluir porta não padrão no SPN Kerberos</translation>
 <translation id="3788662722837364290">Configurações de gerenciamento de energia quando o usuário se torna inativo</translation>
 <translation id="3790085888761753785">Se esta configuração estiver ativada, os usuários poderão fazer login nas próprias contas com o Smart Lock. Esse é um comportamento mais permissivo do que o esperado para o Smart Lock, que permite apenas que usuários desbloqueiem as respectivas telas.
@@ -2037,11 +2069,6 @@
           Se você definir esta política, o usuário não poderá alterá-la ou modificá-la.
 
           Se esta política não for definida, o clique automático ficará desativado inicialmente, mas poderá ser ativado pelo usuário a qualquer momento.</translation>
-<translation id="4214536984333857724">Se esta configuração estiver ativada, as solicitações de autenticação gnubby serão transmitidas por proxy por uma conexão de host remoto.
-
-          Observe que, para funcionar adequadamente, este recurso precisa de outros componentes que não estão disponíveis fora do ambiente da Rede do Google.
-
-          Se esta configuração estiver desativada, as solicitações de autenticação gnubby não serão transmitidas por proxy.</translation>
 <translation id="4224610387358583899">Tempo de espera para bloqueio de tela</translation>
 <translation id="4225260426043444650">Esta configuração permite que os usuários usem o navegador <ph name="LACROS_NAME" />.
 
@@ -2214,9 +2241,6 @@
       Para o <ph name="PRODUCT_NAME" />, esta política só é eficaz quando a máquina está registrada na <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" />.
       Para o <ph name="PRODUCT_OS_NAME" />, esta política sempre é eficaz.</translation>
 <translation id="4578265298946081589">Não é reinicializado quando o usuário sai.</translation>
-<translation id="4578912515887794133">Se esta configuração for ativada, o host de acesso remoto comparará o nome do usuário local (ao qual o host está associado) ao nome da Conta do Google registrada como proprietária do host (ou seja, "joaosilva" se o host for propriedade da Conta do Google "joaosilva@example.com").  O host de acesso remoto não será iniciado se o nome do proprietário do host for diferente do nome do usuário local ao qual o host está associado.  A política RemoteAccessHostMatchUsername precisa ser usada com a RemoteAccessHostDomain para garantir que a Conta do Google do proprietário do host esteja associada a um domínio específico (ou seja, "example.com").
-
-          Se esta configuração for desativada ou não for definida, o host de acesso remoto poderá ser associado a qualquer usuário local.</translation>
 <translation id="4587365491100112056">A definição da política especifica, em horas, o ciclo de vida do armazenamento em cache dos dados de autenticação. O cache contém dados sobre realms confiáveis pelo realm da máquina (realms afiliados). Portanto, o armazenamento em cache dos dados de autenticação acelera o login. Dados específicos do usuário e dados de realms não afiliados não são armazenados em cache.
 
       Se a política for definida como "0", o armazenamento em cache dos dados de autenticação será desativado. Os dados específicos de realm são buscados em todos os logins, então a desativação do armazenamento em cache dos dados de autenticação pode deixar o login mais lento.
@@ -2359,15 +2383,6 @@
 <translation id="487460824085252184">Migrar automaticamente, sem autorização do usuário.</translation>
 <translation id="4874982543810021567">Bloquear o WebUSB nesses sites</translation>
 <translation id="4876805738539874299">Versão máxima de SSL ativada</translation>
-<translation id="487928067861956387">Configura os nomes de domínio de host necessários que serão impostos em hosts de acesso remoto e impede que os usuários façam alterações.
-
-          Se esta configuração for ativada e definida para um ou mais domínios, os hosts poderão ser compartilhados apenas por meio de contas registradas em um dos nomes de domínio especificados.
-
-          Se a configuração for desativada, não for definida ou for definida como uma lista vazia, os hosts poderão ser compartilhados por meio de qualquer conta.
-
-          Esta configuração substituirá a <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" />, se ela estiver presente.
-
-          Veja também: <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="4887274746092315609">Ativa uma página para alteração de senha durante a sessão para usuários do SAML</translation>
 <translation id="4892647988357350237">Por padrão, os Termos de Serviço são mostrados quando o CCT é executado pela primeira vez. Se esta política for definida como "<ph name="SKIP_TOS_DIALOG" />", a caixa de diálogo de Termos de Serviço não aparecerá na primeira execução e nas execuções subsequentes. Se ela for definida como "<ph name="STANDARD_TOS_DIALOG" />" ou não for definida, a caixa de diálogo de Termos de Serviço aparecerá na primeira execução. As outras ressalvas são as seguintes:
 
@@ -2623,15 +2638,6 @@
 
       Aqui, "versão" pode ser uma versão exata, como "61.0.3163.120", ou um prefixo de versão, como "61.0".  </translation>
 <translation id="5247006254130721952">Bloquear downloads perigosos</translation>
-<translation id="5249303875508803168">Configura os nomes de domínio de cliente necessários que serão impostos aos clientes de acesso remoto e impede os usuários de modificá-los.
-
-          Se a configuração for ativada e definida para um ou mais domínios, apenas clientes de um dos domínios especificados poderão se conectar ao host.
-
-          Se a configuração for desativada, não for definida ou for definida como uma lista vazia, a política padrão do tipo de conexão será aplicada. Para assistência remota, isso permite que clientes de qualquer domínio se conectem ao host. Para acesso remoto a qualquer momento, apenas o proprietário do host pode se conectar.
-
-          Esta configuração substituirá a <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" />, se ela estiver presente.
-
-          Veja também: <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="5249453807420671499">Os usuários podem adicionar contas do Kerberos</translation>
 <translation id="5252995168844634755">Se a política for definida como verdadeira, a área de trabalho unificada será ativada e permitirá que aplicativos apareçam em várias telas. Os usuários poderão desativar essa configuração para usarem as telas individualmente.
 
@@ -2743,6 +2749,7 @@
           Se definida como verdadeira ou não configurada, este usuário poderá criar e gerenciar usuários supervisionados.</translation>
 <translation id="5369937289900051171">Apenas impressão colorida</translation>
 <translation id="5370279767682621504">Ativar suporte a HTTP/0.9 em portas não padrão</translation>
+<translation id="5371152055157582429">Os usuários podem personalizar o plano de fundo da página Nova guia</translation>
 <translation id="5377606826822211923">Controla, no lugar do usuário, o uso de apps Android de fontes não confiáveis</translation>
 <translation id="5377668121137111316">Se esta política for definida como verdadeira, o teclado na tela será ativado. Se esta política for definida como falsa o teclado na tela será desativado.
 
@@ -2768,7 +2775,6 @@
 <translation id="5390083518957894426">Permite a reautenticação on-line na tela de bloqueio para usuários do SAML</translation>
 <translation id="5391388690191341203">Conta local do dispositivo para login automático</translation>
 <translation id="5393009997533871906">Somente impressoras da lista de permissões são mostradas para os usuários</translation>
-<translation id="5395271912574071439">Ativa as cortinas de hosts de acesso remoto enquanto uma conexão está em andamento. Se essa configuração for ativada, os dispositivos de entrada e saída físicas dos hosts serão desativados enquanto houver uma conexão remota em andamento. Se essa configuração for desativada ou não estiver definida, os usuários locais e remotos poderão interagir com o host quando ele estiver sendo compartilhado.</translation>
 <translation id="5401696449591951427">Ativar <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">Configura quais layouts de teclado são permitidos na tela de login do <ph name="PRODUCT_OS_NAME" />.
 
@@ -2986,6 +2992,14 @@
 <translation id="572155275267014074">Configurações do Android</translation>
 <translation id="5728154254076636808">Permite a criação de cópias em roaming dos dados de perfil do <ph name="PRODUCT_NAME" /></translation>
 <translation id="5732972008943405952">Importar dados de preenchimento automático de formulários do navegador padrão na primeira execução</translation>
+<translation id="5733040281451845496">Se a política for definida como "Ativada", os intervalos de gerenciamento de energia e os limites de duração da sessão não começarão a ser contados até a primeira atividade do usuário em uma sessão.
+
+      Se a política for definida como "Desativada" ou não for definida, os intervalos de gerenciamento de energia e o limite de duração começarão a ser contados assim que a sessão for iniciada.</translation>
+<translation id="5738766588683307797">Se <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> for definida como "Desativada", a definição de <ph name="USER_ACTIVITY_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" /> especificará a porcentagem pela qual calcular o intervalo de escurecimento da tela quando houver atividade do usuário enquanto a tela estiver escurecida ou logo após a tela ser desligada. Quando o intervalo de escurecimento é calculado, os intervalos de desligamento, bloqueio e inatividade da tela são ajustados para manter as mesmas distâncias do intervalo de escurecimento da configuração original.
+
+      Se a política não for definida, um fator de cálculo padrão será usado.
+
+      Observação: o fator de cálculo precisa ser de 100% ou mais.</translation>
 <translation id="574098933844699859">Especificar se as informações do sistema (por exemplo, o número de série da versão do Chrome OS ou do dispositivo) serão sempre exibidas (ou ocultas) na tela de login.
 
       Se a política for definida como verdadeira, as informações do sistema serão exibidas de maneira forçada.
@@ -3391,9 +3405,6 @@
 <translation id="6401669939808766804">Fazer logout do usuário</translation>
 <translation id="640244877779556713">Permitir sugestão de emojis</translation>
 <translation id="6407093060083181305">Configurar lista de bloqueio para instalação de extensões</translation>
-<translation id="6408233796253901198">Se esta política for definida, o host do acesso remoto usará este URL para validar os tokens de autenticação de clientes de acesso remoto, de modo a aceitar as conexões. Ela precisa ser usada em conjunto com RemoteAccessHostTokenUrl.
-
-          Este recurso será desativado se for deixado vazio ou sem definição.</translation>
 <translation id="6417265370957905582">Google Assistente</translation>
 <translation id="6422575351619065453">No modo quiosque, controla a exibição do menu de acessibilidade flutuante.
 
@@ -3401,6 +3412,7 @@
 
       Se esta política for definida como desativada ou não for definida, o menu de acessibilidade flutuante nunca será exibido.</translation>
 <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation>
+<translation id="6424486395812679373">Realizar as verificações do "Navegação segura" em todos os arquivos transferidos por download</translation>
 <translation id="6438364096042399634">Se a política for definida, será configurada uma lista de dispositivos USB que o usuário pode remover do driver de kernel dele para uso pela API chrome.usb diretamente dentro de um app da Web. As entradas são pares de um identificador de fornecedor e um identificador de produto USB para reconhecer um hardware específico.
 
       Se ela não for definida, a lista de dispositivos USB que podem ser removidos ficará vazia.
@@ -3487,6 +3499,9 @@
 <translation id="6553143066970470539">Porcentagem de brilho da tela</translation>
 <translation id="6558362593755624474">A definição da política especifica a chave de licença de <ph name="PLUGIN_VM_NAME" /> para este dispositivo.</translation>
 <translation id="6559057113164934677">Não permitir que nenhum site acesse minha câmera e meu microfone</translation>
+<translation id="6559221564468029245">Se a política for definida como "Ativada" ou não for definida, o usuário não será considerado inativo quando o dispositivo estiver tocando áudio. Isso impede que o tempo limite de inatividade seja atingido e que as ações correspondentes sejam realizadas. No entanto, o escurecimento, o desligamento e o bloqueio de tela ainda serão realizados após os limites de tempo configurados, independentemente da atividade de áudio.
+
+      Se a política for definida como "Desativada", o sistema poderá considerar os usuários inativos, independentemente da atividade de áudio.</translation>
 <translation id="6559475864956112261">Esta política está obsoleta. Use a <ph name="PROXY_SETTINGS_POLICY_NAME" />.
 
        Se a política for definida como "Ativada", você poderá especificar o servidor proxy usado pelo Chrome e evitar que os usuários mudem as configurações de proxy. O Chrome e os apps ARC ignoram todas as opções relacionadas a proxy especificadas na linha de comando. A política só terá efeito se a <ph name="PROXY_SETTINGS_POLICY_NAME" /> não for especificada.
@@ -3903,6 +3918,9 @@
 <translation id="7072208053150563108">Taxa de alteração da senha da máquina</translation>
 <translation id="7072567600438630966">Permitir a ativação do recurso "Seu smartphone".</translation>
 <translation id="7079519252486108041">Bloquear pop-ups nestes sites</translation>
+<translation id="7081784525008938771">Se a política for definida como "Ativada" ou não for definida, o usuário não será considerado inativo quando o dispositivo estiver reproduzindo vídeo. Isso impede que os intervalos de inatividade e de escurecimento, desligamento e bloqueio da tela sejam atingidos e que as ações correspondentes sejam realizadas.
+
+      Se a política for definida como "Desativada", o sistema poderá considerar os usuários inativos, independentemente da atividade de vídeo.</translation>
 <translation id="7086720321892395256">Controla as políticas do usuário e do dispositivo para o recurso de tela de privacidade.</translation>
 <translation id="7091842872805965910">Ativa o recurso de envio automático do PIN na tela de bloqueio e login.</translation>
 <translation id="7093294902558672021">Envia informações sobre o ventilador de um dispositivo.
@@ -4028,9 +4046,6 @@
       Definir a política como "Desativada" ou deixá-la sem definição faz com que a política de KDC seja ignorada nas plataformas compatíveis, e somente <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> será respeitada.
 
       No <ph name="MS_WIN_NAME" />, a política de KDC sempre é respeitada.</translation>
-<translation id="7273823081800296768">Se esta definição estiver ativada ou não estiver configurada, os usuários podem optar por parear clientes e hosts no momento da conexão, eliminando a necessidade de inserir um PIN todas as vezes.
-
-          Se esta definição estiver desativada, esse recurso não fica disponível.</translation>
 <translation id="7274077256421167535">Ativar compartilhamento de energia via USB</translation>
 <translation id="7275334191706090484">Favoritos gerenciados</translation>
 <translation id="7278854311116092134">Nomes dos hosts de mensagens nativas a serem mantidos fora da lista de bloqueio</translation>
@@ -4133,6 +4148,11 @@
 
       Se ela não for definida, a política <ph name="ASK_NOTIFICATIONS_POLICY_NAME" /> será aplicada, mas os usuários poderão mudar essa configuração.</translation>
 <translation id="747275827471712187">Reverter para comportamento <ph name="ATTRIBUTE_SAMESITE_NAME" /> legado para os cookies nesses sites</translation>
+<translation id="7476447711788742702">Se a política for definida, a ação do <ph name="PRODUCT_OS_NAME" /> quando o usuário fechar a tampa do dispositivo será especificada.
+
+      Se a política não for definida, a ação padrão será a de suspensão.
+
+      Observação: se a ação for a de suspender, o <ph name="PRODUCT_OS_NAME" /> poderá ser configurado separadamente para bloquear ou não a tela antes da suspensão.</translation>
 <translation id="7476621944304431784">Se esta definição estiver ativada, os usuários poderão sincronizar configurações de rede Wi-Fi entre dispositivos <ph name="PRODUCT_OS_NAME" /> e um smartphone Android conectado. Antes que as configurações sejam sincronizadas, os usuários precisam aceitar esse recurso explicitamente concluindo um fluxo de configuração.
 
       Se esta definição estiver desativada, os usuários não terão permissão para sincronizar as configurações de rede Wi-Fi.
@@ -4160,9 +4180,6 @@
 
       Esta política está obsoleta. Use a <ph name="PRINTERS_POLICY_NAME" />.
       </translation>
-<translation id="7504632989711326175">Se esta política for definida, o host usará um certificado do cliente com o nome comum (CN, na sigla em inglês) do emissor fornecido para autenticar em RemoteAccessHostTokenValidationUrl. Configure como "*" para usar qualquer certificado do cliente disponível.
-
-          Este recurso será desativado se for deixado vazio ou sem definição.</translation>
 <translation id="7506745375479451616">Esta política controla o comando usado para abrir URLs no <ph name="PRODUCT_NAME" /> ao alternar do <ph name="IE_PRODUCT_NAME" />. Ela pode ser definida como um caminho de arquivo executável ou <ph name="PRODUCT_NAME_PLACEHOLDER" /> para detectar automaticamente o local do <ph name="PRODUCT_NAME" />.
 
       Se ela não for definida, o <ph name="IE_PRODUCT_NAME" /> detectará automaticamente o caminho executável do <ph name="PRODUCT_NAME" /> ao abrir o <ph name="PRODUCT_NAME" /> com o Internet Explorer.
@@ -4440,6 +4457,11 @@
 <translation id="7891884447851425349">Se a <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> estiver ativada, definir <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> especificará o URL do mecanismo de pesquisa usado na pesquisa padrão. O URL precisa incluir a string <ph name="SEARCH_TERM_MARKER" />, que é substituída na consulta pelos termos de pesquisa do usuário.
 
       É possível especificar o URL de pesquisa do Google como: <ph name="GOOGLE_SEARCH_URL" />.</translation>
+<translation id="7894185046683379696">Se a política for definida, será especificado o tempo em milissegundos sem entrada do usuário para que a tela seja bloqueada quando o dispositivo estiver funcionando com energia CA ou bateria. Os valores são ajustados para serem menores que o intervalo de inatividade em <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
+
+      Quando a política é definida como zero, o <ph name="PRODUCT_OS_NAME" /> não bloqueia a tela quando o usuário fica inativo. Se a política não for definida, período padrão será usado.
+
+      Recomendação: ative o bloqueio de tela depois de um período de inatividade quando o dispositivo estiver suspenso e suspenda o <ph name="PRODUCT_OS_NAME" /> depois do intervalo de inatividade. Use esta política apenas quando o bloqueio de tela ocorrer muito antes da suspensão ou quando você não quiser a suspensão por inatividade.</translation>
 <translation id="7895553628261067384">Acesso remoto</translation>
 <translation id="7902040092815978832">Mostrar teclado numérico para senha</translation>
 <translation id="7904177352786629708">Definir a política como "Ativada" faz com que a pesquisa CNAME seja ignorada. O nome do servidor é usado conforme inserido ao gerar o SPN do Kerberos.
@@ -4553,6 +4575,9 @@
           Se esta política for ativada, a lista de contas definidas por meio dela será adicionada às configurações de contas do Kerberos.
 
           Se esta política for desativada ou não estiver definida, nenhuma conta será adicionada às configurações de contas do Kerberos, e todas as contas adicionadas anteriormente com essa política serão removidas. O usuário ainda poderá adicionar contas manualmente se a política "Os usuários podem adicionar contas do Kerberos" estiver ativada.</translation>
+<translation id="8078297389450285582">Se a política for definida como "Ativada" ou não for definida, o modelo de escurecimento inteligente será ativado e poderá aumentar o tempo de tela ativa. Se ocorrer esse aumento, os intervalos de desligamento, bloqueio e descanso da tela serão ajustados para manter as mesmas distâncias do intervalo de escurecimento da tela de acordo com a configuração original.
+
+      Se a política for definida como Desativada, o modelo de escurecimento inteligente não influenciará o escurecimento da tela.</translation>
 <translation id="8099880303030573137">Intervalo de inatividade no funcionamento com energia da bateria</translation>
 <translation id="8101381354936029836">Grupo atômico de políticas:</translation>
 <translation id="8101937907822293485">Ativa o envio de relatórios anônimos sobre uso e dados relacionados a falhas no <ph name="PRODUCT_NAME" /> para o Google e impede que os usuários mudem esta configuração.
@@ -4688,6 +4713,11 @@
       Se não for definida, os sites terão permissão para solicitar acesso, mas os usuários poderão mudar essa configuração.</translation>
 <translation id="8274603902181597201">Faz a limpeza do diretório inicial do ecryptfs do usuário e começa com um novo diretório inicial ext4-encrypted.</translation>
 <translation id="8284296539558710573">Prompts de autenticação HTTP de origem cruzada</translation>
+<translation id="8284527236880877730">Se <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> for definida como "Desativada", a definição de <ph name="PRESENTATION_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" /> especificará a porcentagem pela qual calcular o intervalo de escurecimento da tela quando o dispositivo estiver no modo de apresentação. Quando o intervalo de escurecimento for calculado, os intervalos de desligamento, bloqueio e inatividade da tela serão ajustados para manter as mesmas distâncias do intervalo de escurecimento da tela de acordo com a configuração original.
+
+      Se a política não for definida, um fator de cálculo padrão será usado.
+
+      Observação: o fator de cálculo precisa ser de 100% ou mais.</translation>
 <translation id="8285435910062771358">Lupa de tela inteira ativada</translation>
 <translation id="8288199156259560552">Ativar o Serviço de Localização do Google para Android</translation>
 <translation id="8290875622178450531">Ativar o recurso de acessibilidade de ditado.
@@ -4753,13 +4783,6 @@
 <translation id="8371178326720637170">Permitir que extensões gerenciadas usem a API Enterprise Hardware Platform</translation>
 <translation id="8375817202037102567">Bloquear acesso de gravação de arquivos e diretórios nestes sites</translation>
 <translation id="8379317372795444261">A autenticação <ph name="BASIC_AUTH" /> é permitida em conexões HTTP</translation>
-<translation id="8380490658357556620">Permite o uso de servidores relay quando clientes remotos estiverem tentando estabelecer uma conexão com a máquina.
-
-          Se esta configuração for ativada, os clientes remotos poderão usar servidores relay para se conectar a essa máquina quando uma conexão direta não estiver disponível (por exemplo, devido a restrições de firewall).
-
-          Se a política <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> for desativada, esta política será ignorada.
-
-          Se esta política não for definida, a configuração será ativada.</translation>
 <translation id="838056554726401140">Lista de URLs especificando a que URLs <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> se aplica. Esta política não tem impacto em valores de abertura automática definidos pelo usuário.
 
       Se esta política for definida, os arquivos serão abertos automaticamente se o URL fizer parte deste conjunto e o tipo de arquivo estiver listado em <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Se alguma das condições for falsa, o download não será aberto automaticamente pela política.
@@ -4931,9 +4954,6 @@
       Se a política for definida como verdadeira, as guias que estiverem em segundo plano há pelo menos 5 minutos poderão ser congeladas. O congelamento de guias reduz o uso de CPU, bateria e memória. O <ph name="PRODUCT_NAME" /> usa a heurística para evitar o congelamento de guias que fazem um bom trabalho em segundo plano (por exemplo, exibir notificações, reproduzir som, fazer streaming de vídeo). Os desenvolvedores da Web também podem desativar o congelamento nos respectivos sites (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Se a política for definida como falsa, nenhuma guia será congelada.</translation>
-<translation id="8622378389102774881">Se esta política for definida, o host de acesso remoto exigirá a autenticação de clientes para receber um token de autenticação deste URL e poder se conectar. Ela precisa ser usada em conjunto com RemoteAccessHostTokenValidationUrl.
-
-          Este recurso será desativado se for deixado vazio ou sem definição.</translation>
 <translation id="8631434304112909927">até a versão <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">A lista de apps de anotação permitidos na tela de bloqueio do <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="8649763579836720255">Os dispositivos Chrome OS podem usar atestado remoto (acesso confirmado) para receber um certificado emitido pelo Chrome OS CA que declare que o dispositivo é qualificado para reproduzir conteúdo protegido. Este processo envolve o envio de informações de endosso de hardware para o Chrome OS CA que identifiquem com exclusividade o dispositivo.
@@ -5028,9 +5048,19 @@
 
       Observação: veja uma lista com as variáveis que podem ser usadas ( https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables ).</translation>
 <translation id="8777369558049831576">Exibir uma caixa de seleção "Sempre aberto" na caixa de diálogo do protocolo externo.</translation>
+<translation id="8786409859071107656">Se a política for definida como "Ativada", a política de gerenciamento de compartilhamento de energia via USB será ativada.
+
+      Alguns dispositivos têm uma porta USB específica com um ícone de raio ou de bateria que pode ser usada para carregar dispositivos usando a bateria do sistema. Esta política afeta o comportamento de carregamento dessa porta enquanto o sistema está no modo de suspensão ou de encerramento. Ela não afeta outras portas USB e o comportamento do carregamento enquanto o sistema está ativo, período em que a porta USB sempre fornece energia.
+
+      Quando em suspensão, a energia será fornecida à porta USB quando o dispositivo for conectado ao carregador de tomada ou se o nível da bateria estiver acima de 50%. Quando desligado, a energia será fornecida à porta USB quando o dispositivo for conectado ao carregador de tomada.
+
+      Se a política for definida como "Desativada", não será fornecida nenhuma energia.
+
+      Se a política não for definida, ela será ativada e não poderá ser desativada pelos usuários.</translation>
 <translation id="8798099450830957504">Padrão</translation>
 <translation id="8800453707696044281">Configurar a parada personalizada do carregamento da bateria, em porcentagem</translation>
 <translation id="8801680448782904838">Notifica um usuário de que a reinicialização do navegador ou do dispositivo é recomendada ou obrigatória</translation>
+<translation id="8816671955985738552">Não permitir mudanças de senha do SAML durante a sessão em chrome://password-change</translation>
 <translation id="8817960019535659860">Impedir que os usuários resgatem ofertas pelo Registro do Chrome OS</translation>
 <translation id="8818173863808665831">Informar a localização geográfica do dispositivo. 
 
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb
index 91730da..81873e8 100644
--- a/components/policy/resources/policy_templates_ru.xtb
+++ b/components/policy/resources/policy_templates_ru.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Разрешить пользователям автоматически получать описания для изображений с помощью сервиса Google</translation>
 <translation id="1087437665304381368">Определяет, есть ли у пользователей доступ к режиму разработчика в <ph name="PRODUCT_OS_NAME" />. Чтобы запретить доступ к параметрам для разработчиков Android, настройте правило <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation>
 <translation id="1087707496788636333">Список правил Chrome Enterprise переехал! Теперь он находится здесь: <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
-<translation id="1093082332347834239">Если эта настройка включена, то удаленный хост помощника подключится с правами <ph name="UIACCESS_PERMISSION_NAME" />. Это позволит удаленным пользователям взаимодействовать на вашем компьютере с привилегированными окнами.
-
-          Если эта настройка выключена или не задана, удаленный хост помощника подключится в контексте пользователя. Привилегированные окна в этом случае не будут доступны удаленным пользователям.</translation>
 <translation id="1095209545735032039">Блокировка Serial API на указанных сайтах</translation>
 <translation id="1096105751829466145">Поисковая система по умолчанию</translation>
 <translation id="1099282607296956954">Включить изоляцию для всех сайтов</translation>
@@ -214,6 +211,7 @@
 <translation id="1393485621820363363">Принтеры, доступные на устройствах компании</translation>
 <translation id="1397855852561539316">URL используемой по умолчанию поисковой системы для запроса подсказок</translation>
 <translation id="1413936351612032792">Отправлять сведения об использовании приложений для Linux</translation>
+<translation id="1418387035898607074">Не проверять файлы, скачиваемые из надежных источников, с помощью Безопасного просмотра</translation>
 <translation id="142346659686073702">Разрешить неаффилированным пользователям запускать Crostini</translation>
 <translation id="1425551776320718592">Запретить устанавливать на устройство приложения из неизвестного источника с помощью adb, но не использовать принудительно функцию Powerwash. Устройство нельзя будет считать надежно защищенным.</translation>
 <translation id="1426170570389588560">Задать период времени в днях для хранения метаданных заданий печати</translation>
@@ -441,9 +439,15 @@
       Если задано значение False, пользователи не смогут выполнять эти действия, но сохранят доступ к существующим закладкам.</translation>
 <translation id="1715151459541210849">Включить голосовой ввод (специальная возможность)</translation>
 <translation id="172374442286684480">Разрешить всем сайтам сохранять локальные данные</translation>
+<translation id="1729169799290004131">Устанавливает уровень яркости экрана в процентах. Функция адаптивной яркости будет отключена. Изначально яркость экрана устанавливается в соответствии с правилом, но пользователи могут изменить этот параметр.
+
+      Если правило не настроено, пользовательские настройки экрана и функция адаптивной яркости не будут изменены.
+
+      Примечание. Значение указывается в процентах (от 0 до 100).</translation>
 <translation id="1736269219679256369">Разрешить переход со страницы предупреждения SSL</translation>
 <translation id="174765717426930019">Разрешить всем всплывающим окнам, открытым с использованием target="<ph name="BLANK_PAGE_NAME" />", взаимодействовать со страницей, которая запросила их открытие (кроме случаев, когда она явно предоставила отказ от этого взаимодействия) </translation>
 <translation id="1750315445671978749">Блокировать все скачивания</translation>
+<translation id="1755310913456007816">Использовать текущие настройки онлайн-проверки</translation>
 <translation id="1760951637494635692">Разрешение использовать Serial API на указанных сайтах</translation>
 <translation id="1765512315997108908">Это правило позволяет управлять доступом пользователей к принтерам, указанным в настройках правила <ph name="DEVICE_PRINTERS_POLICY_NAME" />.
 
@@ -494,6 +498,7 @@
 <translation id="1844972978764975668">Разрешить отправку запросов на сервер Google для получения точных временных меток</translation>
 <translation id="1845405905602899692">Настройки режима киоска</translation>
 <translation id="1845429996559814839">Ограничивает режим печати с вводом PIN-кода</translation>
+<translation id="1846545322805269573">Пользователи не могут настраивать фоновое изображение для страницы быстрого доступа</translation>
 <translation id="1847960418907100918">Список параметров, используемых в запросах POST при Живом поиске. Список состоит из пар "имя/значение", разделенных запятыми. Если в качестве значения указан параметр шаблона (как {searchTerms} в приведенном выше примере), он заменяется фактическими данными.
 
           Данная политика является необязательной. Если она не задана, для Живого поиска используется метод GET.
@@ -557,6 +562,37 @@
 <translation id="1971991630422430420">Когда правило включено, функция Fast Transition будет работать, если ее поддерживает беспроводная точка доступа. Правило применяется ко всем пользователям и интерфейсам на устройстве.
 
       Если правило отключено или не настроено, функция Fast Transition не будет работать.</translation>
+<translation id="197744850608781984">Позволяет настроить параметры электропитания для режима бездействия.
+
+      Доступно четыре варианта настройки:
+
+      * Если пользователь бездействует в течение времени, указанного в поле <ph name="SCREEN_DIM_FIELD_NAME" />, экран затемняется.
+
+      * Если пользователь бездействует в течение времени, указанного в поле <ph name="SCREEN_OFF_FIELD_NAME" />, экран отключается.
+
+      * Если пользователь бездействует в течение времени, указанного в поле <ph name="IDLE_WARNING_FIELD_NAME" />, появляется диалоговое окно с предупреждением о предстоящем действии. Это окно будет появляться, только если в результате отсутствия активности произойдет выход из аккаунта или отключение устройства.
+
+      * Если пользователь неактивен в течение времени, указанного в поле Idle, будет выполнено действие, выбранное в поле <ph name="IDLE_ACTION_FIELD_NAME" />.
+
+      Период отсутствия активности задается в миллисекундах для каждого действия и должен быть больше нуля. Если значение равно нулю, <ph name="PRODUCT_OS_NAME" /> не выполнит назначенное действие.
+
+      Если период времени не задан, для каждого из действий, указанных выше, используется значение по умолчанию.
+
+      Значение в поле <ph name="SCREEN_DIM_FIELD_NAME" /> не может быть больше значения в поле <ph name="SCREEN_OFF_FIELD_NAME" />. Значения в полях <ph name="SCREEN_OFF_FIELD_NAME" /> и <ph name="IDLE_WARNING_FIELD_NAME" /> не могут быть больше значения в поле Idle.
+
+      В поле <ph name="IDLE_ACTION_FIELD_NAME" /> можно указать одно из четырех действий:
+
+      * <ph name="IDLE_ACTION_ENUM_SUSPEND" /> (перейти в спящий режим);
+
+      * <ph name="IDLE_ACTION_ENUM_LOGOUT" /> (выйти из системы);
+
+      * <ph name="IDLE_ACTION_ENUM_SHUTDOWN" /> (выключить устройство);
+
+      * <ph name="IDLE_ACTION_ENUM_DO_NOTHING" /> (ничего не делать).
+
+      Если значение в поле <ph name="IDLE_ACTION_FIELD_NAME" /> не задано, будет выполнено действие <ph name="IDLE_ACTION_ENUM_SUSPEND" />.
+
+      Примечание. Параметры электропитания можно настроить в зависимости от работы от сети или батареи.</translation>
 <translation id="1988345404999458987">Устанавливает конфигурацию доступных серверов печати.
 
       Это правило позволяет задать конфигурацию внешних серверов печати для устройств <ph name="PRODUCT_OS_NAME" /> в файле формата JSON.
@@ -611,9 +647,6 @@
 <translation id="2040479044912658454">Режим растеризации при печати</translation>
 <translation id="2043749682619281558">Включить подсветку указателя мыши на экране входа</translation>
 <translation id="2043770014371753404">Недоступные корпоративные принтеры</translation>
-<translation id="2050629715135525072">Определяет, может ли пользователь, подключенный к хосту удаленного доступа, перемещать файлы между клиентом и хостом. Это правило не действует для подключений удаленного помощника, не поддерживающих передачу файлов.
-
-          Когда правило отключено, перенос файлов запрещен. Когда правило включено или не настроено, перенос файлов разрешен.</translation>
 <translation id="2057317273526988987">Разрешить доступ к списку URL</translation>
 <translation id="2061810934846663491">Настроить доменные имена для хостов удаленного доступа</translation>
 <translation id="2069350366303315077">Если это правило включено, <ph name="PRODUCT_NAME" /> принудительно запускает гостевые сеансы и не допускает входа в профиль. При гостевом доступе все окна для профилей <ph name="PRODUCT_NAME" /> открываются в режиме инкогнито.
@@ -629,6 +662,7 @@
 <translation id="209586405398070749">Стабильный канал</translation>
 <translation id="2098658257603918882">Включить в отчеты данные об использовании и сбоях</translation>
 <translation id="2104418465060359056">Передавать информацию о расширениях и плагинах</translation>
+<translation id="2106166591774188922">Разрешить пользователям SAML менять пароль на странице chrome://password-change во время сеанса</translation>
 <translation id="2106627642643925514">Переопределяет режим печати с вводом PIN-кода по умолчанию. Если этот режим недоступен, правило будет игнорироваться.</translation>
 <translation id="2107563874993284076">Включенное правило позволяет пользователям работать с общими сетевыми папками в <ph name="PRODUCT_NAME" />. В противном случае эта функция недоступна.</translation>
 <translation id="2107601598727098402">
@@ -1104,13 +1138,6 @@
 <translation id="2801065672151277034">Настройки управления сертификатами</translation>
 <translation id="2801155097555584385">Установить значение в процентах, при котором батарея начнет заряжаться</translation>
 <translation id="2805707493867224476">Разрешить открытие всплывающих окон на всех сайтах</translation>
-<translation id="2808013382476173118">Использование серверов STUN при подключении удаленных клиентов к устройству
-
-          Если этот параметр включен, удаленные клиенты могут обнаруживать устройство и подключаться к нему, даже когда используется брандмауэр.
-
-          Если этот параметр отключен, а исходящие UDP-соединения фильтруются брандмауэром, к устройству смогут подключаться только клиенты, находящиеся в локальной сети.
-
-          Если значение не задано, по умолчанию параметр включен.</translation>
 <translation id="2813281962735757923">Это правило задает временные интервалы, в течение которых устройству с <ph name="PRODUCT_OS_NAME" /> запрещено выполнять автоматическую проверку обновлений.
       Если для этого правила заданы временные интервалы:
       В указанные периоды времени устройства не могут автоматически проверять наличие обновлений. Из соображений безопасности это правило не затрагивает устройства, которым необходим откат к предыдущей версии ПО, а также устройства, на которых установлена слишком старая версия <ph name="PRODUCT_OS_NAME" />. Кроме того, правило не блокирует поиск обновлений, запрошенный пользователем или администратором.
@@ -1216,6 +1243,7 @@
 <translation id="2957513448235202597">Тип аккаунта для аутентификации <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959469725686993410">Для определения часового пояса всегда отправлять данные о точках доступа Wi-Fi на сервер</translation>
 <translation id="2959898425599642200">Правила игнорирования прокси-серверов</translation>
+<translation id="2960013482187484833">Использовать в режиме предварительного просмотра последний выбранный принтер</translation>
 <translation id="2960128438010718932">Правило задает график поэтапного обновления</translation>
 <translation id="2960691910306063964">Включает/отключает аутентификацию без PIN-кода для хостов удаленного доступа</translation>
 <translation id="2964373560810620158">Запретить пользователям работать в браузере <ph name="LACROS_NAME" /></translation>
@@ -1313,6 +1341,7 @@
 <translation id="3072847235228302527">Установить Условия использования локального аккаунта</translation>
 <translation id="3086995894968271156">Настройка ресивера Cast в <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3091832372132789233">Заряжать батарею устройств, которые изначально подключены к внешнему источнику питания.</translation>
+<translation id="3092059499596000593">Использовать в режиме предварительного просмотра системный принтер по умолчанию</translation>
 <translation id="309416443108680956">Определяет, что происходит, когда пользователь, вошедший в систему с помощью токена безопасности (например, смарт-карты), удаляет его. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />. Ничего не произойдет. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />. Экран будет заблокирован, пока пользователь не войдет в систему повторно. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />. Сеанс будет завершен, а пользователь выйдет из системы. Если правило не настроено, по умолчанию используется параметр <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />.</translation>
 <translation id="3096595567015595053">Список включенных плагинов</translation>
 <translation id="3101501961102569744">Выбрать способ настройки прокси-сервера</translation>
@@ -1366,6 +1395,11 @@
 <translation id="3219421230122020860">Режим инкогнито доступен</translation>
 <translation id="3220624000494482595">Если киоск-приложение является приложением Android, оно не сможет управлять версией <ph name="PRODUCT_OS_NAME" />, даже если для правила задано значение <ph name="TRUE" />.</translation>
 <translation id="322359555555487980">Определить доступность модификаций в <ph name="PRODUCT_OS_NAME" /></translation>
+<translation id="3231617925177241750">Если настроены <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_POLICY_NAME" />, <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_POLICY_NAME" /> и это правило, режим пиковой нагрузки будет всегда включен на устройствах, где он поддерживается. Режим пиковой нагрузки позволяет экономить энергию, минимизируя использование переменного тока в период высокой нагрузки на электрическую сеть. Для каждого буднего дня можно указать время, в которое режим пиковой нагрузки будет включаться и отключаться. Пока заряд батареи выше заданного порогового значения, система будет использовать энергию аккумулятора, даже если устройство работает от сети переменного тока. Когда наступит указанное время отключения режима, система начнет использовать энергию переменного тока, если устройство подключено к электрической сети, но батарея заряжаться не будет. В указанное время начала зарядки система вернется к штатному режиму работы (использование сети переменного тока одновременно с зарядом батареи).
+
+      Если правило отключено, режим пиковой нагрузки работать не будет.
+
+      Если правило не настроено, режим пиковой нагрузки будет изначально выключен. Пользователи не могут изменить этот параметр.</translation>
 <translation id="3231837273069128027">Это правило определяет доступность и настройки обновления встроенного ПО <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
 
       Отдельные параметры могут быть заданы в формате JSON.
@@ -1713,9 +1747,6 @@
       Если правило отключено ил не настроено, эти данные не отправляются.</translation>
 <translation id="3736879847913515635">Разрешить добавлять людей через диспетчер пользователей</translation>
 <translation id="3750220015372671395">Блокировать создание ключей на этих сайтах</translation>
-<translation id="375266612405883748">Ограничивает диапазон UDP-портов, используемых хостами удаленного доступа на этом компьютере.
-
-          Если правило не настроено или в качестве значения указана пустая строка, для удаленного доступа можно будет использовать любой доступный порт. Если параметр <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> отключен, будет разрешено использование UDP-портов в диапазоне от 12 400 до 12 409.</translation>
 <translation id="3755237588083934849">Правило позволяет указать, с какой частотой нужно отправлять данные об устройстве (в миллисекундах). Минимальное значение – 60 секунд.
 
       Если правило не настроено, интервал по умолчанию составляет 3 часа.</translation>
@@ -1740,6 +1771,7 @@
       Если правило отключено или не настроено, <ph name="PRODUCT_OS_NAME" /> позволит пользователю выключать устройство.</translation>
 <translation id="3765260570442823273">Время показа предупреждения о выходе</translation>
 <translation id="377044054160169374">Принудительное прерывание при злоупотреблении доверием</translation>
+<translation id="3778689139323007309">Проверять, не был ли отозван сертификат сервера, успешно прошедший проверку и подписанный локальным сертификатом ЦС</translation>
 <translation id="3780152581321609624">Включить нестандартный порт в имя SPN Kerberos</translation>
 <translation id="3788662722837364290">Параметры электропитания в режиме неактивности</translation>
 <translation id="3790085888761753785">Когда эта настройка включена, пользователи могут входить в аккаунт, используя Smart Lock. Это правило расширяет возможности Smart Lock, так как по умолчанию функция позволяет разблокировать только экран устройства.
@@ -2044,11 +2076,6 @@
           Если вы настроите это правило, пользователи не смогут его изменить или переопределить.
 
           Если не настроить это правило, изначально автоматическое нажатие будет отключено, но пользователь сможет включить его в любой момент.</translation>
-<translation id="4214536984333857724">Если этот параметр включен, запросы на авторизацию Gnubby будут передаваться через подключение к удаленному хосту.
-
-          Для правильной работы этой функции требуются дополнительные компоненты, которые доступны только в сетевой среде Google.
-
-          Если этот параметр отключен, запросы на авторизацию Gnubby не будут передаваться через прокси.</translation>
 <translation id="4224610387358583899">Период неактивности для блокировки экрана</translation>
 <translation id="4225260426043444650">Это правило позволяет указать, можно ли использовать браузер <ph name="LACROS_NAME" />.
 
@@ -2221,9 +2248,6 @@
       Для <ph name="PRODUCT_NAME" /> это правило действует только в том случае, если компьютер зарегистрирован с помощью правила <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" />.
       Для <ph name="PRODUCT_OS_NAME" /> это правило используется всегда.</translation>
 <translation id="4578265298946081589">Не перезагружать устройство после выхода пользователя из системы</translation>
-<translation id="4578912515887794133">Если параметр включен, хост удаленного доступа сравнивает имя связанного с ним локального пользователя с названием аккаунта Google, принадлежащего владельцу хоста (например, ivanpetrov, если хост принадлежит аккаунту ivanpetrov@example.com).  Хост удаленного доступа не запустится, если имена владельца и локального пользователя не совпадут.  Чтобы также связать аккаунт Google, принадлежащий владельцу хоста, с определенным доменом (например, example.com), вместе с RemoteAccessHostMatchUsername следует использовать правило RemoteAccessHostDomain.
-
-          Если параметр отключен или не настроен, хост удаленного доступа может быть связан с любым локальным пользователем.</translation>
 <translation id="4587365491100112056">Правило позволяет указать срок использования кешированных данных аутентификации. В кеше содержатся данные о тех областях, которые машинная область считает надежными. Это позволяет выполнять вход в аккаунт быстрее. Сведения пользователей и данные о других областях не кешируются.
 
       Если для правила указано значение "0", данные аутентификации кешироваться не будут. Так как эти сведения извлекаются при каждом входе, без их кеширования вход может занимать значительно больше времени.
@@ -2368,15 +2392,6 @@
 <translation id="487460824085252184">Переносить автоматически, без запроса разрешения</translation>
 <translation id="4874982543810021567">Блокировать WebUSB на этих сайтах.</translation>
 <translation id="4876805738539874299">Позволяет задать максимально допустимую версию SSL</translation>
-<translation id="487928067861956387">Определяет обязательные доменные имена для хостов удаленного доступа и запрещает пользователям их менять.
-
-          Если параметр включен и в нем указан один или несколько доменов, предоставлять общий доступ к хостам можно только из аккаунтов, зарегистрированных в указанных доменах.
-
-          Если параметр отключен, не настроен или список доменов пуст, предоставлять общий доступ к хостам разрешается из любых аккаунтов.
-
-          Это правило переопределяет правило <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" />, если оно настроено.
-
-          См. также <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="4887274746092315609">Включить страницу для пользователей SAML, на которой можно сменить пароль во время сеанса</translation>
 <translation id="4892647988357350237">По умолчанию Условия использования показываются при первом запуске CCT. Если для правила задано значение "<ph name="SKIP_TOS_DIALOG" />", диалоговое окно с Условиями использования не открывается ни при первом, ни при последующих запусках. Если выбрано значение "<ph name="STANDARD_TOS_DIALOG" />" или правило не настроено, диалоговое окно с Условиями использования будет показано при первом запуске. Также нужно учитывать следующее:
 
@@ -2633,15 +2648,6 @@
 
       Указать можно либо точную версию, например 61.0.3163.120, либо первое число в ее номере, например 61.0.  </translation>
 <translation id="5247006254130721952">Блокировать опасные скачивания</translation>
-<translation id="5249303875508803168">Определяет обязательные доменные имена для клиентов удаленного доступа и запрещает пользователям их менять.
-
-          Если параметр включен и в нем указан один или несколько доменов, то подключаться к хосту могут только клиенты из указанных доменов.
-
-          Если параметр отключен, не настроен или список доменов пуст, применяется правило по умолчанию в соответствии с типом подключения. При этом для удаленной поддержки к хосту могут подключаться клиенты из любых доменов. Для удаленного доступа в любое время может подключаться только владелец хоста.
-
-          Это правило переопределяет правило <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" />, если оно настроено.
-
-          См. также <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="5249453807420671499">Разрешить пользователям добавлять аккаунты Kerberos</translation>
 <translation id="5252995168844634755">Если задано значение True, режим единого рабочего стола, который позволяет приложениям работать на нескольких экранах, будет включен. Пользователи смогут отключить его для отдельных экранов.
 
@@ -2753,6 +2759,7 @@
           Если задано значение "true" или значение не задано, этот пользователь сможет создавать контролируемые профили и управлять ими.</translation>
 <translation id="5369937289900051171">Только цветная печать</translation>
 <translation id="5370279767682621504">Включить поддержку HTTP/0.9 для портов, не заданных по умолчанию</translation>
+<translation id="5371152055157582429">Пользователи могут настраивать фоновое изображение для страницы быстрого доступа</translation>
 <translation id="5377606826822211923">Контролировать использование приложений для Android из ненадежных источников</translation>
 <translation id="5377668121137111316">Если для правила задано значение True, экранная клавиатура будет всегда включена. Если для правила задано значение False, экранная клавиатура будет всегда выключена.
 
@@ -2778,9 +2785,6 @@
 <translation id="5390083518957894426">Включение повторной аутентификации на заблокированном экране в онлайн-режиме для пользователей SAML</translation>
 <translation id="5391388690191341203">Локальный аккаунт для автоматического входа</translation>
 <translation id="5393009997533871906">Пользователи видят только принтеры из списка разрешенных принтеров</translation>
-<translation id="5395271912574071439">Включает экранирование хостов удаленного доступа во время соединения.
-          Если этот параметр включен, физические устройства ввода и вывода хостов во время соединения будут отключены.
-          Если этот параметр отключен или не задан, то и локальные, и удаленные пользователи могут взаимодействовать с хостом, когда он работает в режиме общего доступа.</translation>
 <translation id="5401696449591951427">Включить <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">Задает раскладки клавиатуры, доступные на экране входа <ph name="PRODUCT_OS_NAME" />.
 
@@ -2997,6 +3001,14 @@
 <translation id="572155275267014074">Настройки Android</translation>
 <translation id="5728154254076636808">Разрешить создание перемещаемых копий данных для профиля сервиса "<ph name="PRODUCT_NAME" />"</translation>
 <translation id="5732972008943405952">Импорт данных для автозаполнения форм из браузера по умолчанию при первом запуске</translation>
+<translation id="5733040281451845496">Если правило включено, время бездействия для параметров электропитания и продолжительность сеанса начинают отсчитываться после первого действия пользователя в системе.
+
+      Если правило отключено или не настроено, время начинает отсчитываться сразу при запуске сеанса.</translation>
+<translation id="5738766588683307797">Если правило <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> отключено, параметр <ph name="USER_ACTIVITY_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" /> определяет, на сколько процентов увеличивается время до затемнения экрана, если пользователь выполняет действия на устройстве во время затемнения или вскоре после отключения экрана. Пропорционально этому значению меняется время до отключения и блокировки экрана и период отсутствия активности.
+
+      Если правило не настроено, используется значение по умолчанию.
+
+      Примечание. Значение должно составлять не менее 100 %.</translation>
 <translation id="574098933844699859">Это правило позволяет указать, следует ли обязательно показывать или скрывать на экране входа
       системную информацию (например, версию Chrome OS и серийный номер устройства).
 
@@ -3404,9 +3416,6 @@
 <translation id="6401669939808766804">Выход из системы</translation>
 <translation id="640244877779556713">Включение подсказок эмодзи</translation>
 <translation id="6407093060083181305">Настройка черного списка расширений</translation>
-<translation id="6408233796253901198">Если правило настроено, хост удаленного доступа будет использовать этот URL для проверки токенов аутентификации от клиентов удаленного доступа, чтобы установить подключение. Необходимо использовать вместе с правилом RemoteAccessHostTokenUrl.
-
-          Эта функция недоступна, если правило не задано или URL не указан.</translation>
 <translation id="6417265370957905582">Google Ассистент</translation>
 <translation id="6422575351619065453">Управляет показом плавающего меню специальных возможностей в режиме киоска.
 
@@ -3414,6 +3423,7 @@
 
       Если правило отключено или не настроено, плавающее меню специальных возможностей никогда не будет показываться.</translation>
 <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation>
+<translation id="6424486395812679373">Проверять все скачиваемые файлы с помощью Безопасного просмотра</translation>
 <translation id="6438364096042399634">Это правило задает список USB-устройств, которые можно использовать напрямую в веб-приложениях через chrome.usb API (в обход драйвера ядра). Каждая запись должна содержать пару идентификаторов (продавца и товара), которая позволяет точно определить устройство.
 
       Если правило не настроено, список отсоединяемых USB-устройств остается пустым.
@@ -3500,6 +3510,9 @@
 <translation id="6553143066970470539">Уровень яркости экрана в процентах</translation>
 <translation id="6558362593755624474">Правило позволяет указать лицензионный ключ <ph name="PLUGIN_VM_NAME" /> для этого устройства.</translation>
 <translation id="6559057113164934677">Запретить сайтам доступ к камере и микрофону</translation>
+<translation id="6559221564468029245">Если правило включено или не настроено, воспроизведение аудио не считается бездействием. В этом случае период отсутствия активности не отсчитывается и действие не выполняется. Однако воспроизведение аудио не влияет на затемнение, отключение и блокировку экрана.
+
+      Если правило отключено, воспроизведение аудио не воспринимается системой как действие.</translation>
 <translation id="6559475864956112261">Это правило больше не поддерживается. Используйте вместо него правило <ph name="PROXY_SETTINGS_POLICY_NAME" />.
 
        Оно позволяет задать прокси-сервер для Chrome и запрещает пользователям менять его настройки. Chrome и ARC-приложения будут игнорировать все настройки прокси-сервера, указанные с помощью командной строки. Это правило действует, только если не настроено правило <ph name="PROXY_SETTINGS_POLICY_NAME" />.
@@ -3916,6 +3929,9 @@
 <translation id="7072208053150563108">Частота смены пароля на устройстве</translation>
 <translation id="7072567600438630966">Разрешить включать функцию "Управление телефоном"</translation>
 <translation id="7079519252486108041">Блокировать всплывающие окна на этих сайтах</translation>
+<translation id="7081784525008938771">Если правило включено или не настроено, воспроизведение видео не считается бездействием. В этом случае период отсутствия активности и время до затемнения, отключения и блокировки экрана не отсчитываются и действия не выполняются.
+
+      Если правило отключено, воспроизведение видео не воспринимается системой как действие.</translation>
 <translation id="7086720321892395256">Устанавливает правила для пользователей и устройств в отношении экрана конфиденциальности.</translation>
 <translation id="7091842872805965910">Включить функцию автоматической отправки PIN-кодов на заблокированном экране или экране входа</translation>
 <translation id="7093294902558672021">Передача информации о вентиляторе устройства.
@@ -4042,9 +4058,6 @@
       Если правило выключено или не настроено, политика KDC игнорируется на поддерживаемых платформах и применяется только правило <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />.
 
       В <ph name="MS_WIN_NAME" /> политика KDC учитывается всегда.</translation>
-<translation id="7273823081800296768">Если данный параметр включен или не настроен, пользователи могут связывать клиенты и хосты в момент подключения, чтобы не вводить PIN-код каждый раз.
-
-          Если данный параметр отключен, эта функция недоступна.</translation>
 <translation id="7274077256421167535">Включить подачу энергии через USB</translation>
 <translation id="7275334191706090484">Управляемые закладки</translation>
 <translation id="7278854311116092134">Те имена хостов обмена сообщениями с оригинальными приложениями, которые следует исключить из списка запрещенных</translation>
@@ -4147,6 +4160,11 @@
 
       Если это правило не настроено, действует правило <ph name="ASK_NOTIFICATIONS_POLICY_NAME" />, но пользователи могут его изменить.</translation>
 <translation id="747275827471712187">Вернуться к ранее применявшемуся поведению атрибута <ph name="ATTRIBUTE_SAMESITE_NAME" /> для файлов cookie на этих сайтах</translation>
+<translation id="7476447711788742702">Позволяет указать действие, которое выполнит <ph name="PRODUCT_OS_NAME" />, когда пользователь закроет крышку устройства.
+
+      Если правило не настроено, выполняется переход в спящий режим.
+
+      Примечание. Если выбран переход в спящий режим, можно настроить, будет ли <ph name="PRODUCT_OS_NAME" /> блокировать экран перед таким переходом.</translation>
 <translation id="7476621944304431784">Если эта настройка включена, пользователям разрешено синхронизировать параметры сети Wi-Fi между устройствами с <ph name="PRODUCT_OS_NAME" /> и подключенным телефоном Android. Чтобы такая синхронизация была возможна, пользователи должны специально выбрать и настроить эту функцию.
 
       Если настройка отключена, синхронизировать параметры сети Wi-Fi нельзя.
@@ -4173,9 +4191,6 @@
 
       Это правило больше не поддерживается. Используйте вместо него правило <ph name="PRINTERS_POLICY_NAME" />.
       </translation>
-<translation id="7504632989711326175">Если правило настроено, для аутентификации в RemoteAccessHostTokenValidationUrl хост применяет сертификат клиента с указанным общим именем издателя. Чтобы использовался любой из доступных сертификатов, необходимо указать символ "*".
-
-          Эта функция недоступна, если правило не задано или URL не указан.</translation>
 <translation id="7506745375479451616">Это правило определяет, какая команда должна использоваться для открытия страниц при переключении с браузера <ph name="IE_PRODUCT_NAME" /> на <ph name="PRODUCT_NAME" />. Вы можете указать путь к исполняемому файлу или же настроить автоматическое обнаружение файла <ph name="PRODUCT_NAME" /> (для этого нужно ввести <ph name="PRODUCT_NAME_PLACEHOLDER" />).
 
       Если правило не задано, <ph name="IE_PRODUCT_NAME" /> автоматически находит путь к исполняемому файлу <ph name="PRODUCT_NAME" /> при запуске браузера <ph name="PRODUCT_NAME" /> через Internet Explorer.
@@ -4452,6 +4467,11 @@
 <translation id="7891884447851425349">Если правило <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> включено, то настройка <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> содержит URL поисковой системы, используемой по умолчанию. В URL должна быть строка <ph name="SEARCH_TERM_MARKER" />, которая во время отправки запроса заменяется на текст пользователя.
 
       URL поисковой системы Google можно указать так: <ph name="GOOGLE_SEARCH_URL" />.</translation>
+<translation id="7894185046683379696">Позволяет указать время бездействия в миллисекундах, через которое экран будет заблокирован при работе от сети или батареи. Значения не могут превышать периода бездействия, указанного в правиле <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
+
+      Если значение равно нулю, <ph name="PRODUCT_OS_NAME" /> не будет блокировать экран в режиме бездействия. Если правило не настроено, используется значение по умолчанию.
+
+      Совет. Включите функцию блокировки экрана при переходе в спящий режим и настройте в <ph name="PRODUCT_OS_NAME" /> переход в этот режим по истечении заданного периода бездействия. Используйте это правило, только если блокировка экрана должна включаться намного раньше перехода в спящий режим или если переход в спящий режим при бездействии не требуется вообще.</translation>
 <translation id="7895553628261067384">Удаленный доступ</translation>
 <translation id="7902040092815978832">Показывать цифровую клавиатуру при вводе пароля</translation>
 <translation id="7904177352786629708">Если правило включено, поиск записи CNAME выполняться не будет. Будет использоваться имя сервера, введенное при создании SPN Kerberos.
@@ -4565,6 +4585,9 @@
           Если правило включено, список определяемых им аккаунтов добавляется в соответствующие настройки Kerberos.
 
           Если правило не настроено или отключено, аккаунты не вносятся в соответствующие настройки Kerberos, а уже добавленные – удаляются. Пользователи по-прежнему могут вручную добавлять аккаунты, если включено правило "Разрешить пользователям добавлять аккаунты Kerberos".</translation>
+<translation id="8078297389450285582">Если правило включено или не настроено, применяется интеллектуальная модель затемнения, которая может откладывать время до затемнения экрана. При необходимости она продлевает время до затемнения, блокировки и выключения экрана.
+
+      Если правило отключено, время до затемнения экрана не меняется.</translation>
 <translation id="8099880303030573137">Задержка перехода в спящий режим при работе от батареи</translation>
 <translation id="8101381354936029836">Мини-группа правила:</translation>
 <translation id="8101937907822293485">Включает отправку анонимных отчетов об использовании и сбоях <ph name="PRODUCT_NAME" /> в Google и запрещает пользователям менять этот параметр.
@@ -4696,6 +4719,11 @@
       Если правило не задано, запрашивать доступ разрешено, но пользователи могут изменить эту настройку.</translation>
 <translation id="8274603902181597201">Заменить исходный каталог пользователя, зашифрованный с помощью ecryptfs, каталогом, зашифрованным с помощью ext4</translation>
 <translation id="8284296539558710573">Междоменные запросы аутентификации HTTP</translation>
+<translation id="8284527236880877730">Если правило <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> отключено, параметр <ph name="PRESENTATION_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" /> определяет, на сколько процентов увеличивается время до затемнения экрана при показе презентации. Пропорционально этому значению меняется время до отключения и блокировки экрана и период отсутствия активности.
+
+      Если правило не настроено, используется значение по умолчанию.
+
+      Примечание. Значение должно составлять не менее 100 %.</translation>
 <translation id="8285435910062771358">Полноэкранная лупа включена</translation>
 <translation id="8288199156259560552">Позволяет использовать сервис геолокации Google</translation>
 <translation id="8290875622178450531">Включает специальную возможность – голосовой ввод.
@@ -4763,13 +4791,6 @@
 <translation id="8371178326720637170">Разрешает управляемым расширениям использовать Enterprise Hardware Platform API</translation>
 <translation id="8375817202037102567">Блокировать на этих сайтах доступ для записи к файлам и каталогам</translation>
 <translation id="8379317372795444261"><ph name="BASIC_AUTH" /> аутентификация при подключении по HTTP разрешена</translation>
-<translation id="8380490658357556620">Разрешает использование серверов ретрансляции при попытке подключения удаленных клиентов к этому компьютеру.
-
-          Если параметр включен, удаленные клиенты смогут устанавливать соединение с компьютером через серверы ретрансляции, когда не удается подключиться напрямую, например из-за ограничений брандмауэра.
-
-          Если параметр <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> отключен, это правило игнорируется.
-
-          Если правило не настроено, использование серверов ретрансляции будет разрешено.</translation>
 <translation id="838056554726401140">Список URL, для которых будет действовать правило <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Это правило не действует в отношении параметров автоматического открытия, заданных пользователями.
 
       Если правило настроено, файлы будут открываться автоматически только при условии, что URL включен в этот список и данный тип файла указан в правиле <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Если хотя бы одно из условий не выполняется, скачанный файл не будет открыт автоматически.
@@ -4941,9 +4962,6 @@
       Если для правила выбрано значение True, работа вкладок, которые были открыты в фоновом режиме 5 минут или дольше, может быть остановлена. Это позволит сократить использование памяти, а также ресурсов ЦП и батареи. На основе эвристических алгоритмов определяются вкладки, на которых в фоновом режиме выполняются полезные операции (например, отображаются уведомления, играет музыка или воспроизводится видео). <ph name="PRODUCT_NAME" /> не останавливает работу таких вкладок. Веб-разработчики могут также запретить остановку вкладок, на которых открыт их сайт (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Если выбрано значение False, вкладки всегда работают.</translation>
-<translation id="8622378389102774881">Если правило включено, то для подключения хост удаленного доступа потребует от клиента токен, полученный по указанному URL. Правило используется совместно с RemoteAccessHostTokenValidationUrl.
-
-          Эта функция недоступна, если правило не задано или URL не указан.</translation>
 <translation id="8631434304112909927">до версии <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">Список приложений для заметок, которые могут работать на заблокированном экране <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="8649763579836720255">Для получения сертификата, подтверждающего разрешение воспроизводить премиум-контент на устройствах с Chrome OS, Центр сертификации может проводить удаленную проверку (подтверждение права доступа). В рамках проверки в Центр сертификации Chrome OS отправляется информация об аппаратной части устройства, позволяющая определить его уникальный код.
@@ -5038,9 +5056,19 @@
 
       Вы также можете ознакомиться со списком переменных ( https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables ).</translation>
 <translation id="8777369558049831576">Показывать флажок "Запускать всегда" в диалоговом окне внешнего протокола</translation>
+<translation id="8786409859071107656">Если правило настроено, включен режим подачи энергии через USB-порт, предназначенный для зарядки других устройств.
+
+      На некоторых устройствах есть специальный USB-порт со значком молнии или батареи, позволяющий заряжать другие устройства от системного аккумулятора. С помощью данного правила можно указать, как этот порт должен работать, когда система выключена или находится в спящем режиме. Правило не влияет на остальные USB-порты, а также на возможность зарядки устройств при включенной и активной системе, когда энергия и так подается через USB-порт.
+
+      Если система находится в спящем режиме, этот USB-порт подает энергию при условии, что устройство подключено к розетке или его батарея заряжена более чем на 50 %. Когда система выключена, этот USB-порт подает энергию при условии, что устройство подключено к розетке.
+
+      Если правило отключено, энергия подаваться не будет.
+
+      Когда правило не настроено, оно включено по умолчанию и пользователи не могут его отключить.</translation>
 <translation id="8798099450830957504">По умолчанию</translation>
 <translation id="8800453707696044281">Установить уровень заряда в процентах, при котором будет прекращаться зарядка</translation>
 <translation id="8801680448782904838">Уведомлять пользователя о том, что рекомендуется или требуется перезапустить браузер или устройство</translation>
+<translation id="8816671955985738552">Запретить пользователям SAML менять пароль на странице chrome://password-change во время сеанса</translation>
 <translation id="8817960019535659860">Запретить использование специальных предложений при регистрации Chrome OS</translation>
 <translation id="8818173863808665831">Отправка сведений о географическом местоположении устройства.
 
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index e3cb5ae..afafb8f 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">ให้ผู้ใช้เลือกที่จะใช้บริการของ Google แบบไม่ระบุตัวตนเพื่อให้คำอธิบายอัตโนมัติสำหรับรูปภาพที่ไม่มีป้ายกำกับ</translation>
 <translation id="1087437665304381368">นโยบายนี้ควบคุมโหมดนักพัฒนาซอฟต์แวร์ของ <ph name="PRODUCT_OS_NAME" /> เท่านั้น หากคุณต้องการป้องกันการเข้าถึงตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ Android ก็จะต้องตั้งค่านโยบาย <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /></translation>
 <translation id="1087707496788636333">เรากำลังย้ายรายการนโยบายของ Chrome Enterprise โปรดอัปเดตบุ๊กมาร์กเป็น <ph name="POLICY_DOCUMENTATION_URL" /></translation>
-<translation id="1093082332347834239">หากเปิดใช้การตั้งค่านี้ ระบบจะเรียกใช้โฮสต์ความช่วยเหลือระยะไกลในการดำเนินการที่มีสิทธิ์ <ph name="UIACCESS_PERMISSION_NAME" /> ซึ่งจะทำให้ผู้ใช้ระยะไกลโต้ตอบกับหน้าต่างที่ลอยอยู่บนเดสก์ท็อปของผู้ใช้ในเครื่องได้
-
-          หากปิดใช้การตั้งค่านี้หรือไม่ได้กำหนดค่าไว้ โฮสต์ความช่วยเหลือระยะไกลจะทำงานในบริบทของผู้ใช้และผู้ใช้ระยะไกลจะไม่สามารถโต้ตอบกับหน้าต่างที่ลอยอยู่บนเดสก์ท็อป</translation>
 <translation id="1095209545735032039">บล็อก Serial API ในเว็บไซต์เหล่านี้</translation>
 <translation id="1096105751829466145">ผู้ให้บริการการค้นหาเริ่มต้น</translation>
 <translation id="1099282607296956954">เปิดใช้การแยกเว็บไซต์สำหรับทุกเว็บไซต์</translation>
@@ -638,9 +635,6 @@
 <translation id="2040479044912658454">โหมดการแรสเตอร์งานพิมพ์</translation>
 <translation id="2043749682619281558">เปิดใช้ฟีเจอร์การไฮไลต์เคอร์เซอร์ในหน้าจอการเข้าสู่ระบบ</translation>
 <translation id="2043770014371753404">เครื่องพิมพ์ขององค์กรที่มีการปิดใช้</translation>
-<translation id="2050629715135525072">ควบคุมความสามารถในการโอนไฟล์ระหว่างไคลเอ็นต์และโฮสต์ของผู้ใช้ที่เชื่อมต่อกับโฮสต์สำหรับการเข้าถึงระยะไกล นโยบายนี้ไม่มีผลกับการเชื่อมต่อความช่วยเหลือระยะไกล ซึ่งไม่รองรับการโอนไฟล์
-
-          หากปิดใช้การตั้งค่านี้ ระบบจะไม่อนุญาตให้โอนไฟล์ หากเปิดใช้การตั้งค่านี้หรือไม่ได้ตั้งค่า ระบบจะอนุญาตให้โอนไฟล์ได้</translation>
 <translation id="2057317273526988987">อนุญาตให้เข้าถึงรายการ URL</translation>
 <translation id="2061810934846663491">กำหนดค่าชื่อโดเมนที่จำเป็นสำหรับโฮสต์การเข้าถึงระยะไกล</translation>
 <translation id="2069350366303315077">การตั้งค่านโยบายเป็น "เปิดใช้" หมายความว่า <ph name="PRODUCT_NAME" /> จะบังคับใช้เซสชันผู้เยี่ยมชมและป้องกันการลงชื่อเข้าใช้โปรไฟล์ การลงชื่อเข้าใช้ของผู้เยี่ยมชมเป็นโปรไฟล์ <ph name="PRODUCT_NAME" /> ซึ่งมีหน้าต่างอยู่ในโหมดไม่ระบุตัวตน
@@ -1130,13 +1124,6 @@
 <translation id="2801065672151277034">การตั้งค่าการจัดการใบรับรอง</translation>
 <translation id="2801155097555584385">ตั้งค่าการเริ่มชาร์จแบตเตอรี่ที่กำหนดเองเป็นเปอร์เซ็นต์</translation>
 <translation id="2805707493867224476">อนุญาตให้ไซต์ทั้งหมดแสดงป๊อปอัป</translation>
-<translation id="2808013382476173118">เปิดใช้เซิร์ฟเวอร์ STUN เมื่อไคลเอ็นต์ระยะไกลพยายามสร้างการเชื่อมต่อกับเครื่องนี้
-
-          หากเปิดใช้การตั้งค่านี้ ไคลเอ็นต์ระยะไกลจะสามารถค้นพบและเชื่อมต่อกับเครื่องนี้แม้ว่าจะถูกกั้นโดยไฟร์วอลล์
-
-          หากปิดใช้การตั้งค่านี้และไฟร์วอลล์กรองการเชื่อมต่อ UDP ขาออก เครื่องนี้จะอนุญาตการเชื่อมต่อจากเครื่องไคลเอ็นต์ภายใน LAN เท่านั้น
-
-          หากไม่กำหนดค่านโยบายนี้ จะมีการเปิดใช้การตั้งค่า</translation>
 <translation id="2813281962735757923">นโยบายนี้ควบคุมช่วงเวลาที่ไม่อนุญาตให้ <ph name="PRODUCT_OS_NAME" /> ตรวจหาอัปเดตโดยอัตโนมัติ
       เมื่อตั้งค่านโยบายนี้ด้วยช่วงเวลาที่ไม่ใช่รายการที่ว่างเปล่า สิ่งที่จะเกิดขึ้นมีดังนี้
       อุปกรณ์จะตรวจหาอัปเดตโดยอัตโนมัติไม่ได้ระหว่างช่วงเวลาที่ระบุ อุปกรณ์ที่ต้องย้อนกลับเวอร์ชันหรือมีเวอร์ชัน <ph name="PRODUCT_OS_NAME" /> ต่ำกว่าขั้นต่ำจะไม่ได้รับผลกระทบจากนโยบายนี้เพราะอาจมีปัญหาความปลอดภัย นอกจากนี้ นโยบายนี้จะไม่บล็อกการตรวจหาอัปเดตที่ผู้ใช้หรือผู้ดูแลระบบขอ
@@ -1740,9 +1727,6 @@
       การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่าจะทำให้อุปกรณ์ที่ลงทะเบียนไว้ไม่รายงานสถิติ</translation>
 <translation id="3736879847913515635">เปิดใช้การเพิ่มบุคคลในการจัดการผู้ใช้</translation>
 <translation id="3750220015372671395">บล็อกการสร้างคีย์ในเว็บไซต์เหล่านี้</translation>
-<translation id="375266612405883748">จำกัดช่วงพอร์ต UDP ที่โฮสต์การเข้าถึงระยะไกลในเครื่องนี้ใช้
-
-          หากไม่ได้ตั้งค่านโยบายหรือตั้งค่าเป็นสตริงว่าง โฮสต์การเข้าถึงระยะไกลจะได้รับอนุญาตให้ใช้พอร์ตใดก็ได้ที่ว่างอยู่ เว้นแต่ว่าจะมีการปิดใช้นโยบาย <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> ซึ่งในกรณีนี้ โฮสต์การเข้าถึงระยะไกลจะใช้พอร์ต UDP ในช่วง 12400-12409</translation>
 <translation id="3755237588083934849">การตั้งค่านโยบายจะกำหนดความถี่ในการส่งการอัปโหลดสถานะอุปกรณ์เป็นมิลลิวินาที ค่าขั้นต่ำที่อนุญาตคือ 60 วินาที
 
       หากไม่ได้ตั้งค่า ระบบจะใช้ช่วงเวลาเริ่มต้น 3 ชั่วโมง</translation>
@@ -2071,11 +2055,6 @@
           หากคุณตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนหรือลบล้างไม่ได้
 
           หากไม่มีการตั้งค่านโยบายนี้ ระบบจะปิดฟีเจอร์คลิกอัตโนมัติในขั้นต้น แต่ผู้ใช้เปิดใช้ได้ทุกเมื่อ</translation>
-<translation id="4214536984333857724">หากเปิดใช้การตั้งค่านี้ คำขอการตรวจสอบสิทธิ์ gnubby จะทำผ่านพร็อกซีในการเชื่อมต่อโฮสต์ระยะไกล
-
-          โปรดทราบว่าฟีเจอร์นี้ต้องใช้คอมโพเนนต์เพิ่มเติมซึ่งไม่มีให้บริการนอกระบบเครือข่ายของ Google จึงจะทำงานได้อย่างถูกต้อง
-
-          หากปิดใช้การตั้งค่านี้ คำขอการตรวจสอบสิทธิ์ gnubby จะไม่ทำผ่านพร็อกซี</translation>
 <translation id="4224610387358583899">การหน่วงเวลาในการล็อกหน้าจอ</translation>
 <translation id="4225260426043444650">การตั้งค่านี้อนุญาตให้ผู้ใช้สามารถใช้เบราว์เซอร์ <ph name="LACROS_NAME" /> ได้
 
@@ -2248,9 +2227,6 @@
       สำหรับ <ph name="PRODUCT_NAME" /> นโยบายนี้จะมีผลเมื่อลงทะเบียนเครื่องกับ <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> เท่านั้น
       และสำหรับ <ph name="PRODUCT_OS_NAME" /> นโยบายนี้จะมีผลเสมอ</translation>
 <translation id="4578265298946081589">ไม่ต้องรีบูตเมื่อผู้ใช้ออกจากระบบ</translation>
-<translation id="4578912515887794133">หากเปิดใช้การตั้งค่านี้ โฮสต์การเข้าถึงระยะไกลจะเปรียบเทียบชื่อของผู้ใช้ในเครื่อง (ที่เชื่อมโยงกับโฮสต์) กับชื่อบัญชี Google ที่ลงทะเบียนเป็นเจ้าของโฮสต์ (เช่น "johndoe" หากเจ้าของโฮสต์คือบัญชี Google "johndoe@example.com")  โฮสต์การเข้าถึงระยะไกลจะไม่เริ่มหากชื่อของเจ้าของโฮสต์แตกต่างจากชื่อผู้ใช้ในเครื่องที่เชื่อมโยงกับโฮสต์  ควรใช้นโยบาย RemoteAccessHostMatchUsername ร่วมกับ RemoteAccessHostDomain เพื่อยืนยันให้บัญชี Google ของเจ้าของโฮสต์เชื่อมโยงกับโดเมนที่เจาะจง (นั่นคือ "example.com") ด้วย
-
-          หากปิดใช้การตั้งค่านี้หรือไม่ได้ตั้งค่า โฮสต์การเข้าถึงระยะไกลจะเชื่อมโยงกับผู้ใช้ในเครื่องรายใดก็ได้</translation>
 <translation id="4587365491100112056">การตั้งค่านโยบายจะระบุอายุการใช้งาน (เป็นชั่วโมง) ของแคชข้อมูลการตรวจสอบสิทธิ์ ซึ่งมีข้อมูลเกี่ยวกับขอบเขตที่ขอบเขตของเครื่องเชื่อถือ (ขอบเขตที่เชื่อมโยง) การแคชข้อมูลการตรวจสอบสิทธิ์จึงช่วยให้ลงชื่อเข้าใช้ได้เร็วขึ้น จะไม่มีการแคชข้อมูลที่ระบุตัวผู้ใช้และข้อมูลสำหรับขอบเขตที่ไม่เชื่อมโยง
 
       การตั้งค่านโยบายเป็น 0 จะปิดการแคชข้อมูลการตรวจสอบสิทธิ์ ซึ่งทำให้ระบบต้องดึงข้อมูลที่เจาะจงขอบเขตทุกครั้งที่มีการลงชื่อเข้าใช้ การปิดการแคชข้อมูลการตรวจสอบสิทธิ์จึงจะทำให้ผู้ใช้ลงชื่อเข้าใช้ได้ช้าลงอย่างมาก
@@ -2393,15 +2369,6 @@
 <translation id="487460824085252184">ย้ายข้อมูลอัตโนมัติโดยไม่ขอคำยินยอมจากผู้ใช้</translation>
 <translation id="4874982543810021567">บล็อก WebUSB ในเว็บไซต์เหล่านี้</translation>
 <translation id="4876805738539874299">เปิดใช้เวอร์ชันสูงสุดของ SSL ไว้</translation>
-<translation id="487928067861956387">กำหนดค่าชื่อโดเมนของโฮสต์ที่จำเป็นซึ่งจะกำหนดให้กับโฮสต์การเข้าถึงจากระยะไกล และป้องกันไม่ให้ผู้ใช้เปลี่ยนแปลงชื่อ
-
-          หากเปิดใช้การตั้งค่านี้และตั้งค่าเป็นโดเมน 1 รายการขึ้นไป ระบบจะแชร์โฮสต์ได้ต่อเมื่อใช้บัญชีที่ลงทะเบียนในชื่อโดเมนที่ระบุไว้เท่านั้น
-
-          หากปิดใช้การตั้งค่านี้ ไม่ได้ตั้งค่า หรือตั้งค่าเป็นรายการว่างเปล่า ระบบจะแชร์โฮสต์โดยใช้บัญชีใดก็ได้
-
-          การตั้งค่านี้จะลบล้าง <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" /> หากมี
-
-          ดู <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" /> เพิ่มเติม</translation>
 <translation id="4887274746092315609">เปิดใช้หน้าสำหรับการเปลี่ยนรหัสผ่านในเซสชันของผู้ใช้ SAML</translation>
 <translation id="4892647988357350237">โดยค่าเริ่มต้น ข้อกำหนดในการให้บริการจะแสดงเมื่อเรียกใช้ CCT ครั้งแรก การตั้งค่านโยบายนี้เป็น <ph name="SKIP_TOS_DIALOG" /> จะทำให้กล่องโต้ตอบข้อกำหนดในการให้บริการไม่แสดงขึ้นมาในระหว่างการเรียกใช้ครั้งแรกหรือการเรียกใช้ครั้งต่อๆ ไป การตั้งค่านโยบายนี้เป็น <ph name="STANDARD_TOS_DIALOG" /> หรือไม่ได้ตั้งค่าจะทำให้กล่องโต้ตอบข้อกำหนดในการให้บริการแสดงขึ้นมาในระหว่างการเรียกใช้ครั้งแรก ข้อสำคัญอื่นๆ ได้แก่
 
@@ -2661,15 +2628,6 @@
 
       ในที่นี้ คำว่า "เวอร์ชัน" อาจหมายถึงเวอร์ชันที่เจาะจง เช่น "61.0.3163.120" หรือตัวเลขนำหน้าเวอร์ชัน เช่น "61.0"  </translation>
 <translation id="5247006254130721952">บล็อกการดาวน์โหลดที่อันตราย</translation>
-<translation id="5249303875508803168">กำหนดค่าชื่อโดเมนของไคลเอ็นต์ที่จำเป็น ซึ่งจะกำหนดให้กับไคลเอ็นต์การเข้าถึงระยะไกลและป้องกันไม่ให้ผู้ใช้เปลี่ยนชื่อโดเมน
-
-          หากเปิดใช้การตั้งค่านี้และตั้งค่าเป็นโดเมน 1 รายการขึ้นไป จะมีเฉพาะไคลเอ็นต์จากโดเมนที่ระบุที่เชื่อมต่อกับโฮสต์ได้
-
-          หากปิดใช้การตั้งค่านี้ ไม่ได้ตั้งค่า หรือตั้งค่าเป็นรายการว่างเปล่า ระบบจะใช้นโยบายเริ่มต้นของการเชื่อมต่อประเภทนั้นๆ สำหรับความช่วยเหลือระยะไกล ระบบจะอนุญาตให้ไคลเอ็นต์จากโดเมนต่างๆ เชื่อมต่อกับโฮสต์ได้ สำหรับการเข้าถึงระยะไกลได้ตลอดเวลา จะมีเฉพาะเจ้าของโฮสต์ที่เชื่อมต่อได้
-
-          การตั้งค่านี้จะลบล้าง <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" /> หากมี
-
-          ดู <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" /> เพิ่มเติม</translation>
 <translation id="5249453807420671499">ผู้ใช้เพิ่มบัญชี Kerberos ได้</translation>
 <translation id="5252995168844634755">การตั้งค่านโยบายเป็น "จริง" จะเปิดเดสก์ท็อปแบบรวมหลายหน้าจอซึ่งอนุญาตให้แอปพลิเคชันต่างๆ ขยายไปยังหลายหน้าจอได้ ผู้ใช้จะปิดใช้เดสก์ท็อปแบบรวมหลายหน้าจอสำหรับหน้าจอบางหน้าได้
 
@@ -2807,11 +2765,6 @@
 <translation id="5390083518957894426">เปิดใช้การตรวจสอบสิทธิ์อีกครั้งทางออนไลน์ในหน้าจอล็อกสำหรับผู้ใช้ SAML</translation>
 <translation id="5391388690191341203">บัญชีภายในอุปกรณ์สำหรับการเข้าสู่ระบบอัตโนมัติ</translation>
 <translation id="5393009997533871906">มีเฉพาะเครื่องพิมพ์ในรายการที่อนุญาตเท่านั้นที่จะแสดงต่อผู้ใช้</translation>
-<translation id="5395271912574071439">เปิดใช้งานการปิดม่านโฮสต์การเข้าถึงระยะไกลในขณะอยู่ระหว่างการเชื่อมต่อ
-
-          หากเปิดใช้งานการตั้งค่านี้อยู่ ตัวอุปกรณ์อินพุตและเอาต์พุตของโฮสต์จะถูกปิดการใช้งานในขณะอยู่ระหว่างการเชื่อมต่อระยะไกล
-
-          หากปิดการใช้งานการตั้งค่านี้อยู่หรือไม่ได้ตั้งค่าเอาไว้ ทั้งผู้ใช้ในท้องถิ่นและผู้ใช้จากระยะไกลจะสามารถโต้ตอบกับโฮสต์ได้เมื่อโฮสต์ถูกใช้งานร่วมกัน</translation>
 <translation id="5401696449591951427">เปิดใช้ <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">กำหนดค่ารูปแบบแป้นพิมพ์ที่อนุญาตให้ใช้ในหน้าจอการลงชื่อเข้าใช้ของ <ph name="PRODUCT_OS_NAME" />
 
@@ -3440,9 +3393,6 @@
 <translation id="6401669939808766804">ออกจากระบบให้ผู้ใช้</translation>
 <translation id="640244877779556713">เปิดใช้คำแนะนำอีโมจิ</translation>
 <translation id="6407093060083181305">กำหนดค่ารายการที่บล็อกสำหรับการติดตั้งส่วนขยาย</translation>
-<translation id="6408233796253901198">หากมีการตั้งค่านโยบายนี้ โฮสต์การเข้าถึงจากระยะไกลจะใช้ URL นี้ในการตรวจสอบโทเค็นการตรวจสอบสิทธิ์จากไคลเอ็นต์การเข้าถึงจากระยะไกลเพื่อยอมรับการเชื่อมต่อ ต้องใช้ร่วมกับ RemoteAccessHostTokenUrl
-
-          หากปล่อยว่างไว้หรือไม่ได้ตั้งค่า ระบบจะปิดใช้ฟีเจอร์นี้</translation>
 <translation id="6417265370957905582">Google Assistant</translation>
 <translation id="6422575351619065453">ในโหมดคีออสก์ นโยบายนี้ควบคุมว่าเมนูการช่วยเหลือพิเศษแบบลอยจะแสดงหรือไม่
 
@@ -4085,9 +4035,6 @@
       การตั้งค่านโยบายเป็น "ปิดใช้" หรือไม่ได้ตั้งค่าหมายความว่า ระบบจะไม่สนใจนโยบาย KDC ในแพลตฟอร์มที่รองรับ และจะดำเนินการตาม <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> เท่านั้น
 
       ใน <ph name="MS_WIN_NAME" /> ระบบจะดำเนินการตามนโยบาย KDC เสมอ</translation>
-<translation id="7273823081800296768">หากการตั้งค่านี้เปิดใช้งานหรือไม่ได้กำหนดค่า ผู้ใช้สามารถเลือกที่จะจับคู่ลูกค้าและโฮสต์ในเวลาเชื่อมต่อ โดยไม่จำเป็นต้องป้อน PIN ทุกครั้ง
-
-          หากการตั้งค่านี้ถูกปิดใช้งาน ฟีเจอร์นี้จะไม่สามารถใช้ได้</translation>
 <translation id="7274077256421167535">เปิดใช้การแชร์พลังงานผ่าน USB</translation>
 <translation id="7275334191706090484">บุ๊กมาร์กที่มีการจัดการ</translation>
 <translation id="7278854311116092134">ชื่อของโฮสต์การรับส่งข้อความดั้งเดิมที่จะยกเว้นจากรายการที่บล็อก</translation>
@@ -4221,9 +4168,6 @@
 
       นโยบายนี้เลิกใช้งานไปแล้ว โปรดใช้ <ph name="PRINTERS_POLICY_NAME" /> แทน
       </translation>
-<translation id="7504632989711326175">หากตั้งค่านโยบายนี้ โฮสต์จะใช้ใบรับรองไคลเอ็นต์ที่มีผู้ออกใบรับรอง CN ที่กำหนดเพื่อตรวจสอบสิทธิ์ RemoteAccessHostTokenValidationUrl ตั้งค่าเป็น "*" เพื่อใช้ใบรับรองไคลเอ็นต์ทั้งหมดที่ใช้งานได้
-
-          หากปล่อยว่างไว้หรือไม่ได้ตั้งค่า ระบบจะปิดใช้ฟีเจอร์นี้</translation>
 <translation id="7506745375479451616">นโยบายนี้จะควบคุมคำสั่งที่จะใช้เปิดใน <ph name="PRODUCT_NAME" /> เมื่อเปลี่ยนมาจาก <ph name="IE_PRODUCT_NAME" /> นโยบายนี้จะตั้งค่าเป็นเส้นทางไฟล์ที่สั่งการได้หรือ <ph name="PRODUCT_NAME_PLACEHOLDER" /> เพื่อตรวจหาตำแหน่งของ <ph name="PRODUCT_NAME" /> โดยอัตโนมัติ
 
       การไม่ตั้งค่านโยบายนี้หมายความว่า <ph name="IE_PRODUCT_NAME" /> จะตรวจหาเส้นทางสั่งการของ <ph name="PRODUCT_NAME" /> เองโดยอัตโนมัติเมื่อเปิด <ph name="PRODUCT_NAME" /> จาก Internet Explorer
@@ -4829,13 +4773,6 @@
 <translation id="8371178326720637170">อนุญาตให้ส่วนขยายที่มีการจัดการใช้ Enterprise Hardware Platform API</translation>
 <translation id="8375817202037102567">บล็อกสิทธิ์การเข้าถึงในการเขียนไฟล์และไดเรกทอรีในเว็บไซต์เหล่านี้</translation>
 <translation id="8379317372795444261">อนุญาตการตรวจสอบสิทธิ์<ph name="BASIC_AUTH" />ในการเชื่อมต่อผ่าน HTTP</translation>
-<translation id="8380490658357556620">เปิดใช้รีเลย์เซิร์ฟเวอร์เมื่อไคลเอ็นต์ระยะไกลพยายามสร้างการเชื่อมต่อกับเครื่องนี้
-
-          หากเปิดใช้การตั้งค่านี้ ไคลเอ็นต์ระยะไกลจะใช้รีเลย์เซิร์ฟเวอร์เพื่อเชื่อมต่อกับเครื่องนี้เมื่อเชื่อมต่อโดยตรงไม่ได้ (เช่น เนื่องจากข้อจำกัดด้านไฟร์วอลล์)
-
-          โปรดทราบว่าหากปิดใช้นโยบาย <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> ระบบจะไม่สนใจนโยบายนี้
-
-          หากไม่กำหนดค่านโยบายนี้ ระบบจะเปิดใช้การตั้งค่า</translation>
 <translation id="838056554726401140">รายการ URL ที่ระบุ URL ที่จะใช้กับ <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> นโยบายนี้ไม่มีผลต่อค่าที่เปิดโดยอัตโนมัติที่ผู้ใช้กำหนดไว้
 
       หากตั้งค่านโยบายนี้ไว้ ไฟล์จะเปิดโดยอัตโนมัติด้วยนโยบายเฉพาะเมื่อ URL นั้นอยู่ในชุดนี้ และมีประเภทไฟล์อยู่ใน <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> หากเงื่อนไขเป็น "เท็จ" ไฟล์ที่ดาวน์โหลดจะไม่เปิดโดยอัตโนมัติด้วยนโยบาย
@@ -5007,9 +4944,6 @@
       หากตั้งค่านโยบายนี้เป็น "จริง" ระบบอาจระงับแท็บที่ทำงานมาอย่างน้อย 5 นาทีในเบื้องหลัง การระงับแท็บจะช่วยลดการใช้งาน CPU, แบตเตอรี่ และหน่วยความจำ <ph name="PRODUCT_NAME" /> ใช้การเรียนรู้เพื่อหลีกเลี่ยงการระงับแท็บที่ทำงานในเบื้องหลังที่มีประโยชน์ (เช่น แสดงการแจ้งเตือน เล่นเสียง สตรีมวิดีโอ) ทั้งนี้ นักพัฒนาเว็บเลือกไม่ใช้การระงับกับเว็บไซต์ของตนได้ (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md)
 
       หากตั้งค่านโยบายนี้เป็น "เท็จ" ระบบจะไม่ระงับแท็บใดๆ ทั้งสิ้น</translation>
-<translation id="8622378389102774881">หากตั้งค่านโยบายนี้ โฮสต์การเข้าถึงระยะไกลจะต้องมีการตรวจสอบสิทธิ์ไคลเอ็นต์เพื่อรับโทเค็นการตรวจสอบสิทธิ์จาก URL นี้จึงจะเชื่อมต่อได้ ต้องใช้ร่วมกับ RemoteAccessHostTokenValidationUrl
-
-          หากปล่อยว่างไว้หรือไม่ได้ตั้งค่า ระบบจะปิดใช้ฟีเจอร์นี้</translation>
 <translation id="8631434304112909927">จนถึงรุ่น <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">รายการแอปสำหรับจดโน้ตที่อนุญาตในหน้าจอล็อกของ <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="8649763579836720255">อุปกรณ์ Chrome OS สามารถใช้การรับรองจากระยะไกล (การเข้าถึงที่ยืนยันแล้ว) เพื่อรับใบรับรองที่ออกโดย Chrome OS CA ที่รับรองว่าอุปกรณ์มีสิทธิ์เล่นเนื้อหาที่ได้รับความคุ้มครอง  ขั้นตอนนี้เกี่ยวข้องกับการส่งข้อมูลการรับรองฮาร์ดแวร์ไปยัง Chrome OS CA ที่ระบุอุปกรณ์โดยไม่ซ้ำกัน
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index 5dc7fe76a..f52dd70 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Kullanıcıların, etiketlenmemiş resimlerin otomatik açıklamalarını sağlayan anonim bir Google hizmeti kullanmayı seçmelerine olanak tanı</translation>
 <translation id="1087437665304381368">Bu politika yalnızca <ph name="PRODUCT_OS_NAME" /> geliştirici modunu kontrol eder. Android Geliştirici Seçenekleri'ne erişimi engellemek isterseniz <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /> politikasını ayarlamanız gerekir.</translation>
 <translation id="1087707496788636333">Chrome Enterprise politika listesinin yeri değişiyor! Lütfen yer işaretlerinizi <ph name="POLICY_DOCUMENTATION_URL" /> adresi ile güncelleyin.</translation>
-<translation id="1093082332347834239">Bu ayar etkinleştirilirse uzaktan yardım ana makinesi bir işlemde <ph name="UIACCESS_PERMISSION_NAME" /> izinleriyle çalıştırılır. Bu durum, uzak kullanıcıların yerel kullanıcının masaüstünde yükseltilmiş pencerelerle etkileşimde bulunmasına olanak tanır.
-
-          Bu ayar devre dışı bırakılır veya yapılandırılmazsa uzaktan yardım ana makinesi, kullanıcının içeriğinde çalışır ve uzak kullanıcılar, masaüstündeki yükseltilmiş pencerelerle etkileşimde bulunamaz.</translation>
 <translation id="1095209545735032039">Bu sitelerde Serial API'sini engelle</translation>
 <translation id="1096105751829466145">Varsayılan arama sağlayıcı</translation>
 <translation id="1099282607296956954">Site İzolasyonu'nu her site için etkinleştirme</translation>
@@ -216,6 +213,7 @@
 <translation id="1393485621820363363">Etkinleştirilmiş kurumsal cihaz yazıcıları</translation>
 <translation id="1397855852561539316">Arama önerileri için varsayılan arama sağlayıcı URL'si</translation>
 <translation id="1413936351612032792">Linux uygulamalarının kullanımıyla ilgili bilgileri raporla</translation>
+<translation id="1418387035898607074">Güvenilir kaynaklardan indirilen dosyalar için Güvenli Tarama kontrollerini atla</translation>
 <translation id="142346659686073702">Bağlı olmayan kullanıcıların Crostini'yi kullanmasına izin verir</translation>
 <translation id="1425551776320718592">Bu cihaz kullanıcılarının, Powerwash işlemini zorlamadan, cihazı güvenlik açısından şüpheli bir durumda bırakabilecek ADB başka cihazdan yükleme işlevini kullanmalarını engelleyin.</translation>
 <translation id="1426170570389588560">Yazdırma işleri meta verilerinin saklanacağı dönemi gün cinsinden ayarla</translation>
@@ -433,9 +431,15 @@
       Politikayı False (Yanlış) değerine ayarlamak, kullanıcıların yer işaretleri eklemelerine, kaldırmalarına veya bunları değiştirmelerine izin verilmediği anlamına gelir. Mevcut yer işaretlerini kullanmaya devam edebilirler.</translation>
 <translation id="1715151459541210849">Dikte erişilebilirlik özelliğini etkinleştir</translation>
 <translation id="172374442286684480">Tüm sitelerin yerel verileri ayarlamasına izin verme</translation>
+<translation id="1729169799290004131">Politika ayarlandığında otomatik parlaklık özellikleri devre dışı bırakılır ve ekran parlaklığı yüzdesi belirtilir. Başlangıçtaki ekran parlaklığı, politika değerine ayarlanır, ancak kullanıcılar bunu değiştirebilir.
+
+      Politika ayarlanmadan bırakıldığında kullanıcı ekran kontrolleri veya otomatik parlaklık özellikleri etkilenmez.
+
+      Not: Politika değerleri 0-100 aralığında yüzde olarak belirtilmelidir.</translation>
 <translation id="1736269219679256369">SSL uyarı sayfasından devam etmeye izin ver</translation>
 <translation id="174765717426930019"><ph name="BLANK_PAGE_NAME" /> sayfasını hedefleyerek açılan tüm pop-up'lara, pop-up'ı açmak isteyen sayfayla etkileşimde bulunma izni ver. Bu izin, pop-up'ı açan sayfa böyle bir etkileşimi açıkça devre dışı bırakmadığı sürece verilir. </translation>
 <translation id="1750315445671978749">Tüm indirmeleri engelle</translation>
+<translation id="1755310913456007816">Mevcut online iptali kontrolü ayarlarını kullan</translation>
 <translation id="1760951637494635692">Bu sitelerde Serial API'sine izin ver</translation>
 <translation id="1765512315997108908">Kullanıcıların <ph name="DEVICE_PRINTERS_POLICY_NAME" /> politikasından hangi yazıcıları kullanabileceklerini denetler.
 
@@ -486,6 +490,7 @@
 <translation id="1844972978764975668">Doğru zaman damgası almak için bir Google sunucusuna sorgu göndermeye izin ver</translation>
 <translation id="1845405905602899692">Kiosk ayarları</translation>
 <translation id="1845429996559814839">PIN ile yazdırma modunu kısıtla</translation>
+<translation id="1846545322805269573">Kullanıcılar, Yeni Sekme sayfasının arka planını özelleştiremezler</translation>
 <translation id="1847960418907100918">POST ile anında arama yaparken kullanılan parametreleri belirtir. Virgülle ayrılmış ad/değer çiftlerini içeren bir listeden oluşur. Bir değer, yukarıdaki örnekteki {searchTerms} gibi bir şablon parametresi ise, gerçek arama terimleri verisiyle değiştirilir.
 
           Bu politika isteğe bağlıdır. Ayarlanmazsa, anında arama isteği, GET yöntemi kullanılarak gönderilir.
@@ -549,6 +554,37 @@
 <translation id="1971991630422430420">Politika, Etkin değerine ayarlanırsa Fast Transition, kablosuz erişim noktası tarafından desteklendiğinde kullanılır. Bu, cihazdaki tüm arayüzler ve kullanıcılar için geçerlidir.
 
       Politika, Devre Dışı değerine ayarlanır veya ayarlanmadan bırakılırsa Fast Transition kullanılmaz.</translation>
+<translation id="197744850608781984">Politikanın ayarlanması, kullanıcı işlem yapmadığında güç yönetimi stratejisini kontrol eder.
+
+      4 işlem vardır:
+
+      * Kullanıcı, <ph name="SCREEN_DIM_FIELD_NAME" /> tarafından belirtilen süre boyunca işlem yapmazsa ekran kararır.
+
+      * Kullanıcı, <ph name="SCREEN_OFF_FIELD_NAME" /> tarafından belirtilen süre boyunca işlem yapmazsa ekran kapanır.
+
+      * Kullanıcı, <ph name="IDLE_WARNING_FIELD_NAME" /> tarafından belirtilen süre boyunca işlem yapmazsa bir uyarı iletişim kutusu görüntülenir. Bu iletişim kutusu kullanıcıyı boşta kalma işlemi yapılacağı konusunda uyarır ve boşta kalma işlemi yalnızca oturumu kapatma veya cihazı kapatma olduğunda gösterilir.
+
+      * Boşta ile belirtilen süre boyunca kullanıcı işlem yapmazsa <ph name="IDLE_ACTION_FIELD_NAME" /> tarafından belirtilen işlem yapılır.
+
+      Yukarıdaki işlemlerin her biri için gecikme süresi milisaniye olarak belirtilmelidir ve ilgili işlemin devreye girmesi için sıfırdan büyük bir değere ayarlanmalıdır. Gecikme süresi sıfır olarak ayarlanırsa <ph name="PRODUCT_OS_NAME" />, ilgili işlemi yapmaz.
+
+      Yukarıdaki gecikme sürelerinin her biri için ayarlama yapılmaması durumunda varsayılan değer kullanılır.
+
+      <ph name="SCREEN_DIM_FIELD_NAME" /> değerleri <ph name="SCREEN_OFF_FIELD_NAME" /> süresinin altında veya ona eşit olacak şekilde ayarlanır. <ph name="SCREEN_OFF_FIELD_NAME" /> ve <ph name="IDLE_WARNING_FIELD_NAME" />, Boşta'nın altında veya ona eşit olacak şekilde ayarlanır.
+
+      <ph name="IDLE_ACTION_FIELD_NAME" />, 4 işlemden biri olabilir:
+
+      * <ph name="IDLE_ACTION_ENUM_SUSPEND" />
+
+      * <ph name="IDLE_ACTION_ENUM_LOGOUT" />
+
+      * <ph name="IDLE_ACTION_ENUM_SHUTDOWN" />
+
+      * <ph name="IDLE_ACTION_ENUM_DO_NOTHING" />
+
+      <ph name="IDLE_ACTION_FIELD_NAME" /> ayarlanmazsa <ph name="IDLE_ACTION_ENUM_SUSPEND" /> kabul edilir.
+
+      Not: AC gücü ve pil için farklı ayarlar vardır.</translation>
 <translation id="1988345404999458987">Kullanılabilir yazdırma sunucularının yapılandırmalarını sağlar.
 
       Bu politika, harici yazdırma sunucularının yapılandırmalarını <ph name="PRODUCT_OS_NAME" /> cihazlara JSON dosyası olarak sağlamanıza olanak tanır.
@@ -603,9 +639,6 @@
 <translation id="2040479044912658454">Yazdırmayı Pikselleştirme Modu</translation>
 <translation id="2043749682619281558">Giriş ekranında imleç vurgulamayı etkinleştir</translation>
 <translation id="2043770014371753404">Devre dışı bırakılmış kurumsal yazıcılar</translation>
-<translation id="2050629715135525072">Uzaktan erişim ana makinesine bağlı bir kullanıcının istemci ile ana makine arasında dosya aktarımı yapma imkanını kontrol eder. Bu politika, dosya aktarımını desteklemeyen uzaktan yardım bağlantıları için geçerli değildir.
-
-          Bu ayar devre dışı bırakılırsa dosya aktarımına izin verilmez. Bu ayar etkinleştirilirse veya ayarlanmazsa dosya aktarımına izin verilir.</translation>
 <translation id="2057317273526988987">URL listesine erişimi engelle</translation>
 <translation id="2061810934846663491">Uzaktan erişim ana makineleri için gereken alan adlarını yapılandır</translation>
 <translation id="2069350366303315077">Politika, Etkin değerine ayarlanırsa <ph name="PRODUCT_NAME" />, misafir oturumunu zorunlu kılıp profil ile oturum açma işlemlerini engeller. Misafir oturumları, tüm pencerelerin gizli modda olduğu <ph name="PRODUCT_NAME" /> profilleridir.
@@ -621,6 +654,7 @@
 <translation id="209586405398070749">Mevcut ürün kanalı</translation>
 <translation id="2098658257603918882">Kullanım ve kilitlenme ile ilgili verilerin raporlanmasını etkinleştir</translation>
 <translation id="2104418465060359056">Uzantı ve Eklenti bilgilerini bildirme</translation>
+<translation id="2106166591774188922">chrome://password-change konumunda SAML kullanıcılarının oturum için SAML şifrelerini değiştirmesine izin ver</translation>
 <translation id="2106627642643925514">Varsayılan PIN ile yazdırma modunu geçersiz kılar. Mod kullanılamıyorsa bu politika yoksayılır.</translation>
 <translation id="2107563874993284076">Politika, Etkin değerine ayarlanırsa kullanıcılar, <ph name="PRODUCT_NAME" /> için Ağ Üzerinde Dosya Paylaşımı özelliğini kullanabilirler. Politika, Devre Dışı değerine ayarlanırsa kullanıcılar bu özelliği kullanamazlar.</translation>
 <translation id="2107601598727098402">
@@ -1100,13 +1134,6 @@
 <translation id="2801065672151277034">Sertifika yönetim ayarları</translation>
 <translation id="2801155097555584385">Pil şarjı için özel şarj başlatma değerini yüzde olarak ayarla</translation>
 <translation id="2805707493867224476">Tüm sitelerin pop-up göstermesine izin ver</translation>
-<translation id="2808013382476173118">Uzak istemciler bu makineyle bağlantı kurmaya çalıştığında STUN sunucularının kullanılabilmesini sağlar.
-
-          Bu ayar etkinleştirilirse, uzak istemciler bu makineleri bir güvenlik duvarıyla ayrılmış olsalar bile keşfedebilir ve bu makinelere bağlanabilirler.
-
-          Bu ayar devre dışı bırakılırsa ve giden UDP bağlantıları güvenlik duvarı tarafından filtreleniyorsa, bu makine yalnızca yerel ağ içindeki istemci makinelerden gelen bağlantılara izin verir.
-
-          Bu politika ayarlanmadan bırakılırsa, ayar etkinleşir.</translation>
 <translation id="2813281962735757923">Bu politika, <ph name="PRODUCT_OS_NAME" /> cihazının güncellemeleri otomatik olarak denetlemesine izin verilmeyen zaman aralıklarını kontrol eder.
       Bu politika, boş olmayan bir zaman aralıkları listesine ayarlandığında:
       Cihazlar, belirtilen zaman aralıkları sırasında güncellemeleri otomatik olarak kontrol edemez. Geri alma işleminin yapılmasını gerektiren ve minimum <ph name="PRODUCT_OS_NAME" /> sürümünün altındaki cihazlar, olası güvenlik sorunlarından dolayı bu politikadan etkilenmez. Bununla birlikte, bu politika kullanıcılar veya yöneticiler tarafından istenen güncelleme kontrollerini engellemez.
@@ -1212,6 +1239,7 @@
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> kimlik doğrulaması için hesap türü</translation>
 <translation id="2959469725686993410">Saat dilimini çözümlerken kablosuz erişim noktalarını her zaman sunucuya gönder</translation>
 <translation id="2959898425599642200">Proxy atlama kuralları</translation>
+<translation id="2960013482187484833">Yazdırma Önizleme'de en son kullanılan yazıcıyı varsayılan seçenek olarak kullan</translation>
 <translation id="2960128438010718932">Yeni bir güncellemenin uygulanmasına yönelik hazırlık programı</translation>
 <translation id="2960691910306063964">Uzaktan erişim ana makineleri için PIN'siz kimlik doğrulamayı etkinleştir veya devre dışı bırak</translation>
 <translation id="2964373560810620158">Kullanıcıların <ph name="LACROS_NAME" /> tarayıcıyı kullanmalarını engelle</translation>
@@ -1309,6 +1337,7 @@
 <translation id="3072847235228302527">Bir cihaz yerel hesabı için Hizmet Şartları'nı ayarlama</translation>
 <translation id="3086995894968271156">Cast Receiver'ı <ph name="PRODUCT_NAME" /> ürününde yapılandırın.</translation>
 <translation id="3091832372132789233">Öncelikle harici bir güç kaynağına bağlı cihazlar için pili şarj edin.</translation>
+<translation id="3092059499596000593">Yazdırma Önizleme'de varsayılan seçenek olarak sistem varsayılan yazıcısını kullan</translation>
 <translation id="309416443108680956">Güvenlik jetonuyla (ör. akıllı kart) kimlik doğrulaması yapan bir kullanıcı, oturum sırasında bu jetonu çıkardığında ne olacağını belirtir. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />: Hiçbir şey olmaz. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />: Kullanıcı tekrar kimlik doğrulayana kadar ekran kilitlenir. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />: Oturum sona erdirilir ve kullanıcının oturumu kapatılır. Bu politika ayarlanmazsa <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" /> kabul edilir.</translation>
 <translation id="3096595567015595053">Etkin eklentilerin listesi</translation>
 <translation id="3101501961102569744">Proxy sunucu ayarlarının nasıl belirtileceğini seç</translation>
@@ -1362,6 +1391,11 @@
 <translation id="3219421230122020860">Gizli mod kullanılabilir</translation>
 <translation id="3220624000494482595">Kiosk uygulaması bir Android uygulamasıysa bu politika <ph name="TRUE" /> seçeneğine ayarlansa dahi <ph name="PRODUCT_OS_NAME" /> sürümü üzerinde herhangi bir kontrolü olmaz.</translation>
 <translation id="322359555555487980"><ph name="PRODUCT_OS_NAME" /> üzerinde varyasyonların kullanılabilirliğini belirle</translation>
+<translation id="3231617925177241750">Politika, Etkin değerine ayarlanır ve <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_POLICY_NAME" /> ile <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_POLICY_NAME" /> ayarlanırsa desteklenen cihazlarda yoğun saatler için güç yönetimi açık kalır. Yoğun saatler için güç yönetimi politikası, kullanımın en yüksek olduğu zamanlarda alternatif akım kullanımını minimuma indiren bir güç tasarrufu politikasıdır. Hafta içi her gün, yoğun saatler için güç yönetimi modunun başlangıç ve bitiş saati ayarlanabilir. Bu saatler sırasında alternatif akım takılı olsa bile, pil belirtilen eşiğin üstünde kaldığı sürece sistem pille çalışır. Bitiş saatinden sonra sistem, takılı haldeyse alternatif akımı kullanarak çalışır, ancak pil şarj olmaz. Sistem, belirtilen şarj başlangıç saatinden sonra alternatif akımı kullanarak ve pili şarj ederek tekrar normal şekilde çalışır.
+
+      Politikayı Devre Dışı değerine ayarlamak yoğun saatler için güç yönetimini kapalı tutar.
+
+      Ayarlanmadan bırakılırsa yoğun saatler için güç yönetimi başta kapalı olur. Kullanıcılar bu ayarı değiştiremez.</translation>
 <translation id="3231837273069128027">Politikayı ayarlamak <ph name="TPM_FIRMWARE_UPDATE_TPM" /> donanım yazılımı güncellemelerinin kullanılabilirliğini ve davranışını yapılandırır.
 
       Bağımsız ayarları JSON özelliklerinde belirtilir:
@@ -1706,9 +1740,6 @@
       Politika Devre Dışı değerine ayarlanır veya ayarlanmadan bırakılırsa kayıtlı cihazlar istatistikleri bildirmez.</translation>
 <translation id="3736879847913515635">Kullanıcı yöneticisinde kişi eklemeyi etkinleştir</translation>
 <translation id="3750220015372671395">Bu sitelerde anahtar oluşturmayı engelle</translation>
-<translation id="375266612405883748">Uzaktan erişim ana makinesi tarafından bu makinede kullanılan UDP bağlantı noktası aralığını kısıtlar.
-
-          Bu politika ayarlanmadan bırakılır veya boş dize olarak ayarlanırsa, uzaktan erişim ana makinesinin, kullanılabilir erişim noktalarından herhangi birini kullanmasına izin verilir. Bu durum <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> politikası devre dışı olmadığı sürece geçerlidir. Aksi halde, uzaktan erişim ana makinesi 12400-12409 aralığındaki UDP bağlantı noktalarını kullanır.</translation>
 <translation id="3755237588083934849">Politikanın ayarlanması, cihaz durumu yüklemelerinin ne sıklıkla gönderileceğini (milisaniye olarak) belirler. İzin verilen minimum sıklık 60 saniyedir.
 
       Ayarlanmazsa 3 saatlik varsayılan sıklık geçerli olur.</translation>
@@ -1733,6 +1764,7 @@
       Politika, Devre Dışı değerine ayarlanır veya ayarlanmadan bırakılırsa <ph name="PRODUCT_OS_NAME" /> kullanıcıların cihazları kapatmasına izin verir.</translation>
 <translation id="3765260570442823273">Boştayken çıkış yapma uyarı mesajının süresi</translation>
 <translation id="377044054160169374">Kötüye Kullanım Deneyimi Müdahele Yaptırımı</translation>
+<translation id="3778689139323007309">Yerel olarak yüklü CA sertifikaları tarafından imzalanmış başarıyla doğrulanmış sunucu sertifikaları için iptal kontrolleri gerçekleştir</translation>
 <translation id="3780152581321609624">Kerberos SPN'sine standart dışı bağlantı noktasını dahil et</translation>
 <translation id="3788662722837364290">Kullanıcının işlem yapmadığı zaman için güç yönetimi ayarları</translation>
 <translation id="3790085888761753785">Bu ayar etkinleştirilirse, kullanıcılar Smart Lock kullanarak hesaplarında oturum açabilirler. Bu, kullanıcıların yalnızca ekranlarının kilidini açmalarına izin veren normal Smart Lock davranışından daha serbest bir ayardır.
@@ -2036,11 +2068,6 @@
           Bu politikayı ayarlarsanız kullanıcılar değiştiremez veya geçersiz kılamazlar.
 
           Bu politika ayarlanmadan bırakılırsa otomatik tıklama başlangıçta devre dışıdır ancak istenildiğinde kullanıcı tarafından etkinleştirilebilir.</translation>
-<translation id="4214536984333857724">Bu ayar etkinleştirilirse gnubby kimlik doğrulama isteklerinde uzaktan ana bilgisayar bağlantısı üzerinden proxy kullanılır.
-
-          Bu özelliğin düzgün bir şekilde çalışması için Google ağı ortamı dışında bulunmayan ek bileşenler gerektirdiğini unutmayın.
-
-          Bu ayar devre dışı bırakılırsa gnubby kimlik doğrulama isteklerinde proxy kullanılmaz.</translation>
 <translation id="4224610387358583899">Ekran kilidi bekleme süresi</translation>
 <translation id="4225260426043444650">Bu ayar, kullanıcıların <ph name="LACROS_NAME" /> tarayıcıyı kullanmalarına olanak tanır.
 
@@ -2213,9 +2240,6 @@
       <ph name="PRODUCT_NAME" /> için bu politika yalnızca makinenin <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> kaydı yapıldığında geçerli olur.
       <ph name="PRODUCT_OS_NAME" /> için bu politika her zaman geçerlidir.</translation>
 <translation id="4578265298946081589">Kullanıcı oturumu kapatıldığında cihazı yeniden başlatma.</translation>
-<translation id="4578912515887794133">Bu ayar etkinleştirilirse, uzaktan erişim ana makinesi, yerel kullanıcının adını (ana makinenin ilişkilendirildiği ad) ana makinenin sahibi olarak kayıtlı Google hesabının adıyla (ör. ana makinenin sahibi "candogru@example.com" Google hesabı ise, bu ad "candogru" olur) karşılaştırır.  Ana makinenin sahibinin adı, ana makinenin ilişkilendirildiği yerel kullanıcının adından farklı olursa uzaktan erişim ana makinesi çalışmaz.  Ana makinenin sahibine ait Google hesabının belirli bir alan adıyla (ör. "example.com") ilişkilendirilmesini de sağlamak için RemoteAccessHostMatchUsername politikası RemoteAccessHostDomain ile birlikte kullanılmalıdır.
-
-          Bu ayar devre dışı bırakılır veya yapılandırılmazsa, uzaktan erişim ana makinesi herhangi bir yerel kullanıcıyla ilişkilendirilebilir.</translation>
 <translation id="4587365491100112056">Politikanın ayarlanması, kimlik doğrulama verisi önbellek ömrünü saat cinsinden belirtir. Önbellek, makine alanının (ilişkili alanlar) güvendiği alanlar hakkında verilere sahiptir. Bu nedenle, kimlik doğrulama verilerini önbelleğe alma, oturum açmayı hızlandırmaya yardımcı olur. Kullanıcıya özgü veriler ve ilişkili olmayan alanlara ait veriler önbelleğe alınmaz.
 
       Politikanın 0 değerine ayarlanması, kimlik doğrulama verilerini önbelleğe almayı devre dışı bırakır. Alana özgü veriler, her oturum açmada getirilir. Bu nedenle, kimlik doğrulama verilerinin önbelleğe alınmasını devre dışı bırakmak kullanıcının oturum açmasını önemli ölçüde yavaşlatabilir.
@@ -2358,15 +2382,6 @@
 <translation id="487460824085252184">Otomatik olarak taşı, kullanıcıdan onay isteme.</translation>
 <translation id="4874982543810021567">Bu sitelerde WebUSB'yi engelle</translation>
 <translation id="4876805738539874299">Etkinleştirilen maksimum SSL sürümü</translation>
-<translation id="487928067861956387">Uzaktan erişim ana makinelerinde uygulanacak gerekli ana makine alan adlarını yapılandırır ve kullanıcıların bunu değiştirmesini önler.
-
-          Bu ayar etkinleştirilir ve bir veya daha fazla alan adına ayarlanırsa ana makineler yalnızca belirtilen alan adlarından birinde kayıtlı hesaplar kullanılarak paylaşılabilir.
-
-          Bu ayar devre dışı bırakılırsa, ayarlanmazsa veya boş bir listeye ayarlanırsa ana makineler herhangi bir hesap kullanılarak paylaşılabilir.
-
-          Bu ayar mevcut olması halinde <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" /> politikasını geçersiz kılar.
-
-          Ayrıca <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" /> politikasına bakın.</translation>
 <translation id="4887274746092315609">SAML kullanıcılarına yönelik oturum içi şifre değişimi için bir sayfayı etkinleştir</translation>
 <translation id="4892647988357350237">Varsayılan olarak CCT ilk çalıştırıldığında Hizmet Şartları gösterilir. Bu politikanın <ph name="SKIP_TOS_DIALOG" /> değerine ayarlanması, Hizmet Şartları iletişim kutusunun ilk çalıştırma deneyiminde veya sonraki çalıştırmalarda görünmemesine neden olur. Bu politikanın <ph name="STANDARD_TOS_DIALOG" /> değerine ayarlanması veya ayarlanmadan bırakılması, Hizmet Şartları iletişim kutusunun ilk çalıştırma deneyiminde görünmesine neden olur. Dikkat edilmesi gereken diğer noktalar:
 
@@ -2627,15 +2642,6 @@
 
       Burada "Sürüm" ile kastedilen, tam sürüm (ör. "61.0.3163.120") veya sürüm öneki (ör. "61.0") olabilir.  </translation>
 <translation id="5247006254130721952">Tehlikeli indirmeleri engelle</translation>
-<translation id="5249303875508803168">Uzaktan erişim istemcilerine uygulanacak gerekli istemci alan adlarını yapılandırır ve kullanıcıların bunu değiştirmesini önler.
-
-          Bu ayar etkinleştirilir ve bir veya daha fazla etki alanına ayarlanırsa yalnızca belirtilen alan adlarından birinden gelen istemciler ana makineye bağlanabilir.
-
-          Bu ayar devre dışı bırakılırsa, ayarlanmazsa veya boş bir listeye ayarlanırsa bağlantı türü için varsayılan politika uygulanır. Bu durum, uzaktan yardım açısından, herhangi bir alan adındaki istemcilerin ana makineye bağlanmasına olanak tanır. Herhangi bir zamanda gerçekleştirilen uzaktan erişim için yalnızca ana makine sahibi bağlantı kurabilir.
-
-          Bu ayar <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" /> politikasını (mevcutsa) geçersiz kılar.
-
-          Ayrıca <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" /> politikasına bakın</translation>
 <translation id="5249453807420671499">Kullanıcılar Kerberos hesapları ekleyebilirler</translation>
 <translation id="5252995168844634755">Politikayı Doğru (True) değerine ayarlarsanız Birleşik Masaüstü etkinleşerek uygulamaların birden fazla ekranda görünmesini sağlar. Kullanıcılar Birleşik Masaüstü özelliğini ekranlar için ayrı ayrı kapatabilirler.
 
@@ -2747,6 +2753,7 @@
           True (doğru) olarak ayarlanırsa veya yapılandırılmazsa, bu kullanıcı denetlenen kullanıcılar oluşturabilir ve denetlenen kullanıcıları yönetebilir.</translation>
 <translation id="5369937289900051171">Yalnızca renkli yazdır</translation>
 <translation id="5370279767682621504">Varsayılan olmayan bağlantı noktalarında HTTP/0.9 desteğini etkinleştir</translation>
+<translation id="5371152055157582429">Kullanıcılar, Yeni Sekme sayfasının arka planını özelleştirebilirler</translation>
 <translation id="5377606826822211923">Kullanıcı için güvenilmeyen kaynaklardan Android uygulaması kullanımının kontrolü</translation>
 <translation id="5377668121137111316">Politikayı True (Doğru) değerine ayarlamak, dokunmatik klavyeyi açık tutar. Politikayı False (Yanlış) değerine ayarlamak, dokunmatik klavyeyi kapalı tutar.
 
@@ -2772,11 +2779,6 @@
 <translation id="5390083518957894426">SAML kullanıcıları için kilit ekranında yeniden online kimlik doğrulamayı etkinleştirir</translation>
 <translation id="5391388690191341203">Cihaz yerel hesabına otomatik giriş</translation>
 <translation id="5393009997533871906">Kullanıcılara sadece izin verilenler listesindeki yazıcılar gösterilir.</translation>
-<translation id="5395271912574071439">Bir bağlantı devam ederken uzaktan erişen ana makinelerin perdelenmesini etkinleştirir.
-
-          Bu ayar etkinleştirilirse, uzak bağlantı devam ettiği sürece ana makinelerin fiziksel giriş ve çıkış cihazları devre dışı bırakılır.
-
-          Bu ayar devre dışı bırakılırsa veya belirlenmezse, ana makine paylaşıldığı sırada hem yerel, hem de uzak kullanıcılar etkileşimde bulunabilir.</translation>
 <translation id="5401696449591951427"><ph name="CHROME_DEVICES_LINK" /> bağlantısını etkinleştir</translation>
 <translation id="5405289061476885481"><ph name="PRODUCT_OS_NAME" /> oturum açma ekranında hangi klavye düzenlerine izin verileceğini yapılandırır.
 
@@ -2993,6 +2995,14 @@
 <translation id="572155275267014074">Android ayarları</translation>
 <translation id="5728154254076636808"><ph name="PRODUCT_NAME" /> profil verileri için dolaşım kopyalarının oluşturulmasını etkinleştir</translation>
 <translation id="5732972008943405952">İlk çalıştırmada, otomatik doldurma formu verilerini varsayılan tarayıcıdan içe aktar</translation>
+<translation id="5733040281451845496">Politika, Etkin değerine ayarlandığında güç yönetimi gecikmeleri ve oturum süresi sınırları oturumdaki ilk kullanıcı etkinliğine kadar çalışmaya başlamaz.
+
+      Politika, Devre Dışı değerine ayarlanır veya ayarlanmadan bırakılırsa güç yönetimi gecikmeleri ve süre sınırı oturumun başında hemen çalışmaya başlar.</translation>
+<translation id="5738766588683307797"><ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" />, Devre Dışı değerine ayarlanırsa <ph name="USER_ACTIVITY_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" />, ekran karardığında veya kapandıktan hemen sonra kullanıcı etkinliği olduğunda ekranın kararmasındaki gecikmenin ölçekleneceği yüzdeyi belirtir. Ekran kararma gecikmesi ölçeklendiğinde ekran kapanması, ekran kilidi ve boşta kalma gecikmeleriyle ilgili süreler orijinal olarak ayarlanan ekran kararma gecikmesine göre aynı oran korunacak biçimde düzenlenir.
+
+      Politika ayarlanmadan bırakılırsa varsayılan ölçeklendirme faktörü kullanılır.
+
+      Not: Ölçeklendirme faktörü en az %100 olmalıdır.</translation>
 <translation id="574098933844699859">Sistem bilgilerinin (ör. Chrome OS sürümü, cihaz seri numarası) giriş ekranında her zaman gösterilip gösterilmeyeceğini (veya gizlenip gizlenmeyeceğini) belirtin.
 
       Bu politika true (doğru) değerine ayarlanırsa sistem bilgileri gösterilmeye zorlanır.
@@ -3398,9 +3408,6 @@
 <translation id="6401669939808766804">Kullanıcının oturumunu kapat</translation>
 <translation id="640244877779556713">Emoji Önerilerini Etkinleştir</translation>
 <translation id="6407093060083181305">Uzantı yükleme engellenenler listesini yapılandır</translation>
-<translation id="6408233796253901198">Bu politika ayarlanırsa uzaktan erişim ana makinesi, bağlantıları kabul etmek için uzaktan erişim istemcilerinin kimlik doğrulama jetonlarını doğrulamak üzere bu URL'yi kullanır. RemoteAccessHostTokenUrl ile birlikte kullanılmalıdır.
-
-          Boş bırakılır veya ayarlanmazsa bu özellik devre dışı bırakılır.</translation>
 <translation id="6417265370957905582">Google Asistan</translation>
 <translation id="6422575351619065453">Kiosk modunda, kayan erişilebilirlik menüsünün gösterilip gösterilmeyeceğini kontrol eder.
 
@@ -3408,6 +3415,7 @@
 
       Bu politika devre dışı olarak ayarlanırsa veya ayarlanmadan bırakılırsa kayan erişilebilirlik menüsü asla gösterilmez.</translation>
 <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation>
+<translation id="6424486395812679373">İndirilen tüm dosyalarda Güvenli Tarama kontrolleri gerçekleştir</translation>
 <translation id="6438364096042399634">Politikayı ayarlamak, kullanıcıların chrome.usb API'si aracılığıyla doğrudan bir web uygulaması içinde kullanmak için çekirdek sürücüsünden çıkarabildikleri USB cihazlarının listesini tanımlar. Girişler, belirli bir donanımı tanımlamak için kullanılan USB Tedarikçi Tanımlayıcısı ve Ürün Tanımlayıcısı çiftlerinden oluşmaktadır.
 
       Ayarlanmazsa çıkarılabilir USB cihazları listesi boştur.
@@ -3494,6 +3502,9 @@
 <translation id="6553143066970470539">Ekran parlaklığı yüzdesi</translation>
 <translation id="6558362593755624474">Politikanın ayarlanması, bu cihaz için <ph name="PLUGIN_VM_NAME" /> lisans anahtarını belirtir.</translation>
 <translation id="6559057113164934677">Hiçbir sitenin kamera ve mikrofona erişmesine izin verme</translation>
+<translation id="6559221564468029245">Politika, Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa ses çalarken kullanıcı boşta olarak algılanmaz. Böylece hiçbir zaman boşta kalma zaman aşımı süresi dolmaz ve boşta kalma işlemi uygulanmaz. Ancak ses etkinliğine rağmen yapılandırılmış zaman aşımı sürelerinden sonra yine de ekran karartma, ekran kapatma ve ekran kilitleme işlemi uygulanır.
+
+      Politika, Devre Dışı değerine ayarlanırsa ses etkinliğine rağmen sistem, kullanıcıları boşta olarak algılayabilir.</translation>
 <translation id="6559475864956112261">Bu politika kullanımdan kaldırıldı, lütfen bunun yerine <ph name="PROXY_SETTINGS_POLICY_NAME" /> politikasını kullanın.
 
        Bu politikanın Etkin değerine ayarlanması, Chrome'un kullandığı proxy sunucusunu belirtmenizi sağlar ve kullanıcıların proxy ayarlarını değiştirmesini önler. Chrome ve ARC uygulamaları, komut satırında proxy ile ilgili belirtilen tüm seçenekleri yok sayar. Bu politika, yalnızca <ph name="PROXY_SETTINGS_POLICY_NAME" /> politikası belirtilmediğinde geçerli olur.
@@ -3912,6 +3923,9 @@
 <translation id="7072208053150563108">Makine şifresi değişim hızı</translation>
 <translation id="7072567600438630966">Telefon Merkezi'nin etkinleştirilmesine izin ver.</translation>
 <translation id="7079519252486108041">Bu sitelerde pop-up'ları engelle</translation>
+<translation id="7081784525008938771">Politika, Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa video oynatılırken kullanıcı boşta olarak algılanmaz. Böylece hiçbir zaman boşta kalma gecikmesi, ekran karartma gecikmesi, ekran kapatma gecikmesi ve ekran kilitleme gecikmesi süreleri dolmaz ve ilgili işlemler uygulanmaz.
+
+      Politika, Devre Dışı değerine ayarlanırsa video etkinliğine rağmen sistem, kullanıcıları boşta olarak algılayabilir.</translation>
 <translation id="7086720321892395256">Gizlilik ekranı özelliği için kullanıcı ve cihaz politikalarını kontrol eder.</translation>
 <translation id="7091842872805965910">Kilit ve giriş ekranında PIN kodu otomatik gönderme özelliğini etkinleştirme.</translation>
 <translation id="7093294902558672021">Cihazın pervane bilgilerini raporlar.
@@ -4038,9 +4052,6 @@
       Politika Devre dışı değerine ayarlanır veya ayarlanmadan bırakılırsa KDC politikası, desteklenen platformlarda yok sayılır ve yalnızca <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> politikası dikkate alınır.
 
       <ph name="MS_WIN_NAME" /> ürününde KDC politikası her zaman dikkate alınır.</translation>
-<translation id="7273823081800296768">Bu ayar etkinleştirilirse veya yapılandırılmazsa, kullanıcılar bağlantı zamanında istemcileri ve ana makineleri eşleştirmeyi seçebilir, bu da her defasında PIN girme gereğini ortadan kaldırır.
-
-          Bu ayar devre dışı bırakılırsa, bu özellik kullanılamaz.</translation>
 <translation id="7274077256421167535">USB güç paylaşımını etkinleştir</translation>
 <translation id="7275334191706090484">Yönetilen Yer İşaretleri</translation>
 <translation id="7278854311116092134">Engellenenler listesinden muaf tutulacak yerel mesajlaşma ana makinelerinin adları</translation>
@@ -4145,6 +4156,11 @@
 
       Politikayı ayarlamadan bırakırsanız <ph name="ASK_NOTIFICATIONS_POLICY_NAME" /> politikası geçerli olur. Kullanıcılar bu ayarı değiştirebilir.</translation>
 <translation id="747275827471712187">Bu sitelerde çerezler için eski <ph name="ATTRIBUTE_SAMESITE_NAME" /> davranışına geri dön</translation>
+<translation id="7476447711788742702">Politikanın ayarlanması, kullanıcı cihazın kapağını kapattığında <ph name="PRODUCT_OS_NAME" /> tarafından uygulanacak işlemi belirtir.
+
+      Politika ayarlanmadan bırakılırsa Askıya Alma işlemi uygulanır.
+
+      Not: Uygulanacak işlem Askıya Alma ise <ph name="PRODUCT_OS_NAME" />, askıya almadan önce ekranı kilitleyecek veya kilitlemeyecek şekilde ayrı olarak ayarlanabilir.</translation>
 <translation id="7476621944304431784">Bu ayar etkinleştirildiğinde kullanıcıların, <ph name="PRODUCT_OS_NAME" /> cihazları ile bağlı Android telefonları arasında kablosuz ağ yapılandırmalarını senkronize etmelerine izin verilir. Kablosuz ağ yapılandırmaları senkronize edilmeden önce kullanıcıların bir kurulum akışını tamamlayarak bu özelliğe açık bir şekilde kaydolmaları gerekir.
 
       Bu ayar devre dışı bırakılırsa kullanıcıların, kablosuz ağ yapılandırmalarını senkronize etmelerine izin verilmez.
@@ -4172,9 +4188,6 @@
 
       Bu politika kullanımdan kaldırıldı, lütfen bunun yerine <ph name="PRINTERS_POLICY_NAME" /> politikasını kullanın.
       </translation>
-<translation id="7504632989711326175">Bu politika ayarlanırsa ana makine, RemoteAccessHostTokenValidationUrl'ye erişim için kimlik doğrulaması yapmak üzere, belirtilen yayıncı CN'sine (Ortak Ad) sahip bir istemci sertifikası kullanır. Mevcut istemci sertifikalarından herhangi birinin kullanılabilmesi için bunu "*" olarak ayarlayın.
-
-          Boş bırakılır veya ayarlanmazsa bu özellik devre dışı bırakılır.</translation>
 <translation id="7506745375479451616">Bu politika, <ph name="IE_PRODUCT_NAME" /> tarayıcısından geçiş yaparken <ph name="PRODUCT_NAME" /> içindeki açık URL'lerin kullanılmasına yönelik komutu kontrol eder. Bu politika, yürütülebilir dosya yolu olarak veya <ph name="PRODUCT_NAME" /> tarayıcısının konumunu otomatik olarak algılamak için <ph name="PRODUCT_NAME_PLACEHOLDER" /> değerine ayarlanabilir.
 
       Bu politika ayarlanmadan bırakılırsa <ph name="IE_PRODUCT_NAME" />, Internet Explorer'dan <ph name="PRODUCT_NAME" /> tarayıcısını açarken <ph name="PRODUCT_NAME" /> tarayıcısının kendi yürütülebilir yolunu otomatik olarak algılar.
@@ -4452,6 +4465,11 @@
 <translation id="7891884447851425349"><ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> açıksa <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> politikasının ayarlanması, varsayılan arama sırasında kullanılan arama motorunu belirtir. URL, sorguda kullanıcının arama terimi ile değiştirilen <ph name="SEARCH_TERM_MARKER" /> dizesini içermelidir.
 
       Google'ın arama URL'sini şu şekilde belirtebilirsiniz: <ph name="GOOGLE_SEARCH_URL" />.</translation>
+<translation id="7894185046683379696">Politikayı ayarlamak AC gücü veya pille çalışırken ekran kilitlenmeden önce kullanıcı girişi olmadan geçecek süreyi milisaniye olarak belirtir. Değerler, <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> kullanılarak boşta kalma gecikmesinden küçük olacak şekilde ayarlanır.
+
+      Sıfıra ayarlanırsa kullanıcı boşta kaldığında <ph name="PRODUCT_OS_NAME" /> ekranı kilitlemez. Ayarlanmadan bırakılırsa varsayılan süre kullanılır.
+
+      Öneri: Boşta kaldığında ekranı kilitlemek için askıya alındığında ekran kilidini etkinleştirin ve boşta kalma gecikmesi ile ilgili süre dolduğunda <ph name="PRODUCT_OS_NAME" /> tarafından askıya alma işlemi yapılacak şekilde ayarlayın. Bu politikayı yalnızca ekran kilitleme işleminin askıya alma işleminden epey önce olması istendiğinde veya boşta kalma durumunda askıya alma işleminin yapılmasını istemediğinizde kullanın.</translation>
 <translation id="7895553628261067384">Uzaktan erişim</translation>
 <translation id="7902040092815978832">Şifre için sayısal klavyeyi gösterir</translation>
 <translation id="7904177352786629708">Politika Etkin değerine ayarlanırsa CNAME araması atlanır. Kerberos SPN oluşturulurken sunucu adı girildiği şekliyle kullanılır.
@@ -4570,6 +4588,9 @@
           Bu politika etkinleştirilirse politika tarafından tanımlanmış hesapların listesi Kerberos Hesapları ayarlarına eklenir.
 
           Bu politika devre dışı bırakılır veya ayarlanmazsa Kerberos Hesapları ayarlarına hiçbir hesap eklenmez ve bu politikayla daha önce eklenen tüm hesaplar silinir. "Kullanıcılar Kerberos hesapları ekleyebilir" politikası etkinse kullanıcılar yine de manuel olarak hesap ekleyebilirler.</translation>
+<translation id="8078297389450285582">Politikayı Etkin değerine ayarlamak veya ayarlamadan bırakmak, akıllı karartma modelini etkinleştirir ve ekran kararana kadar geçen süreyi uzatabilir. Süreyi geciktirirse ekran kapanması, ekran kilidi ve boşta kalma gecikmeleriyle ilgili süreler, orijinal olarak ayarlanan ekran kararma gecikmesine göre aynı oran korunacak biçimde düzenlenir.
+
+      Politika, Devre Dışı değerine ayarlanırsa akıllı karartma modeli, ekran karartmayı etkilemez.</translation>
 <translation id="8099880303030573137">Pil gücüyle çalışırken boşta kalma gecikmesi</translation>
 <translation id="8101381354936029836">Politika atom grubu:</translation>
 <translation id="8101937907822293485"><ph name="PRODUCT_NAME" /> ile ilgili kullanım ve kilitlenme verilerinin anonim olarak Google'a raporlanmasını etkinleştirir ve kullanıcıların bu ayarı değiştirmelerini önler.
@@ -4703,6 +4724,11 @@
       Politikayı ayarlanmadan bırakırsanız web siteleri erişim izni isteyebilir. Kullanıcılar bu ayarı değiştirebilir.</translation>
 <translation id="8274603902181597201">Kullanıcının ecryptfs ana dizinini sil ve yeni bir ext4-encrypted ana diziniyle başla.</translation>
 <translation id="8284296539558710573">Çapraz kaynak HTTP Kimlik Doğrulama istemleri</translation>
+<translation id="8284527236880877730"><ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" />, Devre Dışı değerine ayarlanırsa <ph name="PRESENTATION_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" />, cihaz sunum yaparken ekran kararma gecikmesinin ölçeklendiği yüzdeyi belirtir. Ekran kararma gecikmesi ölçeklendiğinde ekran kapanması, ekran kilidi ve boşta kalma gecikmeleriyle ilgili süreler, orijinal olarak ayarlanan ekran kararma gecikmesine göre aynı oran korunacak biçimde düzenlenir.
+
+      Politika ayarlanmadan bırakılırsa varsayılan ölçeklendirme faktörü kullanılır.
+
+      Not: Ölçeklendirme faktörü en az %100 olmalıdır.</translation>
 <translation id="8285435910062771358">Tam ekran büyüteci etkin</translation>
 <translation id="8288199156259560552">Android Google Konum Hizmetini Etkinleştir</translation>
 <translation id="8290875622178450531">Dikte erişilebilirlik özelliğini etkinleştirin.
@@ -4772,13 +4798,6 @@
 <translation id="8371178326720637170">Yönetilen uzantıların Kurumsal Donanım Platformu API'sini kullanmasını sağlar</translation>
 <translation id="8375817202037102567">Bu sitelerde dosya ve dizinlere yazma erişimini engelle</translation>
 <translation id="8379317372795444261">HTTP bağlantılarında <ph name="BASIC_AUTH" /> kimlik doğrulamasına izin ver</translation>
-<translation id="8380490658357556620">Uzak istemciler bu makineyle bağlantı kurmaya çalıştıklarında geçiş sunucularının kullanımını etkinleştirir.
-
-          Bu ayar etkinleştirilirse, uzak istemciler, güvenlik duvarı kısıtlamaları gibi nedenlerden dolayı doğrudan bağlantı olmadığında geçiş sunucularını kullanarak bu makineye bağlanabilirler.
-
-          <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> politikası devre dışı bırakılırsa bu politikanın yoksayılacağını unutmayın.
-
-          Bu politika ayarlanmadan bırakılırsa ayar etkinleştirilir.</translation>
 <translation id="838056554726401140"><ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> öğesinin hangi URL'lere uygulanacağını belirten URL'lerin listesi. Bu politikanın, kullanıcılar tarafından belirlenen otomatik olarak açık değerler üzerinde hiçbir etkisi yoktur.
 
       Bu politika ayarlanırsa dosyalar yalnızca URL bu kümenin bir parçasıysa ve dosya türü <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> öğesinde listeleniyorsa politikaya göre otomatik olarak açılır. İki koşuldan biri yanlışsa indirilen, politikaya göre otomatik olarak açılmaz.
@@ -4936,9 +4955,6 @@
       Politika true (doğru) değerine ayarlanırsa en az 5 dakikadır arka planda bulunan sekmeler dondurulabilir. Sekme dondurma işlemi CPU, pil ve bellek kullanımını azaltır. <ph name="PRODUCT_NAME" />, arka planda faydalı işler yapan sekmelerin (ör. bildirimleri görüntüleme, ses çalma, video yayınlama) dondurulmaması için sezgisel yöntemler kullanır. Web geliştiricileri, sitelerinin dondurma kapsamı dışında kalmasını seçebilir (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Politika false (yanlış) değerine ayarlanırsa hiçbir sekme dondurulmaz.</translation>
-<translation id="8622378389102774881">Bu politika ayarlanırsa, uzaktan erişim ana makinesi, kimlik doğrulaması yapan istemcilerin bağlanmak için bu URL'den kimlik doğrulama jetonu almasını gerektirir. RemoteAccessHostTokenValidationUrl politikası ile birlikte kullanılmalıdır.
-
-          Boş bırakılır veya ayarlanmazsa bu özellik devre dışı bırakılır.</translation>
 <translation id="8631434304112909927"><ph name="UNTIL_VERSION" /> sürümüne kadar</translation>
 <translation id="8631437968147930597"><ph name="PRODUCT_OS_NAME" /> kilit ekranında izin verilen not alma uygulamaları listesi</translation>
 <translation id="8649763579836720255">Chrome OS cihazları, cihazın korumalı içerikleri oynatabileceğini onaylayan Chrome OS CA'sı (sertifika yetkilisi) tarafından yayınlanan bir sertifika almak için uzaktan onay (Doğrulanmış Erişim) işlevini kullanabilir. Bu işlem Chrome OS CA'ya, cihazı benzersiz şekilde tanımlayan donanım onay bilgilerinin gönderilmesini içerir.
@@ -5033,9 +5049,19 @@
 
       Not: Kullanabileceğiniz değişkenlerin listesine bakın ( https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables ).</translation>
 <translation id="8777369558049831576">Harici protokol iletişim kutusunda "Her zaman aç" onay kutusu göster.</translation>
+<translation id="8786409859071107656">Politikayı Etkin değerine ayarlamak USB güç paylaşımı güç yönetim politikasını etkinleştirir.
+
+      Bazı cihazlarda, cihazları sistem pilini kullanarak şarj etmek için kullanılabilen, şimşek veya pil simgesi olan özel bir USB bağlantı noktası vardır. Bu politika, sistem uyku ve kapalı modundayken bu bağlantı noktasının şarj çalışma biçimini etkiler. USB bağlantı noktası sürekli güç sağladığında sistem uyanık durumdayken diğer USB bağlantı noktalarını ve şarj çalışma biçimini etkilemez.
+
+      Uyku durumundayken cihaz duvar prizi şarj cihazına takıldığında veya pil düzeyi %50'nin üzerindeyken USB bağlantı noktasına güç sağlanır. Kapalıyken cihaz duvar prizi şarj cihazına takıldığında USB bağlantı noktasına güç sağlanır.
+
+      Politika, Devre Dışı değerine ayarlanırsa güç sağlanmaz.
+
+      Politika ayarlanmadan bırakılırsa politika açık kalır ve kullanıcılar bunu kapatamaz.</translation>
 <translation id="8798099450830957504">Varsayılan</translation>
 <translation id="8800453707696044281">Pil şarjı için özel şarj durdurma değerini yüzde olarak ayarla</translation>
 <translation id="8801680448782904838">Kullanıcıya tarayıcının veya cihazın yeniden başlatılmasının önerildiğini ya da gerektiğini bildir</translation>
+<translation id="8816671955985738552">chrome://password-change konumunda, oturum içi SAML şifre değişikliğine izin verme</translation>
 <translation id="8817960019535659860">Kullanıcıların, Chrome OS Kaydını kullanarak tekliflerden yararlanmasını engelle</translation>
 <translation id="8818173863808665831">Cihazın coğrafi konumunu bildirin.
 
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index f773d45..988b13f 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Дозволити користувачам застосовувати анонімний сервіс Google, щоб створювати автоматичні описи для зображень без міток</translation>
 <translation id="1087437665304381368">Це правило керує лише режимом розробника <ph name="PRODUCT_OS_NAME" />. Щоб заборонити доступ до параметрів розробника Android, потрібно налаштувати правило <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation>
 <translation id="1087707496788636333">Список правил Chrome Enterprise переміщено. Нова URL-адреса: <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
-<translation id="1093082332347834239">Якщо це налаштування ввімкнено, хост віддаленої допомоги запускатиметься з дозволами <ph name="UIACCESS_PERMISSION_NAME" />. Це дасть віддаленим користувачам змогу взаємодіяти з вікнами на локальному робочому столі користувача.
-
-          Якщо це налаштування вимкнено або не налаштовано, хост віддаленої допомоги запускатиметься в контексті користувача, і віддалені користувачі не зможуть взаємодіяти з вікнами на його робочому столі.</translation>
 <translation id="1095209545735032039">Блокувати Serial API на цих сайтах</translation>
 <translation id="1096105751829466145">Пошукова служба за умовчанням</translation>
 <translation id="1099282607296956954">Увімкнути Ізоляцію сайтів для кожного сайту</translation>
@@ -623,9 +620,6 @@
 <translation id="2040479044912658454">Режим растеризації друку</translation>
 <translation id="2043749682619281558">Увімкнути функцію "Виділення курсора" на екрані входу</translation>
 <translation id="2043770014371753404">Вимкнені принтери підприємства</translation>
-<translation id="2050629715135525072">Указує, чи можуть користувачі з віддаленим доступом до хосту переносити файли між клієнтом і хостом. Це не стосується з’єднань для віддаленої допомоги, що не підтримують перенесення файлів.
-
-          Якщо це налаштування вимкнено, перенесення файлів забороняється. Якщо цей параметр увімкнено або не налаштовано, перенесення файлів дозволяється.</translation>
 <translation id="2057317273526988987">Надати доступ до списку URL-адрес</translation>
 <translation id="2061810934846663491">Налаштовувати обов’язкові доменні імена хостів віддаленого доступу</translation>
 <translation id="2069350366303315077">Якщо це правило ввімкнено, <ph name="PRODUCT_NAME" /> примусово активовує сеанси в режимі "Гість" і не дозволяє входити в профіль. Вхід у режимі "Гість" у <ph name="PRODUCT_NAME" /> відбувається у вікнах у режимі анонімного перегляду.
@@ -1121,13 +1115,6 @@
 <translation id="2801065672151277034">Параметри керування сертифікатами</translation>
 <translation id="2801155097555584385">Налаштувати рівень початку заряджання акумулятора у відсотках</translation>
 <translation id="2805707493867224476">Дозволяти всім сайтам показувати спливаючі вікна</translation>
-<translation id="2808013382476173118">Дозволяє використання серверів STUN, коли віддалені клієнти намагаються встановити з’єднання з цим комп’ютером.
-
-          Якщо це налаштування ввімкнено, віддалені клієнти можуть виявляти такі комп’ютери та з’єднуватися з ними, навіть якщо вони розділені брандмауером.
-
-          Якщо це налаштування вимкнено, а вихідні з’єднання за протоколом UDP фільтруються брандмауером, такий комп’ютер дозволяє лише з’єднання з клієнтських комп’ютерів у локальній мережі.
-
-          Якщо це правило не встановлено, його буде ввімкнено.</translation>
 <translation id="2813281962735757923">Це правило керує проміжками часу, протягом яких пристрою <ph name="PRODUCT_OS_NAME" /> забороняється автоматично шукати оновлення.
       Якщо для цього правила вказано непорожній список проміжків часу:
       пристрої не зможуть автоматично шукати оновлення протягом указаних проміжків часу. Це правило не стосується пристроїв, для яких потрібне відкочування або версія яких нижча за <ph name="PRODUCT_OS_NAME" />, через потенційні проблеми з безпекою. Крім того, це правило не заблокує пошук оновлень за запитом користувача чи адміністратора.
@@ -1731,9 +1718,6 @@
       Якщо це правило вимкнено або не налаштовано, зареєстровані пристрої не надсилатимуть такі дані.</translation>
 <translation id="3736879847913515635">Додавати користувачів у диспетчері користувачів</translation>
 <translation id="3750220015372671395">Заборонити цим сайтам генерувати ключі</translation>
-<translation id="375266612405883748">Обмежує діапазон порту UDP, який використовується хостом віддаленого доступу на цьому пристрої.
-
-          Якщо це правило не налаштовано або рядок порожній, хост віддаленого доступу може використовувати будь-який доступний порт за умови, що правило <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> вимкнено. Інакше хост віддаленого доступу використовує порти UDP в діапазоні 12400–12409.</translation>
 <translation id="3755237588083934849">За допомогою цього правила можна вказати частоту в мілісекундах, з якою надсилатимуться дані про статус пристрою. Мінімальне значення – 60 секунд.
 
       Якщо це правило не налаштовано, застосовується діапазон за умовчанням (3 години).</translation>
@@ -2061,11 +2045,6 @@
           Якщо це правило налаштовано, користувачі не можуть змінювати або замінювати його.
 
           Якщо це правило не налаштовано, автоклік буде вимкнено, але користувач може будь-коли ввімкнути його.</translation>
-<translation id="4214536984333857724">Якщо цей параметр увімкнено, запити на автентифікацію Gnubby надсилатимуться через проксі-сервер через підключення до віддаленого хосту.
-
-          Для правильної роботи цієї функції потрібні додаткові компоненти, які недоступні за межами середовища мережі Google.
-
-          Якщо це правило вимкнено, запити на автентифікацію Gnubby не надсилатимуться через проксі-сервер.</translation>
 <translation id="4224610387358583899">Затримки блокування екрана</translation>
 <translation id="4225260426043444650">Налаштування цього правила дають змогу користувачам застосовувати веб-переглядач <ph name="LACROS_NAME" />.
 
@@ -2238,9 +2217,6 @@
       Це правило працює для <ph name="PRODUCT_NAME" />, лише якщо комп'ютер зареєстровано відповідно до правила <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" />.
       Для <ph name="PRODUCT_OS_NAME" /> це правило діє завжди.</translation>
 <translation id="4578265298946081589">Не перезапускати після виходу користувача з облікового запису.</translation>
-<translation id="4578912515887794133">Якщо це налаштування ввімкнено, хост віддаленого доступу порівнює ім’я локального користувача (з яким пов’язано хост) з назвою облікового запису Google, зареєстрованого як власник хосту (наприклад, "ivantkach", якщо хост належить обліковому запису Google ivantkach@example.com).  Хост віддаленого доступу не запускається, якщо ім’я його власника відрізняється від імені локального користувача, з яким пов’язано хост.  Щоб обліковий запис Google власника хосту пов’язувався з конкретним доменом (наприклад, "example.com"), правило RemoteAccessHostMatchUsername потрібно використовувати разом із RemoteAccessHostDomain.
-
-          Якщо це правило вимкнено або не налаштовано, хост віддаленого доступу може пов’язуватся з будь-яким локальним користувачем.</translation>
 <translation id="4587365491100112056">За допомогою налаштувань цього правила можна вказати в годинах період збереження кешу даних автентифікації. Кеш містить дані про ті області, які область машини вважає надійними (пов'язані області). Тому кешування даних автентифікації допомагає пришвидшити вхід в обліковий запис. Дані користувачів і про непов'язані області не кешуються.
 
       Якщо для цього правила вибрано значення 0, кешування даних автентифікації буде вимкнено. Дані про область витягуватимуться під час кожного входу. Тому, якщо ви вимкнете кешування даних автентифікації, вхід користувачів в облікові записи може відбуватися набагато повільніше.
@@ -2383,15 +2359,6 @@
 <translation id="487460824085252184">Переміщувати автоматично без дозволу користувача.</translation>
 <translation id="4874982543810021567">Блокувати WebUSB на цих сайтах</translation>
 <translation id="4876805738539874299">Увімкнено максимальну версію SSL</translation>
-<translation id="487928067861956387">Налаштовує обов'язкові доменні імена, які надаються хостам віддаленого доступу. Користувачі не можуть змінювати це налаштування.
-
-          Якщо цей параметр ввімкнено й налаштовано для принаймні одного домену, спільний доступ до хостів можна отримати лише з облікових записів, зареєстрованих в одному з указаних доменів.
-
-          Якщо цей параметр вимкнено, не налаштовано або для нього вказано порожній список, спільний доступ до хостів можна отримати з будь-якого облікового запису.
-
-          Цей параметр замінює правило <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" />, якщо таке застосовується.
-
-          Перегляньте також правило <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="4887274746092315609">Дає змогу користувачам SAML змінювати пароль на сторінці під час сеансу</translation>
 <translation id="4892647988357350237">За умовчанням Умови використання відображаються під час першого запуску спеціальної вкладки Chrome. Якщо для цього правила вибрано значення <ph name="SKIP_TOS_DIALOG" />, вікно Умов використання не з'являтиметься під час першого й наступних запусків. Якщо для цього правила вибрано значення <ph name="STANDARD_TOS_DIALOG" /> або його не налаштовано, вікно Умов використання з'являтиметься під час першого запуску. Інші попередження
 
@@ -2656,15 +2623,6 @@
 
       Тут "версія" може означати точний номер (як-от "61.0.3163.120") або префікс версії (наприклад, "'61.0").  </translation>
 <translation id="5247006254130721952">Блокувати небезпечні завантаження</translation>
-<translation id="5249303875508803168">Налаштовує потрібні доменні імена, які надаються клієнтам із віддаленим доступом. Користувачі не можуть змінювати це налаштування.
-
-          Якщо цей параметр ввімкнено й налаштовано принаймні для одного домену, лише клієнти з одного з указаних доменів можуть підключатися до хосту.
-
-          Якщо цей параметр вимкнено, не налаштовано або для нього вказано порожній список, застосовується правило з'єднання за умовчанням. Для віддаленої допомоги до хосту можуть підключатися клієнти з будь-якого домену. Для постійного віддаленого доступу може під'єднуватися лише власник хосту.
-
-          Цей параметр замінює правило <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" />, якщо таке застосовується.
-
-          Перегляньте також правило <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="5249453807420671499">Користувачі можуть додавати облікові записи Kerberos</translation>
 <translation id="5252995168844634755">Якщо для цього правила вибрано значення True, буде ввімкнено уніфікований режим робочого столу, у якому додатки можуть відображатися на кількох дисплеях. Користувачі можуть вимкнути цей режим для окремих дисплеїв.
 
@@ -2801,11 +2759,6 @@
 <translation id="5390083518957894426">Вмикає повторну онлайн-автентифікацію на заблокованому екрані для користувачів SAML</translation>
 <translation id="5391388690191341203">Автоматичний вхід у локальний обліковий запис на пристрої</translation>
 <translation id="5393009997533871906">Користувачі бачать принтери лише з білого списку</translation>
-<translation id="5395271912574071439">Вмикає закривання хостів віддаленого доступу під час з’єднання.
-
-          Якщо це налаштування ввімкнено, фізичні вхідні та вихідні пристрої хостів вимикаються під час процедури віддаленого з’єднання.
-
-          Якщо це налаштування вимкнено або не налаштовано, локальні та віддалені користувачі можуть взаємодіяти з хостом, якщо до нього надано спільний доступ.</translation>
 <translation id="5401696449591951427">Увімкнути <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">Налаштовує, які розкладки клавіатури дозволені на екрані входу в <ph name="PRODUCT_OS_NAME" />.
 
@@ -3428,9 +3381,6 @@
 <translation id="6401669939808766804">Вихід користувача</translation>
 <translation id="640244877779556713">Увімкнути підказки смайлів</translation>
 <translation id="6407093060083181305">Налаштувати чорний список для встановлення розширень</translation>
-<translation id="6408233796253901198">Якщо це правило налаштовано, хост віддаленого доступу використовуватиме цю URL-адресу для підтвердження маркерів автентифікації від клієнтів із віддаленим доступом, щоб приймати з'єднання. Це правило потрібно використовувати разом із правилом RemoteAccessHostTokenUrl.
-
-          Якщо це правило не налаштовано або для нього не вказано значення, згадана функція буде вимкнена.</translation>
 <translation id="6417265370957905582">Google Асистент</translation>
 <translation id="6422575351619065453">Контролює, чи відображається плаваюче меню спеціальних можливостей у режимі термінала.
 
@@ -4069,9 +4019,6 @@
       Якщо це правило деактивовано або не налаштовано, правило KDC ігнорується на підтримуваних платформах і застосовується лише правило <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" />.
 
       У <ph name="MS_WIN_NAME" /> правило KDC застосовується завжди.</translation>
-<translation id="7273823081800296768">Якщо цей параметр увімкнено або не налаштовано, користувачі можуть підключати клієнтів і хостів під час з’єднання, не вводячи PIN-код.
-
-          Якщо цей параметр вимкнено, ця функція недоступна.</translation>
 <translation id="7274077256421167535">Увімкнути USB PowerShare</translation>
 <translation id="7275334191706090484">Закладки, якими керує адміністратор</translation>
 <translation id="7278854311116092134">Імена хостів для обміну повідомленнями з оригінальними додатками, які потрібно виключити з чорного списку</translation>
@@ -4201,9 +4148,6 @@
 
       Це правило більше не підтримується. Натомість використовуйте правило <ph name="PRINTERS_POLICY_NAME" />.
       </translation>
-<translation id="7504632989711326175">Якщо це правило налаштовано, хост використовує сертифікат клієнта з наданим загальним іменем видавця, щоб автентифікувати правило RemoteAccessHostTokenValidationUrl. Щоб використовувати будь-який наявний сертифікат клієнта, введіть значення "*".
-
-          Якщо це правило не налаштовано або для нього не вказано значення, згадана функція буде вимкнена.</translation>
 <translation id="7506745375479451616">Це правило вказує, яка команда відкриває URL-адреси в <ph name="PRODUCT_NAME" /> під час переходу з <ph name="IE_PRODUCT_NAME" />. Для цього правила можна вибрати шлях файлу або <ph name="PRODUCT_NAME_PLACEHOLDER" />, щоб автоматично визначати місцезнаходження <ph name="PRODUCT_NAME" />.
 
       Якщо це правило не налаштовано, <ph name="IE_PRODUCT_NAME" /> автоматично визначає шлях виконуваного файлу <ph name="PRODUCT_NAME" />, коли запускає <ph name="PRODUCT_NAME" /> з Internet Explorer.
@@ -4799,13 +4743,6 @@
 <translation id="8371178326720637170">Дозволяє керованим розширенням використовувати Enterprise Hardware Platform API</translation>
 <translation id="8375817202037102567">Заборонити редагувати файли й каталоги на цих сайтах</translation>
 <translation id="8379317372795444261">Автентифікацію <ph name="BASIC_AUTH" /> дозволено під час з'єднань HTTP</translation>
-<translation id="8380490658357556620">Вмикає використання серверів ретрансляції, коли віддалені клієнти намагаються встановити з’єднання з цим пристроєм.
-
-          Якщо це налаштування ввімкнено, віддалені клієнти можуть з’єднуватися з цим пристроєм через сервери ретрансляції, коли пряме з’єднання недоступне (наприклад, через обмеження брандмауера).
-
-          Зауважте, що це правило ігнорується, якщо вимкнено <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" />.
-
-          Якщо правило не налаштовано, вмикається цей параметр.</translation>
 <translation id="838056554726401140">Список URL-адрес, до яких застосовується правило <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Це правило не впливає на параметри автоматичного відкривання файлів, які вказав користувач.
 
       Якщо це правило налаштовано, файли відкриватимуться автоматично, лише якщо URL-адреса вказана в налаштуваннях, а тип файлу – у правилі <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Якщо принаймні одну умову не виконано, завантажений файл не відкриватиметься автоматично згідно з цим правилом.
@@ -4976,9 +4913,6 @@
       Якщо для цього правила вибрано значення true, вкладки, які були у фоновому режимі принаймні 5 хвилин, можуть зависати. Таким чином ЦП, акумулятор і пам'ять використовуються менше. За допомогою евристичних методів <ph name="PRODUCT_NAME" /> визначає вкладки, які виконують корисні завдання у фоновому режимі (як-от показують сповіщення, відтворюють звук, транслюють відео). Веб-розробники можуть вимкнути зависання для свого сайту (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Якщо для цього правила вибрано значення false, вкладки не зависатимуть.</translation>
-<translation id="8622378389102774881">Якщо це правило налаштовано, хост віддаленого доступу під час з'єднання проситиме клієнтів надати маркер автентифікації з цієї сторінки. Це правило потрібно використовувати разом із правилом RemoteAccessHostTokenValidationUrl.
-
-          Якщо це правило не налаштовано або для нього не вказано значення, згадана функція буде вимкнена.</translation>
 <translation id="8631434304112909927">до версії <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">Список додатків для нотаток, які дозволені на заблокованому екрані <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="8649763579836720255">Пристрої ОС Chrome можуть використовувати віддалене засвідчення (перевірений доступ), щоб отримувати сертифікат, виданий ЦС ОС Chrome, який підтверджує, що пристрій може відтворювати захищений вміст. Ця процедура передбачає надсилання інформації схвалення апаратного забезпечення в ЦС ОС Chrome, яка унікально ідентифікує пристрій.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index d471d605..778725b 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">Cho phép người dùng chọn sử dụng một dịch vụ ẩn danh của Google để cung cấp nội dung mô tả tự động cho những hình ảnh chưa gắn nhãn</translation>
 <translation id="1087437665304381368">Chính sách này chỉ kiểm soát chế độ nhà phát triển của <ph name="PRODUCT_OS_NAME" />. Nếu muốn ngăn khả năng truy cập vào Tùy chọn của nhà phát triển Android, bạn cần đặt chính sách <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation>
 <translation id="1087707496788636333">Danh sách chính sách của Chrome Enterprise sẽ chuyển sang vị trí mới! Vui lòng cập nhật dấu trang của bạn thành <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
-<translation id="1093082332347834239">Nếu cài đặt này được bật, máy chủ hỗ trợ từ xa sẽ chạy theo quy trình với các quyền <ph name="UIACCESS_PERMISSION_NAME" />. Điều này sẽ cho phép người dùng ở xa tương tác với cửa sổ bật lên trên màn hình của người dùng cục bộ.
-
-          Nếu cài đặt này bị tắt hoặc không được định cấu hình, máy chủ hỗ trợ từ xa sẽ chạy trên ngữ cảnh của người dùng và người dùng ở xa không thể tương tác với cửa sổ bật lên trên màn hình.</translation>
 <translation id="1095209545735032039">Chặn API nối tiếp trên các trang web này</translation>
 <translation id="1096105751829466145">Nhà cung cấp dịch vụ tìm kiếm mặc định</translation>
 <translation id="1099282607296956954">Bật chính sách Cô lập trang web cho mọi trang web</translation>
@@ -217,6 +214,7 @@
 <translation id="1393485621820363363">Đã bật máy in kết nối với thiết bị dành cho doanh nghiệp</translation>
 <translation id="1397855852561539316">URL đề xuất của nhà cung cấp dịch vụ tìm kiếm mặc định</translation>
 <translation id="1413936351612032792">Báo cáo thông tin về việc sử dụng các ứng dụng Linux</translation>
+<translation id="1418387035898607074">Bỏ qua quá trình kiểm tra của tính năng Duyệt web an toàn đối với các tệp tải xuống từ nguồn đáng tin cậy</translation>
 <translation id="142346659686073702">Cho phép người dùng chưa liên kết sử dụng Crostini</translation>
 <translation id="1425551776320718592">Ngăn người dùng thiết bị này sử dụng tính năng cài đặt không qua cửa hàng của Cầu gỡ lỗi Android (ADB) mà không buộc thiết bị chạy powerwash vì điều này có thể khiến thiết bị có trạng thái bảo mật là đáng ngờ</translation>
 <translation id="1426170570389588560">Đặt khoảng thời gian tính bằng ngày để lưu trữ siêu dữ liệu về lệnh in</translation>
@@ -444,9 +442,15 @@
       Nếu bạn đặt chính sách này thành False, thì người dùng không thể thêm, xóa hoặc sửa đổi dấu trang. Người dùng vẫn có thể sử dụng dấu trang hiện có.</translation>
 <translation id="1715151459541210849">Bật tính năng hỗ trợ tiếp cận về đọc chính tả</translation>
 <translation id="172374442286684480">Cho phép tất cả trang web lưu dữ liệu trên máy</translation>
+<translation id="1729169799290004131">Việc đặt chính sách này sẽ chỉ định tỷ lệ phần trăm độ sáng màn hình, tắt các tính năng tự động điều chỉnh độ sáng. Độ sáng màn hình ban đầu sẽ thay đổi theo giá trị của chính sách nhưng người dùng có thể thay đổi giá trị này.
+
+      Nếu bạn không đặt chính sách này, các tùy chọn kiểm soát màn hình của người dùng và tính năng tự động điều chỉnh độ sáng sẽ không bị ảnh hưởng.
+
+      Lưu ý: Bạn phải chỉ định các giá trị của chính sách này trong khoảng từ 0 đến 100%.</translation>
 <translation id="1736269219679256369">Cho phép tiến hành từ trang cảnh báo SSL</translation>
 <translation id="174765717426930019">Cho phép tất cả cửa sổ bật lên ở trạng thái mở với mục tiêu <ph name="BLANK_PAGE_NAME" /> để tương tác với chính trang đã yêu cầu mở cửa sổ bật lên trừ phi trang mở không chọn hoạt động tương tác đó một cách rõ ràng </translation>
 <translation id="1750315445671978749">Chặn tải tất cả các tệp xuống</translation>
+<translation id="1755310913456007816">Sử dụng các tùy chọn cài đặt kiểm tra trạng thái thu hồi trực tuyến hiện có</translation>
 <translation id="1760951637494635692">Cho phép API nối tiếp trên các trang web này</translation>
 <translation id="1765512315997108908">Kiểm soát những máy in trong <ph name="DEVICE_PRINTERS_POLICY_NAME" /> mà người dùng có thể sử dụng.
 
@@ -497,6 +501,7 @@
 <translation id="1844972978764975668">Cho phép sẽ gửi các truy vấn đến máy chủ của Google để truy xuất dấu thời gian chính xác</translation>
 <translation id="1845405905602899692">Cài đặt kiosk</translation>
 <translation id="1845429996559814839">Hạn chế chế độ in mã PIN</translation>
+<translation id="1846545322805269573">Người dùng không thể tùy chỉnh hình nền của trang Thẻ mới</translation>
 <translation id="1847960418907100918">Chỉ định tham số được dùng khi thực hiện tìm kiếm tức thì với POST. Tham số này bao gồm các cặp tên/giá trị phân tách bằng dấu phẩy. Nếu một giá trị là tham số mẫu như {searchTerms} trong ví dụ trên, tham số đó sẽ được thay thế bằng dữ liệu cụm từ tìm kiếm thực.
 
           Chính sách này là tùy chọn. Nếu không đặt, yêu cầu tìm kiếm tức thì sẽ được gửi bằng phương thức GET.
@@ -560,6 +565,37 @@
 <translation id="1971991630422430420">Nếu bạn đặt chính sách này thành Bật, người dùng có thể sử dụng tính năng Chuyển đổi nhanh khi điểm truy cập không dây hỗ trợ tính năng đó. Chính sách này áp dụng cho mọi người dùng và giao diện trên thiết bị.
 
       Nếu bạn không đặt hoặc đặt chính sách này thành Tắt, thì người dùng không thể sử dụng tính năng Chuyển đổi nhanh.</translation>
+<translation id="197744850608781984">Việc đặt chính sách này sẽ kiểm soát chiến lược quản lý nguồn khi người dùng ở chế độ tạm vắng.
+
+      Có 4 hành động:
+
+      * Màn hình sẽ giảm độ sáng nếu người dùng ở chế độ tạm vắng trong khoảng thời gian do <ph name="SCREEN_DIM_FIELD_NAME" /> chỉ định.
+
+      * Màn hình sẽ tắt nếu người dùng ở chế độ tạm vắng trong khoảng thời gian do <ph name="SCREEN_OFF_FIELD_NAME" /> chỉ định.
+
+      * Một hộp thoại cảnh báo sẽ xuất hiện nếu người dùng vẫn ở chế độ tạm vắng trong khoảng thời gian do <ph name="IDLE_WARNING_FIELD_NAME" /> chỉ định. Hộp thoại này cảnh báo người dùng rằng hệ thống sẽ thực hiện hành động ở chế độ tạm vắng và chỉ xuất hiện nếu hành động ở chế độ tạm vắng là đăng xuất hoặc tắt máy.
+
+      * Hệ thống sẽ thực hiện hành động do <ph name="IDLE_ACTION_FIELD_NAME" /> chỉ định nếu người dùng ở chế độ tạm vắng trong khoảng thời gian Tạm vắng đã chỉ định.
+
+      Đối với từng hành động nêu trên, bạn nên chỉ định thời gian chờ bằng mili giây và phải đặt thời gian chờ thành một giá trị lớn hơn 0 để kích hoạt hành động tương ứng. Nếu bạn đặt thời gian chờ thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không thực hiện hành động tương ứng.
+
+      Đối với từng loại thời gian chờ nêu trên, khi bạn không đặt khoảng thời gian, hệ thống sẽ sử dụng giá trị mặc định.
+
+      Các giá trị của <ph name="SCREEN_DIM_FIELD_NAME" /> sẽ được giới hạn ở mức nhỏ hơn hoặc bằng <ph name="SCREEN_OFF_FIELD_NAME" />. <ph name="SCREEN_OFF_FIELD_NAME" /> và <ph name="IDLE_WARNING_FIELD_NAME" /> sẽ được giới hạn ở mức nhỏ hơn hoặc bằng giá trị của chế độ Tạm vắng.
+
+      <ph name="IDLE_ACTION_FIELD_NAME" /> có thể là 1 trong 4 hành động:
+
+      * <ph name="IDLE_ACTION_ENUM_SUSPEND" />
+
+      * <ph name="IDLE_ACTION_ENUM_LOGOUT" />
+
+      * <ph name="IDLE_ACTION_ENUM_SHUTDOWN" />
+
+      * <ph name="IDLE_ACTION_ENUM_DO_NOTHING" />
+
+      Nếu bạn không đặt <ph name="IDLE_ACTION_FIELD_NAME" />, hệ thống sẽ thực hiện <ph name="IDLE_ACTION_ENUM_SUSPEND" />.
+
+      Lưu ý: Có các tùy chọn cài đặt riêng cho nguồn AC và pin.</translation>
 <translation id="1988345404999458987">Cung cấp cấu hình của các máy chủ máy in hiện có.
 
       Chính sách này cho phép bạn cung cấp cấu hình của các máy chủ máy in bên ngoài cho thiết bị <ph name="PRODUCT_OS_NAME" /> dưới dạng tệp JSON.
@@ -624,9 +660,6 @@
 <translation id="2040479044912658454">Chế độ tạo điểm ảnh bản in</translation>
 <translation id="2043749682619281558">Bật tính năng làm nổi bật con trỏ trên màn hình đăng nhập</translation>
 <translation id="2043770014371753404">Đã tắt máy in dành cho doanh nghiệp</translation>
-<translation id="2050629715135525072">Kiểm soát xem người dùng kết nối với máy chủ truy cập từ xa có thể chuyển tệp giữa máy chủ và máy khách không. Chính sách này không áp dụng cho các đường kết nối trợ giúp từ xa không hỗ trợ tính năng chuyển tệp.
-
-          Nếu bạn tắt tùy chọn cài đặt này, thì người dùng sẽ không được phép chuyển tệp. Nếu bạn bật hoặc không đặt tùy chọn cài đặt này, thì người dùng có thể chuyển tệp.</translation>
 <translation id="2057317273526988987">Cho phép truy cập vào một danh sách các URL</translation>
 <translation id="2061810934846663491">Định cấu hình tên miền bắt buộc cho máy chủ truy cập từ xa</translation>
 <translation id="2069350366303315077">Khi bạn đặt chính sách này thành Bật, thì <ph name="PRODUCT_NAME" /> sẽ thực thi các phiên khách và ngăn chặn các phiên đăng nhập vào hồ sơ. Phiên đăng nhập khách là các hồ sơ <ph name="PRODUCT_NAME" />, trong đó các cửa sổ đều ở Chế độ ẩn danh.
@@ -642,6 +675,7 @@
 <translation id="209586405398070749">Kênh ổn định</translation>
 <translation id="2098658257603918882">Bật tính năng báo cáo sử dụng và dữ liệu liên quan đến sự cố</translation>
 <translation id="2104418465060359056">Báo cáo thông tin về Tiện ích và Plugin</translation>
+<translation id="2106166591774188922">Cho phép người dùng SAML thay đổi mật khẩu SAML trong phiên đăng nhập tại chrome://password-change</translation>
 <translation id="2106627642643925514">Ghi đè chế độ in mã PIN mặc định. Nếu không có chế độ này, thì chính sách này sẽ bị bỏ qua.</translation>
 <translation id="2107563874993284076">Nếu bạn đặt chính sách này thành Bật, người dùng sẽ có thể sử dụng tính năng Chia sẻ tệp trong mạng của <ph name="PRODUCT_NAME" />. Nếu bạn đặt chính sách này thành Tắt, người dùng sẽ không sử dụng được tính năng này.</translation>
 <translation id="2107601598727098402">
@@ -1121,13 +1155,6 @@
 <translation id="2801065672151277034">Các tùy chọn quản lý chứng chỉ</translation>
 <translation id="2801155097555584385">Đặt mức phần trăm bắt đầu sạc pin tùy chỉnh</translation>
 <translation id="2805707493867224476">Cho phép tất cả các trang web hiển thị cửa sổ bật lên</translation>
-<translation id="2808013382476173118">Cho phép sử dụng máy chủ STUN khi máy khách từ xa cố gắng thiết lập kết nối với máy tính này.
-
-          Nếu cài đặt này được bật, máy khách từ xa có thể phát hiện và kết nối với máy tính này ngay cả khi chúng bị tường lửa chia cách.
-
-          Nếu cài đặt này bị tắt và kết nối UDP đi bị lọc bởi tường lửa, máy tính này sẽ chỉ cho phép kết nối từ các máy khách trong mạng cục bộ.
-
-          Nếu không đặt chính sách này, cài đặt này sẽ được bật.</translation>
 <translation id="2813281962735757923">Chính sách này kiểm soát khung thời gian mà thiết bị <ph name="PRODUCT_OS_NAME" /> không được phép tự động kiểm tra bản cập nhật.
       Khi bạn đặt chính sách này thành một danh sách không còn trống có chứa các khoảng thời gian, thì:
       Thiết bị sẽ không thể tự động kiểm tra bản cập nhật trong khoảng thời gian chỉ định. Chính sách này sẽ không ảnh hưởng đến các thiết bị yêu cầu hạ cấp hệ điều hành hoặc thiết bị chạy phiên bản <ph name="PRODUCT_OS_NAME" /> thấp hơn phiên bản tối thiểu do các vấn đề bảo mật tiềm ẩn. Ngoài ra, chính sách này sẽ không chặn hoạt động kiểm tra bản cập nhật do người dùng hoặc quản trị viên yêu cầu.
@@ -1233,6 +1260,7 @@
 <translation id="2957513448235202597">Loại tài khoản để xác thực <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959469725686993410">Luôn gửi điểm truy cập Wi-Fi tới máy chủ trong khi phân giải múi giờ</translation>
 <translation id="2959898425599642200">Quy tắc bỏ qua proxy</translation>
+<translation id="2960013482187484833">Dùng máy in được sử dụng gần đây nhất làm lựa chọn mặc định trong chế độ Xem trước bản in</translation>
 <translation id="2960128438010718932">Lịch trình thử nghiệm cho việc áp dụng bản cập nhật mới</translation>
 <translation id="2960691910306063964">Bật hoặc tắt xác thực không có mã PIN cho các máy chủ truy cập từ xa</translation>
 <translation id="2964373560810620158">Ngăn người dùng sử dụng trình duyệt <ph name="LACROS_NAME" /></translation>
@@ -1329,6 +1357,7 @@
 <translation id="3072847235228302527">Đặt Điều khoản dịch vụ cho một tài khoản cục bộ trên thiết bị</translation>
 <translation id="3086995894968271156">Định cấu hình Bộ thu Google Cast trong <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3091832372132789233">Sạc pin cho những thiết bị chủ yếu kết nối với nguồn điện bên ngoài.</translation>
+<translation id="3092059499596000593">Dùng máy in mặc định của hệ thống làm lựa chọn mặc định trong chế độ Xem trước bản in</translation>
 <translation id="309416443108680956">Chỉ rõ điều gì sẽ xảy ra khi người dùng đang xác thực qua một mã bảo mật (chẳng hạn như qua thẻ thông minh) xóa mã đó khi phiên xác thực đang diễn ra. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />: Không có điều gì xảy ra. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />: Màn hình sẽ bị khóa cho đến khi người dùng xác thực lại. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />: Phiên xác thực kết thúc và người dùng bị đăng xuất. Nếu bạn không đặt chính sách này, chính sách mặc định sẽ là <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />.</translation>
 <translation id="3096595567015595053">Danh sách plugin được kích hoạt</translation>
 <translation id="3101501961102569744">Chọn cách chỉ định cài đặt máy chủ proxy</translation>
@@ -1382,6 +1411,11 @@
 <translation id="3219421230122020860">Chế độ ẩn danh khả dụng</translation>
 <translation id="3220624000494482595">Nếu ứng dụng kiosk là một ứng dụng Android thì ứng dụng này không có quyền kiểm soát đối với phiên bản <ph name="PRODUCT_OS_NAME" /> ngay cả khi chính sách này được đặt thành <ph name="TRUE" />.</translation>
 <translation id="322359555555487980">Xác định tình trạng có sẵn của các biến thể trên <ph name="PRODUCT_OS_NAME" /></translation>
+<translation id="3231617925177241750">Nếu bạn đặt chính sách này thành Bật, đồng thời đặt <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_POLICY_NAME" /> và <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_POLICY_NAME" />, thì hệ thống sẽ luôn bật chế độ chuyển đổi nguồn điện vào giờ cao điểm nếu được hỗ trợ trên thiết bị. Chính sách quản lý nguồn điện khi chuyển đổi vào giờ cao điểm là một chính sách tiết kiệm điện năng giúp giảm thiểu việc sử dụng dòng điện xoay chiều trong những thời điểm có mức sử dụng cao điểm. Bạn có thể đặt thời gian bắt đầu và thời gian kết thúc để chạy trong chế độ chuyển đổi nguồn điện vào giờ cao điểm cho từng ngày trong tuần. Hệ thống sẽ chạy bằng pin (ngay cả khi được kết nối với dòng điện xoay chiều) trong những thời điểm này miễn là pin ở trên ngưỡng được chỉ định. Sau thời gian kết thúc được chỉ định, hệ thống sẽ chạy bằng dòng điện xoay chiều (nếu được kết nối) nhưng sẽ không sạc pin. Hệ thống sẽ hoạt động bình thường trở lại bằng dòng điện xoay chiều và sạc lại pin sau thời gian bắt đầu được chỉ định.
+
+      Nếu bạn đặt chính sách này thành Tắt, hệ thống sẽ luôn tắt chế độ chuyển đổi nguồn điện vào giờ cao điểm.
+
+      Nếu bạn không đặt chính sách này, thì ban đầu, chế độ chuyển đổi nguồn điện vào giờ cao điểm sẽ tắt. Người dùng không thể thay đổi tùy chọn cài đặt này.</translation>
 <translation id="3231837273069128027">Việc đặt chính sách này sẽ định cấu hình tình trạng có sẵn và chế độ của các bản cập nhật chương trình cơ sở <ph name="TPM_FIRMWARE_UPDATE_TPM" />.
 
       Bạn có thể chỉ định từng tùy chọn cài đặt trong thuộc tính JSON:
@@ -1731,9 +1765,6 @@
       Nếu bạn không đặt hoặc đặt chính sách này thành Tắt, thiết bị đã đăng ký sẽ không báo cáo số liệu thống kê đó.</translation>
 <translation id="3736879847913515635">Cho phép thêm người trong trình quản lý người dùng</translation>
 <translation id="3750220015372671395">Chặn tạo khóa trên các trang web này</translation>
-<translation id="375266612405883748">Hạn chế phạm vi của cổng Giao thức gói dữ liệu người dùng (UDP) do máy chủ truy cập từ xa sử dụng trên máy tính này.
-
-          Nếu bạn không đặt chính sách này hoặc đặt thành chuỗi trống, máy chủ truy cập từ xa sẽ được phép sử dụng bất kỳ cổng nào có sẵn, trừ khi bạn tắt chính sách <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" />. Trong trường hợp đó, máy chủ truy cập từ xa sẽ sử dụng cổng Giao thức gói dữ liệu người dùng (UDP) trong phạm vi 12400-12409.</translation>
 <translation id="3755237588083934849">Việc đặt chính sách này sẽ xác định tần suất tải trạng thái thiết bị lên, tính bằng mili giây. Thời gian tối thiểu cho phép là 60 giây.
 
       Nếu bạn không đặt chính sách này, khoảng thời gian mặc định là 3 giờ sẽ được áp dụng.</translation>
@@ -1758,6 +1789,7 @@
       Nếu bạn đặt thành Tắt hoặc không đặt chính sách này, <ph name="PRODUCT_OS_NAME" /> sẽ cho phép người dùng tắt thiết bị.</translation>
 <translation id="3765260570442823273">Thời lượng hiển thị thông điệp cảnh báo đăng xuất khi không hoạt động</translation>
 <translation id="377044054160169374">Thực thi can thiệp trải nghiệm lạm dụng</translation>
+<translation id="3778689139323007309">Thực hiện quá trình kiểm tra trạng thái thu hồi đối của các chứng chỉ máy chủ đã xác thực thành công, được ký theo chứng chỉ CA đã cài đặt trên máy</translation>
 <translation id="3780152581321609624">Bao gồm cổng không chuẩn trong  Kerberos SPN</translation>
 <translation id="3788662722837364290">Cài đặt quản lý nguồn khi người dùng không sử dụng</translation>
 <translation id="3790085888761753785">Nếu bạn bật tùy chọn cài đặt này, thì người dùng sẽ được phép đăng nhập vào tài khoản của họ bằng tính năng Smart Lock. Tùy chọn này cấp nhiều quyền hơn so với hành vi Smart Lock thông thường (chỉ cho phép người dùng mở khóa màn hình).
@@ -2061,11 +2093,6 @@
           Nếu bạn đặt chính sách này, thì người dùng sẽ không thể thay đổi hay ghi đè chính sách.
 
           Nếu bạn không đặt chính sách này, thì ban đầu, tính năng tự động nhấp sẽ tắt nhưng người dùng có thể bật bất cứ lúc nào.</translation>
-<translation id="4214536984333857724">Nếu bạn bật tùy chọn cài đặt này, các yêu cầu xác thực gnubby sẽ được xử lý qua proxy bằng kết nối máy chủ từ xa.
-
-          Lưu ý: Để hoạt động đúng cách, tính năng này cần có các thành phần bổ sung không thể truy cập từ bên ngoài môi trường Mạng Google.
-
-          Nếu bạn tắt tùy chọn cài đặt này, các yêu cầu xác thực gnubby sẽ không được xử lý qua proxy.</translation>
 <translation id="4224610387358583899">Độ trễ khóa màn hình</translation>
 <translation id="4225260426043444650">Tùy chọn cài đặt này cho phép người dùng sử dụng trình duyệt <ph name="LACROS_NAME" />.
 
@@ -2238,9 +2265,6 @@
       Đối với <ph name="PRODUCT_NAME" />, chính sách này chỉ có hiệu lực khi máy được đăng ký bằng <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" />.
       Đối với <ph name="PRODUCT_OS_NAME" />, chính sách này luôn có hiệu lực.</translation>
 <translation id="4578265298946081589">Không khởi động lại khi đăng xuất người dùng.</translation>
-<translation id="4578912515887794133">Nếu bạn bật tùy chọn cài đặt này, máy chủ truy cập từ xa sẽ so sánh tên của người dùng trên máy (liên kết với máy chủ) và tên tài khoản Google được đăng ký làm chủ sở hữu máy chủ (ví dụ như "johndoe" nếu tài khoản Google "johndoe@example.com" sở hữu máy chủ này).  Máy chủ truy cập từ xa sẽ không khởi động nếu tên của chủ sở hữu máy chủ khác với tên của người dùng trên máy được liên kết với máy chủ.  Bạn nên sử dụng chính sách RemoteAccessHostMatchUsername cùng với chính sách RemoteAccessHostDomain để đồng thời buộc tài khoản Google của chủ sở hữu máy chủ liên kết với một miền cụ thể (ví dụ như "example.com").
-
-          Nếu bạn tắt hoặc không đặt tùy chọn cài đặt này, máy chủ truy cập từ xa có thể liên kết với bất kỳ người dùng nào trên máy.</translation>
 <translation id="4587365491100112056">Nếu bạn đặt chính sách này, hệ thống sẽ chỉ định thời gian tồn tại (tính theo giờ) của bộ nhớ đệm lưu dữ liệu xác thực. Bộ nhớ đệm chứa dữ liệu về các miền được miền của máy này tin cậy (miền được liên kết). Vì vậy, việc lưu dữ liệu xác thực vào bộ nhớ đệm sẽ giúp quá trình đăng nhập diễn ra nhanh chóng. Dữ liệu riêng của người dùng và dữ liệu cho các miền chưa liên kết không được lưu vào bộ nhớ đệm.
 
       Nếu bạn đặt chính sách này thành 0, tính năng lưu dữ liệu xác thực vào bộ nhớ đệm sẽ bị tắt. Dữ liệu riêng của miền được tìm nạp mỗi lần đăng nhập, nên việc tắt tính năng lưu dữ liệu xác thực vào bộ nhớ đệm có thể làm chậm đáng kể quá trình đăng nhập của người dùng.
@@ -2385,15 +2409,6 @@
 <translation id="487460824085252184">Tự động di chuyển, không cần yêu cầu sự chấp thuận của người dùng.</translation>
 <translation id="4874982543810021567">Chặn WebUSB trên các trang web này</translation>
 <translation id="4876805738539874299">Đã bật phiên bản SSL tối đa</translation>
-<translation id="487928067861956387">Định cấu hình tên miền của máy chủ bắt buộc sẽ được áp dụng trên các máy chủ truy cập từ xa và ngăn người dùng thay đổi tên miền này.
-
-          Nếu bạn bật và đặt tùy chọn cài đặt này cho một hoặc nhiều miền, thì các máy chủ chỉ có thể được chia sẻ bằng các tài khoản đã đăng ký trên một trong những tên miền đã chỉ định.
-
-          Nếu bạn tắt, không đặt hoặc đặt tùy chọn cài đặt này thành danh sách trống, thì các máy chủ có thể được chia sẻ bằng bất kỳ tài khoản nào.
-
-          Tùy chọn cài đặt này sẽ ghi đè chính sách <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" />, nếu có.
-
-          Xem thêm <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="4887274746092315609">Cho phép một trang để người dùng SAML có thể đổi mật khẩu ngay trong phiên đăng nhập</translation>
 <translation id="4892647988357350237">Theo mặc định, Điều khoản dịch vụ sẽ hiển thị trong lần chạy đầu tiên của CCT. Nếu bạn đặt chính sách này thành <ph name="SKIP_TOS_DIALOG" />, hộp thoại Điều khoản dịch vụ sẽ không xuất hiện trong lần chạy đầu tiên hoặc những lần chạy tiếp theo. Nếu bạn đặt chính sách này thành <ph name="STANDARD_TOS_DIALOG" /> hoặc không đặt chính sách này, thì hộp thoại Điều khoản dịch vụ sẽ xuất hiện trong lần chạy đầu tiên. Các lưu ý khác:
 
@@ -2658,15 +2673,6 @@
 
       Ở đây, "Phiên bản" có thể là phiên bản chính xác, chẳng hạn như "61.0.3163.120", hoặc chỉ có tiền tố của phiên bản, chẳng hạn như "61.0"  </translation>
 <translation id="5247006254130721952">Chặn tải các tệp nguy hiểm xuống</translation>
-<translation id="5249303875508803168">Định cấu hình tên miền ứng dụng bắt buộc cho các ứng dụng truy cập từ xa và ngăn người dùng thay đổi tên miền này.
-
-          Nếu bạn bật và đặt tùy chọn cài đặt này cho một hoặc nhiều miền, thì chỉ những ứng dụng từ một trong các miền đã chỉ định này mới có thể kết nối với máy chủ.
-
-          Nếu bạn tắt, không đặt hoặc đặt tùy chọn cài đặt này thành danh sách trống, thì chính sách mặc định của loại kết nối này sẽ được áp dụng. Trong trường hợp trợ giúp từ xa, tùy chọn cài đặt này sẽ cho phép các ứng dụng từ miền bất kỳ có thể kết nối với máy chủ; còn đối với quyền truy cập từ xa mọi lúc, chỉ chủ sở hữu máy chủ mới có thể kết nối.
-
-          Tùy chọn cài đặt này sẽ ghi đè chính sách <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" />, nếu có.
-
-          Xem thêm <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />.</translation>
 <translation id="5249453807420671499">Người dùng có thể thêm các tài khoản Kerberos</translation>
 <translation id="5252995168844634755">Nếu bạn đặt chính sách này thành True, thì Màn hình hợp nhất sẽ bật và cho phép các ứng dụng mở rộng trên nhiều màn hình. Người dùng có thể tắt Màn hình hợp nhất cho các màn hình riêng lẻ.
 
@@ -2778,6 +2784,7 @@
           Nếu đặt thành đúng hoặc không định cấu hình, người dùng này có thể tạo và quản lý tài khoản người dùng bị giám sát.</translation>
 <translation id="5369937289900051171">Chỉ in màu</translation>
 <translation id="5370279767682621504">Bật hỗ trợ HTTP/0.9 trên các cổng không phải là cổng mặc định</translation>
+<translation id="5371152055157582429">Người dùng có thể tùy chỉnh hình nền của trang Thẻ mới</translation>
 <translation id="5377606826822211923">Kiểm soát việc người dùng sử dụng ứng dụng Android từ những nguồn không tin cậy</translation>
 <translation id="5377668121137111316">Khi bạn đặt chính sách này thành True, bàn phím ảo sẽ luôn bật. Khi bạn đặt chính sách này thành False, bàn phím ảo sẽ luôn tắt.
 
@@ -2803,11 +2810,6 @@
 <translation id="5390083518957894426">Bật tùy chọn xác thực lại trực tuyến trên màn hình khóa cho người dùng SAML</translation>
 <translation id="5391388690191341203">Tự động đăng nhập vào tài khoản trên thiết bị</translation>
 <translation id="5393009997533871906">Chỉ những máy in trong danh sách cho phép mới hiển thị với người dùng</translation>
-<translation id="5395271912574071439">Bật tính năng ẩn của máy máy chủ truy cập từ xa trong khi đang thực hiện kết nối.
-
-          Nếu bạn bật cài đặt này thì các thiết bị đầu vào và đầu ra vật lý của máy chủ sẽ bị tắt khi đang thực hiện kết nối từ xa.
-
-          Nếu bạn tắt hoặc chưa đặt cài đặt này thì cả người dùng cục bộ và người dùng từ xa đều có thể tương tác với máy chủ khi máy chủ đang được chia sẻ.</translation>
 <translation id="5401696449591951427">Bật <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">Định cấu hình bố cục bàn phím được cho phép trên màn hình đăng nhập <ph name="PRODUCT_OS_NAME" />.
 
@@ -3026,6 +3028,14 @@
 <translation id="572155275267014074">Cài đặt Android</translation>
 <translation id="5728154254076636808">Bật tạo bản sao chuyển vùng cho dữ liệu hồ sơ của <ph name="PRODUCT_NAME" /></translation>
 <translation id="5732972008943405952">Nhập dữ liệu tự động điền vào biểu mẫu trên trình duyệt mặc định trong lần chạy đầu tiên</translation>
+<translation id="5733040281451845496">Nếu bạn đặt chính sách này thành Bật, thì thời gian chờ quản lý nguồn điện và giới hạn thời lượng phiên hoạt động sẽ chỉ bắt đầu sau khi hoạt động đầu tiên của người dùng xảy ra trong phiên hoạt động.
+
+      Nếu bạn không đặt hoặc đặt chính sách này thành Tắt, thì thời gian chờ quản lý nguồn điện và giới hạn thời gian sẽ bắt đầu ngay lập tức lúc bắt đầu phiên hoạt động.</translation>
+<translation id="5738766588683307797">Nếu bạn đặt <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> thành Tắt, việc đặt <ph name="USER_ACTIVITY_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" /> sẽ chỉ định tỷ lệ phần trăm mà theo đó thời gian chờ giảm độ sáng màn hình sẽ thay đổi khi có hoạt động của người dùng trong khi màn hình tối đi hoặc ngay sau khi màn hình tắt. Khi thời gian chờ giảm độ sáng thay đổi, thời gian chờ tắt màn hình, thời gian chờ khóa màn hình và thời gian chờ khi ở chế độ tạm vắng sẽ điều chỉnh để duy trì cùng khoảng thời gian với thời gian chờ giảm độ sáng màn hình như được đặt ban đầu.
+
+      Nếu bạn không đặt chính sách này, hệ thống sẽ sử dụng một hệ số tỷ lệ mặc định.
+
+      Lưu ý: Hệ số tỷ lệ phải từ 100% trở lên.</translation>
 <translation id="574098933844699859">Chỉ định xem có luôn hiển thị (hoặc ẩn) thông tin hệ thống (ví dụ: phiên bản Chrome OS, số sê-ri
       thiết bị) trên màn hình đăng nhập hay không.
 
@@ -3436,9 +3446,6 @@
 <translation id="6401669939808766804">Đăng xuất người dùng</translation>
 <translation id="640244877779556713">Bật tùy chọn đề xuất biểu tượng cảm xúc</translation>
 <translation id="6407093060083181305">Định cấu hình danh sách chặn cài đặt tiện ích</translation>
-<translation id="6408233796253901198">Nếu bạn đặt chính sách này, máy chủ truy cập từ xa sẽ dùng URL này để xác thực mã xác thực từ các ứng dụng truy cập từ xa để chấp nhận kết nối. Bạn phải sử dụng chính sách này cùng với RemoteAccessHostTokenUrl.
-
-          Tính năng này sẽ bị tắt nếu bạn không đặt hoặc để trống chính sách này.</translation>
 <translation id="6417265370957905582">Trợ lý Google</translation>
 <translation id="6422575351619065453">Trong chế độ kiosk, hãy kiểm soát xem trình đơn hỗ trợ tiếp cận nổi có đang hiển thị hay không.
 
@@ -3446,6 +3453,7 @@
 
       Nếu bạn không đặt hoặc đặt chính sách này thành tắt, thì trình đơn hỗ trợ tiếp cận nổi sẽ không hiển thị.</translation>
 <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation>
+<translation id="6424486395812679373">Thực hiện quá trình kiểm tra của tính năng Duyệt web an toàn đối với tất cả tệp tải xuống</translation>
 <translation id="6438364096042399634">Nếu đặt chính sách này, bạn có thể xác định danh sách các thiết bị USB mà người dùng có thể tháo khỏi trình điều khiển nhân hệ điều hành để sử dụng thông qua API chrome.usb ngay trong ứng dụng web. Các mục trong danh sách là những cặp Mã nhận dạng nhà cung cấp và Mã nhận dạng sản phẩm USB để xác định một phần cứng cụ thể.
 
       Nếu bạn không đặt chính sách này, danh sách các thiết bị USB có thể tháo sẽ là danh sách trống.
@@ -3532,6 +3540,9 @@
 <translation id="6553143066970470539">Phần trăm độ sáng màn hình</translation>
 <translation id="6558362593755624474">Việc đặt chính sách này sẽ chỉ định khóa cấp phép <ph name="PLUGIN_VM_NAME" /> cho thiết bị này.</translation>
 <translation id="6559057113164934677">Không cho phép bất kỳ trang web nào truy cập vào máy ảnh và micrô</translation>
+<translation id="6559221564468029245">Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì người dùng sẽ không được coi là ở chế độ tạm vắng khi phát âm thanh. Điều này ngăn đạt tới thời gian chờ khi ở chế độ tạm vắng và việc thực hiện hành động ở chế độ tạm vắng. Tuy nhiên hành động giảm độ sáng màn hình, tắt màn hình và khóa màn hình sẽ vẫn xảy ra sau thời gian chờ đã định cấu hình của những hành động này bất kể hoạt động âm thanh.
+
+      Nếu bạn đặt chính sách này thành Tắt, hệ thống có thể coi là người dùng ở chế độ tạm vắng bất kể hoạt động âm thanh.</translation>
 <translation id="6559475864956112261">Chính sách này không còn dùng nữa, vui lòng sử dụng <ph name="PROXY_SETTINGS_POLICY_NAME" />.
 
        Nếu đặt chính sách này thành Bật, bạn có thể chỉ định máy chủ proxy mà Chrome sẽ sử dụng và ngăn người dùng thay đổi các tùy chọn cài đặt proxy. Chrome và các ứng dụng dùng App Runtime for Chrome (ARC) sẽ bỏ qua mọi tùy chọn liên quan đến proxy được chỉ định thông qua dòng lệnh. Chính sách này chỉ có hiệu lực nếu bạn chưa chỉ định chính sách <ph name="PROXY_SETTINGS_POLICY_NAME" />.
@@ -3951,6 +3962,9 @@
 <translation id="7072208053150563108">Tần suất thay đổi mật khẩu máy</translation>
 <translation id="7072567600438630966">Chính sách Cho phép Trung tâm điều khiển điện thoại sẽ được bật.</translation>
 <translation id="7079519252486108041">Chặn cửa sổ bật lên trên các trang web này</translation>
+<translation id="7081784525008938771">Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì người dùng sẽ được coi là ở chế độ tạm vắng trong khi phát video Điều này ngăn đạt tới thời gian chờ khi không sử dụng, thời gian chờ giảm độ sáng màn hình, thời gian chờ tắt màn hình cũng như thời gian chờ khóa màn hình và việc thực hiện các hành động tương ứng.
+
+      Nếu bạn đặt chính sách này thành Tắt, hệ thống có thể coi là người dùng ở chế độ tạm vắng bất kể hoạt động video.</translation>
 <translation id="7086720321892395256">Kiểm soát các chính sách người dùng và thiết bị dành cho tính năng màn hình bảo vệ quyền riêng tư.</translation>
 <translation id="7091842872805965910">Bật tính năng tự động gửi mã PIN trên màn hình khóa và màn hình đăng nhập.</translation>
 <translation id="7093294902558672021">Báo cáo thông tin về quạt của thiết bị.
@@ -4077,9 +4091,6 @@
       Nếu bạn đặt thành Tắt hoặc không đặt chính sách này, thì chính sách KDC sẽ bị bỏ qua trên các nền tảng được hỗ trợ và chỉ <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> được áp dụng.
 
       Chính sách KDC luôn áp dụng trên <ph name="MS_WIN_NAME" />.</translation>
-<translation id="7273823081800296768">Nếu kích hoạt hoặc không định cấu hình cài đặt này, người dùng có thể chọn ghép nối máy khách và máy chủ tại thời điểm kết nối và không cần phải nhập mã PIN.
-
-          Nếu vô hiệu hóa cài đặt này thì tính năng này sẽ không khả dụng.</translation>
 <translation id="7274077256421167535">Bật tính năng sạc pin qua USB</translation>
 <translation id="7275334191706090484">Dấu trang được quản lý</translation>
 <translation id="7278854311116092134">Tên của các máy chủ nhắn tin gốc sẽ được miễn trừ khỏi danh sách chặn</translation>
@@ -4184,6 +4195,11 @@
 
       Nếu bạn không đặt chính sách này, thì <ph name="ASK_NOTIFICATIONS_POLICY_NAME" /> sẽ áp dụng nhưng người dùng có thể thay đổi tùy chọn cài đặt này.</translation>
 <translation id="747275827471712187">Quay lại về hành vi <ph name="ATTRIBUTE_SAMESITE_NAME" /> cũ đối với cookie trên các trang web này</translation>
+<translation id="7476447711788742702">Việc đặt chính sách này sẽ chỉ định hành động mà <ph name="PRODUCT_OS_NAME" /> sẽ thực hiện khi người dùng đóng nắp thiết bị.
+
+      Nếu bạn không đặt chính sách này, hệ thống sẽ thực hiện hành động Tạm ngưng.
+
+      Lưu ý: Nếu hành động là Tạm ngưng, bạn có thể thiết lập <ph name="PRODUCT_OS_NAME" /> một cách riêng biệt thành khóa hoặc không khóa màn hình trước khi tạm ngưng.</translation>
 <translation id="7476621944304431784">Nếu bạn bật tùy chọn cài đặt này, thì người dùng sẽ được phép đồng bộ hóa các cấu hình mạng Wi-Fi giữa (các) thiết bị <ph name="PRODUCT_OS_NAME" /> và một điện thoại Android đã kết nối. Trước khi có thể đồng bộ hóa các cấu hình mạng Wi-Fi, người dùng phải chọn sử dụng tính năng này một cách rõ ràng bằng cách hoàn thành quy trình thiết lập.
 
       Nếu bạn tắt tùy chọn cài đặt này, người dùng sẽ không được phép đồng bộ hóa các cấu hình mạng Wi-Fi.
@@ -4211,9 +4227,6 @@
 
       Chính sách này không còn dùng nữa, vui lòng sử dụng <ph name="PRINTERS_POLICY_NAME" />.
       </translation>
-<translation id="7504632989711326175">Nếu bạn đặt chính sách này, máy chủ sẽ sử dụng một chứng chỉ máy khách có CN của nhà phát hành cụ thể đó để xác thực với RemoteAccessHostTokenValidationUrl. Hãy đặt thành "*" để sử dụng bất kỳ chứng chỉ máy khách nào có sẵn.
-
-          Tính năng này sẽ bị tắt nếu bạn không đặt hoặc để trống chính sách này.</translation>
 <translation id="7506745375479451616">Chính sách này kiểm soát lệnh sẽ dùng để mở URL trong <ph name="PRODUCT_NAME" /> khi chuyển từ <ph name="IE_PRODUCT_NAME" />. Bạn có thể đặt chính sách này thành một đường dẫn tệp thực thi hoặc <ph name="PRODUCT_NAME_PLACEHOLDER" /> để tự động phát hiện vị trí của <ph name="PRODUCT_NAME" />.
 
       Nếu bạn không đặt chính sách này, thì <ph name="IE_PRODUCT_NAME" /> sẽ tự động phát hiện đường dẫn thực thi riêng của <ph name="PRODUCT_NAME" /> khi chạy <ph name="PRODUCT_NAME" /> từ Internet Explorer.
@@ -4488,6 +4501,11 @@
 <translation id="7891884447851425349">Nếu bạn bật <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" />, thì thao tác đặt <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> sẽ chỉ định URL của công cụ tìm kiếm dùng để tìm kiếm mặc định. URL phải chứa chuỗi <ph name="SEARCH_TERM_MARKER" />. Chuỗi này sẽ được thay bằng cụm từ tìm kiếm của người dùng trong truy vấn.
 
       Bạn có thể chỉ định URL tìm kiếm của Google là: <ph name="GOOGLE_SEARCH_URL" />.</translation>
+<translation id="7894185046683379696">Việc đặt chính sách này sẽ chỉ định khoảng thời gian bằng mili giây kể từ khi người dùng không có thao tác nhập cho đến thời điểm màn hình khóa khi chạy bằng nguồn điện AC hoặc pin. Các giá trị được giới hạn ở mức nhỏ hơn thời gian chờ khi ở chế độ tạm vắng trong <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
+
+      Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không khóa màn hình khi người dùng ở chế độ tạm vắng. Khi bạn không đặt chính sách này, hệ thống sẽ sử dụng khoảng thời gian mặc định.
+
+      Đề xuất: Khóa màn hình khi ở chế độ tạm vắng bằng cách bật phương thức phương thức khóa màn hình khi tạm ngưng và đặt <ph name="PRODUCT_OS_NAME" /> tạm ngưng sau thời gian chờ khi ở chế độ tạm vắng. Chỉ sử dụng chính sách này khi muốn khóa màn hình sớm hơn đáng kể so với thời gian tạm ngưng hoặc khi bạn không muốn tạm ngưng ở chế độ tạm vắng.</translation>
 <translation id="7895553628261067384">Truy cập từ xa</translation>
 <translation id="7902040092815978832">Hiển thị bàn phím số để nhập mật khẩu</translation>
 <translation id="7904177352786629708">Nếu bạn đặt chính sách này thành Bật, hệ thống sẽ bỏ qua quá trình tra cứu CNAME. Khi đó, tên máy chủ bạn đã nhập khi tạo SPN Kerberos sẽ được sử dụng.
@@ -4606,6 +4624,9 @@
           Nếu bạn bật chính sách này, thì danh sách các tài khoản do chính sách xác định sẽ được thêm vào phần cài đặt của Tài khoản Kerberos.
 
           Nếu bạn tắt hoặc không đặt chính sách này, thì sẽ không có tài khoản nào được thêm vào phần cài đặt của Tài khoản Kerberos. Đồng thời, mọi tài khoản mà người dùng đã thêm trước đây bằng chính sách này đều bị xóa. Người dùng vẫn có thể thêm tài khoản theo cách thủ công nếu bạn bật chính sách 'Người dùng có thể thêm các tài khoản Kerberos'.</translation>
+<translation id="8078297389450285582">Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì hệ thống sẽ bật mô hình giảm độ sáng thông minh và có thể kéo dài thời gian cho đến khi màn hình tối đi. Nếu chính sách này trì hoãn thời gian, thì thời gian chờ tắt màn hình, thời gian chờ khóa màn hình và thời gian chờ khi ở chế độ tạm vắng sẽ điều chỉnh để duy trì cùng khoảng thời gian với thời gian chờ giảm độ sáng màn hình như được đặt ban đầu.
+
+      Nếu bạn đặt chính sách này thành Tắt, mô hình giảm độ sáng thông minh sẽ không ảnh hưởng đến hành động giảm độ sáng màn hình.</translation>
 <translation id="8099880303030573137">Độ trễ khi không sử dụng khi chạy trên nguồn pin</translation>
 <translation id="8101381354936029836">Nhóm chính sách không thể phân chia:</translation>
 <translation id="8101937907822293485">Bật tính năng báo cáo ẩn danh về hoạt động sử dụng và dữ liệu liên quan đến sự cố về <ph name="PRODUCT_NAME" /> cho Google và ngăn không cho người dùng thay đổi tùy chọn cài đặt này.
@@ -4742,6 +4763,11 @@
       Nếu bạn không đặt chính sách này, thì các trang web có thể yêu cầu quyền truy cập nhưng người dùng được quyền thay đổi tùy chọn cài đặt này.</translation>
 <translation id="8274603902181597201">Xóa thư mục chính ecryptf của người dùng và bắt đầu bằng một thư mục chính mới được mã hóa ext4.</translation>
 <translation id="8284296539558710573">Lời nhắc xác thực HTTP trên nhiều nguồn gốc</translation>
+<translation id="8284527236880877730">Nếu bạn đặt <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> thành Tắt, việc đặt <ph name="PRESENTATION_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" /> sẽ chỉ định tỷ lệ phần trăm mà theo đó thời gian chờ giảm độ sáng màn hình sẽ thay đổi khi thiết bị đang trình chiếu. Khi thời gian chờ giảm độ sáng thay đổi, thời gian chờ tắt màn hình, thời gian chờ khóa màn hình và thời gian chờ khi ở chế độ tạm vắng sẽ điều chỉnh để duy trì cùng khoảng thời gian với thời gian chờ giảm độ sáng màn hình như được đặt ban đầu.
+
+      Nếu bạn không đặt chính sách này, hệ thống sẽ sử dụng một hệ số tỷ lệ mặc định.
+
+      Lưu ý: Hệ số tỷ lệ phải từ 100% trở lên.</translation>
 <translation id="8285435910062771358">Đã bật kính lúp toàn màn hình</translation>
 <translation id="8288199156259560552">Bật Dịch vụ vị trí của Google trên thiết bị Android</translation>
 <translation id="8290875622178450531">Bật tính năng hỗ trợ tiếp cận về đọc chính tả.
@@ -4811,13 +4837,6 @@
 <translation id="8371178326720637170">Bật tiện ích được quản lý để sử dụng Enterprise Hardware Platform API</translation>
 <translation id="8375817202037102567">Chặn quyền ghi các tệp và thư mục trên những trang web này</translation>
 <translation id="8379317372795444261">Được phép xác thực <ph name="BASIC_AUTH" /> trên các đường kết nối HTTP</translation>
-<translation id="8380490658357556620">Cho phép sử dụng máy chủ chuyển tiếp khi ứng dụng từ xa cố gắng thiết lập kết nối với máy này.
-
-          Nếu bạn bật tùy chọn cài đặt này, các ứng dụng từ xa có thể sử dụng máy chủ chuyển tiếp để kết nối với máy này khi không có kết nối trực tiếp (ví dụ: do giới hạn tường lửa).
-
-          Lưu ý rằng nếu bạn tắt chính sách <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" />, thì chính sách này sẽ bị bỏ qua.
-
-          Nếu bạn không đặt chính sách này, tùy chọn cài đặt nói trên sẽ được bật.</translation>
 <translation id="838056554726401140">Danh sách URL chỉ định những url nào sẽ áp dụng <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Chính sách này không ảnh hưởng đến những giá trị tự động mở do người dùng đặt.
 
       Nếu bạn đặt chính sách này, thì các tệp sẽ chỉ tự động mở theo chính sách nếu url thuộc danh sách này và loại tệp được liệt kê trong <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" />. Nếu một trong hai điều kiện là false, thì tệp đã tải xuống sẽ không tự động mở theo chính sách.
@@ -4989,9 +5008,6 @@
       Nếu bạn đặt chính sách này thành true, thì các thẻ chạy trong nền trong tối thiểu 5 phút có thể bị đóng băng. Việc đóng băng thẻ sẽ giúp giảm mức sử dụng CPU, pin và bộ nhớ. <ph name="PRODUCT_NAME" /> sử dụng kỹ thuật "tự nghiệm học" để tránh đóng băng các thẻ hữu ích chạy trong nền (ví dụ: hiển thị thông báo, phát âm thanh, phát video trực tuyến). Các nhà phát triển web cũng có thể chọn không đóng băng trang web của mình (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Nếu bạn đặt chính sách thành false thì sẽ không có thẻ nào bị đóng băng.</translation>
-<translation id="8622378389102774881">Nếu bạn đặt chính sách này, máy chủ truy cập từ xa sẽ yêu cầu xác thực ứng dụng để lấy mã xác thực từ URL này để kết nối. Bạn phải sử dụng chính sách này cùng với RemoteAccessHostTokenValidationUrl.
-
-          Tính năng này sẽ bị tắt nếu bạn không đặt hoặc để trống chính sách này.</translation>
 <translation id="8631434304112909927">cho đến phiên bản <ph name="UNTIL_VERSION" /></translation>
 <translation id="8631437968147930597">Danh sách các ứng dụng ghi chú được phép trên màn hình khóa <ph name="PRODUCT_OS_NAME" /></translation>
 <translation id="8649763579836720255">Thiết bị Chrome OS có thể sử dụng chứng thực từ xa (Quyền truy cập đã xác minh) để nhận được chứng chỉ do Chrome OS CA phát hành khẳng định rằng thiết bị đủ điều kiện để phát nội dung được bảo vệ. Quy trình này bao gồm gửi thông tin chứng thực phần cứng tới Chrome OS CA xác định duy nhất thiết bị.
@@ -5086,9 +5102,19 @@
 
       Lưu ý: Xem danh sách các biến mà bạn có thể sử dụng (https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables).</translation>
 <translation id="8777369558049831576">Hiển thị hộp kiểm "Luôn mở" trong hộp thoại giao thức bên ngoài.</translation>
+<translation id="8786409859071107656">Nếu bạn đặt chính sách này thành Bật, hệ thống sẽ bật chính sách chính sách quản lý điện chia sẻ điện qua USB.
+
+      Một số thiết bị có cổng USB đặc trưng có biểu tượng pin hoặc tia chớp dùng để sạc các thiết bị bằng cách sử dụng pin của hệ thống. Chính sách này ảnh hưởng đến hoạt động sạc của cổng này khi hệ thống ở chế độ ngủ và tắt. Chính sách này không ảnh hưởng đến các cổng USB khác và hoạt động sạc khi hệ thống ở chế độ thức giấc (cổng USB sẽ luôn cấp điện khi hệ thống ở chế độ này).
+
+      Khi ở chế độ ngủ, điện sẽ được cấp cho cổng USB khi thiết bị được cắm vào bộ sạc cắm tường hoặc khi mức pin lớn hơn 50%. Khi ở chế độ tắt, điện sẽ được cấp cho cổng USB khi thiết bị được cắm vào bộ sạc cắm tường.
+
+      Nếu bạn đặt chính sách này thành Tắt, điện sẽ không được cấp.
+
+      Nếu bạn không đặt chính sách này, thì chính sách này sẽ bật và người dùng không thể tắt.</translation>
 <translation id="8798099450830957504">Mặc định</translation>
 <translation id="8800453707696044281">Đặt mức phần trăm ngừng sạc pin tùy chỉnh</translation>
 <translation id="8801680448782904838">Thông báo cho người dùng biết họ cần hoặc bắt buộc phải chạy lại trình duyệt hoặc khởi động lại thiết bị</translation>
+<translation id="8816671955985738552">Không cho phép thay đổi mật khẩu SAML trong phiên đăng nhập tại chrome://password-change</translation>
 <translation id="8817960019535659860">Ngăn người dùng đổi phiếu mua hàng thông qua gói Đăng ký Chrome OS</translation>
 <translation id="8818173863808665831">Báo cáo vị trí địa lý của thiết bị.
 
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index e52ec24..2b6bde1 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">允许用户选择使用匿名 Google 服务为无标签图片提供自动说明</translation>
 <translation id="1087437665304381368">此政策仅用于控制 <ph name="PRODUCT_OS_NAME" />开发者模式。如果您想阻止对 Android 开发者选项的访问,则需设置 <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /> 政策。</translation>
 <translation id="1087707496788636333">Chrome 企业版政策列表迁址了!请更新您的书签以改用 <ph name="POLICY_DOCUMENTATION_URL" />。</translation>
-<translation id="1093082332347834239">启用此设置后,远程协助主机会在具有 <ph name="UIACCESS_PERMISSION_NAME" /> 权限的进程中运行。这样,远程用户就可以在本地用户桌面上操控提权后的窗口。
-
-          如果停用或未配置此设置,远程协助主机则会在用户的环境中运行,而远程用户将无法在桌面上操控提权后的窗口。</translation>
 <translation id="1095209545735032039">禁止在这些网站上使用 Serial API</translation>
 <translation id="1096105751829466145">默认搜索服务提供商</translation>
 <translation id="1099282607296956954">为所有网站启用网站隔离功能</translation>
@@ -593,9 +590,6 @@
 <translation id="2040479044912658454">打印光栅化模式</translation>
 <translation id="2043749682619281558">在登录屏幕上启用“光标突出显示”</translation>
 <translation id="2043770014371753404">已停用企业打印机</translation>
-<translation id="2050629715135525072">控制用户能否连接到远程访问主机以在客户端和主机之间传输文件。此设置不适用于远程协助连接,因为远程协助连接不支持文件传输。
-
-          如果停用了此设置,系统将禁止进行文件传输。如果启用了或未设定此设置,系统将允许进行文件传输。</translation>
 <translation id="2057317273526988987">允许访问指定的一系列网址</translation>
 <translation id="2061810934846663491">为远程访问主机配置所需的域名</translation>
 <translation id="2069350366303315077">如果此政策已启用,<ph name="PRODUCT_NAME" /> 会强制启动访客会话并禁止登录个人资料。访客身份是一类特殊的 <ph name="PRODUCT_NAME" /> 个人资料;使用此类个人资料打开的窗口均会处于无痕模式。
@@ -1086,13 +1080,6 @@
 <translation id="2801065672151277034">证书管理设置</translation>
 <translation id="2801155097555584385">设定电池充电自定义开始充电值(以百分比表示)</translation>
 <translation id="2805707493867224476">允许所有网站显示弹出式窗口</translation>
-<translation id="2808013382476173118">当远程客户端尝试与此机器建立连接时,允许使用STUN服务器。
-
-          此政策处于启用状态时,即使远程客户端被防火墙隔离,也依然能够发现并连接到此机器。
-
-          此政策处于停用状态并且出站UDP连接会被防火墙阻止时,此机器将只允许通过本地网络内的客户端机器建立连接。
-
-          如果此政策未设置,系统将启用此政策。</translation>
 <translation id="2813281962735757923">此政策用于控制不允许 <ph name="PRODUCT_OS_NAME" />设备在哪些时间范围内自动检查是否有更新。
       当此政策设为非空的时间范围列表时:
       相应设备将无法在指定的时间范围内自动检查是否有更新。由于存在潜在的安全问题,需要回滚的设备和低于最低 <ph name="PRODUCT_OS_NAME" />版本的设备都不会受到此政策的影响。另外,此政策不会阻止由用户或管理员请求的更新检查。
@@ -1688,9 +1675,6 @@
       如果此政策已停用或未设置,已注册的设备将不会报告这些统计信息。</translation>
 <translation id="3736879847913515635">允许通过用户管理器添加用户</translation>
 <translation id="3750220015372671395">禁止在这些网站上使用密钥生成功能</translation>
-<translation id="375266612405883748">限制远程访问主机在此计算机上使用的 UDP 端口范围。
-
-          如果此政策未设置或设为空字符串,则远程访问主机可以使用任意可用端口,除非政策 <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> 处于停用状态(在这种情况下,远程访问主机将使用 12400-12409 范围内的 UDP 端口)。</translation>
 <translation id="3755237588083934849">通过设置此政策,您可决定设备状态上传内容的发送频率(以毫秒为单位)。所允许的最低频率为 60 秒。
 
       如果此政策未设置,系统会应用默认时间间隔(3 小时)。</translation>
@@ -2018,11 +2002,6 @@
           如果您设置了此政策,用户将无法更改或覆盖它。
 
           如果未设置此政策,则“自动点击”最初会处于停用状态,但用户可以随时启用该功能。</translation>
-<translation id="4214536984333857724">如果您启用了此设置,系统将会通过远程主机连接经由代理来处理 gnubby 身份验证请求。
-
-          请注意,此功能需要依靠仅在 Google 网络环境内可用的其他组件才能正常运行。
-
-          如果您停用了此设置,系统将不会经由代理来处理 gnubby 身份验证请求。</translation>
 <translation id="4224610387358583899">屏幕锁定延迟时间</translation>
 <translation id="4225260426043444650">此设置允许用户使用 <ph name="LACROS_NAME" /> 浏览器。
 
@@ -2195,9 +2174,6 @@
       对于 <ph name="PRODUCT_NAME" />,仅当已使用 <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> 注册相应设备后,此政策才有效。
       对于 <ph name="PRODUCT_OS_NAME" />,此政策一直有效。</translation>
 <translation id="4578265298946081589">不要在用户退出后重新启动。</translation>
-<translation id="4578912515887794133">如果此设置处于启用状态,远程访问主机会对比本地用户(与主机关联的用户)的名称和注册为主机所有者的 Google 帐号的名称(例如,如果主机归 Google 帐号“johndoe@example.com”所有,Google 帐号的名称就是“johndoe”)。如果两者不同,远程访问主机将不会启动。RemoteAccessHostMatchUsername 政策应与 RemoteAccessHostDomain 一起使用,以便一并强制将主机所有者的 Google 帐号与特定网域(在上述示例中,网域为“example.com”)相关联。
-
-          如果停用或不指定此设置,远程访问主机可以与任何本地用户关联。</translation>
 <translation id="4587365491100112056">通过设置此政策,您可以指定身份验证数据缓存期限(以小时为单位)。此缓存包含与机器领域所信任的领域(关联领域)相关的数据。因此,身份验证数据缓存有助于加快登录速度。系统不会缓存用户专属数据以及非关联领域的数据。
 
       如果此政策设为 0,系统会关闭身份验证数据缓存。每当用户登录时,系统都会提取领域专属的数据,因此关闭身份验证数据缓存可能会显著降低用户的登录速度。
@@ -2340,15 +2316,6 @@
 <translation id="487460824085252184">自动迁移,不询问用户是否同意。</translation>
 <translation id="4874982543810021567">禁止这些网站使用 WebUSB</translation>
 <translation id="4876805738539874299">启用最高 SSL 版本</translation>
-<translation id="487928067861956387">配置主机域名要求以限制可接受远程访问的主机,并禁止用户更改此设置。
-
-          如果您启用了此设置并将其设为一个或多个域名,仅当使用在这些指定域名注册的帐号时,主机才会接受远程访问。
-
-          如果您停用了此设置、未配置此设置或将其设为一个空列表,无论使用什么帐号,主机都会接受远程访问。
-
-          此设置会覆盖 <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" />(若已设置)。
-
-          另请参阅 <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />。</translation>
 <translation id="4887274746092315609">启用一个页面,以便 SAML 用户在会话期间更改密码</translation>
 <translation id="4892647988357350237">默认情况下,当 CCT 首次运行时,系统会显示《服务条款》。如果此政策设为 <ph name="SKIP_TOS_DIALOG" />,在首次运行体验或后续运行期间,《服务条款》对话框将不会出现。如果此政策设为 <ph name="STANDARD_TOS_DIALOG" /> 或未设置,在首次运行体验期间,《服务条款》对话框将会出现。其他注意事项:
 
@@ -2606,15 +2573,6 @@
 
       此处的“Version”既可以是确切版本(如“61.0.3163.120”),也可以是版本前缀(如“61.0”)。  </translation>
 <translation id="5247006254130721952">拦截有危险的下载内容</translation>
-<translation id="5249303875508803168">配置客户端域名要求以限制可进行远程访问的客户端,并禁止用户更改此设置。
-
-          如果您启用了此设置并将其设为一个或多个域名,只有来自这些指定域名的客户端才能连接到主机。
-
-          如果您停用了此设置、未配置此设置或将其设为一个空列表,系统会采用相应连接类型的默认政策。对于远程协助,来自任何域名的客户端都可连接到主机;对于无时间限制的远程访问,只有主机所有者可以连接到主机。
-
-          此设置会覆盖 <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" />(若已设置)。
-
-          另请参阅 <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />。</translation>
 <translation id="5249453807420671499">用户可以添加 Kerberos 帐号</translation>
 <translation id="5252995168844634755">如果此政策设为 True,系统会开启“统一桌面”功能,使应用能够跨多个显示屏进行显示。用户可为单个显示屏关闭“统一桌面”功能。
 
@@ -2751,11 +2709,6 @@
 <translation id="5390083518957894426">启用在锁定屏幕上在线重新验证 SAML 用户的身份</translation>
 <translation id="5391388690191341203">用于自动登录的设备本地帐号</translation>
 <translation id="5393009997533871906">仅向用户显示许可名单中的打印机</translation>
-<translation id="5395271912574071439">在进行连接时启用远程访问主机的屏蔽设置。
-
-          如果启用了此设置,那么在进行远程连接时,就会禁用主机的物理输入和输出设备。
-
-          如果停用或未设定此设置,那么当主机处于共享状态时,本地和远程用户都可以与主机互动。</translation>
 <translation id="5401696449591951427">启用 <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">配置允许在 <ph name="PRODUCT_OS_NAME" />登录屏幕上使用哪些键盘布局。
 
@@ -3204,7 +3157,7 @@
 
       网址格式应采用 https://www.chromium.org/administrators/url-blacklist-filter-format 中规定的格式。不过,判定给定主机名的证书是否有效与架构、端口或路径皆无关,因此 <ph name="PRODUCT_NAME" /> 只会考虑相应网址的主机名部分。采用通配符的主机名不受支持。</translation>
 <translation id="6111936128861357925">允许用户玩恐龙复活节彩蛋游戏</translation>
-<translation id="6123052603197028610">不允许向 Google 服务器发送查询以检索时间戳</translation>
+<translation id="6123052603197028610">不允许向 Google 服务器发送检索时间戳的查询</translation>
 <translation id="6132506775968708399">禁用第三方 Cookie</translation>
 <translation id="6133088669883929098">允许所有网站使用密钥生成功能</translation>
 <translation id="6135398260575578389">“安全浏览”功能会处于开启状态且会在增强模式下运行。此模式可提高安全性,但需与 Google 分享更多浏览信息。</translation>
@@ -3377,9 +3330,6 @@
 <translation id="6401669939808766804">使用户退出</translation>
 <translation id="640244877779556713">启用表情符号建议</translation>
 <translation id="6407093060083181305">配置扩展程序安装屏蔽名单</translation>
-<translation id="6408233796253901198">如果您设置了此政策,远程访问主机会使用此网址验证来自远程访问客户端的身份验证令牌,以便确定是否接受连接。此政策必须与 RemoteAccessHostTokenUrl 结合使用。
-
-          如果您未设置此政策或将它留空,系统会停用此功能。</translation>
 <translation id="6417265370957905582">Google 助理</translation>
 <translation id="6422575351619065453">在自助服务终端模式中,用于控制是否显示悬浮无障碍功能菜单。
 
@@ -4014,9 +3964,6 @@
       如果此政策已停用或未设置,那么在支持的平台上,只会遵循 <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> 政策,KDC 政策会被忽略。
 
       在 <ph name="MS_WIN_NAME" /> 上,始终都会遵循 KDC 政策。</translation>
-<translation id="7273823081800296768">无论这项政策处于启用还是未配置状态,用户都可以选择让客户端和主机在连接时自动配对,无需每次都输入 PIN。
-
-          如果停用此设置,则无法使用该功能。</translation>
 <translation id="7274077256421167535">启用 USB 电源共享</translation>
 <translation id="7275334191706090484">受管理的书签</translation>
 <translation id="7278854311116092134">要从屏蔽名单中排除的本地消息传递主机名</translation>
@@ -4145,9 +4092,6 @@
 
       此政策已被弃用,请改用 <ph name="PRINTERS_POLICY_NAME" />。
       </translation>
-<translation id="7504632989711326175">如果您设置了此政策,主机会使用带有指定颁发者 CN 的客户端证书向 RemoteAccessHostTokenValidationUrl 验证身份。将此政策设为“*”意味着允许使用任何可用的客户端证书。
-
-          如果您未设置此政策或将它留空,系统会停用此功能。</translation>
 <translation id="7506745375479451616">此政策旨在控制从 <ph name="IE_PRODUCT_NAME" /> 切换至 <ph name="PRODUCT_NAME" /> 时应使用哪个命令打开网址。此政策可设为一个可执行文件路径,也可设为 <ph name="PRODUCT_NAME_PLACEHOLDER" /> 以自动检测 <ph name="PRODUCT_NAME" /> 的位置。
 
       如果您不设置此政策,当从 Internet Explorer 中启动 <ph name="PRODUCT_NAME" /> 时,<ph name="IE_PRODUCT_NAME" /> 将会自动检测 <ph name="PRODUCT_NAME" /> 自有的可执行文件路径。
@@ -4739,13 +4683,6 @@
 <translation id="8371178326720637170">允许托管扩展程序使用 Enterprise Hardware Platform API</translation>
 <translation id="8375817202037102567">禁止在这些网站上向文件和目录写入内容</translation>
 <translation id="8379317372795444261">允许通过 HTTP 连接进行<ph name="BASIC_AUTH" />身份验证</translation>
-<translation id="8380490658357556620">当远程客户端尝试与此计算机建立连接时,允许使用中继服务器。
-
-          此设置处于启用状态时,如果远程客户端无法直接连接到此计算机(例如:因为受防火墙限制),则可通过中继服务器来建立连接。
-
-          请注意,政策 <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> 处于停用状态时,系统将忽略此政策。
-
-          如果未设置此政策,系统将启用此设置。</translation>
 <translation id="838056554726401140">以列表形式指定 <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> 会应用于哪些网址。此政策对用户设定的自动打开值没有任何影响。
 
       如果您设置了此政策,那么仅当网址包含在此列表中且文件类型已列在 <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> 中时,相应文件才会依照此政策自动打开。如果不符合上述任一条件,下载内容便不会依照此政策自动打开。
@@ -4909,9 +4846,6 @@
       如果此政策设为 true,系统可能会冻结已在后台运行至少 5 分钟的标签页。冻结标签页可以降低 CPU、电池和内存使用量。<ph name="PRODUCT_NAME" /> 会使用试探法来避免冻结在后台执行有用工作(例如显示通知、播放声音、流式传输视频)的标签页。网络开发者也可选择停用用于冻结网站标签页的功能 (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md)。
 
       如果此政策设为 false,系统将不会冻结任何标签页。</translation>
-<translation id="8622378389102774881">如果您设置了此政策,远程访问主机将要求身份验证客户端从该网址获取身份验证令牌,以便建立连接。此政策必须与 RemoteAccessHostTokenValidationUrl 结合使用。
-
-          如果您未设置此政策或将它留空,系统会停用此功能。</translation>
 <translation id="8631434304112909927">到版本 <ph name="UNTIL_VERSION" /> 为止</translation>
 <translation id="8631437968147930597">可在 <ph name="PRODUCT_OS_NAME" />锁定屏幕中显示的笔记应用的列表。</translation>
 <translation id="8649763579836720255">Chrome 操作系统设备可使用远程凭证(经验证的访问凭证)来获取由 Chrome OS CA 颁发的证书,以证明该设备符合播放受保护内容的条件。此过程涉及向 Chrome OS CA 发送用于唯一标识设备的硬件背书信息。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index 2b031a5..88beff6 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -73,9 +73,6 @@
 <translation id="1082802595100075771">讓使用者選擇使用去識別化的 Google 服務,針對無標籤圖片提供自動產生的說明</translation>
 <translation id="1087437665304381368">這項政策只能控管 <ph name="PRODUCT_OS_NAME" />開發人員模式。如要禁止他人存取 Android 開發人員選項,則必須設定 <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /> 政策。</translation>
 <translation id="1087707496788636333">Chrome Enterprise 政策清單的網址已變更!請將你的書籤更新為 <ph name="POLICY_DOCUMENTATION_URL" />。</translation>
-<translation id="1093082332347834239">如果啟用這項設定,選端協助主機會在具備 <ph name="UIACCESS_PERMISSION_NAME" /> 的處理程序中執行,讓遠端使用者在本機使用者桌面上操控權限較高的視窗。
-
-          如果停用或未指定這項設定,遠端協助主機則會在使用者的作業環境中執行,遠端使用者將無法在桌面上操控權限較高的視窗。</translation>
 <translation id="1095209545735032039">封鎖這些網站上的 Serial API</translation>
 <translation id="1096105751829466145">預設搜尋引擎</translation>
 <translation id="1099282607296956954">為所有網站啟用網站隔離</translation>
@@ -215,6 +212,7 @@
 <translation id="1393485621820363363">已啟用企業裝置印表機</translation>
 <translation id="1397855852561539316">預設搜尋引擎建議網址</translation>
 <translation id="1413936351612032792">回報 Linux 應用程式使用情形資訊</translation>
+<translation id="1418387035898607074">針對從信任的來源下載的檔案略過安全瀏覽檢查</translation>
 <translation id="142346659686073702">允許無關聯的使用者使用 Crostini</translation>
 <translation id="1425551776320718592">禁止這部裝置的使用者採用 ADB 側載,且不強制執行 Powerwash (這可能會讓裝置處於不安全的狀態)</translation>
 <translation id="1426170570389588560">設定儲存列印工作中繼資料的時間範圍 (以天為單位)</translation>
@@ -424,9 +422,15 @@
       如果將這項政策設為 False,使用者無法新增、移除或修改書籤,但仍可以使用現有書籤。</translation>
 <translation id="1715151459541210849">啟用語音輸入無障礙功能</translation>
 <translation id="172374442286684480">允許所有網站設定本機資料</translation>
+<translation id="1729169799290004131">你可以透過這項政策指定螢幕亮度百分比,並關閉自動調整亮度功能。初始螢幕亮度會依政策設定值調整,但使用者可進行變更。
+
+      如果不設定這項政策,使用者螢幕控制項和自動調整亮度功能皆不會受到影響。
+
+      注意:政策設定值應指定為 0 至 100 之間的百分比值。</translation>
 <translation id="1736269219679256369">允許忽略 SSL 警告網頁,繼續前往原本指定的頁面</translation>
 <translation id="174765717426930019">除非要求開啟彈出式視窗的網頁明確拒絕與該彈出式視窗互動,否則一律允許透過 <ph name="BLANK_PAGE_NAME" /> 連結目標開啟的彈出式視窗進行這類互動 </translation>
 <translation id="1750315445671978749">封鎖所有下載作業</translation>
+<translation id="1755310913456007816">採用現有的線上撤銷檢查設定</translation>
 <translation id="1760951637494635692">允許這些網站上的 Serial API</translation>
 <translation id="1765512315997108908">根據 <ph name="DEVICE_PRINTERS_POLICY_NAME" /> 政策控管可供使用的印表機。
 
@@ -474,6 +478,7 @@
 <translation id="1844972978764975668">允許向 Google 伺服器傳送查詢,以擷取準確的時間戳記</translation>
 <translation id="1845405905602899692">資訊站設定</translation>
 <translation id="1845429996559814839">限制 PIN 碼列印模式</translation>
+<translation id="1846545322805269573">使用者無法自訂新分頁的背景</translation>
 <translation id="1847960418907100918">指定使用 POST 執行互動智慧搜尋時所用的參數,其包含以逗號分隔的名稱/數值配對。如果數值為範本參數 (例如上例中的 {searchTerms}),系統將會以實際的搜尋字詞資料替代這個數值。
 
           這項政策是選擇性的,如果未設定,系統將使用 GET 方法傳送互動智慧搜尋要求。
@@ -538,6 +543,37 @@
 <translation id="1971991630422430420">如果將這項政策設為啟用,當無線存取點支援「快速轉換」時,系統會使用「快速轉換」。這項設定會套用至裝置上的所有使用者和介面。
 
       如果將這項政策設為停用或不設定,則系統不會使用「快速轉換」。</translation>
+<translation id="197744850608781984">你可以透過這項政策控管使用者處於閒置狀態時的電源管理策略。
+
+      相關動作有 4 種:
+
+      * 如果使用者閒置時間達到 <ph name="SCREEN_DIM_FIELD_NAME" /> 指定的時間長度,螢幕會調暗。
+
+      * 如果使用者閒置時間達到 <ph name="SCREEN_OFF_FIELD_NAME" /> 指定的時間長度,螢幕會關閉。
+
+      * 如果使用者閒置時間達到 <ph name="IDLE_WARNING_FIELD_NAME" /> 指定的時間長度,畫面上會顯示警告對話方塊,告知系統即將採取閒置因應動作,但這類警告僅適用於閒置因應動作設為登出或關機的情況。
+
+      * 如果使用者閒置時間達到「閒置狀態」指定的時間長度,系統會採取 <ph name="IDLE_ACTION_FIELD_NAME" /> 指定的動作。
+
+      指定上述各項動作的延遲時間時,應以毫秒為單位,且指定值必須大於 0,系統才會觸發相應動作。如果將延遲時間設為零,則 <ph name="PRODUCT_OS_NAME" />不會採取相應動作。
+
+      如未設定上述各項動作的延遲時間,系統將使用預設值。
+
+      <ph name="SCREEN_DIM_FIELD_NAME" /> 的值必須小於或等於 <ph name="SCREEN_OFF_FIELD_NAME" />。<ph name="SCREEN_OFF_FIELD_NAME" /> 和 <ph name="IDLE_WARNING_FIELD_NAME" /> 必須小於或等於「閒置狀態」的值。
+
+      <ph name="IDLE_ACTION_FIELD_NAME" /> 可以是下列 4 種動作的任一種:
+
+      * <ph name="IDLE_ACTION_ENUM_SUSPEND" />
+
+      * <ph name="IDLE_ACTION_ENUM_LOGOUT" />
+
+      * <ph name="IDLE_ACTION_ENUM_SHUTDOWN" />
+
+      * <ph name="IDLE_ACTION_ENUM_DO_NOTHING" />
+
+      如未設定 <ph name="IDLE_ACTION_FIELD_NAME" />,系統會採取「<ph name="IDLE_ACTION_ENUM_SUSPEND" />」動作。
+
+      注意:AC 電源和電池的設定各自獨立。</translation>
 <translation id="1988345404999458987">為可用的列印伺服器提供設定。
 
       這項政策可讓你使用 JSON 檔案為 <ph name="PRODUCT_OS_NAME" />裝置提供外部列印伺服器設定。
@@ -589,9 +625,6 @@
 <translation id="2040479044912658454">列印光柵化模式</translation>
 <translation id="2043749682619281558">在登入畫面上啟用游標醒目顯示功能</translation>
 <translation id="2043770014371753404">停用的企業印表機</translation>
-<translation id="2050629715135525072">控管使用者在連線到遠端存取主機後,是否能在用戶端和主機之間傳輸檔案。這項政策不適用於遠端協助連線,這類連線並不支援檔案傳輸。
-
-          如果停用這項政策,使用者將無法傳輸檔案。如果啟用或不設定這項政策,使用者將可以傳輸檔案。</translation>
 <translation id="2057317273526988987">允許存取網址清單</translation>
 <translation id="2061810934846663491">為遠端存取主機設定必要的網域名稱</translation>
 <translation id="2069350366303315077">如果將這項政策設為啟用,<ph name="PRODUCT_NAME" /> 會強制執行訪客工作階段,並禁止使用者登入設定檔。訪客可以登入 <ph name="PRODUCT_NAME" /> 設定檔,登入後,視窗會以無痕模式開啟。
@@ -607,6 +640,7 @@
 <translation id="209586405398070749">穩定版</translation>
 <translation id="2098658257603918882">啟用使用量和當機相關資料的報告功能</translation>
 <translation id="2104418465060359056">回報擴充功能和外掛程式資訊</translation>
+<translation id="2106166591774188922">允許 SAML 使用者在工作階段中透過 chrome://password-change 變更 SAML 密碼</translation>
 <translation id="2106627642643925514">覆寫預設的 PIN 碼列印模式。如果設定的模式不適用,系統會忽略這項政策。</translation>
 <translation id="2107563874993284076">如果將這項政策設為啟用,使用者將可在 <ph name="PRODUCT_NAME" />使用網路檔案共用功能。如果設為停用,使用者就無法使用這項功能</translation>
 <translation id="2107601598727098402">
@@ -1083,13 +1117,6 @@
 <translation id="2801065672151277034">憑證管理設定</translation>
 <translation id="2801155097555584385">自訂電池開始充電值 (以百分比表示)</translation>
 <translation id="2805707493867224476">允許所有網站顯示彈出式視窗</translation>
-<translation id="2808013382476173118">在遠端用戶端嘗試與這台電腦建立連線時,啟用 STUN 伺服器。
-
-          如果啟用這項設定,那麼即使遠端用戶端被防火牆隔開,也能偵測到這台電腦並建立連線。
-
-          如果停用這項設定,且防火牆會篩出外傳 UDP 連線,則這台電腦只會自動允許來自區域網路用戶端電腦的連線。
-
-          如果未設定這項政策,系統會啟用這項設定。</translation>
 <translation id="2813281962735757923">這項政策可控管針對 <ph name="PRODUCT_OS_NAME" /> 裝置封鎖自動檢查更新的時間範圍。將這項政策設為非空白的時間間隔清單時:在指定的時間間隔內,裝置將無法自動檢查更新。如果裝置需要復原至先前的版本,或是目前的 <ph name="PRODUCT_OS_NAME" /> 版本低於最低需求,則不受這項政策影響,以免發生潛在的安全性問題。此外,這項政策不會封鎖由使用者或系統管理員要求的更新檢查。若不設定這項政策,或政策中不包含時間間隔時:這項政策將不會封鎖任何自動更新檢查,但自動更新檢查仍可能遭到其他政策封鎖。只有在設為自動啟動資訊站的 Chrome 裝置上,這項功能才會啟用。其他裝置將不會受到這項政策限制。</translation>
 <translation id="2818074121667686266">如果將這項政策設為啟用或不設定,系統會詢問使用者是否要存取音訊擷取裝置 (如果網址已列在 AudioCaptureAllowedUrls 的許可清單內,系統不會提示使用者)。
 
@@ -1191,6 +1218,7 @@
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> 驗證模式的帳戶類型</translation>
 <translation id="2959469725686993410">解析時區時一律將 Wi-Fi 存取點傳送至伺服器</translation>
 <translation id="2959898425599642200">Proxy 略過規則</translation>
+<translation id="2960013482187484833">將最近使用的印表機設為列印預覽中的預設選項</translation>
 <translation id="2960128438010718932">分階段套用更新的時程</translation>
 <translation id="2960691910306063964">針對遠端存取主機啟用或停用無 PIN 碼驗證機制</translation>
 <translation id="2964373560810620158">禁止使用者使用 <ph name="LACROS_NAME" /> 瀏覽器</translation>
@@ -1288,6 +1316,7 @@
 <translation id="3072847235228302527">為裝置本機帳戶設定《服務條款》</translation>
 <translation id="3086995894968271156">設定「<ph name="PRODUCT_NAME" />」的 Cast 接收器</translation>
 <translation id="3091832372132789233">對主要連線至外部電源的裝置進行充電。</translation>
+<translation id="3092059499596000593">將系統預設印表機設為列印預覽的預設選項</translation>
 <translation id="309416443108680956">指定當透過安全性權杖 (例如智慧型卡片) 驗證的使用者在工作階段中將該權杖移除時,系統要執行的動作。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />:不執行任何動作。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />:鎖定螢幕,直到使用者再次驗證為止。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />:結束工作階段,並將使用者登出。如果不設定這項政策,系統會預設為 <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />。</translation>
 <translation id="3096595567015595053">啟用的外掛程式清單</translation>
 <translation id="3101501961102569744">選擇如何指定 Proxy 伺服器設定</translation>
@@ -1340,6 +1369,11 @@
 <translation id="3219421230122020860">可使用無痕模式</translation>
 <translation id="3220624000494482595">如果資訊站應用程式是 Android 應用程式,即使將這項政策設為 <ph name="TRUE" />,仍無法控制 <ph name="PRODUCT_OS_NAME" />版本。</translation>
 <translation id="322359555555487980">指定變化版本在 <ph name="PRODUCT_OS_NAME" />上的可用性</translation>
+<translation id="3231617925177241750">如果將這項政策設為啟用,同時設定 <ph name="DEVICE_POWER_PEAK_SHIFT_BATTERY_THRESHOLD_POLICY_NAME" /> 和 <ph name="DEVICE_POWER_PEAK_SHIFT_DAY_CONFIG_POLICY_NAME" />,電源尖峰轉移功能將保持在開啟狀態,前提是裝置提供相關支援。尖峰轉移電源管理政策是一項節電政策,能夠在用電尖峰時段將交流電的使用量降到最低。你可以針對每個平日,個別設定「電源尖峰轉移」模式的開始和結束時間。在這些時間範圍內,只要電池電量高於指定閾值,即使裝置已連接到交流電源,系統仍會使用電池供電。到達指定的結束時間後,如果裝置已連接到交流電源,系統將改用交流電源,但不會為電池充電。到達指定的充電開始時間後,如果裝置已連接到交流電源,系統一樣會使用交流電源運作,並為電池充電。
+
+          如果將這項政策設為停用,電源尖峰轉移功能將保持在關閉狀態。
+
+      如果不設定這項政策,電源尖峰轉移功能會預設為關閉。使用者無法變更這項設定。</translation>
 <translation id="3231837273069128027">你可以透過這項政策來設定 <ph name="TPM_FIRMWARE_UPDATE_TPM" /> 韌體更新的可用性和行為。
 
       指定 JSON 屬性中的個別設定:
@@ -1680,9 +1714,6 @@
       如果將這項政策設為停用或不設定,已註冊的裝置不會回報這類統計資料。</translation>
 <translation id="3736879847913515635">允許在使用者管理工具中新增使用者</translation>
 <translation id="3750220015372671395">禁止在這些網站上使用金鑰產生功能</translation>
-<translation id="375266612405883748">限制這台電腦的遠端存取主機所使用的 UDP 通訊埠範圍。
-
-          如果不設定這項政策或設為空值,遠端存取主機就能使用任何可用的通訊埠;但如果 <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> 政策設為停用,遠端存取主機將使用 12400-12409 範圍內的 UDP 通訊埠。</translation>
 <translation id="3755237588083934849">你可以透過這項政策,決定裝置狀態上傳內容的傳送頻率 (以毫秒為單位),下限值是 60 秒。
 
       如果未設定,系統會套用 3 小時的預設間隔。</translation>
@@ -1707,6 +1738,7 @@
       如果將這項政策設為停用或不設定,<ph name="PRODUCT_OS_NAME" />會允許使用者關閉裝置。</translation>
 <translation id="3765260570442823273">閒置登出時間警告訊息</translation>
 <translation id="377044054160169374">強制干預濫用行為</translation>
+<translation id="3778689139323007309">針對成功通過驗證並由本機裝載 CA 憑證所簽署的伺服器,執行撤銷檢查</translation>
 <translation id="3780152581321609624">Kerberos SPN 包含非標準通訊埠</translation>
 <translation id="3788662722837364290">使用者進入閒置狀態時的電源管理設定</translation>
 <translation id="3790085888761753785">如果啟用這項設定,使用者將可透過 Smart Lock 登入帳戶。一般 Smart Lock 只能讓使用者解鎖螢幕畫面,相較之下這項設定提供了更高的權限。
@@ -2008,11 +2040,6 @@
           設定這項政策後,使用者即無法變更或覆寫。
 
           如果不設定這項政策,系統預設會停用自動點擊功能,但使用者隨時可以啟用這項功能。</translation>
-<translation id="4214536984333857724">如果啟用這項設定,系統將透過遠端主機連線以 Proxy 處理 gnubby 驗證要求。
-
-          請注意,這項功能需要額外元件才能正常運作;這些元件只能在 Google 網路環境內取得。
-
-          如果停用這項設定,系統就不會以 Proxy 處理 gnubby 驗證要求。</translation>
 <translation id="4224610387358583899">螢幕鎖定延遲</translation>
 <translation id="4225260426043444650">你可以透過這項設定,允許使用者使用 <ph name="LACROS_NAME" /> 瀏覽器。
 
@@ -2187,9 +2214,6 @@
       如果是 <ph name="PRODUCT_NAME" />,只有在已透過 <ph name="CLOUD_MANAGEMENT_ENROLLMENT_TOKEN" /> 註冊裝置的情況下,這項政策才會生效。
       如果是 <ph name="PRODUCT_OS_NAME" />,這項政策會一律生效。</translation>
 <translation id="4578265298946081589">不要在使用者登出時重新啟動。</translation>
-<translation id="4578912515887794133">如果啟用這項設定,遠端存取主機會比對與主機相關聯的本機使用者名稱,以及註冊為主機擁有者的 Google 帳戶名稱 (例如,如果 Google 帳戶「johndoe@example.com」是主機的擁有者,則帳戶名稱為「johndoe」)。如果主機擁有者的名稱與主機相關聯的本機使用者名稱不同,系統將不會啟動遠端存取主機。RemoteAccessHostMatchUsername 政策應搭配 RemoteAccessHostDomain 政策使用,以強制將主機擁有者的 Google 帳戶與特定網域 (例如「example.com」) 建立關聯。
-
-          如果停用這項政策或不設定,則遠端存取主機可以與任何本機使用者建立關聯。</translation>
 <translation id="4587365491100112056">你可以透過這項政策,指定驗證資料快取的效期 (以小時為單位)。該快取包含本機運作範圍 (關聯運作範圍) 所信任的運作範圍相關資料。因此,驗證資料快取有助於加快登入作業。系統不會快取使用者專屬資料和非關聯運作範圍的資料。
 
       如果將這項政策設為 0,系統會關閉驗證資料快取功能。這樣一來,每次登入作業都必須擷取運作範圍專屬資料,因此關閉驗證資料快取功能可能會大幅減慢使用者登入速度。
@@ -2331,15 +2355,6 @@
 <translation id="487460824085252184">自動遷移,不要求使用者同意。</translation>
 <translation id="4874982543810021567">在這些網站上封鎖 WebUSB</translation>
 <translation id="4876805738539874299">已啟用 SSL 最高版本</translation>
-<translation id="487928067861956387">這會設定遠端存取主機必須使用的主機網域名稱,同時防止使用者變更這些名稱。
-
-          如果啟用這項設定並設為一個以上的網域,則須透過以任一指定網域名稱註冊的帳戶才能共用主機。
-
-          如果停用這項設定、不設定或設為空白清單,則可透過任何帳戶共用主機。
-
-          這項設定會覆寫 <ph name="REMOTE_ACCESS_HOST_DOMAIN_POLICY_NAME" /> 設定 (如有設定的話)。
-
-          另請參閱 <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />。</translation>
 <translation id="4887274746092315609">為 SAML 使用者啟用可在工作階段中變更密碼的頁面</translation>
 <translation id="4892647988357350237">根據預設,系統會在第一次執行 CCT 時顯示《服務條款》。如果將這項政策設為 <ph name="SKIP_TOS_DIALOG" />,系統不會在第一次或後續執行 CCT 時顯示《服務條款》對話方塊。如果將這項政策設為 <ph name="STANDARD_TOS_DIALOG" />或不設定,系統會在第一次執行 CCT 時顯示《服務條款》對話方塊。其他注意事項包含:
 
@@ -2601,15 +2616,6 @@
 
       此處的「版本」可以指確切版本 (例如「61.0.3163.120」),也可以指版本前置字元 (例如「61.0」)。  </translation>
 <translation id="5247006254130721952">封鎖危險下載作業</translation>
-<translation id="5249303875508803168">這會設定遠端存取用戶端必須使用的用戶端網域名稱,同時防止使用者變更這些名稱。
-
-          如果啟用這項設定並設為一個以上的網域,只有任一指定網域中的用戶端才能連線到主機。
-
-          如果停用這項設定、不設定或設為空白清單,則系統會套用連線類型的預設政策。如果啟用這項政策,當使用者執行遠端協助時,系統會允許任何網域中的用戶端連線到主機;使用者執行遠端存取時,則只有主機擁有者可以連線到主機。
-
-          這項設定會覆寫 <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_POLICY_NAME" /> 設定 (如有設定的話)。
-
-          另請參閱 <ph name="REMOTE_ACCESS_HOST_DOMAIN_LIST_POLICY_NAME" />。</translation>
 <translation id="5249453807420671499">使用者可以新增 Kerberos 帳戶</translation>
 <translation id="5252995168844634755">如果將這項政策設為 True,系統會啟用整合桌面,這個功能可讓應用程式在多個螢幕上展開畫面。使用者可停用個別螢幕的整合桌面。
 
@@ -2721,6 +2727,7 @@
           如果設為 True 或不予設定,這位使用者即可建立並管理受監督的使用者。</translation>
 <translation id="5369937289900051171">僅限彩色列印</translation>
 <translation id="5370279767682621504">在非預設通訊埠啟用 HTTP/0.9 支援功能</translation>
+<translation id="5371152055157582429">使用者可以自訂新分頁的背景</translation>
 <translation id="5377606826822211923">控管使用者是否可使用來源不受信任的 Android 應用程式</translation>
 <translation id="5377668121137111316">將這項政策設為 True 時,系統會讓螢幕小鍵盤保持在啟用狀態。將這項政策設為 False 時,系統會讓螢幕小鍵盤保持在停用狀態。
 
@@ -2746,11 +2753,6 @@
 <translation id="5390083518957894426">在螢幕鎖定畫面上啟用 SAML 使用者的線上重新驗證功能</translation>
 <translation id="5391388690191341203">用於自動登入的裝置本機帳戶</translation>
 <translation id="5393009997533871906">僅對使用者顯示許可清單中的印表機</translation>
-<translation id="5395271912574071439">連線狀態下啟用遠端存取主機遮幕。
-
-          如果你啟用這項設定,在遠端連線進行時,兩台主機的實體輸入與輸出裝置均會停用。
-
-          如果這個選項設定為停用或並未做任何設定,則在共用主機時,本機與遠端使用者皆可操作主機。</translation>
 <translation id="5401696449591951427">啟用 <ph name="CHROME_DEVICES_LINK" /></translation>
 <translation id="5405289061476885481">設定 <ph name="PRODUCT_OS_NAME" /> 登入畫面可使用的鍵盤配置。
 
@@ -2965,6 +2967,14 @@
 <translation id="572155275267014074">Android 設定</translation>
 <translation id="5728154254076636808">允許建立 <ph name="PRODUCT_NAME" /> 設定檔資料的漫遊複本</translation>
 <translation id="5732972008943405952">首次執行時從預設瀏覽器匯入自動填入表單資料</translation>
+<translation id="5733040281451845496">如果將這項政策設為啟用,系統會等到電源管理工作階段中出現第一項使用者活動後,才開始套用延遲時間和工作階段長度限制。
+
+      如果將這項政策設為停用或不設定,系統會在電源管理工作階段一開始便套用延遲時間設定和時間限制。</translation>
+<translation id="5738766588683307797">如果 <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> 設定為停用,當系統在螢幕調暗期間或螢幕關閉後不久偵測到使用者活動時,將根據 <ph name="USER_ACTIVITY_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" /> 所設百分比延長螢幕調暗延遲時間。一旦延長螢幕調暗延遲時間,螢幕關閉、螢幕鎖定和閒置狀態的延遲時間也會隨之調整,以維持與原先設定相同的間隔時間。
+
+      如果不設定這項政策,系統會使用預設的延長比例係數。
+
+      注意:延長比例係數必須為 100% 以上的值。</translation>
 <translation id="574098933844699859">指定是否一律要在登入畫面上顯示或隱藏系統資訊 (例如 Chrome 作業系統版本、裝置序號)。
 
       如果將這項政策設為 True,登入畫面會強制顯示系統資訊。
@@ -3368,9 +3378,6 @@
 <translation id="6401669939808766804">登出使用者</translation>
 <translation id="640244877779556713">啟用表情符號建議功能</translation>
 <translation id="6407093060083181305">設定擴充功能安裝封鎖清單</translation>
-<translation id="6408233796253901198">如果設定這項政策,遠端存取主機會使用這個網址,驗證遠端存取用戶端提供的驗證憑證,據此決定是否要接受連線。這項政策必須搭配 RemoteAccessHostTokenUrl 使用。
-
-          如果設為空白或不設定,系統會停用這項功能。</translation>
 <translation id="6417265370957905582">Google 助理</translation>
 <translation id="6422575351619065453">這項政策可控管是否在 Kiosk 模式中顯示浮動式無障礙選單。
 
@@ -3378,6 +3385,7 @@
 
       如果將這項政策設為停用或不予設定,系統一律不會顯示浮動式無障礙選單。</translation>
 <translation id="6424485010103067949"><ph name="OMA_URI" />:</translation>
+<translation id="6424486395812679373">對所有下載檔案執行安全瀏覽檢查</translation>
 <translation id="6438364096042399634">你可以透過這項政策來定義 USB 裝置清單,使用者可以從核心驅動程式中卸除這份清單中的 USB 裝置,並且直接透過 chrome.usb API 在網頁應用程式中使用。輸入項目為可識別特定硬體的 USB 供應商 ID 和產品 ID 組合。
 
       如果未設定,卸除式 USB 裝置的清單會空白。
@@ -3463,6 +3471,9 @@
 <translation id="6553143066970470539">螢幕亮度百分比</translation>
 <translation id="6558362593755624474">你可以透過這項政策,指定這部裝置的 <ph name="PLUGIN_VM_NAME" /> 授權金鑰。</translation>
 <translation id="6559057113164934677">不允許任何網站使用攝影機和麥克風</translation>
+<translation id="6559221564468029245">如果將這項政策設為啟用或不設定,系統在音訊播放期間不會將使用者狀態視為閒置。這麼做可防止系統因達到閒置逾時限制,而採取閒置因應動作。不過,即使有音訊活動,系統在達到螢幕調暗、螢幕關閉和螢幕鎖定的逾時限制後,仍會觸發這些動作。
+
+      如果將這項政策設為停用,即使有音訊活動,系統仍會將使用者狀態視為閒置。</translation>
 <translation id="6559475864956112261">這項政策已遭淘汰,請改用 <ph name="PROXY_SETTINGS_POLICY_NAME" />。
 
        如果將這項政策設為啟用,就可指定 Chrome 要使用的 Proxy 伺服器,並禁止使用者變更 Proxy 設定。Chrome 和 ARC 應用程式會忽略所有從指令列所指定的 Proxy 相關選項。只有在 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 政策未設定時,這項政策才會生效。
@@ -3882,6 +3893,9 @@
 <translation id="7072208053150563108">裝置密碼變更頻率</translation>
 <translation id="7072567600438630966">允許啟用 Phone Hub 功能。</translation>
 <translation id="7079519252486108041">封鎖這些網站的彈出式視窗</translation>
+<translation id="7081784525008938771">如果將這項政策設為啟用或不設定,系統在視訊播放期間不會將使用者狀態視為閒置。這麼做可防止系統因達到閒置延遲時間、螢幕調暗延遲時間、螢幕關閉延遲時間和螢幕鎖定延遲時間限制,而採取相應動作。
+
+          如果將這項政策設為停用,即使有視訊活動,系統仍會將使用者狀態視為閒置。</translation>
 <translation id="7086720321892395256">控管隱私保護畫面功能的使用者和裝置政策。</translation>
 <translation id="7091842872805965910">在登入畫面和鎖定畫面上啟用 PIN 碼自動提交功能。</translation>
 <translation id="7093294902558672021">回報裝置的風扇資訊。
@@ -4007,9 +4021,6 @@
       如果將這項政策設為停用或不設定,支援平台會忽略 KDC 政策,只遵循 <ph name="AUTH_NEGOTIATE_DELEGATE_ALLOWLIST_POLICY_NAME" /> 政策。
 
       <ph name="MS_WIN_NAME" /> 一律遵循 KDC 政策。</translation>
-<translation id="7273823081800296768">不論這項政策處於啟用或未設定的狀態,使用者都可以選擇讓用戶端與主機在連線時自動配對,不需要每次都輸入 PIN。
-
-          如果你停用這項設定,使用者就無法使用這項功能。</translation>
 <translation id="7274077256421167535">啟用 USB 電力共享功能</translation>
 <translation id="7275334191706090484">受管理書籤</translation>
 <translation id="7278854311116092134">要從封鎖清單中排除的內建訊息傳遞主機名稱</translation>
@@ -4112,6 +4123,11 @@
 
       如果不設定,系統會套用 <ph name="ASK_NOTIFICATIONS_POLICY_NAME" />,但使用者可以變更這項設定。</translation>
 <translation id="747275827471712187">將這些網站上的 Cookie 還原成舊版的 <ph name="ATTRIBUTE_SAMESITE_NAME" /> 行為</translation>
+<translation id="7476447711788742702">你可以透過這項政策指定當使用者闔上裝置前蓋時,<ph name="PRODUCT_OS_NAME" />要採取的動作。
+
+      如果不設定這項政策,系統會採取「暫停」動作。
+
+      注意:如果指定動作為「暫停」,你可以另行設定 <ph name="PRODUCT_OS_NAME" />在暫停前是否要鎖定螢幕。</translation>
 <translation id="7476621944304431784">如果啟用這項設定,使用者將可在搭載 <ph name="PRODUCT_OS_NAME" />的裝置和已連結的 Android 手機上,將 Wi-Fi 網路設定保持同步。在同步 Wi-Fi 網路設定之前,使用者必須先完成設定流程以明確啟用這項功能。
 
       如果停用這項設定,使用者就無法同步 Wi-Fi 網路設定。
@@ -4138,9 +4154,6 @@
 
       這項政策已遭淘汰,請改用 <ph name="PRINTERS_POLICY_NAME" />。
       </translation>
-<translation id="7504632989711326175">如果設定這項政策,主機會使用用戶端憑證和指定核發機構一般名稱 (CN) 來驗證 RemoteAccessHostTokenValidationUrl 的連線。如果設為「*」,則可使用任何可用的用戶端憑證。
-
-          如果設為空白或不設定,系統會停用這項功能。</translation>
 <translation id="7506745375479451616">這項政策可控管從 <ph name="IE_PRODUCT_NAME" /> 切換到 Chrome 時,在 <ph name="PRODUCT_NAME" /> 中開啟網址時使用的指令。你可以將這項政策設為執行檔路徑,或是設為 <ph name="PRODUCT_NAME_PLACEHOLDER" />,讓系統自動偵測 <ph name="PRODUCT_NAME" /> 的位置。
 
       如果未設定這項政策,從 Internet Explorer 啟動 <ph name="PRODUCT_NAME" /> 時,<ph name="IE_PRODUCT_NAME" /> 會自動偵測 <ph name="PRODUCT_NAME" /> 自己的可執行路徑。
@@ -4411,6 +4424,11 @@
 <translation id="7891884447851425349">如果已啟用 <ph name="DEFAULT_SEARCH_PROVIDER_ENABLED_POLICY_NAME" /> 政策,你可以設定 <ph name="DEFAULT_SEARCH_PROVIDER_SEARCH_URL_POLICY_NAME" /> 政策來指定在進行預設搜尋時所使用的搜尋引擎網址。網址應包含字串 <ph name="SEARCH_TERM_MARKER" />,系統會在查詢中將其替換為使用者的搜尋字詞。
 
       你可以將 Google 的搜尋網址指定為:<ph name="GOOGLE_SEARCH_URL" />。</translation>
+<translation id="7894185046683379696">你可以透過這項政策指定 AC 電源或電池供電時的閒置時間長度 (以毫秒為單位);如果使用者在這段時間內沒有任何動作,系統將鎖定螢幕。設定值必須小於 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> 指定的閒置延遲時間長度。
+
+      如果設定值為零,<ph name="PRODUCT_OS_NAME" />不會在使用者處於閒置狀態時鎖定螢幕。如果不設定這項政策,系統會使用預設時間長度。
+
+      建議做法:如要針對閒置狀態鎖定螢幕,可以啟用在暫停狀態下鎖定螢幕的功能,然後讓 <ph name="PRODUCT_OS_NAME" />在閒置延遲時間過後進入暫停狀態。這項政策僅限用於兩種情況:螢幕鎖定觸發時間比暫停觸發時間早很多,或是你完全不想針對閒置狀態啟用暫停功能。</translation>
 <translation id="7895553628261067384">遠端存取</translation>
 <translation id="7902040092815978832">在輸入密碼時顯示數字鍵盤</translation>
 <translation id="7904177352786629708">如果將這項政策設為啟用,系統會略過 CNAME 查詢。系統產生 Kerberos SPN 時會使用先前輸入的伺服器名稱。
@@ -4524,6 +4542,9 @@
           如果啟用這項政策,系統會將這項政策定義的帳戶清單加入 Kerberos 帳戶設定。
 
           如果停用或不設定這項政策,系統不會將任何帳戶加入 Kerberos 帳戶設定,並會移除先前透過這項政策新增的所有帳戶。如果啟用「使用者可以新增 Kerberos 帳戶」政策,則使用者仍可以手動新增帳戶。</translation>
+<translation id="8078297389450285582">如果將這項政策設為啟用或不設定,系統會開啟智慧調光模式,並可延後螢幕調暗時間。一旦延後螢幕調暗時間,螢幕關閉、螢幕鎖定和閒置狀態的延遲時間也會隨之調整,以維持與原先設定相同的間隔時間。
+
+      如果將這項政策設為停用,智慧調光模式並不會影響螢幕調暗設定。</translation>
 <translation id="8099880303030573137">在電池供電環境下執行時的閒置延遲時間</translation>
 <translation id="8101381354936029836">政策不可部分完成的群組:</translation>
 <translation id="8101937907822293485">允許向 Google 匿名回報 <ph name="PRODUCT_NAME" /> 的使用狀況和當機相關資料,並禁止使用者變更這項設定。
@@ -4659,6 +4680,11 @@
       如果不設定,網站可要求存取序列埠,但使用者可以變更這項設定。</translation>
 <translation id="8274603902181597201">清除使用者的 eCryptfs 主目錄,改用全新的 Ext4 加密主目錄。</translation>
 <translation id="8284296539558710573">跨來源 HTTP 驗證提示</translation>
+<translation id="8284527236880877730">如果 <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> 設定為停用,當裝置播放簡報時,系統將根據 <ph name="PRESENTATION_SCREEN_DIM_DELAY_SCALE_POLICY_NAME" /> 所設百分比延長螢幕調暗延遲時間。一旦延長螢幕調暗延遲時間,螢幕關閉、螢幕鎖定和閒置狀態的延遲時間也會隨之調整,以維持與原先設定相同的間隔時間。
+
+      如果不設定這項政策,系統會使用預設的延長比例係數。
+
+      注意:延長比例係數必須為 100% 以上的值。</translation>
 <translation id="8285435910062771358">已啟用全螢幕放大鏡</translation>
 <translation id="8288199156259560552">啟用 Android Google 定位服務</translation>
 <translation id="8290875622178450531">啟用語音輸入無障礙功能。
@@ -4728,13 +4754,6 @@
 <translation id="8371178326720637170">啟用受管理擴充功能以使用 Enterprise Hardware Platform API</translation>
 <translation id="8375817202037102567">禁止這些網站對檔案和目錄的寫入權限</translation>
 <translation id="8379317372795444261">允許透過 HTTP 連線使用<ph name="BASIC_AUTH" />驗證</translation>
-<translation id="8380490658357556620">這項政策會在遠端用戶端嘗試與這台電腦建立連線時,允許用戶端使用轉送伺服器。
-
-          如果啟用這項設定,遠端用戶端即可在無法直接連線時 (例如受到防火牆限制的情況),使用轉送伺服器與這台電腦建立連線。
-
-          請注意,如果 <ph name="REMOTE_ACCESS_HOST_FIREWALL_TRAVERSAL_POLICY_NAME" /> 政策設為停用,系統就會忽略這項政策。
-
-          如果不設定這項政策,系統就會啟用這項政策。</translation>
 <translation id="838056554726401140">指定要套用 <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> 的網址清單。這項政策不會影響使用者設定的自動開啟值。
 
       如果設定這項政策,只有當網址列在這份清單中,且檔案類型列在 <ph name="AUTO_OPEN_FILE_TYPES_POLICY_NAME" /> 中時,系統才會依照政策自動開啟檔案。如果未達成其中一項條件,系統就不會依照政策自動開啟下載的內容。
@@ -4897,9 +4916,6 @@
       如果將這項政策設為 True,系統可能會凍結在背景執行 5 分鐘以上的分頁。凍結分頁可降低 CPU、電力和記憶體的使用量。<ph name="PRODUCT_NAME" /> 會根據經驗法則判斷,不會凍結在背景執行實用作業 (例如顯示通知、播放音效、串流播放影片) 的分頁。網站開發人員也可以將自己的網站設為禁止凍結 (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md)。
 
       如果將這項政策設為 False,系統將不會凍結任何分頁。</translation>
-<translation id="8622378389102774881">如果設定這項政策,遠端存取主機會要求用戶端透過此網址取得驗證憑證,驗證通過後才能建立連線。這項政策必須搭配 RemoteAccessHostTokenValidationUrl 使用。
-
-          如果設為空白或不設定,系統會停用這項功能。</translation>
 <translation id="8631434304112909927">到第 <ph name="UNTIL_VERSION" /> 版為止</translation>
 <translation id="8631437968147930597"><ph name="PRODUCT_OS_NAME" />螢幕鎖定畫面上允許的筆記應用程式清單</translation>
 <translation id="8649763579836720255">當 Chrome 作業系統 CA 判斷裝置可播放受保護內容,Chrome 作業系統裝置可以使用遠端證明 (已驗證存取權) 取得其所發出的憑證。在此過程中,系統會傳送硬體簽署資訊到識別裝置的 Chrome 作業系統 CA。
@@ -4993,9 +5009,19 @@
 
       注意:如要查看可使用的變數清單,請前往 https://www.chromium.org/administrators/policy-list-3/user-data-directory-variables。</translation>
 <translation id="8777369558049831576">在外部通訊協定對話方塊中顯示「一律開啟」核取方塊。</translation>
+<translation id="8786409859071107656">如果將這項政策設為啟用,系統會啟用 USB 電力共享電源管理政策。
+
+      某些裝置會在特定的 USB 連接埠上標示閃電符號或電池圖示,代表可透過系統電池為裝置充電。當系統處於休眠狀態和關機模式時,這項政策會影響這個連接埠的充電行為。這項政策並不會影響其他 USB 連接埠,以及系統處於啟用狀態下的充電行為 (USB 連接埠一律會供應電力)。
+
+      在休眠狀態下,如果裝置已連接插座式充電器或電池電量高於 50%,USB 連接埠會供應電力。在關機狀態下,如果裝置已連接插座式充電器,USB 連接埠會供應電力。
+
+      如果將這項政策設為停用,則 USB 連接埠不會供應任何電力。
+
+      如果不設定這項政策,系統會將政策預設為啟用,且使用者無法予以停用。</translation>
 <translation id="8798099450830957504">預設</translation>
 <translation id="8800453707696044281">自訂電池停止充電值 (以百分比表示)</translation>
 <translation id="8801680448782904838">透過通知建議或要求使用者重新啟動瀏覽器或裝置</translation>
+<translation id="8816671955985738552">禁止在工作階段中透過 chrome://password-change 變更 SAML 密碼</translation>
 <translation id="8817960019535659860">禁止使用者透過 Chrome 作業系統註冊機制兌換優惠</translation>
 <translation id="8818173863808665831">回報裝置的地理位置。
 
diff --git a/components/policy/tools/syntax_check_policy_template_json.py b/components/policy/tools/syntax_check_policy_template_json.py
index ff909d9..e7cbd74d 100755
--- a/components/policy/tools/syntax_check_policy_template_json.py
+++ b/components/policy/tools/syntax_check_policy_template_json.py
@@ -19,6 +19,9 @@
 # Matches all non-empty strings that contain no whitespaces.
 NO_WHITESPACE = re.compile('[^\s]+$')
 
+SOURCE_DIR = os.path.dirname(
+    os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
+
 # Convert a 'type' to the schema types it may be converted to.
 # The 'dict' type represents structured JSON data, and can be converted
 # to an 'object' or an 'array'.
@@ -628,6 +631,29 @@
                             container_name='item',
                             identifier=policy.get('name'))
 
+  def _CheckOwners(self, policy):
+    owners = self._CheckContains(policy, 'owners', list)
+    if not owners:
+      return
+
+    for owner in owners:
+      FILE_PREFIX = 'file://'
+      if owner.startswith(FILE_PREFIX):
+        file_path = owner[len(FILE_PREFIX):]
+        full_file_path = os.path.join(SOURCE_DIR, file_path)
+        if not (os.path.exists(full_file_path)):
+          self._Error(
+              'Policy %s lists non-existant owners files, %s, as an owner. '
+              'Please either add the owners file or remove it from this list.' %
+              (policy.get('name'), full_file_path))
+      elif '@' in owner:
+        # TODO(pastarmovj): Validate the email is a committer's.
+        pass
+      else:
+        self._Error('Policy %s has an unexpected owner, %s, all owners should '
+                    'be committer emails or file:// paths' %
+                    (policy.get('name'), owner))
+
   def _CheckPolicy(self, policy, is_in_group, policy_ids, deleted_policy_ids,
                    current_version):
     if not isinstance(policy, dict):
@@ -734,9 +760,7 @@
       self._AddPolicyID(id, policy_ids, policy, deleted_policy_ids)
 
       # Each policy must have an owner.
-      # TODO(pastarmovj): Verify that each owner is either an OWNERS file or an
-      # email of a committer.
-      self._CheckContains(policy, 'owners', list)
+      self._CheckOwners(policy)
 
       # Each policy must have a tag list.
       self._CheckContains(policy, 'tags', list)
diff --git a/components/safe_browsing/content/password_protection/BUILD.gn b/components/safe_browsing/content/password_protection/BUILD.gn
index ac6f5b8e..58233dc 100644
--- a/components/safe_browsing/content/password_protection/BUILD.gn
+++ b/components/safe_browsing/content/password_protection/BUILD.gn
@@ -32,6 +32,7 @@
       "//components/safe_browsing/core/common:common",
       "//components/safe_browsing/core/common:interfaces",
       "//components/safe_browsing/core/common:safe_browsing_prefs",
+      "//components/safe_browsing/core/common:thread_utils",
       "//components/safe_browsing/core/db:allowlist_checker_client",
       "//components/safe_browsing/core/db:database_manager",
       "//components/safe_browsing/core/db:v4_protocol_manager_util",
diff --git a/components/safe_browsing/content/password_protection/password_protection_request.cc b/components/safe_browsing/content/password_protection/password_protection_request.cc
index 55291c5..538b0ea 100644
--- a/components/safe_browsing/content/password_protection/password_protection_request.cc
+++ b/components/safe_browsing/content/password_protection/password_protection_request.cc
@@ -19,6 +19,7 @@
 #include "components/safe_browsing/content/common/safe_browsing.mojom.h"
 #include "components/safe_browsing/content/password_protection/password_protection_navigation_throttle.h"
 #include "components/safe_browsing/content/web_ui/safe_browsing_ui.h"
+#include "components/safe_browsing/core/common/thread_utils.h"
 #include "components/safe_browsing/core/common/visual_utils.h"
 #include "components/safe_browsing/core/db/allowlist_checker_client.h"
 #include "components/safe_browsing/core/features.h"
@@ -125,7 +126,7 @@
       request_timeout_in_ms_(request_timeout_in_ms),
       request_proto_(std::make_unique<LoginReputationClientRequest>()),
       is_modal_warning_showing_(false) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
 
   DCHECK(trigger_type_ == LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE ||
          trigger_type_ == LoginReputationClientRequest::PASSWORD_REUSE_EVENT);
@@ -142,12 +143,12 @@
 }
 
 void PasswordProtectionRequest::Start() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   CheckWhitelist();
 }
 
 void PasswordProtectionRequest::CheckWhitelist() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
 
   // In order to send pings for about:blank, we skip the whitelist check for
   // URLs with unsupported schemes.
@@ -181,7 +182,7 @@
 }
 
 void PasswordProtectionRequest::OnWhitelistCheckDone(bool match_whitelist) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   if (match_whitelist) {
     if (password_protection_service_->CanSendSamplePing()) {
       FillRequestProto(/*is_sampled_ping=*/true);
@@ -197,7 +198,7 @@
 }
 
 void PasswordProtectionRequest::CheckCachedVerdicts() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   if (!password_protection_service_) {
     Finish(RequestOutcome::SERVICE_DESTROYED, nullptr);
     return;
@@ -360,7 +361,7 @@
 void PasswordProtectionRequest::OnGetDomFeatures(
     mojom::PhishingDetectorResult result,
     const std::string& verdict) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   if (dom_features_collection_complete_)
     return;
 
@@ -403,7 +404,7 @@
 }
 
 void PasswordProtectionRequest::OnGetDomFeatureTimeout() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   if (!dom_features_collection_complete_) {
     dom_features_collection_complete_ = true;
     MaybeCollectVisualFeatures();
@@ -461,7 +462,7 @@
 
 void PasswordProtectionRequest::OnVisualFeatureCollectionDone(
     std::unique_ptr<VisualFeatures> visual_features) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
 
   request_proto_->mutable_visual_features()->Swap(visual_features.get());
 
@@ -473,7 +474,7 @@
 #endif
 
 void PasswordProtectionRequest::SendRequest() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
 
   web_ui_token_ =
       WebUIInfoSingleton::GetInstance()->AddToPGPings(*request_proto_);
@@ -533,7 +534,7 @@
 }
 
 void PasswordProtectionRequest::StartTimeout() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
 
   // If request is not done withing 10 seconds, we cancel this request.
   // The weak pointer used for the timeout will be invalidated (and
@@ -547,7 +548,7 @@
 
 void PasswordProtectionRequest::OnURLLoaderComplete(
     std::unique_ptr<std::string> response_body) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   int response_code = 0;
   if (url_loader_->ResponseInfo() && url_loader_->ResponseInfo()->headers)
     response_code = url_loader_->ResponseInfo()->headers->response_code();
@@ -580,7 +581,7 @@
 void PasswordProtectionRequest::Finish(
     RequestOutcome outcome,
     std::unique_ptr<LoginReputationClientResponse> response) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   tracker_.TryCancelAll();
 
   // If the request is canceled, the PasswordProtectionService is already
@@ -611,7 +612,7 @@
 }
 
 void PasswordProtectionRequest::Cancel(bool timed_out) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   url_loader_.reset();
   // If request is canceled because |password_protection_service_| is shutting
   // down, ignore all these deferred navigations.
diff --git a/components/safe_browsing/content/password_protection/password_protection_request.h b/components/safe_browsing/content/password_protection/password_protection_request.h
index 2f2aedc9..2a0c396 100644
--- a/components/safe_browsing/content/password_protection/password_protection_request.h
+++ b/components/safe_browsing/content/password_protection/password_protection_request.h
@@ -11,6 +11,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/task/cancelable_task_tracker.h"
 #include "base/time/time.h"
+#include "build/build_config.h"
 #include "components/password_manager/core/browser/password_manager_metrics_util.h"
 #include "components/password_manager/core/browser/password_reuse_detector.h"
 #include "components/safe_browsing/buildflags.h"
@@ -18,11 +19,16 @@
 #include "components/safe_browsing/content/password_protection/password_protection_service.h"
 #include "components/safe_browsing/core/password_protection/metrics_util.h"
 #include "components/safe_browsing/core/proto/csd.pb.h"
-#include "content/public/browser/browser_thread.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 
+#if defined(OS_IOS)
+// TODO(crbug.com/1147967): Enable in iOS once this file is moved to /core.
+#else
+#include "content/public/browser/browser_thread.h"
+#endif  // defined(OS_IOS)
+
 class GURL;
 
 namespace network {
@@ -35,6 +41,13 @@
 
 using password_manager::metrics_util::PasswordType;
 
+#if defined(OS_IOS)
+using DeleteOnUIThread = web::WebThread::DeleteOnThread<web::WebThread::UI>;
+#else
+using DeleteOnUIThread =
+    content::BrowserThread::DeleteOnThread<content::BrowserThread::UI>;
+#endif  // defined(OS_IOS)
+
 // A request for checking if an unfamiliar login form or a password reuse event
 // is safe. PasswordProtectionRequest objects are owned by
 // PasswordProtectionService indicated by |password_protection_service_|.
@@ -54,10 +67,10 @@
 // (8) |   UI   | On receiving response, handle response and finish.
 //     |        | On request timeout, cancel request.
 //     |        | On deletion of |password_protection_service_|, cancel request.
-class PasswordProtectionRequest : public base::RefCountedThreadSafe<
-                                      PasswordProtectionRequest,
-                                      content::BrowserThread::DeleteOnUIThread>,
-                                  public content::WebContentsObserver {
+class PasswordProtectionRequest
+    : public base::RefCountedThreadSafe<PasswordProtectionRequest,
+                                        DeleteOnUIThread>,
+      public content::WebContentsObserver {
  public:
   PasswordProtectionRequest(
       content::WebContents* web_contents,
@@ -144,8 +157,7 @@
   friend class base::RefCountedThreadSafe<PasswordProtectionRequest>;
 
  private:
-  friend struct content::BrowserThread::DeleteOnThread<
-      content::BrowserThread::UI>;
+  friend DeleteOnUIThread;
   friend class base::DeleteHelper<PasswordProtectionRequest>;
   friend class PasswordProtectionServiceTest;
   friend class ChromePasswordProtectionServiceTest;
diff --git a/components/safe_browsing/content/password_protection/password_protection_service.cc b/components/safe_browsing/content/password_protection/password_protection_service.cc
index 4d38cce..fb1dfd4b 100644
--- a/components/safe_browsing/content/password_protection/password_protection_service.cc
+++ b/components/safe_browsing/content/password_protection/password_protection_service.cc
@@ -22,6 +22,7 @@
 #include "components/password_manager/core/browser/password_reuse_detector.h"
 #include "components/safe_browsing/content/password_protection/password_protection_navigation_throttle.h"
 #include "components/safe_browsing/content/password_protection/password_protection_request.h"
+#include "components/safe_browsing/core/common/thread_utils.h"
 #include "components/safe_browsing/core/common/utils.h"
 #include "components/safe_browsing/core/db/database_manager.h"
 #include "components/safe_browsing/core/features.h"
@@ -59,7 +60,7 @@
     HistoryService* history_service)
     : database_manager_(database_manager),
       url_loader_factory_(url_loader_factory) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   if (history_service)
     history_service_observation_.Observe(history_service);
 
@@ -92,7 +93,7 @@
     const GURL& password_form_action,
     const GURL& password_form_frame_url,
     const std::string& hosted_domain) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   LoginReputationClientRequest::TriggerType trigger_type =
       LoginReputationClientRequest::UNFAMILIAR_LOGIN_PAGE;
   ReusedPasswordAccountType reused_password_account_type =
@@ -121,7 +122,7 @@
     const std::vector<password_manager::MatchingReusedCredential>&
         matching_reused_credentials,
     bool password_field_exists) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   LoginReputationClientRequest::TriggerType trigger_type =
       LoginReputationClientRequest::PASSWORD_REUSE_EVENT;
   ReusedPasswordAccountType reused_password_account_type =
@@ -225,7 +226,7 @@
         matching_reused_credentials,
     LoginReputationClientRequest::TriggerType trigger_type,
     bool password_field_exists) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   scoped_refptr<PasswordProtectionRequest> request(
       new PasswordProtectionRequest(
           web_contents, main_frame_url, password_form_action,
@@ -249,7 +250,7 @@
     PasswordProtectionRequest* request,
     RequestOutcome outcome,
     std::unique_ptr<LoginReputationClientResponse> response) {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   DCHECK(request);
 
   if (response) {
@@ -329,7 +330,7 @@
 }
 
 void PasswordProtectionService::CancelPendingRequests() {
-  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(CurrentlyOnThread(ThreadID::UI));
   for (auto it = pending_requests_.begin(); it != pending_requests_.end();) {
     PasswordProtectionRequest* request = it->get();
     // These are the requests for whom we're still waiting for verdicts.
diff --git a/components/search/repeatable_queries/repeatable_queries_service_unittest.cc b/components/search/repeatable_queries/repeatable_queries_service_unittest.cc
index 4e0e81f..bd64cff 100644
--- a/components/search/repeatable_queries/repeatable_queries_service_unittest.cc
+++ b/components/search/repeatable_queries/repeatable_queries_service_unittest.cc
@@ -391,7 +391,13 @@
   EXPECT_TRUE(service()->repeatable_queries().empty());
 }
 
-TEST_F(RepeatableQueriesServiceTest, SignedIn_ErrorResponse) {
+// TODO(crbug.com/1151909) Test fails on iOS device
+#if defined(OS_IOS) && !TARGET_IPHONE_SIMULATOR
+#define MAYBE_SignedIn_ErrorResponse DISABLED_SignedIn_ErrorResponse
+#else
+#define MAYBE_SignedIn_ErrorResponse SignedIn_ErrorResponse
+#endif
+TEST_F(RepeatableQueriesServiceTest, MAYBE_SignedIn_ErrorResponse) {
   SignIn();
   test_url_loader_factory()->AddResponse(service()->GetRequestURL().spec(),
                                          GoodServerResponse());
@@ -418,6 +424,14 @@
   EXPECT_EQ(expected_server_queries, service()->repeatable_queries());
 }
 
+// TODO(crbug.com/1151909) Test fails on iOS device
+#if defined(OS_IOS) && !TARGET_IPHONE_SIMULATOR
+#define MAYBE_SignedIn_DefaultSearchProviderChanged \
+  DISABLED_SignedIn_DefaultSearchProviderChanged
+#else
+#define MAYBE_SignedIn_DefaultSearchProviderChanged \
+  SignedIn_DefaultSearchProviderChanged
+#endif
 TEST_F(RepeatableQueriesServiceTest, SignedIn_DefaultSearchProviderChanged) {
   SignIn();
   test_url_loader_factory()->AddResponse(service()->GetRequestURL().spec(),
diff --git a/components/search_engines/search_engine_utils.h b/components/search_engines/search_engine_utils.h
index 83e0dd4..fbba12b26 100644
--- a/components/search_engines/search_engine_utils.h
+++ b/components/search_engines/search_engine_utils.h
@@ -11,8 +11,8 @@
 
 namespace SearchEngineUtils {
 
-// Like the above, but takes a GURL which is expected to represent a search URL.
-// This may be called on any thread.
+// Takes a GURL and returns the matching enum if it matches the URL of a
+// well-known search engine. This may be called on any thread.
 SearchEngineType GetEngineType(const GURL& url);
 
 }  // namespace SearchEngineUtils
diff --git a/components/search_engines/template_url.cc b/components/search_engines/template_url.cc
index 7d4ad77..7903535d 100644
--- a/components/search_engines/template_url.cc
+++ b/components/search_engines/template_url.cc
@@ -1350,8 +1350,8 @@
                                 : base::Time(),
         // Prefer engines that CANNOT be auto-replaced.
         !engine->safe_for_autoreplace(),
-        // More recently modified engines win.
-        engine->last_modified(),
+        // More recently modified engines or created engines win.
+        engine->last_modified(), engine->date_created(),
         // TODO(tommycli): This should be a tie-breaker than provides a total
         // ordering of all TemplateURLs so that distributed clients resolve
         // conflicts identically. This sync_guid is not globally unique today,
diff --git a/components/search_engines/template_url_service.cc b/components/search_engines/template_url_service.cc
index fbe3f41..2e488fc6 100644
--- a/components/search_engines/template_url_service.cc
+++ b/components/search_engines/template_url_service.cc
@@ -15,6 +15,7 @@
 #include "base/format_macros.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/rand_util.h"
+#include "base/ranges/algorithm.h"
 #include "base/stl_util.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
@@ -1599,32 +1600,11 @@
   TemplateURLID previous_id = existing_turl->id();
   RemoveFromMaps(existing_turl);
 
-  // Check for new keyword conflicts with another normal engine.
-  // This is possible when autogeneration of the keyword for a Google default
-  // search provider at load time causes it to conflict with an existing
-  // keyword. If the conflicting engines are replaceable, we delete them.
-  // If they're not replaceable, we leave them alone, and trust AddToMaps() to
-  // choose the best engine to assign the keyword.
-  std::vector<TemplateURL*> turls_to_remove;
-  for (const auto& turl : template_urls_) {
-    // TODO(tommycli): Investigate also replacing TemplateURL::LOCAL engines.
-    if (turl.get() != existing_turl && (turl->type() == TemplateURL::NORMAL) &&
-        (turl->keyword() == new_values.keyword()) && CanReplace(turl.get())) {
-      // Remove() invalidates iterators.
-      turls_to_remove.push_back(turl.get());
-    }
-  }
-  for (TemplateURL* turl : turls_to_remove) {
-    Remove(turl);
-  }
-
-  // Update existing turl with new values. This must happen after calling
-  // Remove(conflicting_keyword_turl) above, since otherwise during that
-  // function RemoveFromMaps() may find |existing_turl| as an alternate engine
-  // for the same keyword.  Duplicate keyword handling is only meant for the
-  // case of extensions, and if done here would leave internal state
-  // inconsistent (e.g. |existing_turl| would already be re-added to maps before
-  // calling AddToMaps() below).
+  // Update existing turl with new values and add back to the map.
+  // We don't do any keyword conflict handling here, as TemplateURLService
+  // already can pick the best engine out of duplicates. Replaceable duplicates
+  // will be culled during next startup's Add() loop. We did this to keep
+  // Update() simple: it never fails, and never deletes |existing_engine|.
   existing_turl->CopyFrom(new_values);
   existing_turl->data_.id = previous_id;
 
@@ -1875,35 +1855,12 @@
 
   template_url->ResetKeywordIfNecessary(search_terms_data(), false);
 
-  // If |template_url| is not created by an extension, its keyword must not
-  // conflict with any already in the model.
-  if (!IsCreatedByExtension(template_url.get())) {
-    TemplateURL* existing_turl =
-        FindNonExtensionTemplateURLForKeyword(template_url->keyword());
-
-    // Note that we can reach here during the loading phase while processing the
-    // template URLs from the web data service.  In this case,
-    // GetTemplateURLForKeyword() will look not only at what's already in the
-    // model, but at the |initial_default_search_provider_|.  Since this engine
-    // will presumably also be present in the web data, we need to double-check
-    // that any "pre-existing" entries we find are actually coming from
-    // |template_urls_|, lest we detect a "conflict" between the
-    // |initial_default_search_provider_| and the web data version of itself.
-    if (existing_turl && Contains(&template_urls_, existing_turl)) {
-      DCHECK_NE(existing_turl, template_url.get());
-      if (CanReplace(existing_turl)) {
-        Remove(existing_turl);
-      } else if (CanReplace(template_url.get())) {
-        return nullptr;
-      } else {
-        // Neither engine can be replaced. Uniquify the existing keyword.
-        base::string16 new_keyword = UniquifyKeyword(*existing_turl, false);
-        ResetTemplateURL(existing_turl, existing_turl->short_name(),
-                         new_keyword, existing_turl->url());
-        DCHECK_EQ(new_keyword, existing_turl->keyword());
-      }
-    }
+  // Early exit if the newly added TemplateURL was a replaceable duplicate.
+  // No need to inform either Sync or flag on the model-mutated in that case.
+  if (RemoveDuplicateReplaceableEnginesOf(template_url.get())) {
+    return nullptr;
   }
+
   TemplateURL* template_url_ptr = template_url.get();
   template_urls_.push_back(std::move(template_url));
   AddToMaps(template_url_ptr);
@@ -2273,3 +2230,58 @@
   }
   return nullptr;
 }
+
+bool TemplateURLService::RemoveDuplicateReplaceableEnginesOf(
+    TemplateURL* candidate) {
+  DCHECK(candidate);
+  const base::string16& keyword = candidate->keyword();
+
+  // If there's not at least one conflicting TemplateURL, there's nothing to do.
+  const auto match_range = keyword_to_turl_and_length_.equal_range(keyword);
+  if (match_range.first == match_range.second) {
+    return false;
+  }
+
+  // Partition into two separate lists, non-replaceable vs replaceable. We don't
+  // do it in-place, as we later call Remove(), which invalidates iterators.
+  std::vector<TemplateURL*> non_replaceable_turls;
+  std::vector<TemplateURL*> replaceable_turls;
+  for (auto it = match_range.first; it != match_range.second; ++it) {
+    TemplateURL* turl = it->second.first;
+    DCHECK_NE(turl, candidate) << "This algorithm runs BEFORE |candidate| is "
+                                  "added to the keyword map.";
+
+    if (CanReplace(turl)) {
+      replaceable_turls.push_back(turl);
+    } else {
+      non_replaceable_turls.push_back(turl);
+    }
+  }
+  // Add the new candidate to the proper list at the end. Because ties are
+  // broken via Sync GUID, we specifically do not promise "last one wins".
+  const bool candidate_is_replaceable = CanReplace(candidate);
+  if (candidate_is_replaceable) {
+    replaceable_turls.push_back(candidate);
+  } else {
+    non_replaceable_turls.push_back(candidate);
+  }
+
+  // Now we remove all but the BEST replaceable engine.
+  // But if there are ANY non-replaceable engines, we should remove ALL the
+  // replaceable engines, and we do that by considering best == nullptr.
+  TemplateURL* best = nullptr;
+  if (non_replaceable_turls.empty()) {
+    best = *base::ranges::min_element(
+        replaceable_turls, [&](const auto& a, const auto& b) {
+          return a->IsBetterThanEngineWithConflictingKeyword(b);
+        });
+  }
+  for (TemplateURL* turl : replaceable_turls) {
+    if (turl != best && turl != candidate) {
+      Remove(turl);
+    }
+  }
+
+  // Caller needs to know if |candidate| would have been deleted.
+  return candidate_is_replaceable && candidate != best;
+}
diff --git a/components/search_engines/template_url_service.h b/components/search_engines/template_url_service.h
index f823333..b5fe67ef 100644
--- a/components/search_engines/template_url_service.h
+++ b/components/search_engines/template_url_service.h
@@ -463,12 +463,14 @@
   // A mapping from keywords to the corresponding TemplateURLs and their
   // meaningful keyword lengths.  This is a multimap, so the system can
   // efficiently tolerate multiple engines with the same keyword, like from
-  // extensions.  The values are not sorted from best to worst for each keyword,
-  // since multimaps don't sort on value. Users that want the best value for
-  // each key must traverse through all matching items, but we expect there to
-  // be below three values per key.
+  // extensions.
+  //
+  // The values for any given keyword are not sorted. Users that want the best
+  // value for each key must traverse through all matching items. The vast
+  // majority of keywords should only have one item.
   using KeywordToTURLAndMeaningfulLength =
       std::multimap<base::string16, TURLAndMeaningfulLength>;
+
   // Declaration of values to be used in an enumerated histogram to tally
   // changes to the default search provider from various entry points. In
   // particular, we use this to see what proportion of changes are from Sync
@@ -698,6 +700,20 @@
   TemplateURL* FindMatchingDefaultExtensionTemplateURL(
       const TemplateURLData& data);
 
+  // This method removes all TemplateURLs that meet all three criteria:
+  //  - Duplicate: Shares the same keyword as |candidate|.
+  //  - Replaceable: Engine is eligible for automatic removal. See CanReplace().
+  //  - Worse: There exists a better engine with the same keyword.
+  //
+  // This method must run BEFORE |candidate| is added to the engine list / map.
+  // It would be simpler to run the algorithm AFTER |candidate| is added, but
+  // that makes extra sync updates, observer notifications, and database churn.
+  //
+  // This method returns true if |candidate| ITSELF is rendundant.
+  // But notably, this method NEVER calls Remove() on |candidate|, leaving the
+  // correct handling to its caller.
+  bool RemoveDuplicateReplaceableEnginesOf(TemplateURL* candidate);
+
   // ---------- Browser state related members ---------------------------------
   PrefService* prefs_ = nullptr;
 
diff --git a/components/services/storage/dom_storage/local_storage_impl.cc b/components/services/storage/dom_storage/local_storage_impl.cc
index 54f6cfb..ad3380f 100644
--- a/components/services/storage/dom_storage/local_storage_impl.cc
+++ b/components/services/storage/dom_storage/local_storage_impl.cc
@@ -479,11 +479,8 @@
       ->RegisterDumpProviderWithSequencedTaskRunner(
           this, "LocalStorage", task_runner, MemoryDumpProvider::Options());
 
-  if (receiver) {
+  if (receiver)
     control_receiver_.Bind(std::move(receiver));
-    control_receiver_.set_disconnect_handler(base::BindOnce(
-        &LocalStorageImpl::ShutdownAndDelete, base::Unretained(this)));
-  }
 }
 
 void LocalStorageImpl::BindStorageArea(
@@ -585,13 +582,17 @@
   it->second->storage_area()->ScheduleImmediateCommit();
 }
 
-void LocalStorageImpl::ShutdownAndDelete() {
+void LocalStorageImpl::ShutDown(base::OnceClosure callback) {
   DCHECK_NE(connection_state_, CONNECTION_SHUTDOWN);
+  DCHECK(callback);
+
+  control_receiver_.reset();
+  shutdown_complete_callback_ = std::move(callback);
 
   // Nothing to do if no connection to the database was ever finished.
   if (connection_state_ != CONNECTION_FINISHED) {
     connection_state_ = CONNECTION_SHUTDOWN;
-    OnShutdownComplete(leveldb::Status::OK());
+    OnShutdownComplete();
     return;
   }
 
@@ -600,9 +601,8 @@
   // Flush any uncommitted data.
   for (const auto& it : areas_) {
     auto* area = it.second->storage_area();
-    LOCAL_HISTOGRAM_BOOLEAN(
-        "LocalStorageContext.ShutdownAndDelete.MaybeDroppedChanges",
-        area->has_pending_load_tasks());
+    LOCAL_HISTOGRAM_BOOLEAN("LocalStorageContext.ShutDown.MaybeDroppedChanges",
+                            area->has_pending_load_tasks());
     area->ScheduleImmediateCommit();
     // TODO(dmurph): Monitor the above histogram, and if dropping changes is
     // common then handle that here.
@@ -612,7 +612,7 @@
   // Respect the content policy settings about what to
   // keep and what to discard.
   if (force_keep_session_state_) {
-    OnShutdownComplete(leveldb::Status::OK());
+    OnShutdownComplete();
     return;  // Keep everything.
   }
 
@@ -621,7 +621,7 @@
         base::BindOnce(&LocalStorageImpl::OnGotStorageUsageForShutdown,
                        base::Unretained(this)));
   } else {
-    OnShutdownComplete(leveldb::Status::OK());
+    OnShutdownComplete();
   }
 }
 
@@ -797,6 +797,9 @@
 }
 
 void LocalStorageImpl::InitiateConnection(bool in_memory_only) {
+  if (connection_state_ == CONNECTION_SHUTDOWN)
+    return;
+
   DCHECK_EQ(connection_state_, CONNECTION_IN_PROGRESS);
 
   if (!directory_.empty() && directory_.IsAbsolute() && !in_memory_only) {
@@ -893,6 +896,9 @@
 }
 
 void LocalStorageImpl::OnConnectionFinished() {
+  if (connection_state_ == CONNECTION_SHUTDOWN)
+    return;
+
   DCHECK_EQ(connection_state_, CONNECTION_IN_PROGRESS);
   // If connection was opened successfully, reset tried_to_recreate_during_open_
   // to enable recreating the database on future errors.
@@ -911,6 +917,9 @@
 }
 
 void LocalStorageImpl::DeleteAndRecreateDatabase(const char* histogram_name) {
+  if (connection_state_ == CONNECTION_SHUTDOWN)
+    return;
+
   // We're about to set database_ to null, so delete the StorageAreaImpls
   // that might still be using the old database.
   for (const auto& it : areas_)
@@ -1075,15 +1084,23 @@
 
   if (!origins_to_delete.empty()) {
     DeleteOrigins(database_.get(), std::move(origins_to_delete),
-                  base::BindOnce(&LocalStorageImpl::OnShutdownComplete,
+                  base::BindOnce(&LocalStorageImpl::OnOriginsDeleted,
                                  base::Unretained(this)));
   } else {
-    OnShutdownComplete(leveldb::Status::OK());
+    OnShutdownComplete();
   }
 }
 
-void LocalStorageImpl::OnShutdownComplete(leveldb::Status status) {
-  delete this;
+void LocalStorageImpl::OnOriginsDeleted(leveldb::Status status) {
+  OnShutdownComplete();
+}
+
+void LocalStorageImpl::OnShutdownComplete() {
+  DCHECK(shutdown_complete_callback_);
+  // Flush any final tasks on the DB task runner before invoking the callback.
+  leveldb_task_runner_->PostTaskAndReply(
+      FROM_HERE, base::DoNothing(), std::move(shutdown_complete_callback_));
+  database_.reset();
 }
 
 void LocalStorageImpl::GetStatistics(size_t* total_cache_size,
diff --git a/components/services/storage/dom_storage/local_storage_impl.h b/components/services/storage/dom_storage/local_storage_impl.h
index 6ef7e0a..ac49957 100644
--- a/components/services/storage/dom_storage/local_storage_impl.h
+++ b/components/services/storage/dom_storage/local_storage_impl.h
@@ -51,6 +51,7 @@
                    scoped_refptr<base::SequencedTaskRunner> task_runner,
                    scoped_refptr<base::SequencedTaskRunner> legacy_task_runner,
                    mojo::PendingReceiver<mojom::LocalStorageControl> receiver);
+  ~LocalStorageImpl() override;
 
   void FlushOriginForTesting(const url::Origin& origin);
 
@@ -61,10 +62,11 @@
   void SetForceKeepSessionState() { force_keep_session_state_ = true; }
 
   // Called when the owning BrowserContext is ending.
-  // Schedules the commit of any unsaved changes and will delete
-  // and keep data on disk per the content settings and special storage
-  // policies.
-  void ShutdownAndDelete();
+  // Schedules the commit of any unsaved changes and will delete or keep data on
+  // disk per the content settings and special storage policies.  `callback` is
+  // invoked when shutdown is complete, which may happen even before ShutDown
+  // returns.
+  void ShutDown(base::OnceClosure callback);
 
   // Clears unused storage areas, when thresholds are reached.
   void PurgeUnusedAreasIfNeeded();
@@ -105,8 +107,6 @@
 
   class StorageAreaHolder;
 
-  ~LocalStorageImpl() override;
-
   // Runs |callback| immediately if already connected to a database, otherwise
   // delays running |callback| untill after a connection has been established.
   // Initiates connecting to the database if no connection is in progres yet.
@@ -131,7 +131,8 @@
 
   void OnGotStorageUsageForShutdown(
       std::vector<mojom::LocalStorageUsageInfoPtr> usage);
-  void OnShutdownComplete(leveldb::Status status);
+  void OnOriginsDeleted(leveldb::Status status);
+  void OnShutdownComplete();
 
   void GetStatistics(size_t* total_cache_size, size_t* unused_area_count);
   void OnCommitResult(leveldb::Status status);
@@ -191,6 +192,8 @@
 
   mojo::Receiver<mojom::LocalStorageControl> control_receiver_{this};
 
+  base::OnceClosure shutdown_complete_callback_;
+
   base::WeakPtrFactory<LocalStorageImpl> weak_ptr_factory_{this};
 };
 
diff --git a/components/services/storage/dom_storage/local_storage_impl_unittest.cc b/components/services/storage/dom_storage/local_storage_impl_unittest.cc
index a08f132..8fce671 100644
--- a/components/services/storage/dom_storage/local_storage_impl_unittest.cc
+++ b/components/services/storage/dom_storage/local_storage_impl_unittest.cc
@@ -106,12 +106,8 @@
   LocalStorageImplTest() { EXPECT_TRUE(temp_path_.CreateUniqueTempDir()); }
 
   ~LocalStorageImplTest() override {
-    if (context_)
-      ShutdownContext();
-
-    // Ensure any opened database is really closed before attempting to delete
-    // its storage path.
-    RunUntilIdle();
+    if (storage_)
+      ShutDownStorage();
 
     EXPECT_TRUE(temp_path_.Delete());
   }
@@ -119,19 +115,29 @@
   const base::FilePath& storage_path() const { return temp_path_.GetPath(); }
 
   LocalStorageImpl* context() {
-    if (!context_) {
-      context_ = new LocalStorageImpl(
-          storage_path(), base::ThreadTaskRunnerHandle::Get(), task_runner_,
-          /*receiver=*/mojo::NullReceiver());
-    }
-
-    return context_;
+    DCHECK(storage_);
+    return storage_.get();
   }
 
-  void ShutdownContext() {
-    context_->ShutdownAndDelete();
-    context_ = nullptr;
-    RunUntilIdle();
+  void InitializeStorage(const base::FilePath& path) {
+    DCHECK(!storage_);
+    storage_ = std::make_unique<LocalStorageImpl>(
+        path, base::ThreadTaskRunnerHandle::Get(), task_runner_,
+        /*receiver=*/mojo::NullReceiver());
+  }
+
+  void ShutDownStorage() {
+    DCHECK(storage_);
+    base::RunLoop loop;
+    storage_->ShutDown(loop.QuitClosure());
+    loop.Run();
+    storage_.reset();
+  }
+
+  void ResetStorage(const base::FilePath& path) {
+    if (storage_)
+      ShutDownStorage();
+    InitializeStorage(path);
   }
 
   void WaitForDatabaseOpen() {
@@ -221,14 +227,13 @@
   // until both are idle.
   void RunUntilIdle() { task_environment_.RunUntilIdle(); }
 
-  void DoTestPut(LocalStorageImpl* context,
-                 const std::vector<uint8_t>& key,
+  void DoTestPut(const std::vector<uint8_t>& key,
                  const std::vector<uint8_t>& value) {
     mojo::Remote<blink::mojom::StorageArea> area;
     bool success = false;
     base::RunLoop run_loop;
-    context->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
-                             area.BindNewPipeAndPassReceiver());
+    context()->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
+                               area.BindNewPipeAndPassReceiver());
     area->Put(key, value, base::nullopt, "source",
               test::MakeSuccessCallback(run_loop.QuitClosure(), &success));
     run_loop.Run();
@@ -237,12 +242,11 @@
     RunUntilIdle();
   }
 
-  bool DoTestGet(LocalStorageImpl* context,
-                 const std::vector<uint8_t>& key,
+  bool DoTestGet(const std::vector<uint8_t>& key,
                  std::vector<uint8_t>* result) {
     mojo::Remote<blink::mojom::StorageArea> area;
-    context->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
-                             area.BindNewPipeAndPassReceiver());
+    context()->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
+                               area.BindNewPipeAndPassReceiver());
 
     base::RunLoop run_loop;
     std::vector<blink::mojom::KeyValuePtr> data;
@@ -271,6 +275,8 @@
 
  private:
   // testing::Test:
+  void SetUp() override { InitializeStorage(storage_path()); }
+
   void TearDown() override {
     // Some of these tests close message pipes which serve as master interfaces
     // to other associated interfaces; this in turn schedules tasks to invoke
@@ -285,7 +291,7 @@
   scoped_refptr<base::SequencedTaskRunner> task_runner_{
       base::ThreadTaskRunnerHandle::Get()};
 
-  LocalStorageImpl* context_ = nullptr;
+  std::unique_ptr<LocalStorageImpl> storage_;
 
   DISALLOW_COPY_AND_ASSIGN(LocalStorageImplTest);
 };
@@ -395,8 +401,8 @@
 TEST_F(LocalStorageImplTest, ValidVersion) {
   SetDatabaseEntry("VERSION", "1");
   SetDatabaseEntry(std::string("_http://foobar.com") + '\x00' + "key", "value");
-  ShutdownContext();
 
+  ResetStorage(storage_path());
   EXPECT_EQ(StdStringToUint8Vector("value"),
             DoTestGet(StdStringToUint8Vector("key")));
 }
@@ -405,10 +411,9 @@
   SetDatabaseEntry("VERSION", "foobar");
   SetDatabaseEntry(std::string("_http://foobar.com") + '\x00' + "key", "value");
 
-  // Force the context to reload the database, which should fail due to invalid
+  // Force the a reload of the database, which should fail due to invalid
   // version data.
-  ShutdownContext();
-
+  ResetStorage(storage_path());
   EXPECT_EQ(base::nullopt, DoTestGet(StdStringToUint8Vector("key")));
 }
 
@@ -532,8 +537,8 @@
 TEST_F(LocalStorageImplTest, DeleteStorage) {
   SetDatabaseEntry("VERSION", "1");
   SetDatabaseEntry(std::string("_http://foobar.com") + '\x00' + "key", "value");
-  ShutdownContext();
 
+  ResetStorage(storage_path());
   base::RunLoop run_loop;
   context()->DeleteStorage(url::Origin::Create(GURL("http://foobar.com")),
                            run_loop.QuitClosure());
@@ -697,6 +702,7 @@
   EXPECT_TRUE(base::PathExists(old_db_path));
 
   // Opening origin2 and accessing its data should not migrate anything.
+  ResetStorage(storage_path());
   mojo::Remote<blink::mojom::StorageArea> area;
   context()->BindStorageArea(origin2, area.BindNewPipeAndPassReceiver());
 
@@ -829,10 +835,9 @@
       origin1, /*purge_on_shutdown=*/true));
   context()->ApplyPolicyUpdates(std::move(updates));
 
-  ShutdownContext();
-
   // Data from origin2 should exist, including meta-data, but nothing should
   // exist for origin1.
+  ResetStorage(storage_path());
   auto contents = GetDatabaseContents();
   EXPECT_EQ(3u, contents.size());
   for (const auto& entry : contents) {
@@ -844,104 +849,77 @@
 }
 
 TEST_F(LocalStorageImplTest, InMemory) {
-  auto* context = new LocalStorageImpl(
-      base::FilePath(), base::ThreadTaskRunnerHandle::Get(), nullptr,
-      /*receiver=*/mojo::NullReceiver());
+  ResetStorage(base::FilePath());
   auto key = StdStringToUint8Vector("key");
   auto value = StdStringToUint8Vector("value");
 
   mojo::Remote<blink::mojom::StorageArea> area;
-  context->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
-                           area.BindNewPipeAndPassReceiver());
-  DoTestPut(context, key, value);
+  context()->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
+                             area.BindNewPipeAndPassReceiver());
+  DoTestPut(key, value);
   std::vector<uint8_t> result;
-  EXPECT_TRUE(DoTestGet(context, key, &result));
+  EXPECT_TRUE(DoTestGet(key, &result));
   EXPECT_EQ(value, result);
 
-  context->ShutdownAndDelete();
-  context = nullptr;
-  RunUntilIdle();
-
   // Should not have created any files.
+  ShutDownStorage();
   EXPECT_TRUE(FirstEntryInDir().empty());
 
   // Re-opening should get fresh data.
-  context = new LocalStorageImpl(base::FilePath(),
-                                 base::ThreadTaskRunnerHandle::Get(), nullptr,
-                                 /*receiver=*/mojo::NullReceiver());
-  EXPECT_FALSE(DoTestGet(context, key, &result));
-  context->ShutdownAndDelete();
+  InitializeStorage(base::FilePath());
+  EXPECT_FALSE(DoTestGet(key, &result));
 }
 
 TEST_F(LocalStorageImplTest, InMemoryInvalidPath) {
-  auto* context =
-      new LocalStorageImpl(base::FilePath(FILE_PATH_LITERAL("../../")),
-                           base::ThreadTaskRunnerHandle::Get(), nullptr,
-                           /*receiver=*/mojo::NullReceiver());
+  ResetStorage(base::FilePath(FILE_PATH_LITERAL("../../")));
   auto key = StdStringToUint8Vector("key");
   auto value = StdStringToUint8Vector("value");
 
   mojo::Remote<blink::mojom::StorageArea> area;
-  context->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
-                           area.BindNewPipeAndPassReceiver());
+  context()->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
+                             area.BindNewPipeAndPassReceiver());
 
-  DoTestPut(context, key, value);
+  DoTestPut(key, value);
   std::vector<uint8_t> result;
-  EXPECT_TRUE(DoTestGet(context, key, &result));
+  EXPECT_TRUE(DoTestGet(key, &result));
   EXPECT_EQ(value, result);
 
-  context->ShutdownAndDelete();
-  context = nullptr;
-  RunUntilIdle();
+  ShutDownStorage();
 
   // Should not have created any files.
   EXPECT_TRUE(FirstEntryInDir().empty());
 }
 
 TEST_F(LocalStorageImplTest, OnDisk) {
-  auto* context = new LocalStorageImpl(
-      storage_path(), base::ThreadTaskRunnerHandle::Get(), nullptr,
-      /*receiver=*/mojo::NullReceiver());
   auto key = StdStringToUint8Vector("key");
   auto value = StdStringToUint8Vector("value");
 
-  DoTestPut(context, key, value);
+  DoTestPut(key, value);
   std::vector<uint8_t> result;
-  EXPECT_TRUE(DoTestGet(context, key, &result));
+  EXPECT_TRUE(DoTestGet(key, &result));
   EXPECT_EQ(value, result);
 
-  context->ShutdownAndDelete();
-  context = nullptr;
-  RunUntilIdle();
+  ShutDownStorage();
 
   // Should have created files.
   EXPECT_EQ(base::FilePath(kLocalStoragePath), FirstEntryInDir().BaseName());
 
   // Should be able to re-open.
-  context = new LocalStorageImpl(storage_path(),
-                                 base::ThreadTaskRunnerHandle::Get(), nullptr,
-                                 /*receiver=*/mojo::NullReceiver());
-  EXPECT_TRUE(DoTestGet(context, key, &result));
+  InitializeStorage(storage_path());
+  EXPECT_TRUE(DoTestGet(key, &result));
   EXPECT_EQ(value, result);
-  context->ShutdownAndDelete();
 }
 
 TEST_F(LocalStorageImplTest, InvalidVersionOnDisk) {
-  // Create context and add some data to it.
-  auto* context = new LocalStorageImpl(
-      storage_path(), base::ThreadTaskRunnerHandle::Get(), nullptr,
-      /*receiver=*/mojo::NullReceiver());
   auto key = StdStringToUint8Vector("key");
   auto value = StdStringToUint8Vector("value");
 
-  DoTestPut(context, key, value);
+  DoTestPut(key, value);
   std::vector<uint8_t> result;
-  EXPECT_TRUE(DoTestGet(context, key, &result));
+  EXPECT_TRUE(DoTestGet(key, &result));
   EXPECT_EQ(value, result);
 
-  context->ShutdownAndDelete();
-  context = nullptr;
-  RunUntilIdle();
+  ShutDownStorage();
 
   {
     // Mess up version number in database.
@@ -957,43 +935,28 @@
   }
 
   // Make sure data is gone.
-  context = new LocalStorageImpl(storage_path(),
-                                 base::ThreadTaskRunnerHandle::Get(), nullptr,
-                                 /*receiver=*/mojo::NullReceiver());
-  EXPECT_FALSE(DoTestGet(context, key, &result));
+  InitializeStorage(storage_path());
+  EXPECT_FALSE(DoTestGet(key, &result));
 
   // Write data again.
-  DoTestPut(context, key, value);
-
-  context->ShutdownAndDelete();
-  context = nullptr;
-  RunUntilIdle();
+  DoTestPut(key, value);
 
   // Data should have been preserved now.
-  context = new LocalStorageImpl(storage_path(),
-                                 base::ThreadTaskRunnerHandle::Get(), nullptr,
-                                 /*receiver=*/mojo::NullReceiver());
-  EXPECT_TRUE(DoTestGet(context, key, &result));
+  ResetStorage(storage_path());
+  EXPECT_TRUE(DoTestGet(key, &result));
   EXPECT_EQ(value, result);
-  context->ShutdownAndDelete();
 }
 
 TEST_F(LocalStorageImplTest, CorruptionOnDisk) {
-  // Create context and add some data to it.
-  auto* context = new LocalStorageImpl(
-      storage_path(), base::ThreadTaskRunnerHandle::Get(), nullptr,
-      /*receiver=*/mojo::NullReceiver());
   auto key = StdStringToUint8Vector("key");
   auto value = StdStringToUint8Vector("value");
 
-  DoTestPut(context, key, value);
+  DoTestPut(key, value);
   std::vector<uint8_t> result;
-  EXPECT_TRUE(DoTestGet(context, key, &result));
+  EXPECT_TRUE(DoTestGet(key, &result));
   EXPECT_EQ(value, result);
 
-  context->ShutdownAndDelete();
-  context = nullptr;
-  RunUntilIdle();
+  ShutDownStorage();
 
   // Delete manifest files to mess up opening DB.
   base::FilePath db_path = storage_path()
@@ -1007,36 +970,23 @@
   }
 
   // Make sure data is gone.
-  context = new LocalStorageImpl(storage_path(),
-                                 base::ThreadTaskRunnerHandle::Get(), nullptr,
-                                 /*receiver=*/mojo::NullReceiver());
-  EXPECT_FALSE(DoTestGet(context, key, &result));
+  InitializeStorage(storage_path());
+  EXPECT_FALSE(DoTestGet(key, &result));
 
   // Write data again.
-  DoTestPut(context, key, value);
-
-  context->ShutdownAndDelete();
-  context = nullptr;
-  RunUntilIdle();
+  DoTestPut(key, value);
 
   // Data should have been preserved now.
-  context = new LocalStorageImpl(storage_path(),
-                                 base::ThreadTaskRunnerHandle::Get(), nullptr,
-                                 /*receiver=*/mojo::NullReceiver());
-  EXPECT_TRUE(DoTestGet(context, key, &result));
+  ResetStorage(storage_path());
+  EXPECT_TRUE(DoTestGet(key, &result));
   EXPECT_EQ(value, result);
-  context->ShutdownAndDelete();
 }
 
 TEST_F(LocalStorageImplTest, RecreateOnCommitFailure) {
-  auto* context = new LocalStorageImpl(
-      storage_path(), base::ThreadTaskRunnerHandle::Get(), nullptr,
-      /*receiver=*/mojo::NullReceiver());
-
   base::Optional<base::RunLoop> open_loop;
   base::Optional<base::RunLoop> destruction_loop;
   size_t num_database_open_requests = 0;
-  context->SetDatabaseOpenCallbackForTesting(base::BindLambdaForTesting([&] {
+  context()->SetDatabaseOpenCallbackForTesting(base::BindLambdaForTesting([&] {
     ++num_database_open_requests;
     open_loop->Quit();
   }));
@@ -1052,12 +1002,12 @@
   mojo::Remote<blink::mojom::StorageArea> area2;
   mojo::Remote<blink::mojom::StorageArea> area3;
 
-  context->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
-                           area1.BindNewPipeAndPassReceiver());
-  context->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
-                           area2.BindNewPipeAndPassReceiver());
-  context->BindStorageArea(url::Origin::Create(GURL("http://example.com")),
-                           area3.BindNewPipeAndPassReceiver());
+  context()->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
+                             area1.BindNewPipeAndPassReceiver());
+  context()->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
+                             area2.BindNewPipeAndPassReceiver());
+  context()->BindStorageArea(url::Origin::Create(GURL("http://example.com")),
+                             area3.BindNewPipeAndPassReceiver());
   open_loop->Run();
 
   // Add observers to the first two connections.
@@ -1074,7 +1024,7 @@
   destruction_loop.emplace();
 
   bool first_database_destroyed = false;
-  context->GetDatabaseForTesting().PostTaskWithThisObject(
+  context()->GetDatabaseForTesting().PostTaskWithThisObject(
       FROM_HERE, base::BindLambdaForTesting([&](DomStorageDatabase* db) {
         db->MakeAllCommitsFailForTesting();
         db->SetDestructionCallbackForTesting(base::BindLambdaForTesting([&] {
@@ -1087,7 +1037,7 @@
   // commits fail.
   open_loop.emplace();
   num_database_open_requests = 0;
-  context->SetDatabaseOpenCallbackForTesting(base::BindLambdaForTesting([&] {
+  context()->SetDatabaseOpenCallbackForTesting(base::BindLambdaForTesting([&] {
     ++num_database_open_requests;
     open_loop->Quit();
   }));
@@ -1111,7 +1061,7 @@
     RunUntilIdle();
     // And we need to flush after every change. Otherwise changes get batched up
     // and only one commit is done some time later.
-    context->FlushOriginForTesting(
+    context()->FlushOriginForTesting(
         url::Origin::Create(GURL("http://foobar.com")));
   }
   area1.reset();
@@ -1127,8 +1077,8 @@
   EXPECT_FALSE(area2.is_connected());
 
   // Reconnect |area1| to the database, and try to read a value.
-  context->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
-                           area1.BindNewPipeAndPassReceiver());
+  context()->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
+                             area1.BindNewPipeAndPassReceiver());
   base::RunLoop delete_loop;
   bool success = true;
   TestLevelDBObserver observer3;
@@ -1148,9 +1098,9 @@
 
   {
     // Committing data should now work.
-    DoTestPut(context, key, value);
+    DoTestPut(key, value);
     std::vector<uint8_t> result;
-    EXPECT_TRUE(DoTestGet(context, key, &result));
+    EXPECT_TRUE(DoTestGet(key, &result));
     EXPECT_EQ(value, result);
   }
 
@@ -1162,20 +1112,14 @@
               observer2.observations()[i].type);
     EXPECT_EQ(Uint8VectorToStdString(key), observer2.observations()[i].key);
   }
-
-  context->ShutdownAndDelete();
 }
 
 TEST_F(LocalStorageImplTest, DontRecreateOnRepeatedCommitFailure) {
-  auto* context = new LocalStorageImpl(
-      storage_path(), base::ThreadTaskRunnerHandle::Get(), nullptr,
-      /*receiver=*/mojo::NullReceiver());
-
   // Ensure that the opened database always fails on write.
   base::Optional<base::RunLoop> open_loop;
   size_t num_database_open_requests = 0;
   size_t num_databases_destroyed = 0;
-  context->SetDatabaseOpenCallbackForTesting(base::BindLambdaForTesting([&] {
+  context()->SetDatabaseOpenCallbackForTesting(base::BindLambdaForTesting([&] {
     ++num_database_open_requests;
     open_loop->Quit();
   }));
@@ -1186,13 +1130,13 @@
 
   // Open a connection to the database.
   mojo::Remote<blink::mojom::StorageArea> area;
-  context->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
-                           area.BindNewPipeAndPassReceiver());
+  context()->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
+                             area.BindNewPipeAndPassReceiver());
   open_loop->Run();
 
   // Ensure that all commits fail on the database, and that we observe its
   // destruction.
-  context->GetDatabaseForTesting().PostTaskWithThisObject(
+  context()->GetDatabaseForTesting().PostTaskWithThisObject(
       FROM_HERE, base::BindLambdaForTesting([&](DomStorageDatabase* db) {
         db->MakeAllCommitsFailForTesting();
         db->SetDestructionCallbackForTesting(
@@ -1220,7 +1164,7 @@
     RunUntilIdle();
     // And we need to flush after every change. Otherwise changes get batched up
     // and only one commit is done some time later.
-    context->FlushOriginForTesting(
+    context()->FlushOriginForTesting(
         url::Origin::Create(GURL("http://foobar.com")));
   }
   area.reset();
@@ -1228,14 +1172,14 @@
   // Wait for LocalStorageImpl to try to reconnect to the database, and
   // connect that new request with a database implementation that always fails
   // on write.
-  context->SetDatabaseOpenCallbackForTesting(base::BindLambdaForTesting([&] {
+  context()->SetDatabaseOpenCallbackForTesting(base::BindLambdaForTesting([&] {
     ++num_database_open_requests;
     open_loop->Quit();
   }));
   open_loop->Run();
   EXPECT_EQ(2u, num_database_open_requests);
   EXPECT_EQ(1u, num_databases_destroyed);
-  context->GetDatabaseForTesting().PostTaskWithThisObject(
+  context()->GetDatabaseForTesting().PostTaskWithThisObject(
       FROM_HERE, base::BindOnce([](DomStorageDatabase* db) {
         db->MakeAllCommitsFailForTesting();
       }));
@@ -1243,8 +1187,8 @@
   // Reconnect a area to the database, and repeatedly write data to it again.
   // This time all should just keep getting written, and commit errors are
   // getting ignored.
-  context->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
-                           area.BindNewPipeAndPassReceiver());
+  context()->BindStorageArea(url::Origin::Create(GURL("http://foobar.com")),
+                             area.BindNewPipeAndPassReceiver());
   old_value = base::nullopt;
   for (int i = 0; i < 64; ++i) {
     // Every write needs to be different to make sure there actually is a
@@ -1257,15 +1201,13 @@
     old_value = value;
     // And we need to flush after every change. Otherwise changes get batched up
     // and only one commit is done some time later.
-    context->FlushOriginForTesting(
+    context()->FlushOriginForTesting(
         url::Origin::Create(GURL("http://foobar.com")));
   }
 
   // Should still be connected after all that.
   RunUntilIdle();
   EXPECT_TRUE(area.is_connected());
-
-  context->ShutdownAndDelete();
 }
 
 }  // namespace storage
diff --git a/components/services/storage/dom_storage/session_storage_impl.cc b/components/services/storage/dom_storage/session_storage_impl.cc
index 811a071..d55b4d2 100644
--- a/components/services/storage/dom_storage/session_storage_impl.cc
+++ b/components/services/storage/dom_storage/session_storage_impl.cc
@@ -115,8 +115,6 @@
       ->RegisterDumpProviderWithSequencedTaskRunner(
           this, "SessionStorage", std::move(memory_dump_task_runner),
           base::trace_event::MemoryDumpProvider::Options());
-  receiver_.set_disconnect_handler(base::BindOnce(
-      &SessionStorageImpl::ShutdownAndDelete, base::Unretained(this)));
 }
 
 SessionStorageImpl::~SessionStorageImpl() {
@@ -381,8 +379,12 @@
   }
 }
 
-void SessionStorageImpl::ShutdownAndDelete() {
+void SessionStorageImpl::ShutDown(base::OnceClosure callback) {
   DCHECK_NE(connection_state_, CONNECTION_SHUTDOWN);
+  DCHECK(callback);
+
+  receiver_.reset();
+  shutdown_complete_callback_ = std::move(callback);
 
   // The namespaces will DCHECK if they are destructed with pending clones. It
   // is valid to drop these on shutdown.
@@ -393,7 +395,7 @@
   // Nothing to do if no connection to the database was ever finished.
   if (connection_state_ != CONNECTION_FINISHED) {
     connection_state_ = CONNECTION_SHUTDOWN;
-    OnShutdownComplete(leveldb::Status::OK());
+    OnShutdownComplete();
     return;
   }
   connection_state_ = CONNECTION_SHUTDOWN;
@@ -402,7 +404,7 @@
   for (const auto& it : data_maps_) {
     auto* area = it.second->storage_area();
     LOCAL_HISTOGRAM_BOOLEAN(
-        "SessionStorageContext.ShutdownAndDelete.MaybeDroppedChanges",
+        "SessionStorageContext.ShutDown.MaybeDroppedChanges",
         area->has_pending_load_tasks());
     area->ScheduleImmediateCommit();
     // TODO(dmurph): Monitor the above histogram, and if dropping changes is
@@ -410,7 +412,7 @@
     area->CancelAllPendingRequests();
   }
 
-  OnShutdownComplete(leveldb::Status::OK());
+  OnShutdownComplete();
 }
 
 void SessionStorageImpl::PurgeMemory() {
@@ -603,6 +605,9 @@
 }
 
 void SessionStorageImpl::OnCommitResult(leveldb::Status status) {
+  if (connection_state_ == CONNECTION_SHUTDOWN)
+    return;
+
   DCHECK_EQ(connection_state_, CONNECTION_FINISHED);
   UMA_HISTOGRAM_ENUMERATION("SessionStorageContext.CommitResult",
                             leveldb_env::GetLevelDBStatusUMAValue(status),
@@ -838,6 +843,9 @@
     ValueAndStatus version,
     KeyValuePairsAndStatus namespaces,
     ValueAndStatus next_map_id) {
+  if (connection_state_ == CONNECTION_SHUTDOWN)
+    return;
+
   std::vector<AsyncDomStorageDatabase::BatchDatabaseTask> migration_tasks;
 
   MetadataParseResult version_parse =
@@ -964,6 +972,9 @@
 }
 
 void SessionStorageImpl::OnConnectionFinished() {
+  if (connection_state_ == CONNECTION_SHUTDOWN)
+    return;
+
   DCHECK(!database_ || connection_state_ == CONNECTION_IN_PROGRESS);
 
   // If connection was opened successfully, reset tried_to_recreate_during_open_
@@ -985,6 +996,9 @@
 }
 
 void SessionStorageImpl::DeleteAndRecreateDatabase(const char* histogram_name) {
+  if (connection_state_ == CONNECTION_SHUTDOWN)
+    return;
+
   // We're about to set database_ to null, so delete the StorageAreas
   // that might still be using the old database.
   for (const auto& it : data_maps_)
@@ -1042,8 +1056,12 @@
   InitiateConnection(recreate_in_memory);
 }
 
-void SessionStorageImpl::OnShutdownComplete(leveldb::Status status) {
-  delete this;
+void SessionStorageImpl::OnShutdownComplete() {
+  DCHECK(shutdown_complete_callback_);
+  // Flush any final tasks on the DB task runner before invoking the callback.
+  database_.reset();
+  leveldb_task_runner_->PostTaskAndReply(
+      FROM_HERE, base::DoNothing(), std::move(shutdown_complete_callback_));
 }
 
 void SessionStorageImpl::GetStatistics(size_t* total_cache_size,
diff --git a/components/services/storage/dom_storage/session_storage_impl.h b/components/services/storage/dom_storage/session_storage_impl.h
index 94a1381..4d2cb96 100644
--- a/components/services/storage/dom_storage/session_storage_impl.h
+++ b/components/services/storage/dom_storage/session_storage_impl.h
@@ -15,6 +15,7 @@
 #include "base/callback_forward.h"
 #include "base/files/file_path.h"
 #include "base/gtest_prod_util.h"
+#include "base/memory/ref_counted.h"
 #include "base/memory/scoped_refptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/sequence_bound.h"
@@ -67,6 +68,8 @@
       std::string leveldb_name,
       mojo::PendingReceiver<mojom::SessionStorageControl> receiver);
 
+  ~SessionStorageImpl() override;
+
   // mojom::SessionStorageControl implementation:
   void BindNamespace(
       const std::string& namespace_id,
@@ -94,10 +97,11 @@
                        bool should_persist) override;
 
   // Called when the client (i.e. the corresponding browser storage partition)
-  // disconnects. Schedules the commit of any unsaved changes then deletes this
-  // object. All data on disk (where there was no call to
-  // |DeleteNamespace| will stay on disk for later restoring.
-  void ShutdownAndDelete();
+  // disconnects. Schedules the commit of any unsaved changes. All data on disk
+  // (where there was no call to DeleteNamespace will stay on disk for later
+  // restoring. `callback` is invoked when shutdown is complete, which may
+  // happen even before ShutDown returns.
+  void ShutDown(base::OnceClosure callback);
 
   // Clears unused storage areas, when thresholds are reached.
   void PurgeUnusedAreasIfNeeded();
@@ -149,9 +153,6 @@
     kMaxValue = kSuccess
   };
 
-  // Object deletion is done through |ShutdownAndDelete()|.
-  ~SessionStorageImpl() override;
-
   scoped_refptr<SessionStorageMetadata::MapData> RegisterNewAreaMap(
       SessionStorageMetadata::NamespaceEntry namespace_entry,
       const url::Origin& origin);
@@ -223,7 +224,7 @@
   void DeleteAndRecreateDatabase(const char* histogram_name);
   void OnDBDestroyed(bool recreate_in_memory, leveldb::Status status);
 
-  void OnShutdownComplete(leveldb::Status status);
+  void OnShutdownComplete();
 
   void GetStatistics(size_t* total_cache_size, size_t* unused_areas_count);
 
@@ -282,6 +283,8 @@
   // Name of an extra histogram to log open results to, if not null.
   const char* open_result_histogram_ = nullptr;
 
+  base::OnceClosure shutdown_complete_callback_;
+
   base::WeakPtrFactory<SessionStorageImpl> weak_ptr_factory_{this};
 };
 
diff --git a/components/services/storage/dom_storage/session_storage_impl_unittest.cc b/components/services/storage/dom_storage/session_storage_impl_unittest.cc
index c46eebfb..fafbd16 100644
--- a/components/services/storage/dom_storage/session_storage_impl_unittest.cc
+++ b/components/services/storage/dom_storage/session_storage_impl_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <stdint.h>
 
+#include <memory>
 #include <vector>
 
 #include "base/bind.h"
@@ -57,10 +58,6 @@
   SessionStorageImplTest() { CHECK(temp_dir_.CreateUniqueTempDir()); }
 
   ~SessionStorageImplTest() override {
-    // There may be pending tasks to clean up files in the temp dir. Make sure
-    // they run so temp dir deletion can succeed.
-    RunUntilIdle();
-
     EXPECT_TRUE(temp_dir_.Delete());
   }
 
@@ -85,13 +82,13 @@
   SessionStorageImpl* session_storage_impl() {
     if (!session_storage_) {
       remote_session_storage_.reset();
-      session_storage_ = new SessionStorageImpl(
+      session_storage_ = std::make_unique<SessionStorageImpl>(
           temp_path(), blocking_task_runner_,
           base::SequencedTaskRunnerHandle::Get(), backing_mode_,
           kSessionStorageDirectory,
           remote_session_storage_.BindNewPipeAndPassReceiver());
     }
-    return session_storage_;
+    return session_storage_.get();
   }
 
   mojom::SessionStorageControl* session_storage() {
@@ -101,9 +98,11 @@
 
   void ShutDownSessionStorage() {
     remote_session_storage_.FlushForTesting();
-    session_storage_->ShutdownAndDelete();
-    session_storage_ = nullptr;
-    RunUntilIdle();
+
+    base::RunLoop loop;
+    session_storage_->ShutDown(loop.QuitClosure());
+    loop.Run();
+    session_storage_.reset();
   }
 
   void DoTestPut(const std::string& namespace_id,
@@ -161,7 +160,7 @@
   scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_{
       base::ThreadPool::CreateSequencedTaskRunner(
           {base::MayBlock(), base::TaskShutdownBehavior::BLOCK_SHUTDOWN})};
-  SessionStorageImpl* session_storage_ = nullptr;
+  std::unique_ptr<SessionStorageImpl> session_storage_;
   mojo::Remote<mojom::SessionStorageControl> remote_session_storage_;
 
   DISALLOW_COPY_AND_ASSIGN(SessionStorageImplTest);
diff --git a/components/services/storage/partition_impl.cc b/components/services/storage/partition_impl.cc
index c9a5222..b6ee7d4 100644
--- a/components/services/storage/partition_impl.cc
+++ b/components/services/storage/partition_impl.cc
@@ -4,9 +4,12 @@
 
 #include "components/services/storage/partition_impl.h"
 
+#include <memory>
 #include <utility>
 
 #include "base/bind.h"
+#include "base/sequenced_task_runner.h"
+#include "base/synchronization/waitable_event.h"
 #include "base/task/post_task.h"
 #include "base/task/thread_pool.h"
 #include "base/threading/sequenced_task_runner_handle.h"
@@ -21,6 +24,26 @@
 
 const char kSessionStorageDirectory[] = "Session Storage";
 
+template <typename T>
+base::OnceClosure MakeDeferredDeleter(std::unique_ptr<T> object) {
+  return base::BindOnce(
+      [](scoped_refptr<base::SequencedTaskRunner> task_runner, T* object) {
+        task_runner->DeleteSoon(FROM_HERE, object);
+      },
+      base::SequencedTaskRunnerHandle::Get(),
+      // NOTE: We release `object` immediately. In the case
+      // where this task never runs, we prefer to leak the
+      // object rather than potentilaly destroying it on the
+      // wrong sequence.
+      object.release());
+}
+
+template <typename T>
+void ShutDown(std::unique_ptr<T> object) {
+  if (T* ptr = object.get())
+    ptr->ShutDown(MakeDeferredDeleter(std::move(object)));
+}
+
 }  // namespace
 
 PartitionImpl::PartitionImpl(StorageServiceImpl* service,
@@ -30,7 +53,10 @@
       &PartitionImpl::OnDisconnect, base::Unretained(this)));
 }
 
-PartitionImpl::~PartitionImpl() = default;
+PartitionImpl::~PartitionImpl() {
+  ShutDown(std::move(local_storage_));
+  ShutDown(std::move(session_storage_));
+}
 
 void PartitionImpl::BindReceiver(
     mojo::PendingReceiver<mojom::Partition> receiver) {
@@ -55,8 +81,7 @@
 
 void PartitionImpl::BindSessionStorageControl(
     mojo::PendingReceiver<mojom::SessionStorageControl> receiver) {
-  // This object deletes itself on disconnection.
-  session_storage_ = new SessionStorageImpl(
+  session_storage_ = std::make_unique<SessionStorageImpl>(
       path_.value_or(base::FilePath()),
       base::ThreadPool::CreateSequencedTaskRunner(
           {base::MayBlock(), base::WithBaseSyncPrimitives(),
@@ -76,8 +101,7 @@
 
 void PartitionImpl::BindLocalStorageControl(
     mojo::PendingReceiver<mojom::LocalStorageControl> receiver) {
-  // This object deletes itself on disconnection.
-  local_storage_ = new LocalStorageImpl(
+  local_storage_ = std::make_unique<LocalStorageImpl>(
       path_.value_or(base::FilePath()), base::SequencedTaskRunnerHandle::Get(),
       base::ThreadPool::CreateSequencedTaskRunner(
           {base::MayBlock(), base::WithBaseSyncPrimitives(),
diff --git a/components/services/storage/partition_impl.h b/components/services/storage/partition_impl.h
index ddec01c..c9568b5a 100644
--- a/components/services/storage/partition_impl.h
+++ b/components/services/storage/partition_impl.h
@@ -63,9 +63,8 @@
   mojo::ReceiverSet<mojom::Partition> receivers_;
   std::map<url::Origin, std::unique_ptr<OriginContextImpl>> origin_contexts_;
 
-  // These objects own themselves.
-  SessionStorageImpl* session_storage_;
-  LocalStorageImpl* local_storage_;
+  std::unique_ptr<SessionStorageImpl> session_storage_;
+  std::unique_ptr<LocalStorageImpl> local_storage_;
 
   DISALLOW_COPY_AND_ASSIGN(PartitionImpl);
 };
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb
index d34b121..43323074 100644
--- a/components/strings/components_strings_as.xtb
+++ b/components/strings/components_strings_as.xtb
@@ -369,6 +369,7 @@
 <translation id="2354430244986887761">Googleৰ সুৰক্ষিত ব্ৰাউজিঙে অলপতে <ph name="SITE" />ত <ph name="BEGIN_LINK" />ক্ষতিকাৰক এপ্‌ বিচাৰি পাইছিল<ph name="END_LINK" />।</translation>
 <translation id="2355395290879513365">আক্ৰমণকাৰীয়ে আপুনি এই ছাইটটোত চাই থকা প্ৰতিচ্ছবিসমূহ চাব পাৰিব পাৰে আৰু সেইসমূহ সলনি কৰি আপোনাক জালত পেলাব পাৰে।</translation>
 <translation id="2356070529366658676">সোধক</translation>
+<translation id="2357481397660644965">আপোনাৰ ডিভাইচটো <ph name="DEVICE_MANAGER" />এ আৰু আপোনাৰ একাউণ্টটো <ph name="ACCOUNT_MANAGER" />এ পৰিচালনা কৰে।</translation>
 <translation id="2359629602545592467">একাধিক</translation>
 <translation id="2359808026110333948">অব্যাহত ৰাখক</translation>
 <translation id="2360873523816792727">আপোনাৰ কাৰ্ডসমূহ সকলো ডিভাইচতে ব্যৱহাৰ কৰিবলৈ ছিংক অন কৰক।</translation>
@@ -548,6 +549,7 @@
 <translation id="3145945101586104090">সঁহাৰি ডিক’ড কৰিবলৈ সক্ষম নহ’ল</translation>
 <translation id="3150653042067488994">ছাৰ্ভাৰৰ অস্থায়ী আসোঁৱাহ</translation>
 <translation id="3154506275960390542">এই পৃষ্ঠাত এখন ফর্ম আছে যিখন সুৰক্ষিতভাৱে দাখিল কৰা নহ'ব পাৰে। আপুনি পঠিওৱা ডেটা পৰিবহণৰ সময়ত অন্য লোকসকলে চাব পাৰিব আৰু ছার্ভাৰে পোৱা ডেটা সলনি কৰিবলৈ কোনো আক্ৰমণকাৰীয়ে এই ডেটা সংশোধন কৰিব পাৰে।</translation>
+<translation id="315504272643575312">আপোনাৰ একাউণ্টটো <ph name="MANAGER" />এ পৰিচালনা কৰে।</translation>
 <translation id="3157931365184549694">পুনঃস্থাপন কৰক</translation>
 <translation id="3162559335345991374">আপুনি ব্যৱহাৰ কৰি থকা ৱাই-ফাইটোৰ বাবে আপুনি এইটোৰ লগ ইন পৃষ্ঠালৈ যাব লগা হ'ব পাৰে।</translation>
 <translation id="3167968892399408617">আপুনি নিজৰ সকলো ইনক’গনিট’ টেব বন্ধ কৰাৰ পাছত আপুনি ইনক’গনিট’ টেবত চোৱা পৃষ্ঠাসমূহ নিজৰ ব্ৰাউজাৰৰ ইতিহাস, কুকি ষ্ট’ৰ বা সন্ধানৰ ইতিহাসত জমা হৈ নাথাকে। আপুনি ডাউনল’ড কৰা যিকোনো ফাইল বা আপুনি সৃষ্টি কৰা বুকমার্কসমূহ ৰখা হ’ব।</translation>
@@ -1919,6 +1921,7 @@
 <translation id="8680536109547170164"><ph name="QUERY" />, উত্তৰ, <ph name="ANSWER" /></translation>
 <translation id="8681531050781943054"><ph name="PAGE" />ত ৱেবপৃষ্ঠাটো ল’ড কৰিব নোৱাৰাৰ কাৰণ হৈছে:</translation>
 <translation id="8685155993131031756">Prc-16K</translation>
+<translation id="8687429322371626002">আপোনাৰ ডিভাইচ আৰু একাউণ্ট <ph name="MANAGER" />এ পৰিচালনা কৰে।</translation>
 <translation id="8688672835843460752">উপলব্ধ</translation>
 <translation id="868922510921656628">প্ৰতিটো ছেটত পৃষ্ঠাৰ সংখ্যা</translation>
 <translation id="869891660844655955">ম্যাদ উকলাৰ তাৰিখ</translation>
@@ -1934,6 +1937,7 @@
 <translation id="8728672262656704056">আপুনি ইনক’গনিট’ ম’ডত প্ৰৱেশ কৰিছে</translation>
 <translation id="8730621377337864115">হ’ল</translation>
 <translation id="8731544501227493793">পাছৱৰ্ডসমূহ পৰিচালনা কৰক বুটাম, Chromeৰ ছেটিংসমূহত আপোনাৰ পাছৱৰ্ডসমূহ চাবলৈ আৰু পৰিচালনা কৰিবলৈ এণ্টাৰ টিপক</translation>
+<translation id="8734529307927223492">আপোনাৰ <ph name="DEVICE_TYPE" /> <ph name="MANAGER" />এ পৰিচালনা কৰে</translation>
 <translation id="8737134861345396036"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, ব্যক্তিগতভাৱে ব্ৰাউজ কৰাৰ বাবে এখন নতুন ইনক'গনিট' ৱিণ্ড' খুলিবলৈ প্ৰথমে টেব আৰু তাৰ পাছত এণ্টাৰ টিপক</translation>
 <translation id="8738058698779197622">কোনো সুৰক্ষিত সংযোগ স্থাপন কৰিবলৈ আপোনাৰ ঘড়ীটো সঠিককৈ ছেট কৰাৰ আৱশ্যক। ইয়াৰ কাৰণ হৈছে ৱেবছাইটসমূহে নিজৰ চিনাক্তকৰণৰ বাবে ব্যৱহাৰ কৰা প্ৰমাণপত্ৰসমূহ কোনো নির্দিষ্ট সময়সীমাৰ বাবেহে মান্য হয়। আপোনাৰ ডিভাইচৰ ঘড়ীটো অশুদ্ধ হোৱাৰ বাবে Chromiumএ প্ৰমাণপত্ৰসমূহ সত্যাপন কৰিব নোৱাৰে।</translation>
 <translation id="8740359287975076522"><ph name="HOST_NAME" />ৰ &lt;abbr id="dnsDefinition"&gt;DNS ঠিকনা&lt;/abbr&gt; বিচাৰিব পৰা নগ’ল। সমস্যাটোৰ কাৰণ জানিবলৈ চেষ্টা কৰি থকা হৈছে।</translation>
@@ -2023,6 +2027,7 @@
 <translation id="9101630580131696064">ট্ৰে’ ১</translation>
 <translation id="9103872766612412690">আপোনাৰ তথ্য সুৰক্ষিত কৰিবলৈ <ph name="SITE" />এ সচৰাচৰতে এনক্ৰিপশ্বন ব্যৱহাৰ কৰে৷ Chromiumএ <ph name="SITE" />ৰ সৈতে সংযোগ কৰিবলৈ চেষ্টা কৰোঁতে ৱেবছাইটটোৱে সচৰাচৰতে ব্যৱহাৰ নোহোৱা আৰু অশুদ্ধ ক্ৰেডেনশ্বিয়েল পঠিয়াইছে৷ কোনো আক্ৰমণকাৰীয়ে <ph name="SITE" />ৰ ভেশ ধৰিলে বা কোনো ৱাই-ফাই ছাইন ইন স্ক্ৰীণে সংযোগত বাধা প্ৰদান কৰিলে এনে হ’ব পাৰে৷ আপোনাৰ ডেটা এতিয়াও সুৰক্ষিত হৈ আছে কিয়নো Chromiumএ কোনো ডেটা আদান-প্ৰদান হোৱাৰ পূৰ্বেই সংযোগ বন্ধ কৰিছে৷</translation>
 <translation id="9106062320799175032">বিলিঙৰ ঠিকনা যোগ কৰক</translation>
+<translation id="9107467864910557787"><ph name="MANAGER" />এ আপোনাৰ ব্ৰাউজাৰটো পৰিচালনা কৰে</translation>
 <translation id="9114524666733003316">কার্ড নিশ্চিত কৰি থকা হৈছে...</translation>
 <translation id="9114581008513152754">এই ব্ৰাউজাৰটো কোনো কোম্পানী অথবা অন্য প্ৰতিষ্ঠানৰ দ্বাৰা পৰিচালিত। এই ডিভাইচটোৰ কাৰ্যকলাপ Chromeৰ বাহিৰত পৰিচালনা কৰা হৈ থাকিব পাৰে। <ph name="BEGIN_LINK" />অধিক জানক<ph name="END_LINK" /></translation>
 <translation id="9119042192571987207">আপল’ড কৰা হৈছে</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index 3ebb45e..9a2c3e3e4 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -2067,7 +2067,7 @@
 <translation id="9207861905230894330">নিবন্ধ যোগ করতে ব্যর্থ হয়েছে৷</translation>
 <translation id="9213433120051936369">কেমন দেখাবে তা কাস্টমাইজ করুন</translation>
 <translation id="9215416866750762878">একটি অ্যাপ্লিকেশন Chrome কে এই সাইটের সাথে নিরাপদভাবে সংযুক্ত হতে বাধা দিচ্ছে</translation>
-<translation id="9219103736887031265">ছবিগুলি</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="933712198907837967">Diners Club</translation>
 <translation id="935608979562296692">ফর্ম সাফ করুন</translation>
 <translation id="936474030629450166">Super-B</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 9b02fbb..25843ebec 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -365,6 +365,7 @@
 <translation id="2354430244986887761">Navegación segura de Google recientemente <ph name="BEGIN_LINK" />encontró apps dañinas<ph name="END_LINK" /> en <ph name="SITE" />.</translation>
 <translation id="2355395290879513365">Es posible que los atacantes vean las imágenes que observas en este sitio y las modifiquen para engañarte.</translation>
 <translation id="2356070529366658676">Preguntar</translation>
+<translation id="2357481397660644965"><ph name="DEVICE_MANAGER" /> y <ph name="ACCOUNT_MANAGER" /> administran tu dispositivo y tu cuenta, respectivamente.</translation>
 <translation id="2359629602545592467">Varias</translation>
 <translation id="2359808026110333948">Continuar</translation>
 <translation id="2360873523816792727">Para usar tus tarjetas en todos los dispositivos, activa la sincronización.</translation>
@@ -542,6 +543,7 @@
 <translation id="3145945101586104090">Se produjo un error al decodificar respuesta.</translation>
 <translation id="3150653042067488994">Error temporal del servidor</translation>
 <translation id="3154506275960390542">Esta página incluye un formulario cuyo envío no es seguro. Es posible que otras personas vean los datos que envíes mientras están en tránsito o que un atacante los modifique antes de que los reciba el servidor.</translation>
+<translation id="315504272643575312"><ph name="MANAGER" /> administra tu cuenta.</translation>
 <translation id="3157931365184549694">Restaurar</translation>
 <translation id="3162559335345991374">Es posible que la red Wi-Fi que estás usando requiera que visites la página de acceso.</translation>
 <translation id="3167968892399408617">Una vez que cierres todas las pestañas de incógnito, las páginas que hayas visitado en ese modo no se guardarán en el historial del navegador, en la lista de cookies ni en el historial de búsquedas. Se guardarán los archivos que descargues y los favoritos que crees.</translation>
@@ -1920,6 +1922,7 @@
 <translation id="8680536109547170164"><ph name="QUERY" />, respuesta, <ph name="ANSWER" /></translation>
 <translation id="8681531050781943054">La página web de <ph name="PAGE" /> no se pudo cargar porque:</translation>
 <translation id="8685155993131031756">Prc-16K</translation>
+<translation id="8687429322371626002"><ph name="MANAGER" /> administra tu dispositivo y tu cuenta.</translation>
 <translation id="8688672835843460752">Disponible</translation>
 <translation id="868922510921656628">Páginas por conjunto</translation>
 <translation id="869891660844655955">Fecha de vencimiento</translation>
@@ -1935,6 +1938,7 @@
 <translation id="8728672262656704056">Estás en modo incógnito</translation>
 <translation id="8730621377337864115">Listo</translation>
 <translation id="8731544501227493793">Botón Administrar contraseñas: presiona Intro para ver y administrar tus contraseñas en la configuración de Chrome</translation>
+<translation id="8734529307927223492"><ph name="MANAGER" /> administra tu dispositivo <ph name="DEVICE_TYPE" /></translation>
 <translation id="8737134861345396036"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />: presiona Tab y, luego, Intro para abrir una nueva ventana de incógnito de Chrome y así navegar de forma privada</translation>
 <translation id="8738058698779197622">Para establecer una conexión segura, el reloj debe estar configurado correctamente. Esto se debe a que los certificados que usan los sitios web para su identificación solo son válidos por períodos de tiempo específicos. Debido a que la configuración del reloj del dispositivo es incorrecta, Chromium no puede verificar estos certificados.</translation>
 <translation id="8740359287975076522">No se encontró <ph name="HOST_NAME" />’s &lt;abbr id="dnsDefinition"&gt;DNS address&lt;/abbr&gt;. Se está diagnosticando el problema.</translation>
@@ -2024,6 +2028,7 @@
 <translation id="9101630580131696064">Bandeja 1</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> suele utilizar la encriptación para proteger la información. Cuando Chromium intentó conectarse a <ph name="SITE" />, el sitio web devolvió credenciales incorrectas y poco comunes. Es posible que un atacante quiera suplantar a <ph name="SITE" /> o que una pantalla de acceso Wi-Fi haya interrumpido la conexión. Tu información permanece segura porque Chromium detuvo la conexión para evitar el intercambio de datos.</translation>
 <translation id="9106062320799175032">Agregar dirección de facturación</translation>
+<translation id="9107467864910557787"><ph name="MANAGER" /> administra tu navegador</translation>
 <translation id="9114524666733003316">Confirmando tarjeta…</translation>
 <translation id="9114581008513152754">Este navegador no está administrado por una empresa ni por otra organización. Es posible que la actividad de este dispositivo se administre fuera de Chrome. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="9119042192571987207">Subido</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index 5363ae0..46c6506 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -369,6 +369,7 @@
 <translation id="2354430244986887761">La función Navegación segura de Google <ph name="BEGIN_LINK" />encontró aplicaciones dañinas<ph name="END_LINK" /> recientemente en <ph name="SITE" />.</translation>
 <translation id="2355395290879513365">Es posible que los atacantes puedan ver las imágenes que ves en este sitio web y que las modifiquen para engañarte.</translation>
 <translation id="2356070529366658676">Preguntar</translation>
+<translation id="2357481397660644965"><ph name="DEVICE_MANAGER" /> gestiona tu dispositivo y <ph name="ACCOUNT_MANAGER" /> gestiona tu cuenta.</translation>
 <translation id="2359629602545592467">Varias</translation>
 <translation id="2359808026110333948">Continuar</translation>
 <translation id="2360873523816792727">Para utilizar las tarjetas en todos tus dispositivos, activa la sincronización.</translation>
@@ -548,6 +549,7 @@
 <translation id="3145945101586104090">Error al decodificar respuesta</translation>
 <translation id="3150653042067488994">Error de servidor temporal</translation>
 <translation id="3154506275960390542">Es posible que un formulario de esta página no se envíe de forma segura. Otros usuarios pueden ver los datos que envías mientras estén en circulación y un atacante podría modificar lo que recibe el servidor.</translation>
+<translation id="315504272643575312"><ph name="MANAGER" /> gestiona tu cuenta.</translation>
 <translation id="3157931365184549694">Restaurar</translation>
 <translation id="3162559335345991374">La red Wi-Fi que estás utilizando puede requerir que accedas a su página de inicio de sesión.</translation>
 <translation id="3167968892399408617">Las páginas que aparezcan en las pestañas de incógnito no se guardarán en el historial del navegador, en el almacén de cookies ni en el historial de búsquedas una vez que hayas cerrado todas tus pestañas de incógnito. Se mantendrán los archivos que descargues o los marcadores que crees.</translation>
@@ -1929,6 +1931,7 @@
 <translation id="8680536109547170164"><ph name="QUERY" />, respuesta: <ph name="ANSWER" /></translation>
 <translation id="8681531050781943054">No ha sido posible cargar la página web <ph name="PAGE" /> porque:</translation>
 <translation id="8685155993131031756">Prc-16K</translation>
+<translation id="8687429322371626002"><ph name="MANAGER" /> gestiona tu dispositivo y tu cuenta.</translation>
 <translation id="8688672835843460752">Disponible</translation>
 <translation id="868922510921656628">Páginas por conjunto</translation>
 <translation id="869891660844655955">Fecha de caducidad</translation>
@@ -1944,6 +1947,7 @@
 <translation id="8728672262656704056">Has iniciado una sesión de incógnito</translation>
 <translation id="8730621377337864115">Listo</translation>
 <translation id="8731544501227493793">Botón Gestionar contraseñas, pulsa Intro para ver y gestionar tus contraseñas desde la configuración de Chrome</translation>
+<translation id="8734529307927223492"><ph name="MANAGER" /> gestiona tu <ph name="DEVICE_TYPE" /></translation>
 <translation id="8737134861345396036"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, pulsa Tabulador y, a continuación, Intro para abrir una ventana de incógnito para navegar de forma privada</translation>
 <translation id="8738058698779197622">Para establecer una conexión segura, tu reloj debe estar correctamente configurado. Esto se debe a que los certificados utilizados por los sitios web para identificarse son solo válidos durante períodos específicos de tiempo. Dado que la hora de tu dispositivo no es correcta, Chromium no puede verificar estos certificados.</translation>
 <translation id="8740359287975076522">No se ha podido encontrar la &lt;abbr id="dnsDefinition"&gt;dirección DNS&lt;/abbr&gt; de la página <ph name="HOST_NAME" />. Se está diagnosticando el problema.</translation>
@@ -2033,6 +2037,7 @@
 <translation id="9101630580131696064">Bandeja 1</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> utiliza normalmente el cifrado para proteger tu información. Cuando Chromium intentó establecer conexión con <ph name="SITE" />, el sitio web devolvió unas credenciales inusuales e incorrectas. Esto puede ocurrir si un atacante intenta suplantar la identidad de <ph name="SITE" /> o si una pantalla de inicio de sesión Wi-Fi interrumpe la conexión. Tu información sigue estando protegida, ya que Chromium detuvo la conexión antes de que se intercambiaran datos.</translation>
 <translation id="9106062320799175032">Añade una dirección de facturación</translation>
+<translation id="9107467864910557787"><ph name="MANAGER" /> gestiona el navegador</translation>
 <translation id="9114524666733003316">Confirmando tarjeta...</translation>
 <translation id="9114581008513152754">Este navegador no lo administra ninguna empresa ni organización. Es posible que se administre la actividad de este dispositivo fuera de Chrome. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation>
 <translation id="9119042192571987207">Subido</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index b823595..611eb00c 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -2062,7 +2062,7 @@
 <translation id="9207861905230894330">લેખ ઉમેરવામાં નિષ્ફળ થયાં.</translation>
 <translation id="9213433120051936369">દેખાવને કસ્ટમાઇઝ કરો</translation>
 <translation id="9215416866750762878">કોઈ ઍપ્લિકેશન Chromeને આ સાઇટ સાથે સુરક્ષિત રીતે કનેક્ટ થવાથી અટકાવી રહી છે</translation>
-<translation id="9219103736887031265">છબીઓ</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="933712198907837967">ડાઇનર્સ ક્લબ</translation>
 <translation id="935608979562296692">ફોર્મ સાફ કરો</translation>
 <translation id="936474030629450166">સુપર-B</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb
index a0804064..164e446 100644
--- a/components/strings/components_strings_or.xtb
+++ b/components/strings/components_strings_or.xtb
@@ -2052,7 +2052,7 @@
 <translation id="9207861905230894330">ନିବନ୍ଧ ଯୋଗ କରିହେଲା ନାହିଁ।</translation>
 <translation id="9213433120051936369">ଏପିଏରେନ୍ସ କଷ୍ଟମାଇଜ୍ କରନ୍ତୁ</translation>
 <translation id="9215416866750762878">ଏକ ଆପ୍ଲିକେସନ୍ Chromeକୁ ଏହି ସାଇଟ୍ ସହିତ ସୁରକ୍ଷିତ ରୂପେ ସଂଯୋଗ କରିବାକୁ ବାଧା ଦେଉଛି</translation>
-<translation id="9219103736887031265">ଛବିଗୁଡ଼ିକ</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="933712198907837967">Diners Club</translation>
 <translation id="935608979562296692">ଫର୍ମ ଖାଲି କରନ୍ତୁ</translation>
 <translation id="936474030629450166">ସୁପର୍-B</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index f25a265..2661fd6 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -365,6 +365,7 @@
 <translation id="2354430244986887761">Recentemente, o recurso "Navegação segura" do Google <ph name="BEGIN_LINK" />encontrou apps prejudiciais<ph name="END_LINK" /> em <ph name="SITE" />.</translation>
 <translation id="2355395290879513365">É possível que invasores consigam ver as imagens que você está olhando nesse site e as modifiquem para enganar você.</translation>
 <translation id="2356070529366658676">Perguntar</translation>
+<translation id="2357481397660644965">Seu dispositivo é gerenciado por <ph name="DEVICE_MANAGER" />, e sua conta é gerenciada por <ph name="ACCOUNT_MANAGER" />.</translation>
 <translation id="2359629602545592467">Várias</translation>
 <translation id="2359808026110333948">Continuar</translation>
 <translation id="2360873523816792727">Para usar seus cartões em todos os dispositivos, ative a sincronização.</translation>
@@ -542,6 +543,7 @@
 <translation id="3145945101586104090">Falha ao decodificar resposta</translation>
 <translation id="3150653042067488994">Erro temporário do servidor</translation>
 <translation id="3154506275960390542">Essa página inclui um formulário que pode não ser enviado de forma segura. Os dados que você envia podem ser vistos por outras pessoas enquanto elas navegam ou ser modificados por um invasor para alterar o que o servidor recebe.</translation>
+<translation id="315504272643575312">Sua conta é gerenciada por <ph name="MANAGER" />.</translation>
 <translation id="3157931365184549694">Restaurar</translation>
 <translation id="3162559335345991374">O Wi-Fi que você está usando pode exigir a visita a uma página de login.</translation>
 <translation id="3167968892399408617">Quando você está no modo invisível, as páginas que você visita não aparecem no seu histórico de navegação e de pesquisa, nem armazenam arquivos "cookies". Mas os downloads e os favoritos continuam funcionando normalmente.</translation>
@@ -1919,6 +1921,7 @@
 <translation id="8680536109547170164"><ph name="QUERY" />, resposta, <ph name="ANSWER" /></translation>
 <translation id="8681531050781943054">Não foi possível carregar a página da Web no endereço <ph name="PAGE" /> porque:</translation>
 <translation id="8685155993131031756">Prc-16K</translation>
+<translation id="8687429322371626002">Seu dispositivo e sua conta são gerenciados por <ph name="MANAGER" />.</translation>
 <translation id="8688672835843460752">Disponível</translation>
 <translation id="868922510921656628">Páginas por grupo</translation>
 <translation id="869891660844655955">Validade</translation>
@@ -1934,6 +1937,7 @@
 <translation id="8728672262656704056">Você está navegando sem deixar rastros</translation>
 <translation id="8730621377337864115">Concluído</translation>
 <translation id="8731544501227493793">Botão "Gerenciar senhas". Pressione "Enter" para ver e gerenciar suas senhas nas configurações do Chrome</translation>
+<translation id="8734529307927223492">Seu <ph name="DEVICE_TYPE" /> é gerenciado por <ph name="MANAGER" /></translation>
 <translation id="8737134861345396036"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pressione "Tab" e depois "Enter" para abrir uma nova janela anônima e navegar com privacidade</translation>
 <translation id="8738058698779197622">Para estabelecer uma conexão segura, o relógio precisa ser ajustado corretamente. Isso ocorre porque os certificados que os websites usam para se identificar são válidos apenas por períodos específicos. Como o relógio do seu dispositivo está incorreto, o Chromium não pode verificar esses certificados.</translation>
 <translation id="8740359287975076522">Não foi possível encontrar o &lt;abbr id="dnsDefinition"&gt;endereço DNS&lt;/abbr&gt; de <ph name="HOST_NAME" />. Diagnosticando o problema.</translation>
@@ -2024,6 +2028,7 @@
 <translation id="9103872766612412690">O site <ph name="SITE" /> geralmente usa criptografia para proteger suas informações. Quando o Chromium tentou se conectar a <ph name="SITE" /> dessa vez, o website retornou credenciais
 incomuns e incorretas. Isso pode acontecer quando um invasor está fingindo ser <ph name="SITE" /> ou quando uma tela de login por Wi-Fi interrompeu a conexão. Suas informações ainda estão protegidas, porque o Chromium interrompeu a conexão antes que os dados fossem trocados.</translation>
 <translation id="9106062320799175032">Adicione um Endereço de Faturamento</translation>
+<translation id="9107467864910557787">Seu navegador é gerenciado por <ph name="MANAGER" /></translation>
 <translation id="9114524666733003316">Confirmando cartão…</translation>
 <translation id="9114581008513152754">Este navegador não é gerenciado por uma empresa ou outra organização. A atividade deste dispositivo pode ser gerenciada fora do Chrome. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation>
 <translation id="9119042192571987207">Enviado</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index 2e1b8ec..4711e13 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -365,6 +365,7 @@
 <translation id="2354430244986887761">Система Безопасного просмотра Google недавно <ph name="BEGIN_LINK" />обнаружила вредоносные приложения<ph name="END_LINK" /> на сайте <ph name="SITE" />.</translation>
 <translation id="2355395290879513365">Злоумышленники могут видеть изображения, которые видны вам, и изменять их в целях мошенничества.</translation>
 <translation id="2356070529366658676">Спрашивать</translation>
+<translation id="2357481397660644965">Вашим устройством управляет <ph name="DEVICE_MANAGER" />, а аккаунтом – <ph name="ACCOUNT_MANAGER" />.</translation>
 <translation id="2359629602545592467">Несколько</translation>
 <translation id="2359808026110333948">Продолжить</translation>
 <translation id="2360873523816792727">Чтобы использовать карты на всех ваших устройствах, включите синхронизацию.</translation>
@@ -542,6 +543,7 @@
 <translation id="3145945101586104090">Не удалось декодировать ответ</translation>
 <translation id="3150653042067488994">Временные неполадки на сервере</translation>
 <translation id="3154506275960390542">Эта страница содержит форму, которая может быть не защищена. Отправленные вами данные могут быть просмотрены третьими лицами во время передачи, а также могут быть изменены злоумышленником до получения сервером.</translation>
+<translation id="315504272643575312">Вашим аккаунтом управляет <ph name="MANAGER" />.</translation>
 <translation id="3157931365184549694">Восстановить</translation>
 <translation id="3162559335345991374">Возможно, вам нужно перейти на страницу входа сети Wi-Fi.</translation>
 <translation id="3167968892399408617">Страницы, открытые в этом окне, не останутся в истории браузера или поиска. Они не оставят на компьютере следов, таких как файлы cookie, после того как вы закроете все вкладки инкогнито. Скачанные вами файлы и добавленные закладки будут сохранены.</translation>
@@ -1917,6 +1919,7 @@
 <translation id="8680536109547170164"><ph name="QUERY" />, ответ, <ph name="ANSWER" /></translation>
 <translation id="8681531050781943054">При загрузке веб-страницы <ph name="PAGE" /> произошла ошибка по следующим причинам:</translation>
 <translation id="8685155993131031756">Prc-16K</translation>
+<translation id="8687429322371626002">Вашим устройством и аккаунтом управляет <ph name="MANAGER" />.</translation>
 <translation id="8688672835843460752">Свободно</translation>
 <translation id="868922510921656628">Число страниц в наборе</translation>
 <translation id="869891660844655955">Срок действия</translation>
@@ -1932,6 +1935,7 @@
 <translation id="8728672262656704056">Вы перешли в режим инкогнито</translation>
 <translation id="8730621377337864115">Готово</translation>
 <translation id="8731544501227493793">Кнопка "Управление паролями". Нажмите Ввод, чтобы перейти к управлению паролями в настройках Chrome.</translation>
+<translation id="8734529307927223492">Вашим устройством <ph name="DEVICE_TYPE" /> управляет <ph name="MANAGER" /></translation>
 <translation id="8737134861345396036"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />. Нажмите Tab и затем Ввод, чтобы открыть новое окно в режиме инкогнито.</translation>
 <translation id="8738058698779197622">Для создания безопасного подключения необходимо, чтобы показания системных часов были верны. Причина в том, что сертификаты для идентификации сайтов имеют ограниченный срок действия. Если часы на устройстве неточны, Chromium не может проверить актуальность этих сертификатов.</translation>
 <translation id="8740359287975076522">Не удается найти &lt;abbr id="dnsDefinition"&gt;DNS-адрес&lt;/abbr&gt; сайта <ph name="HOST_NAME" />. Выполняется диагностика.</translation>
@@ -2021,6 +2025,7 @@
 <translation id="9101630580131696064">Лоток 1</translation>
 <translation id="9103872766612412690">На сайте <ph name="SITE" /> для защиты ваших данных обычно используется шифрование. Однако учетные данные, которые мы получили от сайта <ph name="SITE" /> сейчас, отличаются от тех, которые он отправляет обычно. Вероятно, вредоносный сайт пытается выдать себя за <ph name="SITE" />, либо страница подключения к сети Wi-Fi прервала соединение. Ваша информация по-прежнему в безопасности, так как браузер Chromium разорвал соединение до того, как произошел обмен данными.</translation>
 <translation id="9106062320799175032">Добавьте платежный адрес</translation>
+<translation id="9107467864910557787">Вашим браузером управляет <ph name="MANAGER" /></translation>
 <translation id="9114524666733003316">Подтверждение карты...</translation>
 <translation id="9114581008513152754">Компания или организация не управляет этим браузером. Действиями на этом устройстве можно управлять вне браузера Chrome. <ph name="BEGIN_LINK" />Подробнее…<ph name="END_LINK" /></translation>
 <translation id="9119042192571987207">Загружен</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index 1d6ce7a3..ddfc3e7b 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -2067,7 +2067,7 @@
 <translation id="9207861905230894330">కథనాన్ని జోడించడంలో విఫలమైంది.</translation>
 <translation id="9213433120051936369">కనిపించే తీరును అనుకూలంగా మార్చండి</translation>
 <translation id="9215416866750762878">ఒక అప్లికేషన్ కారణంగా Chrome ఈ సైట్‌కు సురక్షితంగా కనెక్ట్ కాలేకపోతోంది</translation>
-<translation id="9219103736887031265">చిత్రాలు</translation>
+<translation id="9219103736887031265">ఇమేజ్‌లు</translation>
 <translation id="933712198907837967">డైనర్స్ క్లబ్</translation>
 <translation id="935608979562296692">ఫారమ్‌ను తీసివేయండి</translation>
 <translation id="936474030629450166">సూపర్-B</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 871e906..2a592649 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -366,6 +366,7 @@
 <translation id="2354430244986887761">Google Güvenli Tarama son zamanlarda <ph name="SITE" /> sitesinde <ph name="BEGIN_LINK" />zararlı uygulamalar buldu<ph name="END_LINK" />.</translation>
 <translation id="2355395290879513365">Saldırganlar bu sitede baktığınız resimleri görebilir ve bu resimler üzerinde değişiklik yaparak sizi kandırabilirler.</translation>
 <translation id="2356070529366658676">Sor</translation>
+<translation id="2357481397660644965">Cihazınız <ph name="DEVICE_MANAGER" /> tarafından, hesabınız ise <ph name="ACCOUNT_MANAGER" /> tarafından yönetiliyor.</translation>
 <translation id="2359629602545592467">Birden fazla</translation>
 <translation id="2359808026110333948">Devam et</translation>
 <translation id="2360873523816792727">Kartlarınızı tüm cihazlarınızda kullanmak için senkronizasyonu etkinleştirin.</translation>
@@ -543,6 +544,7 @@
 <translation id="3145945101586104090">Yanıtın kodu çözülemedi</translation>
 <translation id="3150653042067488994">Geçici sunucu hatası</translation>
 <translation id="3154506275960390542">Bu sayfada güvenli şekilde gönderilemeyecek bir form bulunmaktadır. Gönderdiğiniz veriler, aktarım sırasında başkaları tarafından görüntülenebilir veya bir saldırgan tarafından sunucunun alacağı verileri değiştirmek amacıyla kullanılabilir.</translation>
+<translation id="315504272643575312">Hesabınız <ph name="MANAGER" /> tarafından yönetiliyor.</translation>
 <translation id="3157931365184549694">Geri yükle</translation>
 <translation id="3162559335345991374">Kullandığınız Kablosuz ağ, giriş sayfasını ziyaret etmenizi gerektiriyor olabilir.</translation>
 <translation id="3167968892399408617">Gizli sekmelerde görüntülediğiniz sayfalar, açık olan tüm gizli sekmeler kapatıldıktan sonra tarayıcınızın geçmişinden, çerez deposundan veya arama geçmişinden silinecektir. İndirdiğiniz dosyalar veya oluşturduğunuz yer işaretleri kalacaktır.</translation>
@@ -1921,6 +1923,7 @@
 <translation id="8680536109547170164"><ph name="QUERY" />, yanıt, <ph name="ANSWER" /></translation>
 <translation id="8681531050781943054"><ph name="PAGE" /> adresindeki web sayfası şu nedenle yüklenemedi:</translation>
 <translation id="8685155993131031756">Prc-16K</translation>
+<translation id="8687429322371626002">Cihazınız ve hesabınız <ph name="MANAGER" /> tarafından yönetiliyor.</translation>
 <translation id="8688672835843460752">Kullanılabilir</translation>
 <translation id="868922510921656628">Grup başına sayfa</translation>
 <translation id="869891660844655955">Son kullanma tarihi</translation>
@@ -1936,6 +1939,7 @@
 <translation id="8728672262656704056">Gizli moda geçtiniz</translation>
 <translation id="8730621377337864115">Bitti</translation>
 <translation id="8731544501227493793">Şifreleri yönet düğmesi, Chrome ayarlarında şifrelerinizi görüp yönetmek için Enter'a basın</translation>
+<translation id="8734529307927223492"><ph name="DEVICE_TYPE" /> cihazınız <ph name="MANAGER" /> tarafından yönetiliyor</translation>
 <translation id="8737134861345396036"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />, yeni bir Gizli pencere açıp gizli olarak göz atmak için Sekme'ye, sonra Enter'a basın</translation>
 <translation id="8738058698779197622">Güvenli bir bağlantı kurmak için saatinizin doğru ayarlanmış olması gerekir. Bunun sebebi, web sitelerinin kendilerini tanımlamak için kullandıkları sertifikaların sadece belli süreler için geçerli olmasıdır. Cihazınızın saati yanlış olduğundan, Chromium bu sertifikaları doğrulayamaz.</translation>
 <translation id="8740359287975076522"><ph name="HOST_NAME" /> ana makinesinin &lt;abbr id="dnsDefinition"&gt;DNS adresi&lt;/abbr&gt; bulunamadı. Sorun teşhis ediliyor.</translation>
@@ -2025,6 +2029,7 @@
 <translation id="9101630580131696064">Tepsi 1</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> normalde bilgilerinizi korumak için şifreleme kullanmaktadır. Chromium bu sefer <ph name="SITE" /> sitesine bağlanmayı denediğinde, web sitesi sıra dışı ve yanlış kimlik bilgileri döndürdü. Bir saldırgan <ph name="SITE" /> gibi davranmaya çalışıyor olabilir ya da bir Kablosuz oturum açma ekranı bağlantıyı kesmiştir. Chromium herhangi bir veri alışverişinden önce bağlantıyı durdurduğu için bilgileriniz hâlâ güvendedir.</translation>
 <translation id="9106062320799175032">Fatura Adresi Ekleyin</translation>
+<translation id="9107467864910557787">Tarayıcınız <ph name="MANAGER" /> tarafından yönetiliyor</translation>
 <translation id="9114524666733003316">Kart onaylanıyor...</translation>
 <translation id="9114581008513152754">Bu tarayıcı bir şirket veya başka bir kuruluş tarafından yönetilmemektedir. Bu cihazdaki etkinlikler Chrome dışında yönetilebilir. <ph name="BEGIN_LINK" />Daha fazla bilgi<ph name="END_LINK" /></translation>
 <translation id="9119042192571987207">Yüklendi</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index bb357dc..839a27e 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -365,6 +365,7 @@
 <translation id="2354430244986887761">Google 安全瀏覽服務最近在 <ph name="SITE" /> <ph name="BEGIN_LINK" />發現有害的應用程式<ph name="END_LINK" />。</translation>
 <translation id="2355395290879513365">攻擊者可能會看到你正在這個網站上瀏覽的圖片,並以修改圖片內容的方式讓你受騙。</translation>
 <translation id="2356070529366658676">詢問</translation>
+<translation id="2357481397660644965">你的裝置是由 <ph name="DEVICE_MANAGER" /> 管理,帳戶是由 <ph name="ACCOUNT_MANAGER" /> 管理。</translation>
 <translation id="2359629602545592467">多種</translation>
 <translation id="2359808026110333948">繼續</translation>
 <translation id="2360873523816792727">如要將卡片同步到所有裝置,請開啟同步功能。</translation>
@@ -542,6 +543,7 @@
 <translation id="3145945101586104090">無法將回應解碼</translation>
 <translation id="3150653042067488994">伺服器暫時發生錯誤</translation>
 <translation id="3154506275960390542">這個網頁中的表單可能不會經由安全途徑提交。其他人可能會在傳輸期間檢視你的資料,攻擊者也可能會修改這些資料,導致伺服器接收不同內容。</translation>
+<translation id="315504272643575312">你的帳戶是由 <ph name="MANAGER" /> 管理。</translation>
 <translation id="3157931365184549694">還原</translation>
 <translation id="3162559335345991374">目前使用的 Wi-Fi 網路可能會要求您造訪登入網頁。</translation>
 <translation id="3167968892399408617">當您關閉所有無痕式分頁後,您在其中瀏覽的網頁都不會保留在瀏覽器記錄、Cookie 儲存庫或搜尋記錄中。不過,您下載的檔案或建立的書籤全部都會保留下來。</translation>
@@ -1918,6 +1920,7 @@
 <translation id="8680536109547170164"><ph name="QUERY" />,答案:<ph name="ANSWER" /></translation>
 <translation id="8681531050781943054">無法載入位於 <ph name="PAGE" /> 的網頁,原因如下:</translation>
 <translation id="8685155993131031756">Prc-16K</translation>
+<translation id="8687429322371626002">你的裝置和帳戶是由 <ph name="MANAGER" /> 管理。</translation>
 <translation id="8688672835843460752">可用空間</translation>
 <translation id="868922510921656628">每組頁數</translation>
 <translation id="869891660844655955">到期日</translation>
@@ -1933,6 +1936,7 @@
 <translation id="8728672262656704056">你已進入無痕模式</translation>
 <translation id="8730621377337864115">完成</translation>
 <translation id="8731544501227493793">「管理密碼」按鈕,按下 Enter 鍵即可在 Chrome 設定中查看和管理密碼</translation>
+<translation id="8734529307927223492">你的 <ph name="DEVICE_TYPE" /> 是由 <ph name="MANAGER" /> 管理</translation>
 <translation id="8737134861345396036"><ph name="LAUNCH_INCOGNITO_FOCUSED_FRIENDLY_MATCH_TEXT" />,按下 Tab 鍵再按下 Enter 鍵即可開啟新的無痕式視窗進行私密瀏覽</translation>
 <translation id="8738058698779197622">你必須正確設定時鐘,才能建立安全連線。這是因為網站驗證身分時所使用的憑證僅於特定一段時間內有效。由於你裝置的時鐘不正確,因此 Chromium 無法驗證這些憑證。</translation>
 <translation id="8740359287975076522">找不到 <ph name="HOST_NAME" /> 的 &lt;abbr id="dnsDefinition"&gt;DNS 位址&lt;/abbr&gt;,正在診斷問題。</translation>
@@ -2022,6 +2026,7 @@
 <translation id="9101630580131696064">紙匣 1</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> 通常使用加密方式保護您的資訊。但 Chromium 這次嘗試連線到 <ph name="SITE" /> 時,該網站傳回了異常且錯誤的憑證。這可能是因為有攻擊者企圖偽裝成 <ph name="SITE" />,或是受到 Wi-Fi 登入畫面影響而造成連線中斷。不過請放心,Chromium 已及時停止連線,並未傳輸任何資料,因此您的資訊仍然安全無虞。</translation>
 <translation id="9106062320799175032">新增帳單地址</translation>
+<translation id="9107467864910557787">你的瀏覽器是由 <ph name="MANAGER" /> 管理</translation>
 <translation id="9114524666733003316">正在驗證信用卡...</translation>
 <translation id="9114581008513152754">這個瀏覽器未受到任何公司或其他機構管理。這部裝置上的活動可透過 Chrome 以外的服務管理。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
 <translation id="9119042192571987207">已上傳</translation>
diff --git a/components/viz/service/display/display_compositor_memory_and_task_controller.cc b/components/viz/service/display/display_compositor_memory_and_task_controller.cc
index 4914e9f..c546d48 100644
--- a/components/viz/service/display/display_compositor_memory_and_task_controller.cc
+++ b/components/viz/service/display/display_compositor_memory_and_task_controller.cc
@@ -57,6 +57,10 @@
 DisplayCompositorMemoryAndTaskController::
     ~DisplayCompositorMemoryAndTaskController() {
   gpu::ScopedAllowScheduleGpuTask allow_schedule_gpu_task;
+  // Make sure to destroy the SharedImageInterfaceInProcess before getting rid
+  // of data structures on the gpu thread.
+  shared_image_interface_.reset();
+
   // If we have a |gpu_task_scheduler_|, we must have started initializing
   // a |controller_on_gpu_| on the |gpu_task_scheduler_|.
   base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL,
@@ -66,7 +70,6 @@
                      base::Unretained(this), &event);
   gpu_task_scheduler_->GetTaskSequence()->ScheduleTask(std::move(callback), {});
   event.Wait();
-  shared_image_interface_.reset();
 }
 
 void DisplayCompositorMemoryAndTaskController::InitializeOnGpuSkia(
diff --git a/content/app/BUILD.gn b/content/app/BUILD.gn
index 454b659..4cb1838 100644
--- a/content/app/BUILD.gn
+++ b/content/app/BUILD.gn
@@ -23,7 +23,6 @@
   "//crypto",
   "//mojo/core/embedder",
   "//ppapi/buildflags",
-  "//services/service_manager/public/mojom",
   "//services/tracing/public/cpp",
   "//ui/base",
   "//ui/gfx",
@@ -94,8 +93,8 @@
     "content_main.cc",
     "mojo/mojo_init.cc",
     "mojo/mojo_init.h",
-    "service_manager_environment.cc",
-    "service_manager_environment.h",
+    "mojo_ipc_support.cc",
+    "mojo_ipc_support.h",
   ]
 
   configs += extra_configs
diff --git a/content/app/content_main_runner_impl.cc b/content/app/content_main_runner_impl.cc
index 7ef94f0f..ada3a3a 100644
--- a/content/app/content_main_runner_impl.cc
+++ b/content/app/content_main_runner_impl.cc
@@ -50,7 +50,7 @@
 #include "components/discardable_memory/service/discardable_shared_memory_manager.h"
 #include "components/download/public/common/download_task_runner.h"
 #include "content/app/mojo/mojo_init.h"
-#include "content/app/service_manager_environment.h"
+#include "content/app/mojo_ipc_support.h"
 #include "content/browser/browser_main.h"
 #include "content/browser/browser_process_sub_thread.h"
 #include "content/browser/browser_thread_impl.h"
@@ -592,11 +592,11 @@
 #endif  // defined(OS_MAC)
 
 #if defined(OS_ANDROID)
-  // Now that mojo's core is initialized (by service manager's Main()), we can
-  // enable tracing. Note that only Android builds have the ctor/dtor handlers
-  // set up to use trace events at this point (because AtExitManager is already
-  // set up when the library is loaded). Other platforms enable tracing below,
-  // after the initialization of AtExitManager.
+  // Now that mojo's core is initialized we can enable tracing. Note that only
+  // Android builds have the ctor/dtor handlers set up to use trace events at
+  // this point (because AtExitManager is already set up when the library is
+  // loaded). Other platforms enable tracing below, after the initialization of
+  // AtExitManager.
   tracing::EnableStartupTracingIfNeeded();
 
   TRACE_EVENT0("startup,benchmark,rail", "ContentMainRunnerImpl::Initialize");
@@ -818,7 +818,7 @@
 #if BUILDFLAG(USE_ZYGOTE_HANDLE)
   if (process_type.empty()) {
     // The sandbox host needs to be initialized before forking a thread to
-    // start the ServiceManager, and after setting up the sandbox and invoking
+    // start IPC support, and after setting up the sandbox and invoking
     // SandboxInitialized().
     InitializeZygoteSandboxForBrowserProcess(
         *base::CommandLine::ForCurrentProcess());
@@ -836,7 +836,7 @@
   return -1;
 }
 
-int ContentMainRunnerImpl::Run(bool start_service_manager_only) {
+int ContentMainRunnerImpl::Run(bool start_minimal_browser) {
   DCHECK(is_initialized_);
   DCHECK(!is_shutdown_);
   const base::CommandLine& command_line =
@@ -882,21 +882,20 @@
   RegisterMainThreadFactories();
 
   if (process_type.empty())
-    return RunServiceManager(main_params, start_service_manager_only);
+    return RunBrowser(main_params, start_minimal_browser);
 
   return RunOtherNamedProcessTypeMain(process_type, main_params, delegate_);
 }
 
-int ContentMainRunnerImpl::RunServiceManager(MainFunctionParams& main_params,
-                                             bool start_service_manager_only) {
-  TRACE_EVENT_INSTANT0("startup",
-                       "ContentMainRunnerImpl::RunServiceManager (begin)",
+int ContentMainRunnerImpl::RunBrowser(MainFunctionParams& main_params,
+                                      bool start_minimal_browser) {
+  TRACE_EVENT_INSTANT0("startup", "ContentMainRunnerImpl::RunBrowser(begin)",
                        TRACE_EVENT_SCOPE_THREAD);
   if (is_browser_main_loop_started_)
     return -1;
 
-  bool should_start_service_manager_only = start_service_manager_only;
-  if (!service_manager_environment_) {
+  bool should_start_minimal_browser = start_minimal_browser;
+  if (!mojo_ipc_support_) {
     if (delegate_->ShouldCreateFeatureList()) {
       // This is intentionally leaked since it needs to live for the duration
       // of the process and there's no benefit in cleaning it up at exit.
@@ -957,7 +956,7 @@
     SetupCpuAffinityPollingOnce();
 #endif
 
-    if (should_start_service_manager_only)
+    if (should_start_minimal_browser)
       ForceInProcessNetworkService(true);
 
     discardable_shared_memory_manager_ =
@@ -968,8 +967,8 @@
     base::PowerMonitor::Initialize(
         std::make_unique<base::PowerMonitorDeviceSource>());
 
-    service_manager_environment_ = std::make_unique<ServiceManagerEnvironment>(
-        BrowserTaskExecutor::CreateIOThread());
+    mojo_ipc_support_ =
+        std::make_unique<MojoIpcSupport>(BrowserTaskExecutor::CreateIOThread());
 
     const base::CommandLine& command_line =
         *base::CommandLine::ForCurrentProcess();
@@ -982,13 +981,12 @@
           invitation.ExtractMessagePipe(0));
     }
 
-    download::SetIOTaskRunner(
-        service_manager_environment_->io_thread()->task_runner());
+    download::SetIOTaskRunner(mojo_ipc_support_->io_thread()->task_runner());
 
     InitializeBrowserMemoryInstrumentationClient();
 
 #if defined(OS_ANDROID)
-    if (start_service_manager_only) {
+    if (start_minimal_browser) {
       base::ThreadTaskRunnerHandle::Get()->PostTask(
           FROM_HERE, base::BindOnce(&MinimalBrowserStartupComplete));
     }
@@ -998,14 +996,14 @@
   // Enable PCScan once we are certain that FeatureList was initialized.
   EnablePCScanForMallocPartitionsIfNeeded();
 
-  if (should_start_service_manager_only) {
-    DVLOG(0) << "Chrome is running in ServiceManager only mode.";
+  if (should_start_minimal_browser) {
+    DVLOG(0) << "Chrome is running in minimal browser mode.";
     return -1;
   }
 
   DVLOG(0) << "Chrome is running in full browser mode.";
   is_browser_main_loop_started_ = true;
-  startup_data_ = service_manager_environment_->CreateBrowserStartupData();
+  startup_data_ = mojo_ipc_support_->CreateBrowserStartupData();
   main_params.startup_data = startup_data_.get();
   return RunBrowserProcessMain(main_params, delegate_);
 }
@@ -1014,7 +1012,7 @@
   DCHECK(is_initialized_);
   DCHECK(!is_shutdown_);
 
-  service_manager_environment_.reset();
+  mojo_ipc_support_.reset();
 
   if (completed_basic_startup_) {
     const base::CommandLine& command_line =
@@ -1025,7 +1023,6 @@
     delegate_->ProcessExiting(process_type);
   }
 
-  service_manager_environment_.reset();
   // The BrowserTaskExecutor needs to be destroyed before |exit_manager_|.
   BrowserTaskExecutor::Shutdown();
 
diff --git a/content/app/content_main_runner_impl.h b/content/app/content_main_runner_impl.h
index 30d5515..86c624e 100644
--- a/content/app/content_main_runner_impl.h
+++ b/content/app/content_main_runner_impl.h
@@ -36,7 +36,7 @@
 namespace content {
 class ContentClient;
 class ContentMainDelegate;
-class ServiceManagerEnvironment;
+class MojoIpcSupport;
 struct ContentMainParams;
 
 class ContentMainRunnerImpl : public ContentMainRunner {
@@ -50,12 +50,12 @@
 
   // ContentMainRunner:
   int Initialize(const ContentMainParams& params) override;
-  int Run(bool start_service_manager_only) override;
+  int Run(bool start_minimal_browser) override;
   void Shutdown() override;
 
  private:
-  int RunServiceManager(MainFunctionParams& main_function_params,
-                        bool start_service_manager_only);
+  int RunBrowser(MainFunctionParams& main_function_params,
+                 bool start_minimal_browser);
 
   bool is_browser_main_loop_started_ = false;
 
@@ -65,7 +65,7 @@
   std::unique_ptr<discardable_memory::DiscardableSharedMemoryManager>
       discardable_shared_memory_manager_;
   std::unique_ptr<StartupDataImpl> startup_data_;
-  std::unique_ptr<ServiceManagerEnvironment> service_manager_environment_;
+  std::unique_ptr<MojoIpcSupport> mojo_ipc_support_;
 
   // True if the runner has been initialized.
   bool is_initialized_ = false;
diff --git a/content/app/service_manager_environment.cc b/content/app/mojo_ipc_support.cc
similarity index 67%
rename from content/app/service_manager_environment.cc
rename to content/app/mojo_ipc_support.cc
index 0a67ac3..20ba75d 100644
--- a/content/app/service_manager_environment.cc
+++ b/content/app/mojo_ipc_support.cc
@@ -2,24 +2,22 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "content/app/service_manager_environment.h"
+#include "content/app/mojo_ipc_support.h"
 
 #include <utility>
 
 #include "base/command_line.h"
 #include "build/build_config.h"
 #include "content/browser/browser_process_sub_thread.h"
-#include "content/browser/service_manager/service_manager_context.h"
 #include "content/browser/startup_data_impl.h"
 #include "content/common/mojo_core_library_support.h"
 #include "content/public/common/content_features.h"
-#include "content/public/common/service_manager_connection.h"
 #include "mojo/core/embedder/embedder.h"
 #include "mojo/core/embedder/scoped_ipc_support.h"
 
 namespace content {
 
-ServiceManagerEnvironment::ServiceManagerEnvironment(
+MojoIpcSupport::MojoIpcSupport(
     std::unique_ptr<BrowserProcessSubThread> io_thread)
     : io_thread_(std::move(io_thread)) {
   scoped_refptr<base::SingleThreadTaskRunner> mojo_ipc_task_runner =
@@ -36,21 +34,14 @@
         mojo_ipc_task_runner,
         mojo::core::ScopedIPCSupport::ShutdownPolicy::FAST);
   }
-  service_manager_context_ =
-      std::make_unique<ServiceManagerContext>(io_thread_->task_runner());
-  ServiceManagerConnection::GetForProcess()->Start();
 }
 
-ServiceManagerEnvironment::~ServiceManagerEnvironment() = default;
+MojoIpcSupport::~MojoIpcSupport() = default;
 
-std::unique_ptr<StartupDataImpl>
-ServiceManagerEnvironment::CreateBrowserStartupData() {
+std::unique_ptr<StartupDataImpl> MojoIpcSupport::CreateBrowserStartupData() {
   auto startup_data = std::make_unique<StartupDataImpl>();
   startup_data->io_thread = std::move(io_thread_);
   startup_data->mojo_ipc_support = std::move(mojo_ipc_support_);
-  startup_data->service_manager_shutdown_closure =
-      base::BindOnce(&ServiceManagerContext::ShutDown,
-                     base::Unretained(service_manager_context_.get()));
   return startup_data;
 }
 
diff --git a/content/app/mojo_ipc_support.h b/content/app/mojo_ipc_support.h
new file mode 100644
index 0000000..02221b8a
--- /dev/null
+++ b/content/app/mojo_ipc_support.h
@@ -0,0 +1,52 @@
+// 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.
+
+#ifndef CONTENT_APP_MOJO_IPC_SUPPORT_H_
+#define CONTENT_APP_MOJO_IPC_SUPPORT_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "base/threading/thread.h"
+#include "content/common/content_export.h"
+
+namespace mojo {
+namespace core {
+class ScopedIPCSupport;
+}
+}  // namespace mojo
+
+namespace content {
+
+class BrowserProcessSubThread;
+struct StartupDataImpl;
+
+// Encapsulates the basic state necessary to bring up a working Mojo IPC
+// environment in the browser process.
+class CONTENT_EXPORT MojoIpcSupport {
+ public:
+  explicit MojoIpcSupport(std::unique_ptr<BrowserProcessSubThread> io_thread);
+  ~MojoIpcSupport();
+
+  BrowserProcessSubThread* io_thread() { return io_thread_.get(); }
+
+  // Returns a new StartupDataImpl which captures and/or reflects the partial
+  // state of this object. This must be called and the result passed to
+  // BrowserMain if the full browser environment is going to be started.
+  //
+  // After this call, the MojoIpcSupport object no longer owns the IO
+  // thread and |io_thread()| returns null.
+  std::unique_ptr<StartupDataImpl> CreateBrowserStartupData();
+
+ private:
+  std::unique_ptr<BrowserProcessSubThread> io_thread_;
+  base::Thread mojo_ipc_thread_{"Mojo IPC"};
+  std::unique_ptr<mojo::core::ScopedIPCSupport> mojo_ipc_support_;
+
+  DISALLOW_COPY_AND_ASSIGN(MojoIpcSupport);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_APP_MOJO_IPC_SUPPORT_H_
diff --git a/content/app/service_manager_environment.h b/content/app/service_manager_environment.h
deleted file mode 100644
index 222e69d6..0000000
--- a/content/app/service_manager_environment.h
+++ /dev/null
@@ -1,56 +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.
-
-#ifndef CONTENT_APP_SERVICE_MANAGER_ENVIRONMENT_H_
-#define CONTENT_APP_SERVICE_MANAGER_ENVIRONMENT_H_
-
-#include <memory>
-
-#include "base/macros.h"
-#include "base/threading/thread.h"
-#include "content/common/content_export.h"
-
-namespace mojo {
-namespace core {
-class ScopedIPCSupport;
-}
-}  // namespace mojo
-
-namespace content {
-
-class BrowserProcessSubThread;
-class ServiceManagerContext;
-struct StartupDataImpl;
-
-// Encapsulates the basic state necessary to bring up a working Service Manager
-// instance in the process.
-class CONTENT_EXPORT ServiceManagerEnvironment {
- public:
-  explicit ServiceManagerEnvironment(
-      std::unique_ptr<BrowserProcessSubThread> io_thread);
-  ~ServiceManagerEnvironment();
-
-  BrowserProcessSubThread* io_thread() { return io_thread_.get(); }
-
-  // Returns a new StartupDataImpl which captures and/or reflects the partial
-  // state of this ServiceManagerEnvironment. This must be called and the
-  // result passed to BrowserMain if the browser is going to be started within
-  // Service Manager's process.
-  //
-  // After this call, the ServiceManagerEnvironment no longer owns the IO
-  // thread and |io_thread()| returns null.
-  std::unique_ptr<StartupDataImpl> CreateBrowserStartupData();
-
- private:
-  std::unique_ptr<BrowserProcessSubThread> io_thread_;
-  base::Thread mojo_ipc_thread_{"Mojo IPC"};
-  std::unique_ptr<mojo::core::ScopedIPCSupport> mojo_ipc_support_;
-  std::unique_ptr<ServiceManagerContext> service_manager_context_;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceManagerEnvironment);
-};
-
-}  // namespace content
-
-#endif  // CONTENT_APP_SERVICE_MANAGER_ENVIRONMENT_H_
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index e57edaa0..db2f628 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -179,7 +179,6 @@
     "//services/network/public/mojom",
     "//services/resource_coordinator:lib",
     "//services/resource_coordinator/public/cpp:resource_coordinator_cpp",
-    "//services/service_manager",
     "//services/service_manager/public/cpp",
     "//services/service_manager/public/mojom",
     "//services/shape_detection:lib",
@@ -1573,8 +1572,6 @@
     "screenlock_monitor/screenlock_monitor_device_source.h",
     "screenlock_monitor/screenlock_monitor_source.cc",
     "screenlock_monitor/screenlock_monitor_source.h",
-    "service_manager/service_manager_context.cc",
-    "service_manager/service_manager_context.h",
     "service_process_host_impl.cc",
     "service_sandbox_type.h",
     "service_worker/embedded_worker_instance.cc",
@@ -1726,8 +1723,6 @@
     "storage_partition_impl.h",
     "storage_partition_impl_map.cc",
     "storage_partition_impl_map.h",
-    "system_connector_impl.cc",
-    "system_connector_impl.h",
     "theme_helper.cc",
     "theme_helper.h",
     "tracing/background_memory_tracing_observer.cc",
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
index 311715ec..89064cb408 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -928,14 +928,13 @@
     return nil;
   bool boolValue =
       _owner->GetBoolAttribute(ax::mojom::BoolAttribute::kLiveAtomic);
-  return [NSNumber numberWithBool:boolValue];
+  return @(boolValue);
 }
 
 - (NSNumber*)ariaBusy {
   if (![self instanceActive])
     return nil;
-  return [NSNumber
-      numberWithBool:_owner->GetBoolAttribute(ax::mojom::BoolAttribute::kBusy)];
+  return @(_owner->GetBoolAttribute(ax::mojom::BoolAttribute::kBusy));
 }
 
 - (NSNumber*)ariaColumnCount {
@@ -944,7 +943,7 @@
   base::Optional<int> aria_col_count = _owner->node()->GetTableAriaColCount();
   if (!aria_col_count)
     return nil;
-  return [NSNumber numberWithInt:*aria_col_count];
+  return @(*aria_col_count);
 }
 
 - (NSNumber*)ariaColumnIndex {
@@ -953,7 +952,7 @@
   base::Optional<int> ariaColIndex = _owner->node()->GetTableCellAriaColIndex();
   if (!ariaColIndex)
     return nil;
-  return [NSNumber numberWithInt:*ariaColIndex];
+  return @(*ariaColIndex);
 }
 
 - (NSString*)ariaCurrent {
@@ -999,7 +998,7 @@
   base::Optional<int> posInSet = _owner->node()->GetPosInSet();
   if (!posInSet)
     return nil;
-  return [NSNumber numberWithInt:*posInSet];
+  return @(*posInSet);
 }
 
 - (NSString*)ariaRelevant {
@@ -1015,7 +1014,7 @@
   base::Optional<int> ariaRowCount = _owner->node()->GetTableAriaRowCount();
   if (!ariaRowCount)
     return nil;
-  return [NSNumber numberWithInt:*ariaRowCount];
+  return @(*ariaRowCount);
 }
 
 - (NSNumber*)ariaRowIndex {
@@ -1024,7 +1023,7 @@
   base::Optional<int> ariaRowIndex = _owner->node()->GetTableCellAriaRowIndex();
   if (!ariaRowIndex)
     return nil;
-  return [NSNumber numberWithInt:*ariaRowIndex];
+  return @(*ariaRowIndex);
 }
 
 - (NSNumber*)ariaSetSize {
@@ -1033,7 +1032,7 @@
   base::Optional<int> setSize = _owner->node()->GetSetSize();
   if (!setSize)
     return nil;
-  return [NSNumber numberWithInt:*setSize];
+  return @(*setSize);
 }
 
 - (NSString*)autocompleteValue {
@@ -1056,7 +1055,7 @@
       ++level;
     ancestor = ancestor->PlatformGetParent();
   }
-  return [NSNumber numberWithInt:level];
+  return @(level);
 }
 
 // Returns an array of BrowserAccessibilityCocoa objects, representing the
@@ -1259,8 +1258,7 @@
   if (![self instanceActive])
     return nil;
   if ([self internalRole] == ax::mojom::Role::kTreeItem) {
-    return
-        [NSNumber numberWithBool:GetState(_owner, ax::mojom::State::kExpanded)];
+    return @(GetState(_owner, ax::mojom::State::kExpanded));
   } else {
     return nil;
   }
@@ -1285,7 +1283,7 @@
     // Mac disclosureLevel is 0-based, but web levels are 1-based.
     if (level > 0)
       level--;
-    return [NSNumber numberWithInt:level];
+    return @(level);
   } else {
     return nil;
   }
@@ -1351,15 +1349,14 @@
 - (NSNumber*)elementBusy {
   if (![self instanceActive])
     return nil;
-  return [NSNumber numberWithBool:_owner->GetData().GetBoolAttribute(
-                                      ax::mojom::BoolAttribute::kBusy)];
+  return @(_owner->GetData().GetBoolAttribute(ax::mojom::BoolAttribute::kBusy));
 }
 
 - (NSNumber*)enabled {
   if (![self instanceActive])
     return nil;
-  return [NSNumber numberWithBool:_owner->GetData().GetRestriction() !=
-                                  ax::mojom::Restriction::kDisabled];
+  return @(_owner->GetData().GetRestriction() !=
+           ax::mojom::Restriction::kDisabled);
 }
 
 // Returns a text marker that points to the last character in the document that
@@ -1376,8 +1373,7 @@
 - (NSNumber*)expanded {
   if (![self instanceActive])
     return nil;
-  return
-      [NSNumber numberWithBool:GetState(_owner, ax::mojom::State::kExpanded)];
+  return @(GetState(_owner, ax::mojom::State::kExpanded));
 }
 
 - (id)focusableAncestor {
@@ -1400,8 +1396,7 @@
   if (![self instanceActive])
     return nil;
   BrowserAccessibilityManager* manager = _owner->manager();
-  NSNumber* ret = [NSNumber numberWithBool:manager->GetFocus() == _owner];
-  return ret;
+  return @(manager->GetFocus() == _owner);
 }
 
 - (NSNumber*)grabbed {
@@ -1409,9 +1404,9 @@
     return nil;
   std::string grabbed;
   if (_owner->GetHtmlAttribute("aria-grabbed", &grabbed) && grabbed == "true")
-    return [NSNumber numberWithBool:YES];
+    return @YES;
 
-  return [NSNumber numberWithBool:NO];
+  return @NO;
 }
 
 - (NSNumber*)hasPopup {
@@ -1640,8 +1635,7 @@
 - (NSNumber*)isMultiSelectable {
   if (![self instanceActive])
     return nil;
-  return [NSNumber
-      numberWithBool:GetState(_owner, ax::mojom::State::kMultiselectable)];
+  return @(GetState(_owner, ax::mojom::State::kMultiselectable));
 }
 
 - (NSString*)placeholderValue {
@@ -1705,7 +1699,7 @@
 - (NSNumber*)loaded {
   if (![self instanceActive])
     return nil;
-  return [NSNumber numberWithBool:YES];
+  return @YES;
 }
 
 - (NSNumber*)loadingProgress {
@@ -1713,7 +1707,7 @@
     return nil;
   BrowserAccessibilityManager* manager = _owner->manager();
   float floatValue = manager->GetTreeData().loading_progress;
-  return [NSNumber numberWithFloat:floatValue];
+  return @(floatValue);
 }
 
 - (NSNumber*)maxValue {
@@ -1721,7 +1715,7 @@
     return nil;
   float floatValue =
       _owner->GetFloatAttribute(ax::mojom::FloatAttribute::kMaxValueForRange);
-  return [NSNumber numberWithFloat:floatValue];
+  return @(floatValue);
 }
 
 - (NSNumber*)minValue {
@@ -1729,7 +1723,7 @@
     return nil;
   float floatValue =
       _owner->GetFloatAttribute(ax::mojom::FloatAttribute::kMinValueForRange);
-  return [NSNumber numberWithFloat:floatValue];
+  return @(floatValue);
 }
 
 - (NSString*)orientation {
@@ -1811,8 +1805,7 @@
 - (NSNumber*)required {
   if (![self instanceActive])
     return nil;
-  return
-      [NSNumber numberWithBool:GetState(_owner, ax::mojom::State::kRequired)];
+  return @(GetState(_owner, ax::mojom::State::kRequired));
 }
 
 // Returns an enum indicating the role from owner_.
@@ -2233,8 +2226,7 @@
 - (NSNumber*)selected {
   if (![self instanceActive])
     return nil;
-  return [NSNumber numberWithBool:_owner->GetBoolAttribute(
-                                      ax::mojom::BoolAttribute::kSelected)];
+  return @(_owner->GetBoolAttribute(ax::mojom::BoolAttribute::kSelected));
 }
 
 - (NSArray*)selectedChildren {
@@ -2511,7 +2503,7 @@
     int level = 0;
     if (_owner->GetIntAttribute(ax::mojom::IntAttribute::kHierarchicalLevel,
                                 &level)) {
-      return [NSNumber numberWithInt:level];
+      return @(level);
     }
   } else if ([role isEqualToString:NSAccessibilityButtonRole]) {
     // AXValue does not make sense for pure buttons.
@@ -2532,7 +2524,7 @@
                     : 0;
         break;
     }
-    return [NSNumber numberWithInt:value];
+    return @(value);
   } else if (_owner->GetData().IsRangeValueSupported()) {
     // Objects that support range values include progress bars, sliders, and
     // steppers. Only the native value or aria-valuenow should be exposed, not
@@ -2541,7 +2533,7 @@
     float floatValue;
     if (_owner->GetFloatAttribute(ax::mojom::FloatAttribute::kValueForRange,
                                   &floatValue)) {
-      return [NSNumber numberWithFloat:floatValue];
+      return @(floatValue);
     }
   } else if ([role isEqualToString:NSAccessibilityColorWellRole]) {
     unsigned int color = static_cast<unsigned int>(
@@ -2630,7 +2622,7 @@
 - (NSNumber*)visited {
   if (![self instanceActive])
     return nil;
-  return [NSNumber numberWithBool:GetState(_owner, ax::mojom::State::kVisited)];
+  return @(GetState(_owner, ax::mojom::State::kVisited));
 }
 
 - (id)window {
@@ -3137,7 +3129,7 @@
                    NSAccessibilityUIElementCountForSearchPredicateParameterizedAttribute]) {
     OneShotAccessibilityTreeSearch search(_owner);
     if (InitializeAccessibilityTreeSearch(&search, parameter))
-      return [NSNumber numberWithInt:search.CountMatches()];
+      return @(search.CountMatches());
     return nil;
   }
 
@@ -3327,9 +3319,7 @@
 
   if ([[self role] isEqualToString:NSAccessibilityTableRole] ||
       [[self role] isEqualToString:NSAccessibilityGridRole]) {
-    [ret addObjectsFromArray:@[
-      NSAccessibilityCellForColumnAndRowParameterizedAttribute
-    ]];
+    [ret addObject:NSAccessibilityCellForColumnAndRowParameterizedAttribute];
   }
 
   if (_owner->HasState(ax::mojom::State::kEditable)) {
@@ -3346,11 +3336,8 @@
     ]];
   }
 
-  if ([self internalRole] == ax::mojom::Role::kStaticText) {
-    [ret addObjectsFromArray:@[
-      NSAccessibilityBoundsForRangeParameterizedAttribute
-    ]];
-  }
+  if ([self internalRole] == ax::mojom::Role::kStaticText)
+    [ret addObject:NSAccessibilityBoundsForRangeParameterizedAttribute];
 
   if ([self internalRole] == ax::mojom::Role::kRootWebArea ||
       [self internalRole] == ax::mojom::Role::kWebArea) {
@@ -3460,16 +3447,10 @@
       NSAccessibilityARIARowIndexAttribute,
       @"AXSortDirection",
     ]];
-    if ([self internalRole] != ax::mojom::Role::kColumnHeader) {
-      [ret addObjectsFromArray:@[
-        NSAccessibilityColumnHeaderUIElementsAttribute,
-      ]];
-    }
-    if ([self internalRole] != ax::mojom::Role::kRowHeader) {
-      [ret addObjectsFromArray:@[
-        NSAccessibilityRowHeaderUIElementsAttribute,
-      ]];
-    }
+    if ([self internalRole] != ax::mojom::Role::kColumnHeader)
+      [ret addObject:NSAccessibilityColumnHeaderUIElementsAttribute];
+    if ([self internalRole] != ax::mojom::Role::kRowHeader)
+      [ret addObject:NSAccessibilityRowHeaderUIElementsAttribute];
   } else if ([role isEqualToString:@"AXWebArea"]) {
     [ret addObjectsFromArray:@[
       @"AXLoaded", NSAccessibilityLoadingProgressAttribute
@@ -3497,7 +3478,7 @@
       ]];
       // clang-format on
     } else {
-      [ret addObjectsFromArray:@[ NSAccessibilityIndexAttribute ]];
+      [ret addObject:NSAccessibilityIndexAttribute];
     }
   } else if ([role isEqualToString:NSAccessibilityListRole]) {
     [ret addObjectsFromArray:@[
@@ -3542,46 +3523,38 @@
   }
 
   // Add the url attribute only if it has a valid url.
-  if ([self url] != nil) {
-    [ret addObjectsFromArray:@[ NSAccessibilityURLAttribute ]];
-  }
+  if ([self url])
+    [ret addObject:NSAccessibilityURLAttribute];
 
   // Position in set and Set size.
   // Only add these attributes for roles that use posinset and setsize.
-  if (ui::IsItemLike(_owner->node()->data().role))
+  if (ui::IsItemLike(_owner->node()->data().role)) {
     [ret addObjectsFromArray:@[
       NSAccessibilityARIAPosInSetAttribute, NSAccessibilityARIASetSizeAttribute
     ]];
+  }
   if (ui::IsSetLike(_owner->node()->data().role))
     [ret addObject:NSAccessibilityARIASetSizeAttribute];
 
   // Live regions.
-  if (_owner->HasStringAttribute(ax::mojom::StringAttribute::kLiveStatus)) {
-    [ret addObjectsFromArray:@[ NSAccessibilityARIALiveAttribute ]];
-  }
-  if (_owner->HasStringAttribute(ax::mojom::StringAttribute::kLiveRelevant)) {
-    [ret addObjectsFromArray:@[ NSAccessibilityARIARelevantAttribute ]];
-  }
-  if (_owner->HasBoolAttribute(ax::mojom::BoolAttribute::kLiveAtomic)) {
-    [ret addObjectsFromArray:@[ NSAccessibilityARIAAtomicAttribute ]];
-  }
-  if (_owner->HasBoolAttribute(ax::mojom::BoolAttribute::kBusy)) {
-    [ret addObjectsFromArray:@[ NSAccessibilityARIABusyAttribute ]];
-  }
-
-  if (_owner->HasIntAttribute(ax::mojom::IntAttribute::kAriaCurrentState)) {
-    [ret addObjectsFromArray:@[ NSAccessibilityARIACurrentAttribute ]];
-  }
+  if (_owner->HasStringAttribute(ax::mojom::StringAttribute::kLiveStatus))
+    [ret addObject:NSAccessibilityARIALiveAttribute];
+  if (_owner->HasStringAttribute(ax::mojom::StringAttribute::kLiveRelevant))
+    [ret addObject:NSAccessibilityARIARelevantAttribute];
+  if (_owner->HasBoolAttribute(ax::mojom::BoolAttribute::kLiveAtomic))
+    [ret addObject:NSAccessibilityARIAAtomicAttribute];
+  if (_owner->HasBoolAttribute(ax::mojom::BoolAttribute::kBusy))
+    [ret addObject:NSAccessibilityARIABusyAttribute];
+  if (_owner->HasIntAttribute(ax::mojom::IntAttribute::kAriaCurrentState))
+    [ret addObject:NSAccessibilityARIACurrentAttribute];
 
   std::string dropEffect;
-  if (_owner->GetHtmlAttribute("aria-dropeffect", &dropEffect)) {
-    [ret addObjectsFromArray:@[ NSAccessibilityDropEffectsAttribute ]];
-  }
+  if (_owner->GetHtmlAttribute("aria-dropeffect", &dropEffect))
+    [ret addObject:NSAccessibilityDropEffectsAttribute];
 
   std::string grabbed;
-  if (_owner->GetHtmlAttribute("aria-grabbed", &grabbed)) {
-    [ret addObjectsFromArray:@[ NSAccessibilityGrabbedAttribute ]];
-  }
+  if (_owner->GetHtmlAttribute("aria-grabbed", &grabbed))
+    [ret addObject:NSAccessibilityGrabbedAttribute];
 
   if (_owner->HasIntAttribute(ax::mojom::IntAttribute::kHasPopup)) {
     [ret addObjectsFromArray:@[
@@ -3589,19 +3562,17 @@
     ]];
   }
 
-  if (_owner->HasBoolAttribute(ax::mojom::BoolAttribute::kSelected)) {
-    [ret addObjectsFromArray:@[ NSAccessibilitySelectedAttribute ]];
-  }
+  if (_owner->HasBoolAttribute(ax::mojom::BoolAttribute::kSelected))
+    [ret addObject:NSAccessibilitySelectedAttribute];
 
-  // Add expanded attribute only if it has expanded or collapsed state.
   if (GetState(_owner, ax::mojom::State::kExpanded) ||
       GetState(_owner, ax::mojom::State::kCollapsed)) {
-    [ret addObjectsFromArray:@[ NSAccessibilityExpandedAttribute ]];
+    [ret addObject:NSAccessibilityExpandedAttribute];
   }
 
   if (GetState(_owner, ax::mojom::State::kVertical) ||
       GetState(_owner, ax::mojom::State::kHorizontal)) {
-    [ret addObjectsFromArray:@[ NSAccessibilityOrientationAttribute ]];
+    [ret addObject:NSAccessibilityOrientationAttribute];
   }
 
   // Anything focusable or any control:
@@ -3622,22 +3593,18 @@
   // language, so it may make more sense to always expose this attribute.
   //
   // For now we expose the language attribute if we have any language set.
-  if (_owner->node() && !_owner->node()->GetLanguage().empty()) {
-    [ret addObjectsFromArray:@[ NSAccessibilityLanguageAttribute ]];
-  }
+  if (_owner->node() && !_owner->node()->GetLanguage().empty())
+    [ret addObject:NSAccessibilityLanguageAttribute];
 
-  if ([self internalRole] == ax::mojom::Role::kTextFieldWithComboBox) {
-    [ret addObjectsFromArray:@[
-      NSAccessibilityOwnsAttribute,
-    ]];
-  }
+  if ([self internalRole] == ax::mojom::Role::kTextFieldWithComboBox)
+    [ret addObject:NSAccessibilityOwnsAttribute];
 
   // Title UI Element.
   if (_owner->HasIntListAttribute(
           ax::mojom::IntListAttribute::kLabelledbyIds) &&
       _owner->GetIntListAttribute(ax::mojom::IntListAttribute::kLabelledbyIds)
               .size() > 0) {
-    [ret addObjectsFromArray:@[ NSAccessibilityTitleUIElementAttribute ]];
+    [ret addObject:NSAccessibilityTitleUIElementAttribute];
   }
 
   if (_owner->HasStringAttribute(ax::mojom::StringAttribute::kAutoComplete))
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index 8e9fb9e..d87cbfc0 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -561,8 +561,6 @@
     // resets it).
     io_thread_ = std::move(startup_data->io_thread);
     mojo_ipc_support_ = std::move(startup_data->mojo_ipc_support);
-    service_manager_shutdown_closure_ =
-        std::move(startup_data->service_manager_shutdown_closure);
   }
 
   parts_ = GetContentClient()->browser()->CreateBrowserMainParts(parameters_);
@@ -1109,9 +1107,6 @@
   if (BrowserGpuChannelHostFactory::instance())
     BrowserGpuChannelHostFactory::instance()->CloseChannel();
 
-  // Shutdown the Service Manager and IPC.
-  if (service_manager_shutdown_closure_)
-    std::move(service_manager_shutdown_closure_).Run();
   mojo_ipc_support_.reset();
 
   if (save_file_manager_)
diff --git a/content/browser/browser_main_loop.h b/content/browser/browser_main_loop.h
index 40f2b27..0ca2bbe 100644
--- a/content/browser/browser_main_loop.h
+++ b/content/browser/browser_main_loop.h
@@ -336,13 +336,6 @@
       gpu_data_manager_visual_proxy_;
 #endif
 
-  // If provided to the BrowserMainLoop (see StartupDataImpl), this closure
-  // is run during shutdown, prior to IO thread destruction, and should do
-  // whatever work is necessary to tear down the ServiceManager if one is
-  // running. Must be provided if a ServiceManager is initialized and running on
-  // the IO thread.
-  base::OnceClosure service_manager_shutdown_closure_;
-
   // Members initialized in |BrowserThreadsStarted()| --------------------------
   std::unique_ptr<mojo::core::ScopedIPCSupport> mojo_ipc_support_;
   std::unique_ptr<MediaKeysListenerManagerImpl> media_keys_listener_manager_;
diff --git a/content/browser/renderer_host/media/media_devices_manager.cc b/content/browser/renderer_host/media/media_devices_manager.cc
index 341944a..32559d1 100644
--- a/content/browser/renderer_host/media/media_devices_manager.cc
+++ b/content/browser/renderer_host/media/media_devices_manager.cc
@@ -27,7 +27,6 @@
 #include "content/browser/media/media_devices_permission_checker.h"
 #include "content/browser/renderer_host/media/media_stream_manager.h"
 #include "content/browser/renderer_host/media/video_capture_manager.h"
-#include "content/browser/service_manager/service_manager_context.h"
 #include "content/public/browser/audio_service.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc
index 763384c..3c02c38 100644
--- a/content/browser/renderer_host/navigation_request.cc
+++ b/content/browser/renderer_host/navigation_request.cc
@@ -1454,9 +1454,7 @@
     if (!Navigator::CheckWebUIRendererDoesNotDisplayNormalURL(
             render_frame_host_, GetUrlInfo(),
             /* is_renderer_initiated_check */ false)) {
-      // TODO(nasko): Convert this to CHECK once it is confirmed that it does
-      // not happen in reality.
-      base::debug::DumpWithoutCrashing();
+      CHECK(false);
     }
 
     ReadyToCommitNavigation(false /* is_error */);
@@ -2401,9 +2399,7 @@
     if (!Navigator::CheckWebUIRendererDoesNotDisplayNormalURL(
             render_frame_host_, GetUrlInfo(),
             /* is_renderer_initiated_check */ false)) {
-      // TODO(nasko): Convert this to CHECK once it is confirmed that it does
-      // not happen in reality.
-      base::debug::DumpWithoutCrashing();
+      CHECK(false);
     }
   } else {
     render_frame_host_ = nullptr;
@@ -2663,9 +2659,7 @@
     if (!Navigator::CheckWebUIRendererDoesNotDisplayNormalURL(
             render_frame_host_, GetUrlInfo(),
             /* is_renderer_initiated_check */ false)) {
-      // TODO(nasko): Convert this to CHECK once it is confirmed that it does
-      // not happen in reality.
-      base::debug::DumpWithoutCrashing();
+      CHECK(false);
     }
   }
 
diff --git a/content/browser/service_manager/OWNERS b/content/browser/service_manager/OWNERS
deleted file mode 100644
index 87df16da..0000000
--- a/content/browser/service_manager/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-ben@chromium.org
-rockot@google.com
diff --git a/content/browser/startup_data_impl.h b/content/browser/startup_data_impl.h
index 56984f8..40cfc78 100644
--- a/content/browser/startup_data_impl.h
+++ b/content/browser/startup_data_impl.h
@@ -7,7 +7,6 @@
 
 #include <memory>
 
-#include "base/callback.h"
 #include "content/browser/browser_process_sub_thread.h"
 #include "content/common/content_export.h"
 #include "content/public/browser/startup_data.h"
@@ -22,7 +21,6 @@
 
   std::unique_ptr<BrowserProcessSubThread> io_thread;
   std::unique_ptr<mojo::core::ScopedIPCSupport> mojo_ipc_support;
-  base::OnceClosure service_manager_shutdown_closure;
 };
 
 }  // namespace content
diff --git a/content/browser/system_connector_impl.h b/content/browser/system_connector_impl.h
deleted file mode 100644
index a61f0a5..0000000
--- a/content/browser/system_connector_impl.h
+++ /dev/null
@@ -1,20 +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.
-
-#ifndef CONTENT_BROWSER_SYSTEM_CONNECTOR_IMPL_H_
-#define CONTENT_BROWSER_SYSTEM_CONNECTOR_IMPL_H_
-
-#include "content/public/browser/system_connector.h"
-#include "services/service_manager/public/cpp/connector.h"
-
-namespace content {
-
-// Sets the system Connector on the main thread. Called very early in browser
-// process startup (i.e. before BrowserMainLoop is instantiated). For unit test
-// environments, see |SetSystemConnectorForTesting()| in the public header.
-void SetSystemConnector(std::unique_ptr<service_manager::Connector> connector);
-
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_SYSTEM_CONNECTOR_IMPL_H_
diff --git a/content/public/app/BUILD.gn b/content/public/app/BUILD.gn
index e10b23d..a6bb76c 100644
--- a/content/public/app/BUILD.gn
+++ b/content/public/app/BUILD.gn
@@ -43,8 +43,6 @@
   "//base:i18n",
   "//content:export",
   "//content/public/common:common_sources",
-  "//services/service_manager",
-  "//services/service_manager/public/cpp",
 ]
 
 if (is_component_build) {
diff --git a/content/public/app/DEPS b/content/public/app/DEPS
index 73c7a20..d973f5e 100644
--- a/content/public/app/DEPS
+++ b/content/public/app/DEPS
@@ -1,11 +1,9 @@
 include_rules = [
   "+content/public/browser/content_browser_client.h",
-  "+content/public/common/service_manifest.mojom.h",
   "+content/public/gpu/content_gpu_client.h",
   "+content/public/renderer/content_renderer_client.h",
   "+content/public/utility/content_utility_client.h",
   "+services/audio/public",
-  "+services/service_manager",
   "+services/video_capture/public",
 ]
 
diff --git a/content/public/app/content_main_runner.h b/content/public/app/content_main_runner.h
index d61c91b4..d9468ea 100644
--- a/content/public/app/content_main_runner.h
+++ b/content/public/app/content_main_runner.h
@@ -25,7 +25,7 @@
   virtual int Initialize(const ContentMainParams& params) = 0;
 
   // Perform the default run logic.
-  virtual int Run(bool start_service_manager_only) = 0;
+  virtual int Run(bool start_minimal_browser) = 0;
 
   // Shut down the content state.
   virtual void Shutdown() = 0;
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn
index 87bd663..c72a6f4 100644
--- a/content/public/browser/BUILD.gn
+++ b/content/public/browser/BUILD.gn
@@ -347,7 +347,6 @@
     "supported_delegations.cc",
     "supported_delegations.h",
     "swap_metrics_driver.h",
-    "system_connector.h",
     "touch_selection_controller_client_manager.h",
     "trace_uploader.h",
     "tracing_controller.h",
diff --git a/content/public/browser/content_browser_client.cc b/content/public/browser/content_browser_client.cc
index 281a1aa0..2496f7c3 100644
--- a/content/public/browser/content_browser_client.cc
+++ b/content/public/browser/content_browser_client.cc
@@ -47,7 +47,6 @@
 #include "services/network/public/cpp/resource_request.h"
 #include "services/network/public/mojom/network_context.mojom.h"
 #include "services/network/public/mojom/network_service.mojom.h"
-#include "services/service_manager/public/cpp/manifest.h"
 #include "storage/browser/quota/quota_manager.h"
 #include "third_party/blink/public/common/features.h"
 #include "third_party/blink/public/common/loader/url_loader_throttle.h"
@@ -717,24 +716,6 @@
 
 #endif  // defined(OS_WIN)
 
-void ContentBrowserClient::RunServiceInstance(
-    const service_manager::Identity& identity,
-    mojo::PendingReceiver<service_manager::mojom::Service>* receiver) {}
-
-base::Optional<service_manager::Manifest>
-ContentBrowserClient::GetServiceManifestOverlay(base::StringPiece name) {
-  return base::nullopt;
-}
-
-std::vector<service_manager::Manifest>
-ContentBrowserClient::GetExtraServiceManifests() {
-  return std::vector<service_manager::Manifest>();
-}
-
-std::vector<std::string> ContentBrowserClient::GetStartupServices() {
-  return std::vector<std::string>();
-}
-
 std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
 ContentBrowserClient::CreateURLLoaderThrottles(
     const network::ResourceRequest& request,
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index d4b02c6..13787b2 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -125,17 +125,9 @@
 }  // namespace network
 
 namespace service_manager {
-class Identity;
-struct Manifest;
-class Service;
-
 template <typename...>
 class BinderRegistryWithArgs;
 using BinderRegistry = BinderRegistryWithArgs<>;
-
-namespace mojom {
-class Service;
-}  // namespace mojom
 }  // namespace service_manager
 
 namespace net {
@@ -1087,36 +1079,6 @@
       RenderProcessHost* render_process_host,
       mojo::GenericPendingReceiver receiver) {}
 
-  // Handles a service instance request for a new service instance with identity
-  // |identity|. If the client knows how to run the named service, it should
-  // bind |*receiver| accordingly, in the browser process.
-  //
-  // Note that this runs on the main thread, so if a service may need to start
-  // and run on the IO thread while the main thread is blocking on something,
-  // the service request should instead be handled by
-  // |RunServiceInstanceOnIOThread| below.
-  virtual void RunServiceInstance(
-      const service_manager::Identity& identity,
-      mojo::PendingReceiver<service_manager::mojom::Service>* receiver);
-
-  // Allows the embedder to amend service manifests for existing services.
-  // Specifically, the sets of exposed and required capabilities, interface
-  // filter capabilities (deprecated), packaged services, and preloaded files
-  // will be taken from the returned Manifest and appended to those of the
-  // existing Manifest for the service named |name|.
-  //
-  // If no overlay is provided for the service, this returns |base::nullopt|.
-  virtual base::Optional<service_manager::Manifest> GetServiceManifestOverlay(
-      base::StringPiece name);
-
-  // Allows the embedder to provide extra service manifests to be registered
-  // with the service manager context.
-  virtual std::vector<service_manager::Manifest> GetExtraServiceManifests();
-
-  // Allows the embedder to have a list of services started after the
-  // in-process Service Manager has been initialized.
-  virtual std::vector<std::string> GetStartupServices();
-
   // Allows to override the visibility state of a RenderFrameHost.
   // |visibility_state| should not be null. It will only be set if needed.
   virtual void OverridePageVisibilityState(
diff --git a/content/public/browser/system_connector.h b/content/public/browser/system_connector.h
deleted file mode 100644
index 0095808..0000000
--- a/content/public/browser/system_connector.h
+++ /dev/null
@@ -1,24 +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.
-
-#ifndef CONTENT_PUBLIC_BROWSER_SYSTEM_CONNECTOR_H_
-#define CONTENT_PUBLIC_BROWSER_SYSTEM_CONNECTOR_H_
-
-#include "content/common/content_export.h"
-#include "services/service_manager/public/cpp/connector.h"
-
-namespace content {
-
-// Returns a Connector which can be used to connect to service interfaces from
-// the browser process. May return null in unit testing environments.
-// The system Connector can be overridden for tests using the
-// |SetSystemConnectorForTesting()| below.
-//
-// This function is safe to call from any thread, but the returned pointer is
-// different on each thread and is NEVER safe to retain or pass across threads.
-CONTENT_EXPORT service_manager::Connector* GetSystemConnector();
-
-}  // namespace content
-
-#endif  // CONTENT_PUBLIC_BROWSER_SYSTEM_CONNECTOR_H_
diff --git a/content/public/test/browser_test_base.cc b/content/public/test/browser_test_base.cc
index d2a8465fb..53b5d60 100644
--- a/content/public/test/browser_test_base.cc
+++ b/content/public/test/browser_test_base.cc
@@ -88,7 +88,7 @@
 #include "components/discardable_memory/service/discardable_shared_memory_manager.h"  // nogncheck
 #include "content/app/content_main_runner_impl.h"
 #include "content/app/mojo/mojo_init.h"
-#include "content/app/service_manager_environment.h"
+#include "content/app/mojo_ipc_support.h"
 #include "content/public/app/content_main_delegate.h"
 #include "content/public/common/content_paths.h"
 #include "testing/android/native_test/native_browser_test_support.h"
@@ -538,10 +538,10 @@
 
   auto discardable_shared_memory_manager =
       std::make_unique<discardable_memory::DiscardableSharedMemoryManager>();
-  auto service_manager_env = std::make_unique<ServiceManagerEnvironment>(
-      BrowserTaskExecutor::CreateIOThread());
+  auto ipc_support =
+      std::make_unique<MojoIpcSupport>(BrowserTaskExecutor::CreateIOThread());
   std::unique_ptr<StartupDataImpl> startup_data =
-      service_manager_env->CreateBrowserStartupData();
+      ipc_support->CreateBrowserStartupData();
 
   // ContentMain would normally call RunProcess() on the delegate and fallback
   // to BrowserMain() if it did not run it (or equivalent) itself. On Android,
@@ -585,7 +585,7 @@
     base::ScopedAllowBaseSyncPrimitivesForTesting allow_wait;
     // Shutting these down will block the thread.
     ShutDownNetworkService();
-    service_manager_env.reset();
+    ipc_support.reset();
     discardable_shared_memory_manager.reset();
   }
 
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 8f12894a..3598250 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -374,6 +374,7 @@
   public_deps = [
     ":test_interfaces",
     "//components/download/public/common:test_support",
+    "//components/services/filesystem/public/mojom",
     "//components/services/storage/public/mojom",
     "//content/public/app",
     "//content/public/browser",
diff --git a/content/test/data/conversions/impression_with_origin_trial.html b/content/test/data/conversions/impression_with_origin_trial.html
index c15b07b..d2b5b326 100644
--- a/content/test/data/conversions/impression_with_origin_trial.html
+++ b/content/test/data/conversions/impression_with_origin_trial.html
@@ -2,7 +2,7 @@
   <head>
     <!-- TODO(johnidel): Find a better way to provide this toke, as this has an expiration in 2033.
    Generate this token with the command:
-   generate_token.py https://example.test ConversionMeasurement -expire-timestamp=2000000000 -->
+   generate_token.py https://example.test ConversionMeasurement --expire-timestamp=2000000000 -->
     <meta http-equiv="origin-trial" content="AyiEpqRSCsaH3iE8GrZXh/DPVQPQr21JkMfKwjBFQKXHORXnLsT2AVEbhAECynhD0Um/tHnHHgN/mKJ8JWd1lAUAAABgeyJvcmlnaW4iOiAiaHR0cHM6Ly9leGFtcGxlLnRlc3Q6NDQzIiwgImZlYXR1cmUiOiAiQ29udmVyc2lvbk1lYXN1cmVtZW50IiwgImV4cGlyeSI6IDIwMDAwMDAwMDB9">
     <script src="register_impression.js"></script>
   </head>
diff --git a/content/test/data/conversions/impression_with_third_party_trial.html b/content/test/data/conversions/impression_with_third_party_trial.html
new file mode 100644
index 0000000..09847d5
--- /dev/null
+++ b/content/test/data/conversions/impression_with_third_party_trial.html
@@ -0,0 +1,9 @@
+<html>
+  <head>
+    <script src="third_party_token_injector.js"></script>
+    <script src="register_impression.js"></script>
+  </head>
+  <body>
+    Injects a 3P OT token into the page.
+  </body>
+</html>
diff --git a/content/test/data/conversions/third_party_token_injector.js b/content/test/data/conversions/third_party_token_injector.js
new file mode 100644
index 0000000..22c6c7f
--- /dev/null
+++ b/content/test/data/conversions/third_party_token_injector.js
@@ -0,0 +1,13 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+let meta = document.createElement('meta');
+meta.httpEquiv = 'origin-trial';
+
+// Third party OT token with subset usage restriction. Expires in 2033.
+// Generated using:
+// python generate_token.py https://example.test ConversionMeasurement \
+// --usage-restriction=subset --is-third-party --expire-timestamp=2000000000
+meta.content = 'A8xSVOSM2Fo25Ot5f+WXIRxAVTNK+R4JLQZvX0gbwUWq6PWGggKsIi/6HvkDNmDK64/dGOo2fJwUW4Fi7NRRhQ8AAACJeyJvcmlnaW4iOiAiaHR0cHM6Ly9leGFtcGxlLnRlc3Q6NDQzIiwgImlzVGhpcmRQYXJ0eSI6IHRydWUsICJ1c2FnZSI6ICJzdWJzZXQiLCAiZmVhdHVyZSI6ICJDb252ZXJzaW9uTWVhc3VyZW1lbnQiLCAiZXhwaXJ5IjogMjAwMDAwMDAwMH0=';
+document.head.appendChild(meta);
diff --git a/content/utility/BUILD.gn b/content/utility/BUILD.gn
index 78839fd..dade09e9 100644
--- a/content/utility/BUILD.gn
+++ b/content/utility/BUILD.gn
@@ -49,7 +49,6 @@
     "//services/data_decoder:lib",
     "//services/data_decoder/public/cpp",
     "//services/network:network_service",
-    "//services/service_manager",
     "//services/service_manager/public/cpp",
     "//services/service_manager/public/mojom",
     "//services/shape_detection:lib",
diff --git a/docs/testing/web_tests.md b/docs/testing/web_tests.md
index 3396360..1811c4da 100644
--- a/docs/testing/web_tests.md
+++ b/docs/testing/web_tests.md
@@ -53,8 +53,6 @@
 
 ### Running the Tests
 
-TODO: mention `testing/xvfb.py`
-
 The test runner script is in `third_party/blink/tools/run_web_tests.py`.
 
 To specify which build directory to use (e.g. out/Default, out/Release,
@@ -72,7 +70,9 @@
 ```
 
 *** promo
-Windows users need to use `third_party/blink/tools/run_web_tests.bat` instead.
+* Windows users need to use `third_party/blink/tools/run_web_tests.bat` instead.
+* Linux users should not use `testing/xvfb.py`; `run_web_tests.py` manages Xvfb
+  itself.
 ***
 
 Tests marked as `[ Skip ]` in
diff --git a/gin/wrappable.h b/gin/wrappable.h
index d558ffb..f9b7b93 100644
--- a/gin/wrappable.h
+++ b/gin/wrappable.h
@@ -120,6 +120,8 @@
                  typename std::enable_if<
                      std::is_convertible<T*, WrappableBase*>::value>::type> {
   static v8::MaybeLocal<v8::Value> ToV8(v8::Isolate* isolate, T* val) {
+    if (val == nullptr)
+      return v8::Null(isolate);
     v8::Local<v8::Object> wrapper;
     if (!val->GetWrapper(isolate).ToLocal(&wrapper))
       return v8::MaybeLocal<v8::Value>();
diff --git a/gpu/command_buffer/service/abstract_texture_impl_shared_context_state.cc b/gpu/command_buffer/service/abstract_texture_impl_shared_context_state.cc
index f14ff3a..a81828f5 100644
--- a/gpu/command_buffer/service/abstract_texture_impl_shared_context_state.cc
+++ b/gpu/command_buffer/service/abstract_texture_impl_shared_context_state.cc
@@ -67,7 +67,7 @@
   if (!shared_context_state_) {
     have_context = false;
   } else {
-    if (!shared_context_state_->IsCurrent(nullptr)) {
+    if (!shared_context_state_->IsCurrent(nullptr, /*needs_gl=*/true)) {
       scoped_make_current.emplace(shared_context_state_->context(),
                                   shared_context_state_->surface());
       have_context = scoped_make_current->IsContextCurrent();
diff --git a/gpu/command_buffer/service/shared_context_state.cc b/gpu/command_buffer/service/shared_context_state.cc
index eaf0b3a..c72b2bc 100644
--- a/gpu/command_buffer/service/shared_context_state.cc
+++ b/gpu/command_buffer/service/shared_context_state.cc
@@ -545,8 +545,8 @@
   }
 }
 
-bool SharedContextState::IsCurrent(gl::GLSurface* surface) {
-  if (!GrContextIsGL())
+bool SharedContextState::IsCurrent(gl::GLSurface* surface, bool needs_gl) {
+  if (!GrContextIsGL() && !needs_gl)
     return true;
   if (context_lost())
     return false;
diff --git a/gpu/command_buffer/service/shared_context_state.h b/gpu/command_buffer/service/shared_context_state.h
index bcba574..52a6cb7 100644
--- a/gpu/command_buffer/service/shared_context_state.h
+++ b/gpu/command_buffer/service/shared_context_state.h
@@ -106,7 +106,7 @@
   bool MakeCurrent(gl::GLSurface* surface, bool needs_gl = false);
   void ReleaseCurrent(gl::GLSurface* surface);
   void MarkContextLost(error::ContextLostReason reason = error::kUnknown);
-  bool IsCurrent(gl::GLSurface* surface);
+  bool IsCurrent(gl::GLSurface* surface, bool needs_gl = false);
 
   void PurgeMemory(
       base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level);
diff --git a/gpu/ipc/service/gpu_channel_manager.cc b/gpu/ipc/service/gpu_channel_manager.cc
index 16e05e2..441dfb8f 100644
--- a/gpu/ipc/service/gpu_channel_manager.cc
+++ b/gpu/ipc/service/gpu_channel_manager.cc
@@ -581,12 +581,14 @@
   const CommandBufferStub* stub = nullptr;
   for (const auto& kv : gpu_channels_) {
     const GpuChannel* channel = kv.second.get();
-    stub = channel->GetOneStub();
-    if (stub) {
-      DCHECK(stub->decoder_context());
+    const CommandBufferStub* stub_candidate = channel->GetOneStub();
+    if (stub_candidate) {
+      DCHECK(stub_candidate->decoder_context());
       // With Vulkan, Dawn, etc, RasterDecoders don't use GL.
-      if (stub->decoder_context()->GetGLContext())
+      if (stub_candidate->decoder_context()->GetGLContext()) {
+        stub = stub_candidate;
         break;
+      }
     }
   }
   if (!stub || !stub->decoder_context()->MakeCurrent())
diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_texture_android.cc
index 3b91a4c..456e433 100644
--- a/gpu/ipc/service/stream_texture_android.cc
+++ b/gpu/ipc/service/stream_texture_android.cc
@@ -38,7 +38,8 @@
 std::unique_ptr<ui::ScopedMakeCurrent> MakeCurrent(
     SharedContextState* context_state) {
   std::unique_ptr<ui::ScopedMakeCurrent> scoped_make_current;
-  bool needs_make_current = !context_state->IsCurrent(nullptr);
+  bool needs_make_current =
+      !context_state->IsCurrent(nullptr, /*needs_gl=*/true);
   if (needs_make_current) {
     scoped_make_current = std::make_unique<ui::ScopedMakeCurrent>(
         context_state->context(), context_state->surface());
diff --git a/ios/chrome/app/strings/resources/ios_strings_bs.xtb b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
index 14c0a077..d29bc31 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bs.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">E-pošta</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Verzija <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Sada se prikazuje jedan Chromeov prozor.}one{Sada se prikazuje {count} Chromeov prozor}few{Sada se prikazuju {count} Chromeova prozora}other{Sada se prikazuje {count} Chromeovih prozora}}</translation>
 <translation id="5706552126692816153">Aktivan prije 1 dan</translation>
 <translation id="5711039611392265845">Za više postavki koje se odnose na privatnost, sigurnost i prikupljanje podataka, pogledajte <ph name="BEGIN_LINK" />Sinhronizacija i Googleove usluge<ph name="END_LINK" />.</translation>
 <translation id="5724941645893276623">Da privatno pregledate web, dodajte novu karticu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
index dc19944..3420845c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">Adreça electrònica</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Versió <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Es mostra 1 finestra de Chrome}other{Es mostren {count} finestres de Chrome}}</translation>
 <translation id="5706552126692816153">Actiu fa 1 dia</translation>
 <translation id="5711039611392265845">Per trobar més opcions de configuració relacionades amb la privadesa, la seguretat i la recollida de dades, consulta <ph name="BEGIN_LINK" />Sincronització i serveis de Google<ph name="END_LINK" />.</translation>
 <translation id="5724941645893276623">Per navegar pel web de manera privada, obre una pestanya nova</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb
index cf0e779..9913ee6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">Mail</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Version <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Viser nu 1 Chrome-vindue}one{Viser nu {count} Chrome-vindue}other{Viser nu {count} Chrome-vinduer}}</translation>
 <translation id="5706552126692816153">Aktiv for 1 dag siden</translation>
 <translation id="5711039611392265845">Du kan finde flere indstillinger vedrørende privatliv, sikkerhed og dataindsamling under <ph name="BEGIN_LINK" />Synkronisering og Google-tjenester<ph name="END_LINK" />.</translation>
 <translation id="5724941645893276623">Tilføj en ny fane for at surfe privat på nettet</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb
index 5829f45..45c8a82 100644
--- a/ios/chrome/app/strings/resources/ios_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">E-post</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Versioon <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Nüüd on kuvatud üks Chrome'i aken}other{Nüüd on kuvatud {count} Chrome'i akent}}</translation>
 <translation id="5706552126692816153">Aktiivne 1 päev tagasi</translation>
 <translation id="5711039611392265845">Privaatsuse, turvalisuse ning andmete kogumisega seotud lisaseadete nägemiseks avage valik <ph name="BEGIN_LINK" />Sünkroonimine ja Google'i teenused<ph name="END_LINK" />.</translation>
 <translation id="5724941645893276623">Privaatselt veebi sirvimiseks lisage uus vaheleht</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
index f9d4d84e..fc626a5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">Helbide elektronikoa</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783"><ph name="PRODUCT_VERSION" /> bertsioa</translation>
+<translation id="5690398455483874150">{count,plural, =1{Chrome-ko leiho bat dago ikusgai}other{Chrome-ko {count} leiho daude ikusgai}}</translation>
 <translation id="5706552126692816153">Aktibo duela 1 egun</translation>
 <translation id="5711039611392265845">Pribatutasunarekin, segurtasunarekin eta datu-bilketarekin lotutako ezarpen gehiago ikusteko, joan <ph name="BEGIN_LINK" />Sinkronizazioa eta Google-ren zerbitzuak<ph name="END_LINK" /> atalera.</translation>
 <translation id="5724941645893276623">Sarea modu pribatuan arakatzeko, gehitu beste fitxa bat</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index 430720c7..94f69a4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">Sähköposti</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Versio <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Nyt näytetään 1 Chrome-ikkuna}other{Nyt näytetään {count} Chrome-ikkunaa}}</translation>
 <translation id="5706552126692816153">Aktiivinen 1 päivä sitten</translation>
 <translation id="5711039611392265845">Näet lisää yksityisyyteen, tietoturvaan ja datankeruuseen liittyviä asetuksia <ph name="BEGIN_LINK" />Synkronointi ja Google-palvelut<ph name="END_LINK" /> ‑kohdasta.</translation>
 <translation id="5724941645893276623">Jos haluat selata verkkoa yksityisesti, lisää uusi välilehti</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
index 0cc2de9..6527a12f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">ईमेल</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">वर्शन <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{अभी 1 Chrome विंडो दिखा रहे हैं}one{अभी {count} Chrome विंडो दिखा रहे हैं}other{अभी {count} Chrome विंडो दिखा रहे हैं}}</translation>
 <translation id="5706552126692816153">एक दिन पहले चालू था</translation>
 <translation id="5711039611392265845">निजता, सुरक्षा और डेटा इकट्ठा करने से जुड़ी ज़्यादा सेटिंग के लिए, <ph name="BEGIN_LINK" />सिंक और Google सेवाएं<ph name="END_LINK" /> देखें.</translation>
 <translation id="5724941645893276623">वेब को निजी रूप से ब्राउज़ करने के लिए, एक नया टैब जोड़ें</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index 2a0980a..dcf9a02 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">e-pošta</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Verzija <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Sada se prikazuje jedan Chromeov prozor.}one{Sada se prikazuje {count} Chromeov prozor}few{Sada se prikazuju {count} Chromeova prozora}other{Sada se prikazuje {count} Chromeovih prozora}}</translation>
 <translation id="5706552126692816153">Aktivan prije jednog dana</translation>
 <translation id="5711039611392265845">Više postavki koje se odnose na privatnost, sigurnost i prikupljanje podataka dostupno je u odjeljku <ph name="BEGIN_LINK" />Sinkronizacija i Googleove usluge<ph name="END_LINK" />.</translation>
 <translation id="5724941645893276623">Da biste privatno pregledavali web, dodajte novu karticu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lo.xtb b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
index a21b361..3f6a468 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lo.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lo.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">ອີເມວ</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">ລຸ້ນ <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{ດຽວນີ້ກຳລັງສະແດງໜ້າຈໍ Chrome 1 ລາຍການ}other{ດຽວນີ້ກຳລັງສະແດງໜ້າຈໍ Chrome {count} ລາຍການ}}</translation>
 <translation id="5706552126692816153">ນຳໃຊ້ເມື່ອ 1 ມື້ກ່ອນ</translation>
 <translation id="5711039611392265845">ສຳລັບການຕັ້ງຄ່າເພີ່ມເຕີມທີ່ກ່ຽວຂ້ອງກັບຄວາມເປັນສ່ວນຕົວ, ຄວາມປອດໄພ ແລະ ການເກັບກຳຂໍ້ມູນ, ກະລຸນາເບິ່ງ <ph name="BEGIN_LINK" />ການຊິ້ງຂໍ້ມູນ ແລະ ການບໍລິການຂອງ Google<ph name="END_LINK" />.</translation>
 <translation id="5724941645893276623">ເພື່ອທ່ອງເວັບແບບເປັນສ່ວນຕົວ, ກະລຸນາເພີ່ມແຖບໃໝ່</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
index 0e573614..b773b17 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">El. paštas</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783"><ph name="PRODUCT_VERSION" /> versija</translation>
+<translation id="5690398455483874150">{count,plural, =1{Dabar rodomas vienas „Chrome“ langas}one{Dabar rodomas {count} „Chrome“ langas}few{Dabar rodomi {count} „Chrome“ langai}many{Dabar rodoma {count} „Chrome“ lango}other{Dabar rodoma {count} „Chrome“ langų}}</translation>
 <translation id="5706552126692816153">Aktyvus prieš 1 d.</translation>
 <translation id="5711039611392265845">Daugiau nustatymų, susijusių su privatumu, sauga ir duomenų rinkimu, žr. skiltyje <ph name="BEGIN_LINK" />„Sinchronizavimas ir „Google“ paslaugos“<ph name="END_LINK" />.</translation>
 <translation id="5724941645893276623">Norėdami žiniatinklyje naršyti privačiai, pridėkite naują skirtuką</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_my.xtb b/ios/chrome/app/strings/resources/ios_strings_my.xtb
index 03908b2e..1800e67 100644
--- a/ios/chrome/app/strings/resources/ios_strings_my.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_my.xtb
@@ -423,6 +423,7 @@
 <translation id="5659593005791499971">အီးမေးလ်</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">ဗားရှင်း <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{ယခု Chrome ဝင်းဒိုး 1 ခုကို ပြထားသည်}other{ယခု Chrome ဝင်းဒိုး {count} ခုကို ပြထားသည်}}</translation>
 <translation id="5706552126692816153">ပြီးခဲ့သော ၁ ရက်က အသုံးပြုထားသည်</translation>
 <translation id="5711039611392265845">ပုဂ္ဂိုလ်ရေးရာ၊ လုံခြုံမှုနှင့် ဒေတာစုဆောင်းမှုတို့နှင့် ဆက်စပ်နေသည့် နောက်ထပ် ဆက်တင်များအတွက် <ph name="BEGIN_LINK" />စင့်ခ်လုပ်ခြင်းနှင့် Google ဝန်ဆောင်မှုများ<ph name="END_LINK" /> ကိုကြည့်ပါ။</translation>
 <translation id="5724941645893276623">ဝဘ်ကို သီးသန့်ကြည့်ရန် တဘ်အသစ်ဖွင့်ပါ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb
index 8eb1f29..12a3afb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">E-post</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Versjon <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Viser nå 1 Chrome-vindu}other{Viser nå {count} Chrome-vinduer}}</translation>
 <translation id="5706552126692816153">Aktiv for én dag siden</translation>
 <translation id="5711039611392265845">Se <ph name="BEGIN_LINK" />Synkronisering og Google-tjenester<ph name="END_LINK" /> for flere innstillinger knyttet til personvern, sikkerhet og datainnsamling.</translation>
 <translation id="5724941645893276623">For å surfe privat på nettet, legg til en ny fane</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index 0a2e294b..49f0b31b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -422,6 +422,7 @@
 <translation id="5659593005791499971">E-mail</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Wersja <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Pokazuję 1 okno Chrome}few{Pokazuję {count} okna Chrome}many{Pokazuję {count} okien Chrome}other{Pokazuję {count} okna Chrome}}</translation>
 <translation id="5706552126692816153">Aktywność 1 dzień temu</translation>
 <translation id="5711039611392265845">Więcej ustawień związanych z prywatnością, bezpieczeństwem i zbieraniem danych znajdziesz w sekcji <ph name="BEGIN_LINK" />Synchronizacja i usługi Google<ph name="END_LINK" />.</translation>
 <translation id="5724941645893276623">Aby przeglądać strony internetowe prywatnie, dodaj nową kartę</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
index 6652416..eb97fcb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">Adresă de e-mail</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Versiunea <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Se afișează o fereastră Chrome}few{Se afișează {count} ferestre Chrome}other{Se afișează {count} de ferestre Chrome}}</translation>
 <translation id="5706552126692816153">Activ acum o zi</translation>
 <translation id="5711039611392265845">Pentru mai multe setări privind confidențialitatea, securitatea și colectarea datelor, consultă <ph name="BEGIN_LINK" />Sincronizarea și serviciile Google<ph name="END_LINK" /></translation>
 <translation id="5724941645893276623">Pentru a răsfoi în privat pe web, adaugă o filă nouă</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
index 702cd79..d3cbec4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">E-pošta</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Različica <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Prikaz 1 Chromovega okna}one{Prikaz {count} Chromovega okna}two{Prikaz {count} Chromovih oken}few{Prikaz {count} Chromovih oken}other{Prikaz {count} Chromovih oken}}</translation>
 <translation id="5706552126692816153">Aktivna pred 1 dnevom</translation>
 <translation id="5711039611392265845">Če vas zanima več nastavitev, povezanih z zasebnostjo, varnostjo in zbiranjem podatkov, si oglejte razdelek <ph name="BEGIN_LINK" />Sinhronizacija in Googlove storitve<ph name="END_LINK" /></translation>
 <translation id="5724941645893276623">Če želite zasebno brskati po spletu, dodajte nov zavihek</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
index 2c9db78..a2225a6c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr-Latn.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">Imejl</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Verzija <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Sada se prikazuje 1 Chrome prozor}one{Sada se prikazuje {count} Chrome prozor}few{Sada se prikazuju {count} Chrome prozora}other{Sada se prikazuje {count} Chrome prozora}}</translation>
 <translation id="5706552126692816153">Poslednja aktivnost: pre 1 dan</translation>
 <translation id="5711039611392265845">Više podešavanja u vezi sa privatnošću, bezbednošću i prikupljanjem podataka potražite u odeljku <ph name="BEGIN_LINK" />Sinhronizacija i Google usluge<ph name="END_LINK" />.</translation>
 <translation id="5724941645893276623">Da biste privatno pregledali veb, dodajte novu karticu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index 64a2f01..6aa0ad8 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">Имејл</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">Верзија <ph name="PRODUCT_VERSION" /></translation>
+<translation id="5690398455483874150">{count,plural, =1{Сада се приказује 1 Chrome прозор}one{Сада се приказује {count} Chrome прозор}few{Сада се приказују {count} Chrome прозора}other{Сада се приказује {count} Chrome прозора}}</translation>
 <translation id="5706552126692816153">Последња активност: пре 1 дан</translation>
 <translation id="5711039611392265845">Више подешавања у вези са приватношћу, безбедношћу и прикупљањем података потражите у одељку <ph name="BEGIN_LINK" />Синхронизација и Google услуге<ph name="END_LINK" />.</translation>
 <translation id="5724941645893276623">Да бисте приватно прегледали веб, додајте нову картицу</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb
index 1b3edfb..e4bad736 100644
--- a/ios/chrome/app/strings/resources/ios_strings_te.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -424,6 +424,7 @@
 <translation id="5659593005791499971">ఇమెయిల్</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783"><ph name="PRODUCT_VERSION" /> వెర్షన్</translation>
+<translation id="5690398455483874150">{count,plural, =1{ఇప్పుడు 1 Chrome విండో చూపబడుతుంది}other{ఇప్పుడు {count} Chrome విండోలు చూపబడుతున్నాయి}}</translation>
 <translation id="5706552126692816153">1 రోజు క్రితం యాక్టివ్‌గా ఉంది</translation>
 <translation id="5711039611392265845">గోప్యత, భద్రత, డేటా సేకరణకు సంబంధించిన మరిన్ని సెట్టింగ్‌ల కోసం, <ph name="BEGIN_LINK" />సింక్ మరియు Google సేవలు<ph name="END_LINK" /> చూడండి.</translation>
 <translation id="5724941645893276623">వెబ్‌ను ప్రైవేట్‌గా బ్రౌజ్ చేయడానికి, కొత్త ట్యాబ్‌ను జోడించండి</translation>
diff --git a/ios/chrome/browser/policy/enterprise_policy_test_helper.cc b/ios/chrome/browser/policy/enterprise_policy_test_helper.cc
index 5b78dca..7fe7e1d 100644
--- a/ios/chrome/browser/policy/enterprise_policy_test_helper.cc
+++ b/ios/chrome/browser/policy/enterprise_policy_test_helper.cc
@@ -18,8 +18,10 @@
 
 EnterprisePolicyTestHelper::EnterprisePolicyTestHelper(
     const base::FilePath& state_directory_path) {
-  EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
-      .WillRepeatedly(testing::Return(true));
+  ON_CALL(policy_provider_, IsInitializationComplete(testing::_))
+      .WillByDefault(testing::Return(true));
+  ON_CALL(policy_provider_, IsFirstPolicyLoadComplete(testing::_))
+      .WillByDefault(testing::Return(true));
 
   // Create a BrowserPolicyConnectorIOS, install the mock policy
   // provider, and hook up Local State.
diff --git a/ios/chrome/browser/policy/test_platform_policy_provider.cc b/ios/chrome/browser/policy/test_platform_policy_provider.cc
index 8a61df4..e33dd72 100644
--- a/ios/chrome/browser/policy/test_platform_policy_provider.cc
+++ b/ios/chrome/browser/policy/test_platform_policy_provider.cc
@@ -9,7 +9,9 @@
 policy::MockConfigurationPolicyProvider* GetTestPlatformPolicyProvider() {
   static base::NoDestructor<policy::MockConfigurationPolicyProvider> provider;
   provider->SetAutoRefresh();
-  EXPECT_CALL(*provider.get(), IsInitializationComplete(testing::_))
-      .WillRepeatedly(testing::Return(true));
+  ON_CALL(*provider.get(), IsInitializationComplete(testing::_))
+      .WillByDefault(testing::Return(true));
+  ON_CALL(*provider.get(), IsFirstPolicyLoadComplete(testing::_))
+      .WillByDefault(testing::Return(true));
   return provider.get();
 }
diff --git a/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.h b/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.h
index 9a5eef6..4ac04db6 100644
--- a/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.h
+++ b/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.h
@@ -83,6 +83,14 @@
 // Records an unknown |commandID| performed by the Feed.
 - (void)recordCommandID:(int)commandID;
 
+// Records if a notice card was presented at the time the feed was initially
+// loaded. e.g. Launch time, user refreshes, and acccount switches.
+- (void)recordNoticeCardShown:(BOOL)shown;
+
+// Records the |durationInSeconds| it took to Discover feed to Fetch articles.
+- (void)recordFeedArticlesFetchDurationInSeconds:
+    (NSTimeInterval)durationInSeconds;
+
 @end
 
 #endif  // IOS_CHROME_BROWSER_UI_CONTENT_SUGGESTIONS_DISCOVER_FEED_METRICS_RECORDER_H_
diff --git a/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.mm b/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.mm
index 1201bbf4..eba4187 100644
--- a/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.mm
+++ b/ios/chrome/browser/ui/content_suggestions/discover_feed_metrics_recorder.mm
@@ -107,6 +107,14 @@
 const char kDiscoverFeedEngagementTypeHistogram[] =
     "ContentSuggestions.Feed.EngagementType";
 
+// Histogram name to capture Feed Notice card impressions.
+const char kDiscoverFeedNoticeCardFulfilled[] =
+    "ContentSuggestions.Feed.NoticeCardFulfilled2";
+
+// Histogram name to measure the time it tood the Feed to fetch articles.
+const char kDiscoverFeedArticlesFetchNetworkDuration[] =
+    "ContentSuggestions.Feed.Network.Duration";
+
 // Minimum scrolling amount to record a FeedEngagementType::kFeedEngaged due to
 // scrolling.
 const int kMinScrollThreshold = 160;
@@ -279,6 +287,16 @@
   base::UmaHistogramSparse(kDiscoverFeedUserActionCommandHistogram, commandID);
 }
 
+- (void)recordNoticeCardShown:(BOOL)shown {
+  base::UmaHistogramBoolean(kDiscoverFeedNoticeCardFulfilled, shown);
+}
+
+- (void)recordFeedArticlesFetchDurationInSeconds:
+    (NSTimeInterval)durationInSeconds {
+  UMA_HISTOGRAM_MEDIUM_TIMES(kDiscoverFeedArticlesFetchNetworkDuration,
+                             base::TimeDelta::FromSeconds(durationInSeconds));
+}
+
 #pragma mark - Private
 
 // Records histogram metrics for Discover feed user actions.
diff --git a/ios/chrome/test/data/policy/policy_test_cases.json b/ios/chrome/test/data/policy/policy_test_cases.json
index ed505e3..55d6d54 100644
--- a/ios/chrome/test/data/policy/policy_test_cases.json
+++ b/ios/chrome/test/data/policy/policy_test_cases.json
@@ -17,7 +17,7 @@
           "${pref}": {
             "value": "The value that |pref| should take on. Defaults to the value that the policy was set to.",
             "expect_default": "Whether or not the pref value should be the default one.",
-            "local_state": "Whether |pref| is registered in local state's PrefService instead of the profile's PrefService. Defaults to |false| if not specified."
+            "location": "The location where the pref is registered, possible values are ['user_profile', 'local_state']. Defaults to 'user_profile' if not specified."
           }
         }
       }
@@ -53,7 +53,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "CloudReportingEnabled": true },
-        "prefs": { "enterprise_reporting.chrome_cloud_reporting": { "local_state": true } }
+        "prefs": { "enterprise_reporting.chrome_cloud_reporting": { "location": "local_state" } }
       }
     ]
   },
@@ -65,7 +65,7 @@
         "policies": {
           "ChromeVariations": 1
         },
-        "prefs": { "variations_restrictions_by_policy": { "local_state": true } }
+        "prefs": { "variations_restrictions_by_policy": { "location": "local_state" } }
       }
     ]
   },
@@ -313,7 +313,7 @@
     "policy_pref_mapping_tests": [
       {
         "policies": { "MetricsReportingEnabled": false },
-        "prefs": { "user_experience_metrics.reporting_enabled": { "local_state": true } }
+        "prefs": { "user_experience_metrics.reporting_enabled": { "location": "local_state" } }
       }
     ]
   },
diff --git a/net/cookies/canonical_cookie.cc b/net/cookies/canonical_cookie.cc
index 5a19499..966723dd 100644
--- a/net/cookies/canonical_cookie.cc
+++ b/net/cookies/canonical_cookie.cc
@@ -552,6 +552,27 @@
   return cc;
 }
 
+// static
+CanonicalCookie CanonicalCookie::CreateUnsafeCookieForTesting(
+    const std::string& name,
+    const std::string& value,
+    const std::string& domain,
+    const std::string& path,
+    const base::Time& creation,
+    const base::Time& expiration,
+    const base::Time& last_access,
+    bool secure,
+    bool httponly,
+    CookieSameSite same_site,
+    CookiePriority priority,
+    bool same_party,
+    CookieSourceScheme source_scheme,
+    int source_port) {
+  return CanonicalCookie(name, value, domain, path, creation, expiration,
+                         last_access, secure, httponly, same_site, priority,
+                         same_party, source_scheme, source_port);
+}
+
 std::string CanonicalCookie::DomainWithoutDot() const {
   return cookie_util::CookieDomainAsHost(domain_);
 }
diff --git a/net/cookies/canonical_cookie.h b/net/cookies/canonical_cookie.h
index fcf34e77..b58db9e 100644
--- a/net/cookies/canonical_cookie.h
+++ b/net/cookies/canonical_cookie.h
@@ -145,6 +145,24 @@
       CookieSourceScheme source_scheme,
       int source_port);
 
+  // Create a CanonicalCookie that is not guaranteed to actually be Canonical
+  // for tests. This factory should NOT be used in production.
+  static CanonicalCookie CreateUnsafeCookieForTesting(
+      const std::string& name,
+      const std::string& value,
+      const std::string& domain,
+      const std::string& path,
+      const base::Time& creation,
+      const base::Time& expiration,
+      const base::Time& last_access,
+      bool secure,
+      bool httponly,
+      CookieSameSite same_site,
+      CookiePriority priority,
+      bool same_party,
+      CookieSourceScheme scheme_secure = CookieSourceScheme::kUnset,
+      int source_port = url::PORT_UNSPECIFIED);
+
   const std::string& Name() const { return name_; }
   const std::string& Value() const { return value_; }
   // We represent the cookie's host-only-flag as the absence of a leading dot in
diff --git a/net/cookies/canonical_cookie_unittest.cc b/net/cookies/canonical_cookie_unittest.cc
index 54e06b0d..a6308361 100644
--- a/net/cookies/canonical_cookie_unittest.cc
+++ b/net/cookies/canonical_cookie_unittest.cc
@@ -34,80 +34,81 @@
 TEST(CanonicalCookieTest, Constructor) {
   base::Time current_time = base::Time::Now();
 
-  std::unique_ptr<CanonicalCookie> cookie1(std::make_unique<CanonicalCookie>(
+  // CreateUnsafeCookieForTesting just forwards to the constructor.
+  auto cookie1 = CanonicalCookie::CreateUnsafeCookieForTesting(
       "A", "2", "www.example.com", "/test", current_time, base::Time(),
       base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
-      COOKIE_PRIORITY_DEFAULT, false, CookieSourceScheme::kSecure, 443));
-  EXPECT_EQ("A", cookie1->Name());
-  EXPECT_EQ("2", cookie1->Value());
-  EXPECT_EQ("www.example.com", cookie1->Domain());
-  EXPECT_EQ("/test", cookie1->Path());
-  EXPECT_FALSE(cookie1->IsSecure());
-  EXPECT_FALSE(cookie1->IsHttpOnly());
-  EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie1->SameSite());
-  EXPECT_EQ(CookiePriority::COOKIE_PRIORITY_DEFAULT, cookie1->Priority());
-  EXPECT_FALSE(cookie1->IsSameParty());
-  EXPECT_EQ(cookie1->SourceScheme(), CookieSourceScheme::kSecure);
-  EXPECT_EQ(cookie1->SourcePort(), 443);
+      COOKIE_PRIORITY_DEFAULT, false, CookieSourceScheme::kSecure, 443);
+  EXPECT_EQ("A", cookie1.Name());
+  EXPECT_EQ("2", cookie1.Value());
+  EXPECT_EQ("www.example.com", cookie1.Domain());
+  EXPECT_EQ("/test", cookie1.Path());
+  EXPECT_FALSE(cookie1.IsSecure());
+  EXPECT_FALSE(cookie1.IsHttpOnly());
+  EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie1.SameSite());
+  EXPECT_EQ(CookiePriority::COOKIE_PRIORITY_DEFAULT, cookie1.Priority());
+  EXPECT_FALSE(cookie1.IsSameParty());
+  EXPECT_EQ(cookie1.SourceScheme(), CookieSourceScheme::kSecure);
+  EXPECT_EQ(cookie1.SourcePort(), 443);
 
-  std::unique_ptr<CanonicalCookie> cookie2(std::make_unique<CanonicalCookie>(
+  auto cookie2 = CanonicalCookie::CreateUnsafeCookieForTesting(
       "A", "2", ".www.example.com", "/", current_time, base::Time(),
       base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
-      COOKIE_PRIORITY_DEFAULT, true, CookieSourceScheme::kNonSecure, 65536));
-  EXPECT_EQ("A", cookie2->Name());
-  EXPECT_EQ("2", cookie2->Value());
-  EXPECT_EQ(".www.example.com", cookie2->Domain());
-  EXPECT_EQ("/", cookie2->Path());
-  EXPECT_FALSE(cookie2->IsSecure());
-  EXPECT_FALSE(cookie2->IsHttpOnly());
-  EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie2->SameSite());
-  EXPECT_EQ(CookiePriority::COOKIE_PRIORITY_DEFAULT, cookie2->Priority());
-  EXPECT_TRUE(cookie2->IsSameParty());
-  EXPECT_EQ(cookie2->SourceScheme(), CookieSourceScheme::kNonSecure);
+      COOKIE_PRIORITY_DEFAULT, true, CookieSourceScheme::kNonSecure, 65536);
+  EXPECT_EQ("A", cookie2.Name());
+  EXPECT_EQ("2", cookie2.Value());
+  EXPECT_EQ(".www.example.com", cookie2.Domain());
+  EXPECT_EQ("/", cookie2.Path());
+  EXPECT_FALSE(cookie2.IsSecure());
+  EXPECT_FALSE(cookie2.IsHttpOnly());
+  EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie2.SameSite());
+  EXPECT_EQ(CookiePriority::COOKIE_PRIORITY_DEFAULT, cookie2.Priority());
+  EXPECT_TRUE(cookie2.IsSameParty());
+  EXPECT_EQ(cookie2.SourceScheme(), CookieSourceScheme::kNonSecure);
   // Because the port can be set explicitly in the constructor its value can be
   // independent of the other parameters. In this case, test that an invalid
   // port value is interpreted as such.
-  EXPECT_EQ(cookie2->SourcePort(), url::PORT_INVALID);
+  EXPECT_EQ(cookie2.SourcePort(), url::PORT_INVALID);
 
   // Set Secure to true but don't specify source_scheme or port.
-  auto cookie3 = std::make_unique<CanonicalCookie>(
+  auto cookie3 = CanonicalCookie::CreateUnsafeCookieForTesting(
       "A", "2", ".www.example.com", "/", current_time, base::Time(),
       base::Time(), true /* secure */, false, CookieSameSite::NO_RESTRICTION,
       COOKIE_PRIORITY_DEFAULT, false);
-  EXPECT_TRUE(cookie3->IsSecure());
-  EXPECT_EQ(cookie3->SourceScheme(), CookieSourceScheme::kUnset);
-  EXPECT_EQ(cookie3->SourcePort(), url::PORT_UNSPECIFIED);
+  EXPECT_TRUE(cookie3.IsSecure());
+  EXPECT_EQ(cookie3.SourceScheme(), CookieSourceScheme::kUnset);
+  EXPECT_EQ(cookie3.SourcePort(), url::PORT_UNSPECIFIED);
 
-  auto cookie4 = std::make_unique<CanonicalCookie>(
+  auto cookie4 = CanonicalCookie::CreateUnsafeCookieForTesting(
       "A", "2", ".www.example.com", "/test", current_time, base::Time(),
       base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
       COOKIE_PRIORITY_DEFAULT, false);
-  EXPECT_EQ("A", cookie4->Name());
-  EXPECT_EQ("2", cookie4->Value());
-  EXPECT_EQ(".www.example.com", cookie4->Domain());
-  EXPECT_EQ("/test", cookie4->Path());
-  EXPECT_FALSE(cookie4->IsSecure());
-  EXPECT_FALSE(cookie4->IsHttpOnly());
-  EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie4->SameSite());
-  EXPECT_FALSE(cookie4->IsSameParty());
-  EXPECT_EQ(cookie4->SourceScheme(), CookieSourceScheme::kUnset);
-  EXPECT_EQ(cookie4->SourcePort(), url::PORT_UNSPECIFIED);
+  EXPECT_EQ("A", cookie4.Name());
+  EXPECT_EQ("2", cookie4.Value());
+  EXPECT_EQ(".www.example.com", cookie4.Domain());
+  EXPECT_EQ("/test", cookie4.Path());
+  EXPECT_FALSE(cookie4.IsSecure());
+  EXPECT_FALSE(cookie4.IsHttpOnly());
+  EXPECT_EQ(CookieSameSite::NO_RESTRICTION, cookie4.SameSite());
+  EXPECT_FALSE(cookie4.IsSameParty());
+  EXPECT_EQ(cookie4.SourceScheme(), CookieSourceScheme::kUnset);
+  EXPECT_EQ(cookie4.SourcePort(), url::PORT_UNSPECIFIED);
 
   // Test some port edge cases: unspecified.
-  auto cookie5 = std::make_unique<CanonicalCookie>(
+  auto cookie5 = CanonicalCookie::CreateUnsafeCookieForTesting(
       "A", "2", ".www.example.com", "/", current_time, base::Time(),
       base::Time(), true /* secure */, false, CookieSameSite::NO_RESTRICTION,
       COOKIE_PRIORITY_DEFAULT, false, CookieSourceScheme::kUnset,
       url::PORT_UNSPECIFIED);
-  EXPECT_EQ(cookie5->SourcePort(), url::PORT_UNSPECIFIED);
+  EXPECT_EQ(cookie5.SourcePort(), url::PORT_UNSPECIFIED);
 
   // Test some port edge cases: invalid.
-  auto cookie6 = std::make_unique<CanonicalCookie>(
+  auto cookie6 = CanonicalCookie::CreateUnsafeCookieForTesting(
       "A", "2", ".www.example.com", "/", current_time, base::Time(),
       base::Time(), true /* secure */, false, CookieSameSite::NO_RESTRICTION,
       COOKIE_PRIORITY_DEFAULT, false, CookieSourceScheme::kUnset,
       url::PORT_INVALID);
-  EXPECT_EQ(cookie6->SourcePort(), url::PORT_INVALID);
+  EXPECT_EQ(cookie6.SourcePort(), url::PORT_INVALID);
 }
 
 TEST(CanonicalCookie, CreationCornerCases) {
@@ -415,127 +416,126 @@
   bool same_party = false;
 
   // Test that a cookie is equivalent to itself.
-  std::unique_ptr<CanonicalCookie> cookie(std::make_unique<CanonicalCookie>(
+  auto cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       cookie_name, cookie_value, cookie_domain, cookie_path, creation_time,
       expiration_time, base::Time(), secure, httponly, same_site,
-      COOKIE_PRIORITY_MEDIUM, same_party));
-  EXPECT_TRUE(cookie->IsEquivalent(*cookie));
-  EXPECT_TRUE(cookie->IsEquivalentForSecureCookieMatching(*cookie));
+      COOKIE_PRIORITY_MEDIUM, same_party);
+  EXPECT_TRUE(cookie.IsEquivalent(cookie));
+  EXPECT_TRUE(cookie.IsEquivalentForSecureCookieMatching(cookie));
 
   // Test that two identical cookies are equivalent.
-  std::unique_ptr<CanonicalCookie> other_cookie(
-      std::make_unique<CanonicalCookie>(
-          cookie_name, cookie_value, cookie_domain, cookie_path, creation_time,
-          expiration_time, base::Time(), secure, httponly, same_site,
-          COOKIE_PRIORITY_MEDIUM, same_party));
-  EXPECT_TRUE(cookie->IsEquivalent(*other_cookie));
-  EXPECT_TRUE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  auto other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
+      cookie_name, cookie_value, cookie_domain, cookie_path, creation_time,
+      expiration_time, base::Time(), secure, httponly, same_site,
+      COOKIE_PRIORITY_MEDIUM, same_party);
+  EXPECT_TRUE(cookie.IsEquivalent(other_cookie));
+  EXPECT_TRUE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 
   // Tests that use different variations of attribute values that
   // DON'T affect cookie equivalence.
-  other_cookie = std::make_unique<CanonicalCookie>(
+  other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       cookie_name, "2", cookie_domain, cookie_path, creation_time,
       expiration_time, base::Time(), secure, httponly, same_site,
       COOKIE_PRIORITY_HIGH, same_party);
-  EXPECT_TRUE(cookie->IsEquivalent(*other_cookie));
-  EXPECT_TRUE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie));
-  EXPECT_TRUE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  EXPECT_TRUE(cookie.IsEquivalent(other_cookie));
+  EXPECT_TRUE(cookie.IsEquivalentForSecureCookieMatching(other_cookie));
+  EXPECT_TRUE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 
   base::Time other_creation_time =
       creation_time + base::TimeDelta::FromMinutes(2);
-  other_cookie = std::make_unique<CanonicalCookie>(
+  other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       cookie_name, "2", cookie_domain, cookie_path, other_creation_time,
       expiration_time, base::Time(), secure, httponly, same_site,
       COOKIE_PRIORITY_MEDIUM, same_party);
-  EXPECT_TRUE(cookie->IsEquivalent(*other_cookie));
-  EXPECT_TRUE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie));
-  EXPECT_TRUE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  EXPECT_TRUE(cookie.IsEquivalent(other_cookie));
+  EXPECT_TRUE(cookie.IsEquivalentForSecureCookieMatching(other_cookie));
+  EXPECT_TRUE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 
-  other_cookie = std::make_unique<CanonicalCookie>(
+  other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       cookie_name, cookie_name, cookie_domain, cookie_path, creation_time,
       expiration_time, base::Time(), true, httponly, same_site,
       COOKIE_PRIORITY_LOW, same_party);
-  EXPECT_TRUE(cookie->IsEquivalent(*other_cookie));
-  EXPECT_TRUE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie));
-  EXPECT_TRUE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  EXPECT_TRUE(cookie.IsEquivalent(other_cookie));
+  EXPECT_TRUE(cookie.IsEquivalentForSecureCookieMatching(other_cookie));
+  EXPECT_TRUE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 
-  other_cookie = std::make_unique<CanonicalCookie>(
+  other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       cookie_name, cookie_name, cookie_domain, cookie_path, creation_time,
       expiration_time, base::Time(), secure, true, same_site,
       COOKIE_PRIORITY_LOW, same_party);
-  EXPECT_TRUE(cookie->IsEquivalent(*other_cookie));
-  EXPECT_TRUE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie));
-  EXPECT_TRUE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  EXPECT_TRUE(cookie.IsEquivalent(other_cookie));
+  EXPECT_TRUE(cookie.IsEquivalentForSecureCookieMatching(other_cookie));
+  EXPECT_TRUE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 
-  other_cookie = std::make_unique<CanonicalCookie>(
+  other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       cookie_name, cookie_name, cookie_domain, cookie_path, creation_time,
       expiration_time, base::Time(), secure, httponly,
       CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_LOW, same_party);
-  EXPECT_TRUE(cookie->IsEquivalent(*other_cookie));
-  EXPECT_TRUE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie));
-  EXPECT_TRUE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  EXPECT_TRUE(cookie.IsEquivalent(other_cookie));
+  EXPECT_TRUE(cookie.IsEquivalentForSecureCookieMatching(other_cookie));
+  EXPECT_TRUE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 
   // Cookies whose names mismatch are not equivalent.
-  other_cookie = std::make_unique<CanonicalCookie>(
+  other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       "B", cookie_value, cookie_domain, cookie_path, creation_time,
       expiration_time, base::Time(), secure, httponly, same_site,
       COOKIE_PRIORITY_MEDIUM, same_party);
-  EXPECT_FALSE(cookie->IsEquivalent(*other_cookie));
-  EXPECT_FALSE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie));
-  EXPECT_FALSE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  EXPECT_FALSE(cookie.IsEquivalent(other_cookie));
+  EXPECT_FALSE(cookie.IsEquivalentForSecureCookieMatching(other_cookie));
+  EXPECT_FALSE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 
   // A domain cookie at 'www.example.com' is not equivalent to a host cookie
   // at the same domain. These are, however, equivalent according to the laxer
   // rules of 'IsEquivalentForSecureCookieMatching'.
-  other_cookie = std::make_unique<CanonicalCookie>(
+  other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       cookie_name, cookie_value, "www.example.com", cookie_path, creation_time,
       expiration_time, base::Time(), secure, httponly, same_site,
       COOKIE_PRIORITY_MEDIUM, same_party);
-  EXPECT_TRUE(cookie->IsDomainCookie());
-  EXPECT_FALSE(other_cookie->IsDomainCookie());
-  EXPECT_FALSE(cookie->IsEquivalent(*other_cookie));
-  EXPECT_TRUE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie));
-  EXPECT_TRUE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  EXPECT_TRUE(cookie.IsDomainCookie());
+  EXPECT_FALSE(other_cookie.IsDomainCookie());
+  EXPECT_FALSE(cookie.IsEquivalent(other_cookie));
+  EXPECT_TRUE(cookie.IsEquivalentForSecureCookieMatching(other_cookie));
+  EXPECT_TRUE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 
   // Likewise, a cookie on 'example.com' is not equivalent to a cookie on
   // 'www.example.com', but they are equivalent for secure cookie matching.
-  other_cookie = std::make_unique<CanonicalCookie>(
+  other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       cookie_name, cookie_value, ".example.com", cookie_path, creation_time,
       expiration_time, base::Time(), secure, httponly, same_site,
       COOKIE_PRIORITY_MEDIUM, same_party);
-  EXPECT_FALSE(cookie->IsEquivalent(*other_cookie));
-  EXPECT_TRUE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie));
-  EXPECT_TRUE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  EXPECT_FALSE(cookie.IsEquivalent(other_cookie));
+  EXPECT_TRUE(cookie.IsEquivalentForSecureCookieMatching(other_cookie));
+  EXPECT_TRUE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 
   // Paths are a bit more complicated. 'IsEquivalent' requires an exact path
   // match, while secure cookie matching uses a more relaxed 'IsOnPath' check.
   // That is, |cookie| set on '/path' is not equivalent in either way to
   // |other_cookie| set on '/test' or '/path/subpath'. It is, however,
   // equivalent for secure cookie matching to |other_cookie| set on '/'.
-  other_cookie = std::make_unique<CanonicalCookie>(
+  other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       cookie_name, cookie_value, cookie_domain, "/test", creation_time,
       expiration_time, base::Time(), secure, httponly, same_site,
       COOKIE_PRIORITY_MEDIUM, same_party);
-  EXPECT_FALSE(cookie->IsEquivalent(*other_cookie));
-  EXPECT_FALSE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie));
-  EXPECT_FALSE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  EXPECT_FALSE(cookie.IsEquivalent(other_cookie));
+  EXPECT_FALSE(cookie.IsEquivalentForSecureCookieMatching(other_cookie));
+  EXPECT_FALSE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 
-  other_cookie = std::make_unique<CanonicalCookie>(
+  other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       cookie_name, cookie_value, cookie_domain, cookie_path + "/subpath",
       creation_time, expiration_time, base::Time(), secure, httponly, same_site,
       COOKIE_PRIORITY_MEDIUM, same_party);
-  EXPECT_FALSE(cookie->IsEquivalent(*other_cookie));
+  EXPECT_FALSE(cookie.IsEquivalent(other_cookie));
   // The path comparison is asymmetric
-  EXPECT_FALSE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie));
-  EXPECT_TRUE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  EXPECT_FALSE(cookie.IsEquivalentForSecureCookieMatching(other_cookie));
+  EXPECT_TRUE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 
-  other_cookie = std::make_unique<CanonicalCookie>(
+  other_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
       cookie_name, cookie_value, cookie_domain, "/", creation_time,
       expiration_time, base::Time(), secure, httponly, same_site,
       COOKIE_PRIORITY_MEDIUM, same_party);
-  EXPECT_FALSE(cookie->IsEquivalent(*other_cookie));
-  EXPECT_TRUE(cookie->IsEquivalentForSecureCookieMatching(*other_cookie));
-  EXPECT_FALSE(other_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+  EXPECT_FALSE(cookie.IsEquivalent(other_cookie));
+  EXPECT_TRUE(cookie.IsEquivalentForSecureCookieMatching(other_cookie));
+  EXPECT_FALSE(other_cookie.IsEquivalentForSecureCookieMatching(cookie));
 }
 
 TEST(CanonicalCookieTest, IsEquivalentForSecureCookieMatching) {
@@ -571,20 +571,20 @@
   };
 
   for (auto test : kTests) {
-    auto cookie = std::make_unique<CanonicalCookie>(
+    auto cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
         test.cookie.name, "value1", test.cookie.domain, test.cookie.path,
         base::Time(), base::Time(), base::Time(), false /* secure */, false,
         CookieSameSite::LAX_MODE, COOKIE_PRIORITY_MEDIUM, false);
-    auto secure_cookie = std::make_unique<CanonicalCookie>(
+    auto secure_cookie = CanonicalCookie::CreateUnsafeCookieForTesting(
         test.secure_cookie.name, "value2", test.secure_cookie.domain,
         test.secure_cookie.path, base::Time(), base::Time(), base::Time(),
         true /* secure */, false, CookieSameSite::LAX_MODE,
         COOKIE_PRIORITY_MEDIUM, false);
 
     EXPECT_EQ(test.equivalent,
-              cookie->IsEquivalentForSecureCookieMatching(*secure_cookie));
+              cookie.IsEquivalentForSecureCookieMatching(secure_cookie));
     EXPECT_EQ(test.equivalent == test.is_symmetric,
-              secure_cookie->IsEquivalentForSecureCookieMatching(*cookie));
+              secure_cookie.IsEquivalentForSecureCookieMatching(cookie));
   }
 }
 
@@ -1433,7 +1433,7 @@
   // Test IncludeForRequestURL()
   // Note: This is a cookie that should never exist normally, because Create()
   // would weed it out.
-  CanonicalCookie cookie1 = CanonicalCookie(
+  CanonicalCookie cookie1 = CanonicalCookie::CreateUnsafeCookieForTesting(
       "name", "value", "other-domain.com", "/bar", creation_time, base::Time(),
       base::Time(), true /* secure */, true /* httponly */,
       CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_DEFAULT, false);
@@ -1632,277 +1632,277 @@
 
 TEST(CanonicalCookieTest, IsCanonical) {
   // Base correct template.
-  EXPECT_TRUE(CanonicalCookie("A", "B", "x.y", "/path", base::Time(),
-                              base::Time(), base::Time(), false, false,
-                              CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, false)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "A", "B", "x.y", "/path", base::Time(), base::Time(),
+                  base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                  COOKIE_PRIORITY_LOW, false)
                   .IsCanonical());
 
   // Newline in name.
-  EXPECT_FALSE(CanonicalCookie("A\n", "B", "x.y", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A\n", "B", "x.y", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Carriage return in name.
-  EXPECT_FALSE(CanonicalCookie("A\r", "B", "x.y", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A\r", "B", "x.y", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Null character in name.
-  EXPECT_FALSE(CanonicalCookie(std::string("A\0Z", 3), "B", "x.y", "/path",
-                               base::Time(), base::Time(), base::Time(), false,
-                               false, CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   std::string("A\0Z", 3), "B", "x.y", "/path", base::Time(),
+                   base::Time(), base::Time(), false, false,
+                   CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Name begins with whitespace.
-  EXPECT_FALSE(CanonicalCookie(" A", "B", "x.y", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   " A", "B", "x.y", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Name ends with whitespace.
-  EXPECT_FALSE(CanonicalCookie("A ", "B", "x.y", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A ", "B", "x.y", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Empty name.  (Note this is against the spec but compatible with other
   // browsers.)
-  EXPECT_TRUE(CanonicalCookie("", "B", "x.y", "/path", base::Time(),
-                              base::Time(), base::Time(), false, false,
-                              CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, false)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "", "B", "x.y", "/path", base::Time(), base::Time(),
+                  base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                  COOKIE_PRIORITY_LOW, false)
                   .IsCanonical());
 
   // Space in name
-  EXPECT_TRUE(CanonicalCookie("A C", "B", "x.y", "/path", base::Time(),
-                              base::Time(), base::Time(), false, false,
-                              CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, false)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "A C", "B", "x.y", "/path", base::Time(), base::Time(),
+                  base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                  COOKIE_PRIORITY_LOW, false)
                   .IsCanonical());
 
   // Extra space suffixing name.
-  EXPECT_FALSE(CanonicalCookie("A ", "B", "x.y", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A ", "B", "x.y", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // '=' character in name.
-  EXPECT_FALSE(CanonicalCookie("A=", "B", "x.y", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A=", "B", "x.y", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Separator in name.
-  EXPECT_FALSE(CanonicalCookie("A;", "B", "x.y", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A;", "B", "x.y", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // '=' character in value.
-  EXPECT_TRUE(CanonicalCookie("A", "B=", "x.y", "/path", base::Time(),
-                              base::Time(), base::Time(), false, false,
-                              CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, false)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "A", "B=", "x.y", "/path", base::Time(), base::Time(),
+                  base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                  COOKIE_PRIORITY_LOW, false)
                   .IsCanonical());
 
   // Separator in value.
-  EXPECT_FALSE(CanonicalCookie("A", "B;", "x.y", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B;", "x.y", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Separator in domain.
-  EXPECT_FALSE(CanonicalCookie("A", "B", ";x.y", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B", ";x.y", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Garbage in domain.
-  EXPECT_FALSE(CanonicalCookie("A", "B", "@:&", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B", "@:&", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Space in domain.
-  EXPECT_FALSE(CanonicalCookie("A", "B", "x.y ", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B", "x.y ", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Empty domain.  (This is against cookie spec, but needed for Chrome's
   // out-of-spec use of cookies for extensions; see http://crbug.com/730633.
-  EXPECT_TRUE(CanonicalCookie("A", "B", "", "/path", base::Time(), base::Time(),
-                              base::Time(), false, false,
-                              CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, false)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "A", "B", "", "/path", base::Time(), base::Time(),
+                  base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                  COOKIE_PRIORITY_LOW, false)
                   .IsCanonical());
 
   // Path does not start with a "/".
-  EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B", "x.y", "path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Empty path.
-  EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "", base::Time(), base::Time(),
-                               base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B", "x.y", "", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Simple IPv4 address as domain.
-  EXPECT_TRUE(CanonicalCookie("A", "B", "1.2.3.4", "/path", base::Time(),
-                              base::Time(), base::Time(), false, false,
-                              CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, false)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "A", "B", "1.2.3.4", "/path", base::Time(), base::Time(),
+                  base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                  COOKIE_PRIORITY_LOW, false)
                   .IsCanonical());
 
   // NOn-canonical IPv4 address as domain.
-  EXPECT_FALSE(CanonicalCookie("A", "B", "01.2.03.4", "/path", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B", "01.2.03.4", "/path", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Null IPv6 address as domain.
-  EXPECT_TRUE(CanonicalCookie("A", "B", "[::]", "/path", base::Time(),
-                              base::Time(), base::Time(), false, false,
-                              CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, false)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "A", "B", "[::]", "/path", base::Time(), base::Time(),
+                  base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                  COOKIE_PRIORITY_LOW, false)
                   .IsCanonical());
 
   // Localhost IPv6 address as domain.
-  EXPECT_TRUE(CanonicalCookie("A", "B", "[::1]", "/path", base::Time(),
-                              base::Time(), base::Time(), false, false,
-                              CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, false)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "A", "B", "[::1]", "/path", base::Time(), base::Time(),
+                  base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                  COOKIE_PRIORITY_LOW, false)
                   .IsCanonical());
 
   // Fully speced IPv6 address as domain.
-  EXPECT_FALSE(
-      CanonicalCookie("A", "B", "[2001:0DB8:AC10:FE01:0000:0000:0000:0000]",
-                      "/path", base::Time(), base::Time(), base::Time(), false,
-                      false, CookieSameSite::NO_RESTRICTION,
-                      COOKIE_PRIORITY_LOW, false)
-          .IsCanonical());
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B", "[2001:0DB8:AC10:FE01:0000:0000:0000:0000]",
+                   "/path", base::Time(), base::Time(), base::Time(), false,
+                   false, CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_LOW,
+                   false)
+                   .IsCanonical());
 
   // Zero abbreviated IPv6 address as domain.  Not canonical because of leading
   // zeros & uppercase hex letters.
-  EXPECT_FALSE(CanonicalCookie("A", "B", "[2001:0DB8:AC10:FE01::]", "/path",
-                               base::Time(), base::Time(), base::Time(), false,
-                               false, CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B", "[2001:0DB8:AC10:FE01::]", "/path", base::Time(),
+                   base::Time(), base::Time(), false, false,
+                   CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Zero prefixes removed IPv6 address as domain.  Not canoncial because of
   // uppercase hex letters.
-  EXPECT_FALSE(CanonicalCookie("A", "B", "[2001:DB8:AC10:FE01::]", "/path",
-                               base::Time(), base::Time(), base::Time(), false,
-                               false, CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B", "[2001:DB8:AC10:FE01::]", "/path", base::Time(),
+                   base::Time(), base::Time(), false, false,
+                   CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Lowercased hex IPv6 address as domain.
-  EXPECT_TRUE(CanonicalCookie("A", "B", "[2001:db8:ac10:fe01::]", "/path",
-                              base::Time(), base::Time(), base::Time(), false,
-                              false, CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, false)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "A", "B", "[2001:db8:ac10:fe01::]", "/path", base::Time(),
+                  base::Time(), base::Time(), false, false,
+                  CookieSameSite::NO_RESTRICTION, COOKIE_PRIORITY_LOW, false)
                   .IsCanonical());
 
   // Properly formatted host cookie.
-  EXPECT_TRUE(CanonicalCookie("__Host-A", "B", "x.y", "/", base::Time(),
-                              base::Time(), base::Time(), true, false,
-                              CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, false)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "__Host-A", "B", "x.y", "/", base::Time(), base::Time(),
+                  base::Time(), true, false, CookieSameSite::NO_RESTRICTION,
+                  COOKIE_PRIORITY_LOW, false)
                   .IsCanonical());
 
   // Insecure host cookie.
-  EXPECT_FALSE(CanonicalCookie("__Host-A", "B", "x.y", "/", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "__Host-A", "B", "x.y", "/", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Host cookie with non-null path.
-  EXPECT_FALSE(CanonicalCookie("__Host-A", "B", "x.y", "/path", base::Time(),
-                               base::Time(), base::Time(), true, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "__Host-A", "B", "x.y", "/path", base::Time(), base::Time(),
+                   base::Time(), true, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Host cookie with empty domain.
-  EXPECT_FALSE(CanonicalCookie("__Host-A", "B", "", "/", base::Time(),
-                               base::Time(), base::Time(), true, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "__Host-A", "B", "", "/", base::Time(), base::Time(),
+                   base::Time(), true, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Host cookie with period prefixed domain.
-  EXPECT_FALSE(CanonicalCookie("__Host-A", "B", ".x.y", "/", base::Time(),
-                               base::Time(), base::Time(), true, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "__Host-A", "B", ".x.y", "/", base::Time(), base::Time(),
+                   base::Time(), true, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // Properly formatted secure cookie.
-  EXPECT_TRUE(CanonicalCookie("__Secure-A", "B", "x.y", "/", base::Time(),
-                              base::Time(), base::Time(), true, false,
-                              CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, false)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "__Secure-A", "B", "x.y", "/", base::Time(), base::Time(),
+                  base::Time(), true, false, CookieSameSite::NO_RESTRICTION,
+                  COOKIE_PRIORITY_LOW, false)
                   .IsCanonical());
 
   // Insecure secure cookie.
-  EXPECT_FALSE(CanonicalCookie("__Secure-A", "B", "x.y", "/", base::Time(),
-                               base::Time(), base::Time(), false, false,
-                               CookieSameSite::NO_RESTRICTION,
-                               COOKIE_PRIORITY_LOW, false)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "__Secure-A", "B", "x.y", "/", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::NO_RESTRICTION,
+                   COOKIE_PRIORITY_LOW, false)
                    .IsCanonical());
 
   // SameParty attribute used correctly (with Secure and non-Strict SameSite).
-  EXPECT_TRUE(CanonicalCookie("A", "B", "x.y", "/", base::Time(), base::Time(),
-                              base::Time(), true, false,
-                              CookieSameSite::NO_RESTRICTION,
-                              COOKIE_PRIORITY_LOW, true)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "A", "B", "x.y", "/", base::Time(), base::Time(),
+                  base::Time(), true, false, CookieSameSite::NO_RESTRICTION,
+                  COOKIE_PRIORITY_LOW, true)
                   .IsCanonical());
-  EXPECT_TRUE(CanonicalCookie("A", "B", "x.y", "/", base::Time(), base::Time(),
-                              base::Time(), true, false,
-                              CookieSameSite::UNSPECIFIED, COOKIE_PRIORITY_LOW,
-                              true)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "A", "B", "x.y", "/", base::Time(), base::Time(),
+                  base::Time(), true, false, CookieSameSite::UNSPECIFIED,
+                  COOKIE_PRIORITY_LOW, true)
                   .IsCanonical());
-  EXPECT_TRUE(CanonicalCookie("A", "B", "x.y", "/", base::Time(), base::Time(),
-                              base::Time(), true, false,
-                              CookieSameSite::LAX_MODE, COOKIE_PRIORITY_LOW,
-                              true)
+  EXPECT_TRUE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                  "A", "B", "x.y", "/", base::Time(), base::Time(),
+                  base::Time(), true, false, CookieSameSite::LAX_MODE,
+                  COOKIE_PRIORITY_LOW, true)
                   .IsCanonical());
 
   // SameParty without Secure is not canonical.
-  EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "/", base::Time(), base::Time(),
-                               base::Time(), false, false,
-                               CookieSameSite::LAX_MODE, COOKIE_PRIORITY_LOW,
-                               true)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B", "x.y", "/", base::Time(), base::Time(),
+                   base::Time(), false, false, CookieSameSite::LAX_MODE,
+                   COOKIE_PRIORITY_LOW, true)
                    .IsCanonical());
 
   // SameParty with SameSite=Strict is not canonical.
-  EXPECT_FALSE(CanonicalCookie("A", "B", "x.y", "/", base::Time(), base::Time(),
-                               base::Time(), true, false,
-                               CookieSameSite::STRICT_MODE, COOKIE_PRIORITY_LOW,
-                               true)
+  EXPECT_FALSE(CanonicalCookie::CreateUnsafeCookieForTesting(
+                   "A", "B", "x.y", "/", base::Time(), base::Time(),
+                   base::Time(), true, false, CookieSameSite::STRICT_MODE,
+                   COOKIE_PRIORITY_LOW, true)
                    .IsCanonical());
 }
 
diff --git a/net/quic/quic_connection_logger.cc b/net/quic/quic_connection_logger.cc
index 193c705..3a2fbc1 100644
--- a/net/quic/quic_connection_logger.cc
+++ b/net/quic/quic_connection_logger.cc
@@ -230,18 +230,6 @@
                              sent_time);
 }
 
-void QuicConnectionLogger::OnPacketSent(
-    const quic::SerializedPacket& serialized_packet,
-    quic::TransmissionType transmission_type,
-    quic::QuicTime sent_time) {
-  OnPacketSent(serialized_packet.packet_number,
-               serialized_packet.encrypted_length,
-               serialized_packet.has_crypto_handshake != quic::NOT_HANDSHAKE,
-               transmission_type, serialized_packet.encryption_level,
-               serialized_packet.retransmittable_frames,
-               serialized_packet.nonretransmittable_frames, sent_time);
-}
-
 void QuicConnectionLogger::OnPacketLoss(
     quic::QuicPacketNumber lost_packet_number,
     quic::EncryptionLevel encryption_level,
diff --git a/net/quic/quic_connection_logger.h b/net/quic/quic_connection_logger.h
index 2909f04..8234979 100644
--- a/net/quic/quic_connection_logger.h
+++ b/net/quic/quic_connection_logger.h
@@ -47,9 +47,6 @@
   void OnStreamFrameCoalesced(const quic::QuicStreamFrame& frame) override;
 
   // quic::QuicConnectionDebugVisitor Interface
-  void OnPacketSent(const quic::SerializedPacket& serialized_packet,
-                    quic::TransmissionType transmission_type,
-                    quic::QuicTime sent_time) override;
   void OnPacketSent(quic::QuicPacketNumber packet_number,
                     quic::QuicPacketLength packet_length,
                     bool has_crypto_handshake,
diff --git a/net/quic/quic_event_logger.cc b/net/quic/quic_event_logger.cc
index 51f71762..a37a691 100644
--- a/net/quic/quic_event_logger.cc
+++ b/net/quic/quic_event_logger.cc
@@ -563,18 +563,6 @@
   });
 }
 
-void QuicEventLogger::OnPacketSent(
-    const quic::SerializedPacket& serialized_packet,
-    quic::TransmissionType transmission_type,
-    quic::QuicTime sent_time) {
-  OnPacketSent(serialized_packet.packet_number,
-               serialized_packet.encrypted_length,
-               serialized_packet.has_crypto_handshake != quic::NOT_HANDSHAKE,
-               transmission_type, serialized_packet.encryption_level,
-               serialized_packet.retransmittable_frames,
-               serialized_packet.nonretransmittable_frames, sent_time);
-}
-
 void QuicEventLogger::OnIncomingAck(
     quic::QuicPacketNumber ack_packet_number,
     quic::EncryptionLevel /*ack_decrypted_level*/,
diff --git a/net/quic/quic_event_logger.h b/net/quic/quic_event_logger.h
index 6f4c4f8..a326b5e 100644
--- a/net/quic/quic_event_logger.h
+++ b/net/quic/quic_event_logger.h
@@ -29,9 +29,6 @@
   void OnStreamFrameCoalesced(const quic::QuicStreamFrame& frame) override;
 
   // quic::QuicConnectionDebugVisitor Interface
-  void OnPacketSent(const quic::SerializedPacket& serialized_packet,
-                    quic::TransmissionType transmission_type,
-                    quic::QuicTime sent_time) override;
   void OnPacketSent(quic::QuicPacketNumber packet_number,
                     quic::QuicPacketLength packet_length,
                     bool has_crypto_handshake,
diff --git a/net/reporting/README.md b/net/reporting/README.md
index 4d14951..49b07293 100644
--- a/net/reporting/README.md
+++ b/net/reporting/README.md
@@ -81,7 +81,7 @@
     * It queues reports via the `NetworkContext` using a
       `blink::mojom::ReportingServiceProxy` (implemented [in
       `//content/browser/net/`][2]), which can queue Intervention, Deprecation,
-      CSP Violation, and Feature Policy Violation reports.
+      CSP Violation, and Permissions Policy Violation reports.
 
 * The `ChromeNetworkDelegate` [in `//chrome/browser/net/`][3] checks permissions
   for queueing reports and setting/using clients based on whether cookie access
diff --git a/services/proxy_resolver/BUILD.gn b/services/proxy_resolver/BUILD.gn
index 7f46d58..0fb7da2f 100644
--- a/services/proxy_resolver/BUILD.gn
+++ b/services/proxy_resolver/BUILD.gn
@@ -30,7 +30,6 @@
     "//base",
     "//gin",
     "//mojo/public/cpp/bindings",
-    "//services/service_manager",
     "//url",
     "//v8",
   ]
diff --git a/third_party/android_build_tools/bundletool/README.chromium b/third_party/android_build_tools/bundletool/README.chromium
index b50bf12c..cc0241db 100644
--- a/third_party/android_build_tools/bundletool/README.chromium
+++ b/third_party/android_build_tools/bundletool/README.chromium
@@ -1,6 +1,6 @@
 Name: Android SDK bundletool
 Short Name:  bundletool
-Version: 1.2.0
+Version: 1.4.0
 License: Apache Version 2.0
 License File: NOT_SHIPPED
 Security Critical: No
diff --git a/third_party/android_build_tools/bundletool/cipd.yaml b/third_party/android_build_tools/bundletool/cipd.yaml
index a59d7ee..0b69dda2 100644
--- a/third_party/android_build_tools/bundletool/cipd.yaml
+++ b/third_party/android_build_tools/bundletool/cipd.yaml
@@ -10,4 +10,4 @@
 # swarming isolation works properly with symlinks.
 install_mode: copy
 data:
-  - file: bundletool-all-1.2.0.jar
+  - file: bundletool-all-1.4.0.jar
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.h b/third_party/blink/renderer/core/execution_context/execution_context.h
index 373d4c45..e58b0015 100644
--- a/third_party/blink/renderer/core/execution_context/execution_context.h
+++ b/third_party/blink/renderer/core/execution_context/execution_context.h
@@ -37,6 +37,7 @@
 #include "services/network/public/mojom/ip_address_space.mojom-blink-forward.h"
 #include "services/network/public/mojom/referrer_policy.mojom-blink-forward.h"
 #include "third_party/blink/public/common/tokens/tokens.h"
+#include "third_party/blink/public/common/user_agent/user_agent_metadata.h"
 #include "third_party/blink/public/mojom/devtools/inspector_issue.mojom-blink-forward.h"
 #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom-blink-forward.h"
 #include "third_party/blink/public/mojom/feature_policy/feature_policy_feature.mojom-blink-forward.h"
@@ -186,6 +187,9 @@
   virtual KURL CompleteURL(const String& url) const = 0;
   virtual void DisableEval(const String& error_message) = 0;
   virtual String UserAgent() const = 0;
+  virtual UserAgentMetadata GetUserAgentMetadata() const {
+    return UserAgentMetadata();
+  }
 
   virtual HttpsState GetHttpsState() const = 0;
 
diff --git a/third_party/blink/renderer/core/execution_context/navigator_base.h b/third_party/blink/renderer/core/execution_context/navigator_base.h
index d1bfd169..4bc9c2e 100644
--- a/third_party/blink/renderer/core/execution_context/navigator_base.h
+++ b/third_party/blink/renderer/core/execution_context/navigator_base.h
@@ -49,6 +49,12 @@
   explicit NavigatorBase(ExecutionContext* context)
       : NavigatorLanguage(context), ExecutionContextClient(context) {}
 
+  // NavigatorID override
+  String userAgent() const override {
+    return GetExecutionContext() ? GetExecutionContext()->UserAgent()
+                                 : String();
+  }
+
   void Trace(Visitor* visitor) const override {
     ScriptWrappable::Trace(visitor);
     NavigatorLanguage::Trace(visitor);
@@ -60,6 +66,11 @@
   ExecutionContext* GetUAExecutionContext() const override {
     return GetExecutionContext();
   }
+
+  UserAgentMetadata GetUserAgentMetadata() const override {
+    return GetExecutionContext() ? GetExecutionContext()->GetUserAgentMetadata()
+                                 : blink::UserAgentMetadata();
+  }
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/feature_policy/README.md b/third_party/blink/renderer/core/feature_policy/README.md
index c35a27c..11ea7a13 100644
--- a/third_party/blink/renderer/core/feature_policy/README.md
+++ b/third_party/blink/renderer/core/feature_policy/README.md
@@ -1,21 +1,23 @@
-This directory contains the renderer-specific portions of the [Feature
-Policy API](https://wicg.github.io/feature-policy/).
+This directory contains the renderer-specific portions of the
+ [Permissions Policy API](https://w3c.github.io/webappsec-permissions-policy/),
+ and [Document Policy API](https://github.com/w3c/webappsec-permissions-policy/blob/master/document-policy-explainer.md).
 
 This includes:
 
-* The parser for the HTTP Feature-Policy header and the iframe allow attribute.
+* The parser for the HTTP `Permissions-Policy`/`Feature-Policy` header and the iframe `allow` attribute.
+
+* The parser for the HTTP `Document-Policy` header and the iframe `policy` attribute.
 
 * Helpers for manipulating the parsed declarations.
 
-* Implementation of the `document.policy` and `iframe.policy` interfaces.
+* Implementation of the `document.featurePolicy` and `iframe.featurePolicy` interfaces.
 
 
-## Other feature policy resources
+## Other policy resources
 
-* The core feature policy algorithms can be found in `/common/feature\_policy/`.
+* The core algorithms can be found in `/common/feature\_policy/`.
 
 * The feature list enum is found in `/public/mojom/feature\_policy/`.
 
 * The recommended API for checking whether features should be enabled or not is
-Document::IsFeatureEnabled() (or SecurityContext::IsFeatureEnabled in a non-
-document context).
+ExecutionContext::IsFeatureEnabled().
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.cc b/third_party/blink/renderer/core/frame/local_dom_window.cc
index ff4ec73..ddc1750 100644
--- a/third_party/blink/renderer/core/frame/local_dom_window.cc
+++ b/third_party/blink/renderer/core/frame/local_dom_window.cc
@@ -295,6 +295,11 @@
   return GetFrame() ? GetFrame()->Loader().UserAgent() : String();
 }
 
+UserAgentMetadata LocalDOMWindow::GetUserAgentMetadata() const {
+  return GetFrame()->Loader().UserAgentMetadata().value_or(
+      blink::UserAgentMetadata());
+}
+
 HttpsState LocalDOMWindow::GetHttpsState() const {
   // TODO(https://crbug.com/880986): Implement Document's HTTPS state in more
   // spec-conformant way.
diff --git a/third_party/blink/renderer/core/frame/local_dom_window.h b/third_party/blink/renderer/core/frame/local_dom_window.h
index 86d2cb62..cae45e5c 100644
--- a/third_party/blink/renderer/core/frame/local_dom_window.h
+++ b/third_party/blink/renderer/core/frame/local_dom_window.h
@@ -148,6 +148,7 @@
   KURL CompleteURL(const String&) const final;
   void DisableEval(const String& error_message) final;
   String UserAgent() const final;
+  UserAgentMetadata GetUserAgentMetadata() const final;
   HttpsState GetHttpsState() const final;
   ResourceFetcher* Fetcher() const final;
   bool CanExecuteScripts(ReasonForCallingCanExecuteScripts) final;
diff --git a/third_party/blink/renderer/core/frame/navigator.cc b/third_party/blink/renderer/core/frame/navigator.cc
index 4f5d070..ff2573f 100644
--- a/third_party/blink/renderer/core/frame/navigator.cc
+++ b/third_party/blink/renderer/core/frame/navigator.cc
@@ -68,27 +68,6 @@
                                      : platform_override;
 }
 
-String Navigator::userAgent() const {
-  // If the frame is already detached it no longer has a meaningful useragent.
-  if (!DomWindow())
-    return String();
-
-  return DomWindow()->GetFrame()->Loader().UserAgent();
-}
-
-UserAgentMetadata Navigator::GetUserAgentMetadata() const {
-  // If the frame is already detached it no longer has a meaningful useragent.
-  if (!DomWindow())
-    return blink::UserAgentMetadata();
-
-  base::Optional<UserAgentMetadata> maybe_ua_metadata =
-      DomWindow()->GetFrame()->Loader().UserAgentMetadata();
-  if (maybe_ua_metadata.has_value())
-    return maybe_ua_metadata.value();
-  else
-    return blink::UserAgentMetadata();
-}
-
 bool Navigator::cookieEnabled() const {
   if (!DomWindow())
     return false;
diff --git a/third_party/blink/renderer/core/frame/navigator.h b/third_party/blink/renderer/core/frame/navigator.h
index c7ee4ba1..e88c35c1 100644
--- a/third_party/blink/renderer/core/frame/navigator.h
+++ b/third_party/blink/renderer/core/frame/navigator.h
@@ -46,10 +46,8 @@
   String vendorSub() const;
 
   String platform() const override;
-  String userAgent() const override;
 
   String GetAcceptLanguages() override;
-  UserAgentMetadata GetUserAgentMetadata() const override;
   void SetUserAgentMetadataForTesting(UserAgentMetadata);
 
   void Trace(Visitor*) const override;
diff --git a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h
index 4e33356b..faffbd0 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h
@@ -485,7 +485,7 @@
     table_grid_rect_ = table_grid_rect;
   }
 
-  void SetTableColumnGeometry(
+  void SetTableColumnGeometries(
       const NGTableFragmentData::ColumnGeometries& table_column_geometries) {
     table_column_geometries_ = table_column_geometries;
   }
diff --git a/third_party/blink/renderer/core/layout/ng/ng_layout_result.cc b/third_party/blink/renderer/core/layout/ng/ng_layout_result.cc
index 05d0a4e..e15108c 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_layout_result.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_layout_result.cc
@@ -319,6 +319,7 @@
 
   DCHECK(EndMarginStrut() == other.EndMarginStrut());
   DCHECK_EQ(MinimalSpaceShortage(), other.MinimalSpaceShortage());
+  DCHECK_EQ(TableColumnCount(), other.TableColumnCount());
 
   DCHECK_EQ(bitfields_.has_forced_break, other.bitfields_.has_forced_break);
   DCHECK_EQ(bitfields_.is_self_collapsing, other.bitfields_.is_self_collapsing);
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 06e3e17d..82e850b 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
@@ -924,11 +924,26 @@
                .UseBlockEndMarginEdgeForInlineBlockBaseline());
   }
 
-  // TODO(atotic,ikilpatrick): Enable DCHECKs for:
-  //  - TableGridRect()
-  //  - TableColumnGeometries()
-  //  - TableCollapsedBorders()
-  //  - TableCollapsedBordersGeometry()
+  if (IsTableNG()) {
+    DCHECK_EQ(TableGridRect(), other.TableGridRect());
+
+    if (TableColumnGeometries()) {
+      DCHECK(other.TableColumnGeometries());
+      DCHECK(*TableColumnGeometries() == *other.TableColumnGeometries());
+    } else {
+      DCHECK(!other.TableColumnGeometries());
+    }
+
+    DCHECK_EQ(TableCollapsedBorders(), other.TableCollapsedBorders());
+
+    if (TableCollapsedBordersGeometry()) {
+      DCHECK(other.TableCollapsedBordersGeometry());
+      TableCollapsedBordersGeometry()->CheckSameForSimplifiedLayout(
+          *other.TableCollapsedBordersGeometry());
+    } else {
+      DCHECK(!other.TableCollapsedBordersGeometry());
+    }
+  }
 
   if (IsTableNGCell())
     DCHECK_EQ(TableCellColumnIndex(), other.TableCellColumnIndex());
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h
index 6a0888d..0d596690 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h
@@ -98,11 +98,7 @@
 
   const NGTableFragmentData::CollapsedBordersGeometry*
   TableCollapsedBordersGeometry() const {
-    auto& table_collapsed_borders_geometry =
-        ComputeRareDataAddress()->table_collapsed_borders_geometry;
-    if (!table_collapsed_borders_geometry)
-      return nullptr;
-    return table_collapsed_borders_geometry.get();
+    return ComputeRareDataAddress()->table_collapsed_borders_geometry.get();
   }
 
   wtf_size_t TableCellColumnIndex() const {
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h
index 9791325..e06ee1f 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h
+++ b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.h
@@ -162,7 +162,9 @@
 
   bool IsTableNGPart() const { return is_table_ng_part_; }
 
-  bool IsTable() const { return IsBox() && layout_object_->IsTable(); }
+  bool IsTableNG() const {
+    return IsTableNGPart() && layout_object_->IsTable();
+  }
 
   bool IsTableNGRow() const {
     return IsTableNGPart() && layout_object_->IsTableRow();
diff --git a/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc
index 35a0334..ca3b9f3 100644
--- a/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/ng_simplified_layout_algorithm.cc
@@ -27,10 +27,7 @@
     : NGLayoutAlgorithm(params),
       previous_result_(result),
       writing_direction_(Style().GetWritingDirection()) {
-  // Currently this only supports block-flow layout due to the static-position
-  // calculations. If support for other layout types is added this logic will
-  // need to be changed.
-  bool is_block_flow = Node().IsBlockFlow();
+  const bool is_block_flow = Node().IsBlockFlow();
   const NGPhysicalBoxFragment& physical_fragment =
       To<NGPhysicalBoxFragment>(result.PhysicalFragment());
 
@@ -71,8 +68,8 @@
       container_builder_.SetLastBaseline(*physical_fragment.LastBaseline());
 
     if (ConstraintSpace().IsTableCell()) {
-      if (physical_fragment.HasCollapsedBorders())
-        container_builder_.SetHasCollapsedBorders(true);
+      container_builder_.SetHasCollapsedBorders(
+          physical_fragment.HasCollapsedBorders());
 
       if (!ConstraintSpace().IsLegacyTableCell()) {
         container_builder_.SetTableCellColumnIndex(
@@ -114,11 +111,28 @@
     container_builder_.SetCustomLayoutData(result.CustomLayoutData());
   }
 
-  // TODO(atotic,ikilpatrick): Copy across table related data for table,
-  // table-row, table-section.
-  DCHECK(!physical_fragment.IsTable());
-  DCHECK(!physical_fragment.IsTableNGRow());
-  DCHECK(!physical_fragment.IsTableNGSection());
+  if (physical_fragment.IsTableNG()) {
+    container_builder_.SetTableColumnCount(result.TableColumnCount());
+    container_builder_.SetTableGridRect(physical_fragment.TableGridRect());
+
+    container_builder_.SetHasCollapsedBorders(
+        physical_fragment.HasCollapsedBorders());
+
+    if (const auto* table_column_geometries =
+            physical_fragment.TableColumnGeometries())
+      container_builder_.SetTableColumnGeometries(*table_column_geometries);
+
+    if (const auto* table_collapsed_borders =
+            physical_fragment.TableCollapsedBorders())
+      container_builder_.SetTableCollapsedBorders(*table_collapsed_borders);
+
+    if (const auto* table_collapsed_borders_geometry =
+            physical_fragment.TableCollapsedBordersGeometry()) {
+      container_builder_.SetTableCollapsedBordersGeometry(
+          std::make_unique<NGTableFragmentData::CollapsedBordersGeometry>(
+              *table_collapsed_borders_geometry));
+    }
+  }
 
   if (physical_fragment.IsHiddenForPaint())
     container_builder_.SetIsHiddenForPaint(true);
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_fragment_data.h b/third_party/blink/renderer/core/layout/ng/table/ng_table_fragment_data.h
index 08f34ce..a4be953 100644
--- a/third_party/blink/renderer/core/layout/ng/table/ng_table_fragment_data.h
+++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_fragment_data.h
@@ -41,6 +41,14 @@
   struct CollapsedBordersGeometry {
     Vector<LayoutUnit> columns;  // Column offsets from table grid border.
     Vector<LayoutUnit> rows;     // Row offsets from table grid border.
+
+#if DCHECK_IS_ON()
+    void CheckSameForSimplifiedLayout(
+        const CollapsedBordersGeometry& other) const {
+      DCHECK(columns == other.columns);
+      DCHECK(rows == other.rows);
+    }
+#endif
   };
 };
 
diff --git a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc
index dd486f6..f95ef3f 100644
--- a/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/table/ng_table_layout_algorithm.cc
@@ -754,7 +754,7 @@
     VisitLayoutNGTableColumn(grouped_children.columns, column_locations.size(),
                              &geometry_builder);
     geometry_builder.Sort();
-    container_builder_.SetTableColumnGeometry(
+    container_builder_.SetTableColumnGeometries(
         geometry_builder.column_geometries);
   }
   // Collapsed borders.
diff --git a/third_party/blink/renderer/core/layout/svg/svg_resources.cc b/third_party/blink/renderer/core/layout/svg/svg_resources.cc
index 5e99689..6b8522c 100644
--- a/third_party/blink/renderer/core/layout/svg/svg_resources.cc
+++ b/third_party/blink/renderer/core/layout/svg/svg_resources.cc
@@ -659,14 +659,15 @@
   LayoutObject* layout_object = element_->GetLayoutObject();
   if (!layout_object)
     return;
+
+  if (invalidation_mask & SVGResourceClient::kFilterCacheInvalidation)
+    InvalidateFilterData();
+
   if (layout_object->IsSVGResourceContainer()) {
     To<LayoutSVGResourceContainer>(layout_object)->RemoveAllClientsFromCache();
     return;
   }
 
-  if (invalidation_mask & SVGResourceClient::kFilterCacheInvalidation)
-    InvalidateFilterData();
-
   if (invalidation_mask & SVGResourceClient::kPaintInvalidation) {
     // Since LayoutSVGInlineTexts don't have SVGResources (they use their
     // parent's), they will not be notified of changes to paint servers. So
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.cc b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.cc
index e34d2966..9631282 100644
--- a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.cc
+++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.cc
@@ -6,6 +6,7 @@
 
 #include "base/check.h"
 #include "base/metrics/histogram_functions.h"
+#include "base/strings/strcat.h"
 #include "base/time/default_tick_clock.h"
 #include "base/trace_event/trace_event.h"
 #include "third_party/blink/renderer/core/frame/web_feature.h"
@@ -69,9 +70,11 @@
   DCHECK(!first_scroll_into_view_time_.is_null());
   DCHECK(scroll_to_top_time >= first_scroll_into_view_time_);
 
+  std::string uma_prefix = GetPrefixForHistograms();
+
   base::TimeDelta time_to_scroll_to_top(scroll_to_top_time -
                                         first_scroll_into_view_time_);
-  base::UmaHistogramTimes("TextFragmentAnchor.TimeToScrollToTop",
+  base::UmaHistogramTimes(base::StrCat({uma_prefix, "TimeToScrollToTop"}),
                           time_to_scroll_to_top);
   TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                        TRACE_EVENT_SCOPE_THREAD, "time_to_scroll_to_top",
@@ -90,13 +93,15 @@
     UseCounter::Count(document_, WebFeature::kTextFragmentAnchorMatchFound);
   }
 
-  base::UmaHistogramCounts100("TextFragmentAnchor.SelectorCount",
+  std::string uma_prefix = GetPrefixForHistograms();
+
+  base::UmaHistogramCounts100(base::StrCat({uma_prefix, "SelectorCount"}),
                               selector_count_);
   TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                        TRACE_EVENT_SCOPE_THREAD, "selector_count",
                        selector_count_);
 
-  base::UmaHistogramCounts1000("TextFragmentAnchor.DirectiveLength",
+  base::UmaHistogramCounts1000(base::StrCat({uma_prefix, "DirectiveLength"}),
                                directive_length_);
   TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                        TRACE_EVENT_SCOPE_THREAD, "directive_length",
@@ -104,7 +109,7 @@
 
   const int match_rate_percent =
       static_cast<int>(100 * ((matches_.size() + 0.0) / selector_count_));
-  base::UmaHistogramPercentage("TextFragmentAnchor.MatchRate",
+  base::UmaHistogramPercentage(base::StrCat({uma_prefix, "MatchRate"}),
                                match_rate_percent);
   TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                        TRACE_EVENT_SCOPE_THREAD, "match_rate",
@@ -118,30 +123,31 @@
         match.text.length());
 
     if (match.selector.Type() == TextFragmentSelector::kExact) {
-      base::UmaHistogramCounts1000("TextFragmentAnchor.ExactTextLength",
-                                   match.text.length());
+      base::UmaHistogramCounts1000(
+          base::StrCat({uma_prefix, "ExactTextLength"}), match.text.length());
       TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                            TRACE_EVENT_SCOPE_THREAD, "exact_text_length",
                            match.text.length());
 
-      base::UmaHistogramBoolean("TextFragmentAnchor.ListItemMatch",
+      base::UmaHistogramBoolean(base::StrCat({uma_prefix, "ListItemMatch"}),
                                 match.is_list_item);
-      base::UmaHistogramBoolean("TextFragmentAnchor.TableCellMatch",
+      base::UmaHistogramBoolean(base::StrCat({uma_prefix, "TableCellMatch"}),
                                 match.is_table_cell);
     } else if (match.selector.Type() == TextFragmentSelector::kRange) {
-      base::UmaHistogramCounts1000("TextFragmentAnchor.RangeMatchLength",
-                                   match.text.length());
+      base::UmaHistogramCounts1000(
+          base::StrCat({uma_prefix, "RangeMatchLength"}), match.text.length());
       TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                            TRACE_EVENT_SCOPE_THREAD, "range_match_length",
                            match.text.length());
 
-      base::UmaHistogramCounts1000("TextFragmentAnchor.StartTextLength",
-                                   match.selector.Start().length());
+      base::UmaHistogramCounts1000(
+          base::StrCat({uma_prefix, "StartTextLength"}),
+          match.selector.Start().length());
       TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                            TRACE_EVENT_SCOPE_THREAD, "start_text_length",
                            match.selector.Start().length());
 
-      base::UmaHistogramCounts1000("TextFragmentAnchor.EndTextLength",
+      base::UmaHistogramCounts1000(base::StrCat({uma_prefix, "EndTextLength"}),
                                    match.selector.End().length());
       TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                            TRACE_EVENT_SCOPE_THREAD, "end_text_length",
@@ -151,17 +157,17 @@
       DCHECK(!match.is_list_item && !match.is_table_cell);
     }
 
-    base::UmaHistogramEnumeration("TextFragmentAnchor.Parameters",
+    base::UmaHistogramEnumeration(base::StrCat({uma_prefix, "Parameters"}),
                                   GetParametersForSelector(match.selector));
   }
 
-  base::UmaHistogramBoolean("TextFragmentAnchor.AmbiguousMatch",
+  base::UmaHistogramBoolean(base::StrCat({uma_prefix, "AmbiguousMatch"}),
                             ambiguous_match_);
   TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                        TRACE_EVENT_SCOPE_THREAD, "ambiguous_match",
                        ambiguous_match_);
 
-  base::UmaHistogramBoolean("TextFragmentAnchor.ScrollCancelled",
+  base::UmaHistogramBoolean(base::StrCat({uma_prefix, "ScrollCancelled"}),
                             scroll_cancelled_);
   TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                        TRACE_EVENT_SCOPE_THREAD, "scroll_cancelled",
@@ -170,7 +176,7 @@
   if (!first_scroll_into_view_time_.is_null()) {
     DCHECK(first_scroll_into_view_time_ >= search_start_time_);
 
-    base::UmaHistogramBoolean("TextFragmentAnchor.DidScrollIntoView",
+    base::UmaHistogramBoolean(base::StrCat({uma_prefix, "DidScrollIntoView"}),
                               did_non_zero_scroll_);
     TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                          TRACE_EVENT_SCOPE_THREAD, "did_scroll_into_view",
@@ -178,7 +184,7 @@
 
     base::TimeDelta time_to_scroll_into_view(first_scroll_into_view_time_ -
                                              search_start_time_);
-    base::UmaHistogramTimes("TextFragmentAnchor.TimeToScrollIntoView",
+    base::UmaHistogramTimes(base::StrCat({uma_prefix, "TimeToScrollIntoView"}),
                             time_to_scroll_into_view);
     TRACE_EVENT_INSTANT1("blink", "TextFragmentAnchorMetrics::ReportMetrics",
                          TRACE_EVENT_SCOPE_THREAD, "time_to_scroll_into_view",
@@ -245,4 +251,10 @@
   has_search_engine_source_ = has_search_engine_source;
 }
 
+std::string TextFragmentAnchorMetrics::GetPrefixForHistograms() const {
+  std::string source = has_search_engine_source_ ? "SearchEngine" : "Unknown";
+  std::string uma_prefix = base::StrCat({"TextFragmentAnchor.", source, "."});
+  return uma_prefix;
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.h b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.h
index 99820c9..18117f0 100644
--- a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.h
+++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.h
@@ -81,6 +81,8 @@
   void Trace(Visitor*) const;
 
  private:
+  std::string GetPrefixForHistograms() const;
+
   Member<Document> document_;
 
 #ifndef NDEBUG
diff --git a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics_test.cc b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics_test.cc
index 35d02d8f..08ed28f 100644
--- a/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics_test.cc
+++ b/third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics_test.cc
@@ -87,61 +87,175 @@
   Compositor().BeginFrame();
   BeginEmptyFrame();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.SelectorCount", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.SelectorCount", 2,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.MatchRate", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.MatchRate", 50, 1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.AmbiguousMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.AmbiguousMatch", 1,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ScrollCancelled", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ScrollCancelled", 0,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DidScrollIntoView", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.DidScrollIntoView",
-                                       1, 1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollIntoView",
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.SelectorCount",
                                      1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DirectiveLength", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.DirectiveLength", 18,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ExactTextLength", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ExactTextLength", 4,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.RangeMatchLength", 0);
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.StartTextLength", 0);
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.EndTextLength", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Parameters", 1);
   histogram_tester_.ExpectUniqueSample(
-      "TextFragmentAnchor.Parameters",
+      "TextFragmentAnchor.Unknown.SelectorCount", 2, 1);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.MatchRate", 1);
+  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.Unknown.MatchRate",
+                                       50, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 1, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DidScrollIntoView", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.DidScrollIntoView", 1, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollIntoView", 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 18, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ExactTextLength", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ExactTextLength", 4, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.RangeMatchLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.StartTextLength", 0);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.EndTextLength",
+                                     0);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.Parameters",
+                                     1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.Parameters",
       static_cast<int>(
           TextFragmentAnchorMetrics::TextFragmentAnchorParameters::kExactText),
       1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollToTop", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ListItemMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ListItemMatch", 0,
-                                       1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.ListItemMatch",
+                                     1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ListItemMatch", 0, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TableCellMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.TableCellMatch", 0,
-                                       1);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 0, 1);
   histogram_tester_.ExpectTotalCount("TextFragmentAnchor.LinkOpenSource", 1);
   histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.LinkOpenSource", 0,
                                        1);
 }
 
+// Test UMA metrics collection with search engine referrer.
+TEST_F(TextFragmentAnchorMetricsTest, UMAMetricsCollectedSearchEngineReferrer) {
+  // Set the referrer to a known search engine URL. This should cause metrics
+  // to be reported for the SearchEngine variant of histograms.
+  SimRequest::Params params;
+  params.referrer = "https://www.bing.com";
+
+  SimRequest request("https://example.com/test.html#:~:text=test&text=cat",
+                     "text/html", params);
+  LoadURL("https://example.com/test.html#:~:text=test&text=cat");
+  request.Complete(R"HTML(
+    <!DOCTYPE html>
+    <style>
+      body {
+        height: 1200px;
+      }
+      p {
+        position: absolute;
+        top: 1000px;
+      }
+    </style>
+    <p>This is a test page</p>
+    <p>With ambiguous test content</p>
+  )HTML");
+  RunAsyncMatchingTasks();
+
+  // Render two frames to handle the async step added by the beforematch event.
+  Compositor().BeginFrame();
+  BeginEmptyFrame();
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.SelectorCount", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.SearchEngine.SelectorCount", 2, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.MatchRate", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.SearchEngine.MatchRate", 50, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.AmbiguousMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.SearchEngine.AmbiguousMatch", 1, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.ScrollCancelled", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.SearchEngine.ScrollCancelled", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.DidScrollIntoView", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.SearchEngine.DidScrollIntoView", 1, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.TimeToScrollIntoView", 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.DirectiveLength", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.SearchEngine.DirectiveLength", 18, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.ExactTextLength", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.SearchEngine.ExactTextLength", 4, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.RangeMatchLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.StartTextLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.EndTextLength", 0);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.Parameters", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.SearchEngine.Parameters",
+      static_cast<int>(
+          TextFragmentAnchorMetrics::TextFragmentAnchorParameters::kExactText),
+      1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.TimeToScrollToTop", 0);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.ListItemMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.SearchEngine.ListItemMatch", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.SearchEngine.TableCellMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.SearchEngine.TableCellMatch", 0, 1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.LinkOpenSource", 1);
+  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.LinkOpenSource", 1,
+                                       1);
+}
+
 // Test UMA metrics collection when there is no match found
 TEST_F(TextFragmentAnchorMetricsTest, NoMatchFound) {
   SimRequest request("https://example.com/test.html#:~:text=cat", "text/html");
@@ -165,43 +279,57 @@
   Compositor().BeginFrame();
   BeginEmptyFrame();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.SelectorCount", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.SelectorCount", 1,
-                                       1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.SelectorCount",
+                                     1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.SelectorCount", 1, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.MatchRate", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.MatchRate", 0, 1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.MatchRate", 1);
+  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.Unknown.MatchRate",
+                                       0, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.AmbiguousMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.AmbiguousMatch", 0,
-                                       1);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 0, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ScrollCancelled", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ScrollCancelled", 0,
-                                       1);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 0, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DidScrollIntoView", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DidScrollIntoView", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollIntoView",
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollIntoView", 0);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 8, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ExactTextLength", 0);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.RangeMatchLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.StartTextLength", 0);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.EndTextLength",
                                      0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DirectiveLength", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.DirectiveLength", 8,
-                                       1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.Parameters",
+                                     0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ExactTextLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollToTop", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.RangeMatchLength", 0);
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.StartTextLength", 0);
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.EndTextLength", 0);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.ListItemMatch",
+                                     0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Parameters", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ListItemMatch", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TableCellMatch", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 0);
 
   histogram_tester_.ExpectTotalCount("TextFragmentAnchor.LinkOpenSource", 1);
   histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.LinkOpenSource", 0,
@@ -222,36 +350,49 @@
 
   RunAsyncMatchingTasks();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.SelectorCount", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.MatchRate", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.AmbiguousMatch", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ScrollCancelled", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DidScrollIntoView", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollIntoView",
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.SelectorCount",
                                      0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DirectiveLength", 0);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.MatchRate", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ExactTextLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.RangeMatchLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.StartTextLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DidScrollIntoView", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.EndTextLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollIntoView", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Parameters", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ExactTextLength", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ListItemMatch", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.RangeMatchLength", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TableCellMatch", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.StartTextLength", 0);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.EndTextLength",
+                                     0);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.Parameters",
+                                     0);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollToTop", 0);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.ListItemMatch",
+                                     0);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 0);
 
   histogram_tester_.ExpectTotalCount("TextFragmentAnchor.LinkOpenSource", 0);
 }
@@ -271,56 +412,70 @@
   Compositor().BeginFrame();
   BeginEmptyFrame();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.SelectorCount", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.SelectorCount", 1,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.MatchRate", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.MatchRate", 100, 1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.AmbiguousMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.AmbiguousMatch", 0,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ScrollCancelled", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ScrollCancelled", 0,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DidScrollIntoView", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.DidScrollIntoView",
-                                       0, 1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollIntoView",
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.SelectorCount",
                                      1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DirectiveLength", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.DirectiveLength", 9,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ExactTextLength", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ExactTextLength", 4,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.RangeMatchLength", 0);
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.StartTextLength", 0);
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.EndTextLength", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Parameters", 1);
   histogram_tester_.ExpectUniqueSample(
-      "TextFragmentAnchor.Parameters",
+      "TextFragmentAnchor.Unknown.SelectorCount", 1, 1);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.MatchRate", 1);
+  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.Unknown.MatchRate",
+                                       100, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DidScrollIntoView", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.DidScrollIntoView", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollIntoView", 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 9, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ExactTextLength", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ExactTextLength", 4, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.RangeMatchLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.StartTextLength", 0);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.EndTextLength",
+                                     0);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.Parameters",
+                                     1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.Parameters",
       static_cast<int>(
           TextFragmentAnchorMetrics::TextFragmentAnchorParameters::kExactText),
       1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollToTop", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ListItemMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ListItemMatch", 0,
-                                       1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.ListItemMatch",
+                                     1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ListItemMatch", 0, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TableCellMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.TableCellMatch", 0,
-                                       1);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 0, 1);
 
   histogram_tester_.ExpectTotalCount("TextFragmentAnchor.LinkOpenSource", 1);
   histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.LinkOpenSource", 0,
@@ -349,75 +504,89 @@
   Compositor().BeginFrame();
   BeginEmptyFrame();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.SelectorCount", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.SelectorCount", 4,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.MatchRate", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.MatchRate", 100, 1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.AmbiguousMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.AmbiguousMatch", 0,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ScrollCancelled", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ScrollCancelled", 0,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DidScrollIntoView", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.DidScrollIntoView",
-                                       0, 1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollIntoView",
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.SelectorCount",
                                      1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.SelectorCount", 4, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DirectiveLength", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.DirectiveLength", 61,
-                                       1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.MatchRate", 1);
+  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.Unknown.MatchRate",
+                                       100, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ExactTextLength", 4);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DidScrollIntoView", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.DidScrollIntoView", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollIntoView", 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 61, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ExactTextLength", 4);
   // "this", "test", "some"
-  histogram_tester_.ExpectBucketCount("TextFragmentAnchor.ExactTextLength", 4,
-                                      3);
-  // "a"
-  histogram_tester_.ExpectBucketCount("TextFragmentAnchor.ExactTextLength", 1,
-                                      1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.RangeMatchLength", 0);
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.StartTextLength", 0);
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.EndTextLength", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Parameters", 4);
   histogram_tester_.ExpectBucketCount(
-      "TextFragmentAnchor.Parameters",
+      "TextFragmentAnchor.Unknown.ExactTextLength", 4, 3);
+  // "a"
+  histogram_tester_.ExpectBucketCount(
+      "TextFragmentAnchor.Unknown.ExactTextLength", 1, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.RangeMatchLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.StartTextLength", 0);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.EndTextLength",
+                                     0);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.Parameters",
+                                     4);
+  histogram_tester_.ExpectBucketCount(
+      "TextFragmentAnchor.Unknown.Parameters",
       static_cast<int>(
           TextFragmentAnchorMetrics::TextFragmentAnchorParameters::kExactText),
       1);
   histogram_tester_.ExpectBucketCount(
-      "TextFragmentAnchor.Parameters",
+      "TextFragmentAnchor.Unknown.Parameters",
       static_cast<int>(TextFragmentAnchorMetrics::TextFragmentAnchorParameters::
                            kExactTextWithPrefix),
       1);
   histogram_tester_.ExpectBucketCount(
-      "TextFragmentAnchor.Parameters",
+      "TextFragmentAnchor.Unknown.Parameters",
       static_cast<int>(TextFragmentAnchorMetrics::TextFragmentAnchorParameters::
                            kExactTextWithSuffix),
       1);
   histogram_tester_.ExpectBucketCount(
-      "TextFragmentAnchor.Parameters",
+      "TextFragmentAnchor.Unknown.Parameters",
       static_cast<int>(TextFragmentAnchorMetrics::TextFragmentAnchorParameters::
                            kExactTextWithContext),
       1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollToTop", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ListItemMatch", 4);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ListItemMatch", 0,
-                                       4);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.ListItemMatch",
+                                     4);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ListItemMatch", 0, 4);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TableCellMatch", 4);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.TableCellMatch", 0,
-                                       4);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 4);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 0, 4);
 
   histogram_tester_.ExpectTotalCount("TextFragmentAnchor.LinkOpenSource", 1);
   histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.LinkOpenSource", 0,
@@ -447,86 +616,102 @@
   Compositor().BeginFrame();
   BeginEmptyFrame();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.SelectorCount", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.SelectorCount", 4,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.MatchRate", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.MatchRate", 100, 1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.AmbiguousMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.AmbiguousMatch", 0,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ScrollCancelled", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ScrollCancelled", 0,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DidScrollIntoView", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.DidScrollIntoView",
-                                       0, 1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollIntoView",
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.SelectorCount",
                                      1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.SelectorCount", 4, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DirectiveLength", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.DirectiveLength", 82,
-                                       1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.MatchRate", 1);
+  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.Unknown.MatchRate",
+                                       100, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ExactTextLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 0, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.RangeMatchLength", 4);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DidScrollIntoView", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.DidScrollIntoView", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollIntoView", 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 82, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ExactTextLength", 0);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.RangeMatchLength", 4);
   // "This is"
-  histogram_tester_.ExpectBucketCount("TextFragmentAnchor.RangeMatchLength", 7,
-                                      1);
-  // "test page", "with some"
-  histogram_tester_.ExpectBucketCount("TextFragmentAnchor.RangeMatchLength", 9,
-                                      2);
-  // "nothing at"
-  histogram_tester_.ExpectBucketCount("TextFragmentAnchor.RangeMatchLength", 10,
-                                      1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.StartTextLength", 4);
-  // "this", "test", "with"
-  histogram_tester_.ExpectBucketCount("TextFragmentAnchor.StartTextLength", 4,
-                                      3);
-  // "nothing"
-  histogram_tester_.ExpectBucketCount("TextFragmentAnchor.StartTextLength", 7,
-                                      1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.EndTextLength", 4);
-  // "is", "at"
-  histogram_tester_.ExpectBucketCount("TextFragmentAnchor.EndTextLength", 2, 2);
-  // "page", "some"
-  histogram_tester_.ExpectBucketCount("TextFragmentAnchor.EndTextLength", 4, 2);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Parameters", 4);
   histogram_tester_.ExpectBucketCount(
-      "TextFragmentAnchor.Parameters",
+      "TextFragmentAnchor.Unknown.RangeMatchLength", 7, 1);
+  // "test page", "with some"
+  histogram_tester_.ExpectBucketCount(
+      "TextFragmentAnchor.Unknown.RangeMatchLength", 9, 2);
+  // "nothing at"
+  histogram_tester_.ExpectBucketCount(
+      "TextFragmentAnchor.Unknown.RangeMatchLength", 10, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.StartTextLength", 4);
+  // "this", "test", "with"
+  histogram_tester_.ExpectBucketCount(
+      "TextFragmentAnchor.Unknown.StartTextLength", 4, 3);
+  // "nothing"
+  histogram_tester_.ExpectBucketCount(
+      "TextFragmentAnchor.Unknown.StartTextLength", 7, 1);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.EndTextLength",
+                                     4);
+  // "is", "at"
+  histogram_tester_.ExpectBucketCount(
+      "TextFragmentAnchor.Unknown.EndTextLength", 2, 2);
+  // "page", "some"
+  histogram_tester_.ExpectBucketCount(
+      "TextFragmentAnchor.Unknown.EndTextLength", 4, 2);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.Parameters",
+                                     4);
+  histogram_tester_.ExpectBucketCount(
+      "TextFragmentAnchor.Unknown.Parameters",
       static_cast<int>(
           TextFragmentAnchorMetrics::TextFragmentAnchorParameters::kTextRange),
       1);
   histogram_tester_.ExpectBucketCount(
-      "TextFragmentAnchor.Parameters",
+      "TextFragmentAnchor.Unknown.Parameters",
       static_cast<int>(TextFragmentAnchorMetrics::TextFragmentAnchorParameters::
                            kTextRangeWithPrefix),
       1);
   histogram_tester_.ExpectBucketCount(
-      "TextFragmentAnchor.Parameters",
+      "TextFragmentAnchor.Unknown.Parameters",
       static_cast<int>(TextFragmentAnchorMetrics::TextFragmentAnchorParameters::
                            kTextRangeWithSuffix),
       1);
   histogram_tester_.ExpectBucketCount(
-      "TextFragmentAnchor.Parameters",
+      "TextFragmentAnchor.Unknown.Parameters",
       static_cast<int>(TextFragmentAnchorMetrics::TextFragmentAnchorParameters::
                            kTextRangeWithContext),
       1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollToTop", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ListItemMatch", 0);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.ListItemMatch",
+                                     0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TableCellMatch", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 0);
 
   histogram_tester_.ExpectTotalCount("TextFragmentAnchor.LinkOpenSource", 1);
   histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.LinkOpenSource", 0,
@@ -596,66 +781,79 @@
   Compositor().BeginFrame();
   BeginEmptyFrame();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ScrollCancelled", 1);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ScrollCancelled", 1);
 
   // A user scroll should have caused this to be canceled, other kinds of
   // scrolls should have no effect.
   if (IsUserScrollType()) {
-    histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ScrollCancelled",
-                                         1, 1);
+    histogram_tester_.ExpectUniqueSample(
+        "TextFragmentAnchor.Unknown.ScrollCancelled", 1, 1);
 
-    histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DidScrollIntoView",
-                                       0);
     histogram_tester_.ExpectTotalCount(
-        "TextFragmentAnchor.TimeToScrollIntoView", 0);
+        "TextFragmentAnchor.Unknown.DidScrollIntoView", 0);
+    histogram_tester_.ExpectTotalCount(
+        "TextFragmentAnchor.Unknown.TimeToScrollIntoView", 0);
   } else {
-    histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ScrollCancelled",
-                                         0, 1);
-    histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DidScrollIntoView",
-                                       1);
+    histogram_tester_.ExpectUniqueSample(
+        "TextFragmentAnchor.Unknown.ScrollCancelled", 0, 1);
     histogram_tester_.ExpectTotalCount(
-        "TextFragmentAnchor.TimeToScrollIntoView", 1);
+        "TextFragmentAnchor.Unknown.DidScrollIntoView", 1);
+    histogram_tester_.ExpectTotalCount(
+        "TextFragmentAnchor.Unknown.TimeToScrollIntoView", 1);
   }
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.SelectorCount", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.SelectorCount", 1,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.MatchRate", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.MatchRate", 100, 1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.AmbiguousMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.AmbiguousMatch", 0,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.DirectiveLength", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.DirectiveLength", 9,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ExactTextLength", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ExactTextLength", 4,
-                                       1);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.RangeMatchLength", 0);
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.StartTextLength", 0);
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.EndTextLength", 0);
-
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Parameters", 1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.SelectorCount",
+                                     1);
   histogram_tester_.ExpectUniqueSample(
-      "TextFragmentAnchor.Parameters",
+      "TextFragmentAnchor.Unknown.SelectorCount", 1, 1);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.MatchRate", 1);
+  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.Unknown.MatchRate",
+                                       100, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.AmbiguousMatch", 0, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.DirectiveLength", 9, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.ExactTextLength", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ExactTextLength", 4, 1);
+
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.RangeMatchLength", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.StartTextLength", 0);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.EndTextLength",
+                                     0);
+
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.Parameters",
+                                     1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.Parameters",
       static_cast<int>(
           TextFragmentAnchorMetrics::TextFragmentAnchorParameters::kExactText),
       1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollToTop", 0);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ListItemMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ListItemMatch", 0,
-                                       1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.ListItemMatch",
+                                     1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ListItemMatch", 0, 1);
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TableCellMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.TableCellMatch", 0,
-                                       1);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 0, 1);
 
   histogram_tester_.ExpectTotalCount("TextFragmentAnchor.LinkOpenSource", 1);
   histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.LinkOpenSource", 0,
@@ -703,7 +901,8 @@
   BeginEmptyFrame();
   BeginEmptyFrame();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop", 0);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TimeToScrollToTop", 0);
 
   const int64_t time_to_scroll_to_top = 500;
   tick_clock.Advance(base::TimeDelta::FromMilliseconds(time_to_scroll_to_top));
@@ -715,8 +914,8 @@
   {
     GetDocument().View()->LayoutViewport()->ScrollBy(ScrollOffset(0, -20),
                                                      scroll_type);
-    histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop",
-                                       0);
+    histogram_tester_.ExpectTotalCount(
+        "TextFragmentAnchor.Unknown.TimeToScrollToTop", 0);
   }
 
   // Scroll to top and ensure the metric is recorded, but only for user type
@@ -726,13 +925,14 @@
                                                             scroll_type);
 
     if (IsUserScrollType()) {
-      histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop",
-                                         1);
+      histogram_tester_.ExpectTotalCount(
+          "TextFragmentAnchor.Unknown.TimeToScrollToTop", 1);
       histogram_tester_.ExpectUniqueSample(
-          "TextFragmentAnchor.TimeToScrollToTop", time_to_scroll_to_top, 1);
+          "TextFragmentAnchor.Unknown.TimeToScrollToTop", time_to_scroll_to_top,
+          1);
     } else {
-      histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop",
-                                         0);
+      histogram_tester_.ExpectTotalCount(
+          "TextFragmentAnchor.Unknown.TimeToScrollToTop", 0);
     }
   }
 
@@ -745,11 +945,11 @@
                                                             scroll_type);
 
     if (IsUserScrollType()) {
-      histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop",
-                                         1);
+      histogram_tester_.ExpectTotalCount(
+          "TextFragmentAnchor.Unknown.TimeToScrollToTop", 1);
     } else {
-      histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TimeToScrollToTop",
-                                         0);
+      histogram_tester_.ExpectTotalCount(
+          "TextFragmentAnchor.Unknown.TimeToScrollToTop", 0);
     }
   }
 }
@@ -851,9 +1051,10 @@
   BeginEmptyFrame();
   BeginEmptyFrame();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ListItemMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ListItemMatch", 1,
-                                       1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.ListItemMatch",
+                                     1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ListItemMatch", 1, 1);
 }
 
 // Test recording of the TableCellMatch metric
@@ -875,9 +1076,10 @@
   BeginEmptyFrame();
   BeginEmptyFrame();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TableCellMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.TableCellMatch", 1,
-                                       1);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 1, 1);
 }
 
 // Test recording of ListItemMatch for a match nested in a list item
@@ -896,9 +1098,10 @@
   BeginEmptyFrame();
   BeginEmptyFrame();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.ListItemMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.ListItemMatch", 1,
-                                       1);
+  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.Unknown.ListItemMatch",
+                                     1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.ListItemMatch", 1, 1);
 }
 
 // Test recording of TableCellMatch for a match nested in a table cell
@@ -920,9 +1123,10 @@
   BeginEmptyFrame();
   BeginEmptyFrame();
 
-  histogram_tester_.ExpectTotalCount("TextFragmentAnchor.TableCellMatch", 1);
-  histogram_tester_.ExpectUniqueSample("TextFragmentAnchor.TableCellMatch", 1,
-                                       1);
+  histogram_tester_.ExpectTotalCount(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 1);
+  histogram_tester_.ExpectUniqueSample(
+      "TextFragmentAnchor.Unknown.TableCellMatch", 1, 1);
 }
 
 class TextFragmentRelatedMetricTest : public TextFragmentAnchorMetricsTest,
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
index 6b4df97..c8de5d9 100644
--- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
+++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
@@ -782,7 +782,7 @@
     }
   }
   if (paint_info.phase == PaintPhase::kForeground &&
-      box_fragment_.IsTableNGPart() && box_fragment_.IsTable()) {
+      box_fragment_.IsTableNG()) {
     NGTablePainter(box_fragment_)
         .PaintCollapsedBorders(paint_info, paint_offset,
                                VisualRect(paint_offset));
@@ -1027,7 +1027,7 @@
             .PaintBoxDecorationBackground(paint_info, paint_offset,
                                           visual_rect);
       } else {
-        DCHECK(box_fragment_.IsTable());
+        DCHECK(box_fragment_.IsTableNG());
         NGTablePainter(box_fragment_)
             .PaintBoxDecorationBackground(paint_info, paint_offset,
                                           visual_rect);
diff --git a/third_party/blink/renderer/core/testing/sim/sim_network.cc b/third_party/blink/renderer/core/testing/sim/sim_network.cc
index d98907c1..39a0e7ad 100644
--- a/third_party/blink/renderer/core/testing/sim/sim_network.cc
+++ b/third_party/blink/renderer/core/testing/sim/sim_network.cc
@@ -135,6 +135,7 @@
   auto body_loader = std::make_unique<StaticDataNavigationBodyLoader>();
   request->UsedForNavigation(body_loader.get());
   params->body_loader = std::move(body_loader);
+  params->referrer = request->referrer_;
   return true;
 }
 
diff --git a/third_party/blink/renderer/core/testing/sim/sim_request.cc b/third_party/blink/renderer/core/testing/sim/sim_request.cc
index dd39773..57f81db3 100644
--- a/third_party/blink/renderer/core/testing/sim/sim_request.cc
+++ b/third_party/blink/renderer/core/testing/sim/sim_request.cc
@@ -19,6 +19,7 @@
     : url_(url),
       redirect_url_(params.redirect_url),
       mime_type_(mime_type),
+      referrer_(params.referrer),
       start_immediately_(start_immediately),
       started_(false),
       client_(nullptr),
diff --git a/third_party/blink/renderer/core/testing/sim/sim_request.h b/third_party/blink/renderer/core/testing/sim/sim_request.h
index 1400a2a..bcb1ed2 100644
--- a/third_party/blink/renderer/core/testing/sim/sim_request.h
+++ b/third_party/blink/renderer/core/testing/sim/sim_request.h
@@ -33,6 +33,9 @@
     // if |redirect_url| is non-empty.
     String redirect_url;
 
+    // Referrer URL that should be included in response.
+    String referrer;
+
     WTF::HashMap<String, String> response_http_headers;
 
     // The HTTP status code of the response. |response_http_status| is ignored
@@ -79,6 +82,7 @@
   KURL url_;
   String redirect_url_;
   String mime_type_;
+  String referrer_;
   bool start_immediately_;
   bool started_;
   WebURLResponse response_;
diff --git a/third_party/blink/renderer/core/workers/dedicated_worker.cc b/third_party/blink/renderer/core/workers/dedicated_worker.cc
index fee83e61..7039690 100644
--- a/third_party/blink/renderer/core/workers/dedicated_worker.cc
+++ b/third_party/blink/renderer/core/workers/dedicated_worker.cc
@@ -410,21 +410,16 @@
     base::Optional<network::mojom::IPAddressSpace> response_address_space) {
   base::UnguessableToken parent_devtools_token;
   std::unique_ptr<WorkerSettings> settings;
-  UserAgentMetadata ua_metadata;
   if (auto* window = DynamicTo<LocalDOMWindow>(GetExecutionContext())) {
     auto* frame = window->GetFrame();
-    if (frame) {
+    if (frame)
       parent_devtools_token = frame->GetDevToolsFrameToken();
-      ua_metadata = frame->Loader().UserAgentMetadata().value_or(
-          blink::UserAgentMetadata());
-    }
     settings = std::make_unique<WorkerSettings>(frame->GetSettings());
   } else {
     WorkerGlobalScope* worker_global_scope =
         To<WorkerGlobalScope>(GetExecutionContext());
     parent_devtools_token =
         worker_global_scope->GetThread()->GetDevToolsWorkerToken();
-    ua_metadata = worker_global_scope->GetUserAgentMetadata();
     settings = WorkerSettings::Copy(worker_global_scope->GetWorkerSettings());
   }
 
@@ -434,7 +429,8 @@
 
   return std::make_unique<GlobalScopeCreationParams>(
       script_url, script_type, options_->name(),
-      GetExecutionContext()->UserAgent(), ua_metadata,
+      GetExecutionContext()->UserAgent(),
+      GetExecutionContext()->GetUserAgentMetadata(),
       CreateWebWorkerFetchContext(),
       GetExecutionContext()->GetContentSecurityPolicy()->Headers(),
       referrer_policy, GetExecutionContext()->GetSecurityOrigin(),
diff --git a/third_party/blink/renderer/core/workers/worker_global_scope.cc b/third_party/blink/renderer/core/workers/worker_global_scope.cc
index 92377e35..c9bf4898 100644
--- a/third_party/blink/renderer/core/workers/worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worker_global_scope.cc
@@ -204,10 +204,8 @@
 }
 
 WorkerNavigator* WorkerGlobalScope::navigator() const {
-  if (!navigator_) {
-    navigator_ = MakeGarbageCollected<WorkerNavigator>(
-        user_agent_, ua_metadata_, GetExecutionContext());
-  }
+  if (!navigator_)
+    navigator_ = MakeGarbageCollected<WorkerNavigator>(GetExecutionContext());
   return navigator_.Get();
 }
 
diff --git a/third_party/blink/renderer/core/workers/worker_global_scope.h b/third_party/blink/renderer/core/workers/worker_global_scope.h
index 033762b8..e1237af 100644
--- a/third_party/blink/renderer/core/workers/worker_global_scope.h
+++ b/third_party/blink/renderer/core/workers/worker_global_scope.h
@@ -116,7 +116,9 @@
   bool IsContextThread() const final;
   const KURL& BaseURL() const final;
   String UserAgent() const final { return user_agent_; }
-  const UserAgentMetadata& GetUserAgentMetadata() const { return ua_metadata_; }
+  UserAgentMetadata GetUserAgentMetadata() const override {
+    return ua_metadata_;
+  }
   HttpsState GetHttpsState() const override { return https_state_; }
   scheduler::WorkerScheduler* GetScheduler() final;
   ukm::UkmRecorder* UkmRecorder() final;
diff --git a/third_party/blink/renderer/core/workers/worker_navigator.cc b/third_party/blink/renderer/core/workers/worker_navigator.cc
index 8b69ce081..cc4025d8 100644
--- a/third_party/blink/renderer/core/workers/worker_navigator.cc
+++ b/third_party/blink/renderer/core/workers/worker_navigator.cc
@@ -36,19 +36,11 @@
 
 namespace blink {
 
-WorkerNavigator::WorkerNavigator(const String& user_agent,
-                                 const UserAgentMetadata& ua_metadata,
-                                 ExecutionContext* execution_context)
-    : NavigatorBase(execution_context),
-      user_agent_(user_agent),
-      ua_metadata_(ua_metadata) {}
+WorkerNavigator::WorkerNavigator(ExecutionContext* execution_context)
+    : NavigatorBase(execution_context) {}
 
 WorkerNavigator::~WorkerNavigator() = default;
 
-String WorkerNavigator::userAgent() const {
-  return user_agent_;
-}
-
 String WorkerNavigator::GetAcceptLanguages() {
   WorkerOrWorkletGlobalScope* global_scope =
       To<WorkerOrWorkletGlobalScope>(GetExecutionContext());
diff --git a/third_party/blink/renderer/core/workers/worker_navigator.h b/third_party/blink/renderer/core/workers/worker_navigator.h
index 85d2c1a3..20ed3c6 100644
--- a/third_party/blink/renderer/core/workers/worker_navigator.h
+++ b/third_party/blink/renderer/core/workers/worker_navigator.h
@@ -39,28 +39,14 @@
   DEFINE_WRAPPERTYPEINFO();
 
  public:
-  WorkerNavigator(const String& user_agent,
-                  const UserAgentMetadata&,
-                  ExecutionContext* execution_context);
+  explicit WorkerNavigator(ExecutionContext*);
   ~WorkerNavigator() override;
 
-  // NavigatorID override
-  String userAgent() const override;
-
   // NavigatorLanguage override
   String GetAcceptLanguages() override;
 
   // AcceptLanguagesWatcher override
   void NotifyUpdate() override;
-
- protected:
-  UserAgentMetadata GetUserAgentMetadata() const override {
-    return ua_metadata_;
-  }
-
- private:
-  String user_agent_;
-  UserAgentMetadata ua_metadata_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc
index 1dcf5ae..81cd9ff 100644
--- a/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc
+++ b/third_party/blink/renderer/modules/accessibility/inspector_accessibility_agent.cc
@@ -738,8 +738,7 @@
         BuildProtocolAXObject(*ax_object, nullptr, false, *nodes, cache);
 
     auto child_ids = std::make_unique<protocol::Array<AXNodeId>>();
-    const AXObject::AXObjectVector& children =
-        ax_object->ChildrenIncludingIgnored();
+    const AXObject::AXObjectVector& children = ax_object->UnignoredChildren();
     for (unsigned i = 0; i < children.size(); i++) {
       AXObject& child_ax_object = *children[i].Get();
       child_ids->emplace_back(String::Number(child_ax_object.AXObjectID()));
@@ -822,8 +821,7 @@
     return;
   }
 
-  const AXObject::AXObjectVector& children =
-      ax_object.ChildrenIncludingIgnored();
+  const AXObject::AXObjectVector& children = ax_object.UnignoredChildren();
   for (unsigned i = 0; i < children.size(); i++) {
     AXObject& child_ax_object = *children[i].Get();
     child_ids->emplace_back(String::Number(child_ax_object.AXObjectID()));
@@ -893,8 +891,7 @@
   while (!reachable.IsEmpty()) {
     AXObject* ax_object = reachable.back();
     reachable.pop_back();
-    const AXObject::AXObjectVector& children =
-        ax_object->ChildrenIncludingIgnored();
+    const AXObject::AXObjectVector& children = ax_object->UnignoredChildren();
     reachable.AppendRange(children.rbegin(), children.rend());
 
     // if querying by name: skip if name of current object does not match.
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_error_event.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_error_event.cc
index 4f44d82f..9034298 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_error_event.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_error_event.cc
@@ -57,8 +57,8 @@
     host_candidate_ = initializer->hostCandidate();
   if (initializer->hasUrl())
     url_ = initializer->url();
-  if (initializer->hasStatusText())
-    error_text_ = initializer->statusText();
+  if (initializer->hasErrorText())
+    error_text_ = initializer->errorText();
 }
 
 RTCPeerConnectionIceErrorEvent::~RTCPeerConnectionIceErrorEvent() = default;
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_error_event_init.idl b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_error_event_init.idl
index a073402..98344f9 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_error_event_init.idl
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_ice_error_event_init.idl
@@ -10,5 +10,5 @@
   DOMString hostCandidate;
   DOMString url;
   required unsigned short errorCode;
-  USVString statusText;
-};
\ No newline at end of file
+  USVString errorText;
+};
diff --git a/third_party/blink/renderer/modules/wake_lock/README.md b/third_party/blink/renderer/modules/wake_lock/README.md
index 94f3543..183d7f1 100644
--- a/third_party/blink/renderer/modules/wake_lock/README.md
+++ b/third_party/blink/renderer/modules/wake_lock/README.md
@@ -43,7 +43,7 @@
 
 ### Testing
 
-Validation, exception types, feature policy integration and general IDL compliance are tested in [web platform tests], while Chromium-specific implementation details (e.g. permission handling) are tested in [web tests].
+Validation, exception types, permissions policy integration and general IDL compliance are tested in [web platform tests], while Chromium-specific implementation details (e.g. permission handling) are tested in [web tests].
 
 Larger parts of the Blink implementation are tested as browser and unit tests:
 
diff --git a/third_party/blink/renderer/modules/webcodecs/audio_decoder.idl b/third_party/blink/renderer/modules/webcodecs/audio_decoder.idl
index 54b0700..7201cd2 100644
--- a/third_party/blink/renderer/modules/webcodecs/audio_decoder.idl
+++ b/third_party/blink/renderer/modules/webcodecs/audio_decoder.idl
@@ -6,7 +6,8 @@
 
 [
     Exposed=(Window,DedicatedWorker),
-    RuntimeEnabled=WebCodecs
+    RuntimeEnabled=WebCodecs,
+    ActiveScriptWrappable
 ] interface AudioDecoder {
   // |init| includes an |output| callback for emitting AudioBuffers and an
   // |error| callback for emitting decode errors. All errors are permanent;
diff --git a/third_party/blink/renderer/modules/webcodecs/decoder_template.cc b/third_party/blink/renderer/modules/webcodecs/decoder_template.cc
index af1b20f..e97d94af 100644
--- a/third_party/blink/renderer/modules/webcodecs/decoder_template.cc
+++ b/third_party/blink/renderer/modules/webcodecs/decoder_template.cc
@@ -290,8 +290,8 @@
     Traits::InitializeDecoder(
         *decoder_, *pending_request_->media_config,
         WTF::Bind(&DecoderTemplate::OnInitializeDone, WrapWeakPersistent(this)),
-        WTF::BindRepeating(&DecoderTemplate::OnOutput,
-                           WrapWeakPersistent(this)));
+        WTF::BindRepeating(&DecoderTemplate::OnOutput, WrapWeakPersistent(this),
+                           reset_generation_));
     initializing_sync_ = false;
     return true;
   }
@@ -499,7 +499,8 @@
   Traits::InitializeDecoder(
       *decoder_, *pending_request_->media_config,
       WTF::Bind(&DecoderTemplate::OnInitializeDone, WrapWeakPersistent(this)),
-      WTF::BindRepeating(&DecoderTemplate::OnOutput, WrapWeakPersistent(this)));
+      WTF::BindRepeating(&DecoderTemplate::OnOutput, WrapWeakPersistent(this),
+                         reset_generation_));
 }
 
 template <typename Traits>
@@ -574,8 +575,14 @@
 }
 
 template <typename Traits>
-void DecoderTemplate<Traits>::OnOutput(scoped_refptr<MediaOutputType> output) {
+void DecoderTemplate<Traits>::OnOutput(uint32_t reset_generation,
+                                       scoped_refptr<MediaOutputType> output) {
   DVLOG(3) << __func__;
+
+  // Suppress outputs belonging to an earlier reset_generation.
+  if (reset_generation != reset_generation_)
+    return;
+
   if (state_.AsEnum() != V8CodecState::Enum::kConfigured)
     return;
 
@@ -601,6 +608,11 @@
 }
 
 template <typename Traits>
+bool DecoderTemplate<Traits>::HasPendingActivity() const {
+  return pending_request_ || !requests_.IsEmpty();
+}
+
+template <typename Traits>
 void DecoderTemplate<Traits>::Request::Trace(Visitor* visitor) const {
   visitor->Trace(resolver);
 }
diff --git a/third_party/blink/renderer/modules/webcodecs/decoder_template.h b/third_party/blink/renderer/modules/webcodecs/decoder_template.h
index 39884ee..c760c58 100644
--- a/third_party/blink/renderer/modules/webcodecs/decoder_template.h
+++ b/third_party/blink/renderer/modules/webcodecs/decoder_template.h
@@ -11,6 +11,7 @@
 #include "media/base/decode_status.h"
 #include "media/base/media_log.h"
 #include "media/base/status.h"
+#include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
 #include "third_party/blink/renderer/bindings/modules/v8/v8_codec_state.h"
@@ -33,6 +34,7 @@
 template <typename Traits>
 class MODULES_EXPORT DecoderTemplate
     : public ScriptWrappable,
+      public ActiveScriptWrappable<DecoderTemplate<Traits>>,
       public ExecutionContextLifecycleObserver {
  public:
   typedef typename Traits::ConfigType ConfigType;
@@ -58,6 +60,9 @@
   // ExecutionContextLifecycleObserver override.
   void ContextDestroyed() override;
 
+  // ScriptWrappable override.
+  bool HasPendingActivity() const override;
+
   // GarbageCollected override.
   void Trace(Visitor*) const override;
 
@@ -120,7 +125,7 @@
   void OnFlushDone(media::Status);
   void OnConfigureFlushDone(media::Status);
   void OnResetDone();
-  void OnOutput(scoped_refptr<MediaOutputType>);
+  void OnOutput(uint32_t reset_generation, scoped_refptr<MediaOutputType>);
 
   // Helper function making it easier to check |state_|.
   bool IsClosed();
diff --git a/third_party/blink/renderer/modules/webcodecs/video_decoder.idl b/third_party/blink/renderer/modules/webcodecs/video_decoder.idl
index 573cbcf..f805b5d44 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_decoder.idl
+++ b/third_party/blink/renderer/modules/webcodecs/video_decoder.idl
@@ -13,7 +13,8 @@
 // encoders.
 [
     Exposed=(Window,DedicatedWorker),
-    RuntimeEnabled=WebCodecs
+    RuntimeEnabled=WebCodecs,
+    ActiveScriptWrappable
 ] interface VideoDecoder {
   // |init| includes an |output| callback for emitting VideoFrames and an
   // |error| callback for emitting decode errors.
diff --git a/third_party/blink/renderer/modules/webcodecs/video_encoder.cc b/third_party/blink/renderer/modules/webcodecs/video_encoder.cc
index a3e9e08..fbbde2db 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_encoder.cc
+++ b/third_party/blink/renderer/modules/webcodecs/video_encoder.cc
@@ -520,7 +520,8 @@
     return ScriptPromise();
 
   Request* request = MakeGarbageCollected<Request>();
-  request->resolver = MakePromise();
+  request->resolver =
+      MakeGarbageCollected<ScriptPromiseResolver>(script_state_);
   request->reset_count = reset_count_;
   request->type = Request::Type::kFlush;
   EnqueueRequest(request);
@@ -543,36 +544,12 @@
   while (!requests_.empty()) {
     Request* pending_req = requests_.TakeFirst();
     DCHECK(pending_req);
-    RejectPromise(pending_req);
+    if (pending_req->resolver)
+      pending_req->resolver.Release()->Resolve();
   }
   stall_request_processing_ = false;
 }
 
-ScriptPromiseResolver* VideoEncoder::MakePromise() {
-  outstanding_promises_++;
-  return MakeGarbageCollected<ScriptPromiseResolver>(script_state_);
-}
-
-void VideoEncoder::ResolvePromise(Request* req) {
-  if (!req || !req->resolver)
-    return;
-  req->resolver.Release()->Resolve();
-  DCHECK_GT(outstanding_promises_, 0u);
-  outstanding_promises_--;
-}
-
-void VideoEncoder::RejectPromise(Request* req, DOMException* ex) {
-  if (!req || !req->resolver)
-    return;
-  auto* resolver = req->resolver.Release();
-  if (ex)
-    resolver->Reject(ex);
-  else
-    resolver->Reject();
-  DCHECK_GT(outstanding_promises_, 0u);
-  outstanding_promises_--;
-}
-
 void VideoEncoder::HandleError(DOMException* ex) {
   // Save a temp before we clear the callback.
   V8WebCodecsErrorCallback* error_callback = error_callback_.Get();
@@ -767,26 +744,23 @@
     if (!self)
       return;
     DCHECK_CALLED_ON_VALID_SEQUENCE(self->sequence_checker_);
+    DCHECK(req);
+    DCHECK(req->resolver);
     if (self->reset_count_ != req->reset_count) {
-      self->RejectPromise(req);
+      req->resolver.Release()->Reject();
       return;
     }
-    DCHECK(req->resolver);
     if (status.is_ok()) {
-      self->ResolvePromise(req);
+      req->resolver.Release()->Resolve();
     } else {
-      std::string error_msg = "Flushing error.";
-      self->HandleError(error_msg, status);
-      auto* ex = MakeGarbageCollected<DOMException>(
-          DOMExceptionCode::kOperationError, error_msg.c_str());
-      self->RejectPromise(req, ex);
+      self->HandleError("Flushing error.", status);
+      req->resolver.Release()->Reject();
     }
     self->stall_request_processing_ = false;
     self->ProcessRequests();
   };
 
   stall_request_processing_ = true;
-
   media_encoder_->Flush(WTF::Bind(done_callback,
                                   WrapCrossThreadWeakPersistent(this),
                                   WrapCrossThreadPersistent(request)));
@@ -833,7 +807,7 @@
 }
 
 bool VideoEncoder::HasPendingActivity() const {
-  return outstanding_promises_ > 0;
+  return stall_request_processing_ || !requests_.empty();
 }
 
 void VideoEncoder::Trace(Visitor* visitor) const {
diff --git a/third_party/blink/renderer/modules/webcodecs/video_encoder.h b/third_party/blink/renderer/modules/webcodecs/video_encoder.h
index e0a3710..317b079d 100644
--- a/third_party/blink/renderer/modules/webcodecs/video_encoder.h
+++ b/third_party/blink/renderer/modules/webcodecs/video_encoder.h
@@ -132,8 +132,6 @@
 
   void ResetInternal();
   ScriptPromiseResolver* MakePromise();
-  void ResolvePromise(Request* req);
-  void RejectPromise(Request* req, DOMException* ex = nullptr);
 
   ParsedConfig* ParseConfig(const VideoEncoderConfig*, ExceptionState&);
   bool VerifyCodecSupport(ParsedConfig*, ExceptionState&);
@@ -168,12 +166,9 @@
   // an operation and its callback.
   uint32_t reset_count_ = 0;
 
-  // Number of not resolved/rejected promises created by this VideoEncoder.
-  uint32_t outstanding_promises_ = 0;
-
   // Some kConfigure and kFlush requests can't be executed in parallel with
   // kEncode. This flag stops processing of new requests in the requests_ queue
-  // till the current requests is finished.
+  // till the current requests are finished.
   bool stall_request_processing_ = false;
 
   SEQUENCE_CHECKER(sequence_checker_);
diff --git a/third_party/blink/tools/blinkpy/web_tests/port/driver.py b/third_party/blink/tools/blinkpy/web_tests/port/driver.py
index 64be214d..e9213e5 100644
--- a/third_party/blink/tools/blinkpy/web_tests/port/driver.py
+++ b/third_party/blink/tools/blinkpy/web_tests/port/driver.py
@@ -359,6 +359,8 @@
                 test_dir_prefix = 'external/wpt/'
                 test_url_prefix = '/'
             hostname, insecure_port, secure_port = self.WPT_HOST_AND_PORTS
+            if '.www.' in test_name:
+                hostname = "www.%s" % hostname
         else:
             test_dir_prefix = self.HTTP_DIR
             test_url_prefix = '/'
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 5f7b1fc..c2309c5 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -5507,9 +5507,6 @@
 # Sheriff 2020-02-21
 crbug.com/1054977 media/video-controls-rendering.html [ Pass Failure ]
 
-# Sheriff 2020-02-21
-crbug.com/1054916 [ Linux ] external/wpt/webxr/dom-overlay/ar_dom_overlay.https.html [ Pass Failure Timeout ]
-
 # Sheriff 2020-02-28
 crbug.com/1056879 [ Win7 ] external/wpt/webxr/xrSession_requestAnimationFrame_getViewerPose.https.html [ Pass Failure Timeout ]
 crbug.com/1053861 http/tests/devtools/network/network-initiator-chain.js [ Pass Failure ]
@@ -5975,7 +5972,6 @@
 # Eco-Infra Sheriff 2020-11-02
 crbug.com/1151922 external/wpt/css/css-backgrounds/border-radius-clip-001.html [ Failure ]
 crbug.com/1151922 external/wpt/css/css-backgrounds/border-radius-clip-002.htm [ Failure ]
-crbug.com/1144677 external/wpt/infrastructure/reftest/reftest.www.sub.html [ Failure ]
 
 crbug.com/1144537 external/wpt/xhr/responsexml-document-properties.htm [ Pass Failure ]
 
@@ -6027,3 +6023,7 @@
 crbug.com/1151844 [ Win ] virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu.html [ Failure ]
 crbug.com/1151844 [ Win ] virtual/controls-refresh-hc/fast/forms/color-scheme/file/file-appearance-basic.html [ Failure ]
 crbug.com/1151861 external/wpt/workers/semantics/multiple-workers/003.html [ Timeout Crash ]
+crbug.com/1152088 [ Mac10.13 Debug ] fast/dom/cssTarget-crash.html [ Pass Timeout ]
+crbug.com/1149734 http/tests/devtools/sources/source-frame-toolbar-items.js [ Pass Failure ]
+crbug.com/1149734 http/tests/devtools/sources/debugger-frameworks/frameworks-sourcemap.js [ Pass Failure ]
+crbug.com/1149734 http/tests/devtools/sources/debugger-ui/continue-to-location-markers.js [ Pass Failure ]
diff --git a/third_party/blink/web_tests/external/wpt/css/filter-effects/svg-unused-filter-on-clippath-mutated-crash.html b/third_party/blink/web_tests/external/wpt/css/filter-effects/svg-unused-filter-on-clippath-mutated-crash.html
new file mode 100644
index 0000000..060b254
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/filter-effects/svg-unused-filter-on-clippath-mutated-crash.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<html class='test-wait'>
+<title>Mutating a filter primitive in a filter that isn't used doesn't crash</title>
+<link rel='help' href='https://drafts.fxtf.org/filter-effects/#FilterProperty'>
+<link rel='bookmark' href='https://crbug.com/1151610'>
+<script src='/common/rendering-utils.js'></script>
+<svg>
+  <filter id='f'>
+    <feDiffuseLighting id='dl' lighting-color='currentcolor'/>
+  </filter>
+  <clipPath id='c' filter='url(#f)'>
+    <rect width='100' height='100'/>
+  </clipPath>
+  <rect width='500' height='500' fill='green' clip-path='url(#c)'/>
+</svg>
+<script>
+waitForAtLeastOneFrame().then(() => {
+  var primitive = document.getElementById('dl');
+  primitive.parentNode.appendChild(primitive);
+  primitive.setAttribute('lighting-color', 'blue');
+  document.documentElement.classList.remove('test-wait');
+});
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/css/selectors/hover-002-manual.html b/third_party/blink/web_tests/external/wpt/css/selectors/hover-002.html
similarity index 74%
rename from third_party/blink/web_tests/external/wpt/css/selectors/hover-002-manual.html
rename to third_party/blink/web_tests/external/wpt/css/selectors/hover-002.html
index 50859c5..02cee99b 100644
--- a/third_party/blink/web_tests/external/wpt/css/selectors/hover-002-manual.html
+++ b/third_party/blink/web_tests/external/wpt/css/selectors/hover-002.html
@@ -5,6 +5,9 @@
 <link rel="help" href="https://drafts.csswg.org/selectors/#the-hover-pseudo">
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
 <style>
   .affected:hover { color: green }
   #hoveredContents { display: contents }
@@ -14,6 +17,12 @@
   <div id="hovered2">Hover me - should become green</div>
 </div>
 <script>
+  function mouseMoveToTarget(selector) {
+     let target = document.querySelector(selector);
+     return new test_driver.Actions().pointerMove(0, 0, {origin: target})
+             .send();
+  }
+
   function testElementGreen(test, element) {
     element.addEventListener("mouseover", test.step_func(event => {
       assert_equals(getComputedStyle(element).color, "rgb(0, 128, 0)");
@@ -30,4 +39,9 @@
 
   async_test(t => { testElementGreen(t, hovered); }, "Hover #hovered element should make it go green");
   async_test(t => { testElementGreen(t, hovered2); }, "Hover #hoveredContents child should make it go green");
+
+  mouseMoveToTarget("#hovered").then(() => {
+    mouseMoveToTarget("#hovered2");
+  });
+
 </script>
diff --git a/third_party/blink/web_tests/external/wpt/infrastructure/server/subdomain-flag.www.sub.window-expected.txt b/third_party/blink/web_tests/external/wpt/infrastructure/server/subdomain-flag.www.sub.window-expected.txt
deleted file mode 100644
index 977b18c..0000000
--- a/third_party/blink/web_tests/external/wpt/infrastructure/server/subdomain-flag.www.sub.window-expected.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-This is a testharness.js-based test.
-FAIL Use of .www. file name flag implies www subdomain assert_equals: expected "www.web-platform.test" but got "web-platform.test"
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/actions/mouseClickCount.html b/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/actions/mouseClickCount.html
new file mode 100644
index 0000000..4f02088
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/actions/mouseClickCount.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>TestDriver actions: test the mouse click counts at different cases</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/testdriver.js"></script>
+<script src="/resources/testdriver-actions.js"></script>
+<script src="/resources/testdriver-vendor.js"></script>
+
+<style>
+div#test {
+  position: fixed;
+  touch-action: none;
+  top: 5px;
+  left: 5px;
+  width: 100px;
+  height: 100px;
+  background-color: blue;
+}
+</style>
+
+<div id="test">
+</div>
+
+<script>
+let clickCountList = [];
+
+async_test(t => {
+  let test = document.getElementById("test");
+  test.addEventListener("click", e => {
+    clickCountList.push(e.detail);
+  });
+
+  let div = document.getElementById("test");
+  var actions = new test_driver.Actions();
+  actions.pointerMove(0, 0, {origin: test})
+    .pointerDown()
+    .pointerUp()
+    .pointerDown()
+    .pointerUp()
+    .pointerMove(15, 15, {origin: test})
+    .pointerDown()
+    .pointerUp()
+    .pointerDown()
+    .pointerUp()
+    .pointerDown()
+    .pointerUp()
+    .send()
+    .then(t.step_func_done(() => {
+      let expectedClickCountList = [1, 2, 1, 2, 3];
+      assert_array_equals(clickCountList, expectedClickCountList);
+  })).catch(e => t.step_func(() => assert_unreached("Actions sequence failed " + e)));
+});
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/webcodecs/video-decoder.any.js b/third_party/blink/web_tests/external/wpt/webcodecs/video-decoder.any.js
index e667a564..2dd85ad 100644
--- a/third_party/blink/web_tests/external/wpt/webcodecs/video-decoder.any.js
+++ b/third_party/blink/web_tests/external/wpt/webcodecs/video-decoder.any.js
@@ -113,10 +113,18 @@
 promise_test(async t => {
   let buffer = await vp9.buffer();
 
+  let outputs_before_reset = 0;
+  let outputs_after_reset = 0;
+
   let decoder = new VideoDecoder({
+    // Pre-reset() chunks will all have timestamp=0, while post-reset() chunks
+    // will all have timestamp=1.
     output(frame) {
       t.step(() => {
-        assert_unreached("reset() should prevent this output from arriving");
+        if (frame.timestamp == 0)
+          outputs_before_reset++;
+        else
+          outputs_after_reset++;
       });
     },
     error(e) {
@@ -126,19 +134,40 @@
 
   decoder.configure({codec: vp9.codec});
 
-  decoder.decode(new EncodedVideoChunk({
-    type:'key',
-    timestamp:0,
-    data: view(buffer, vp9.frames[0])
-  }));
+  for (let i = 0; i < 100; i++) {
+    decoder.decode(new EncodedVideoChunk({
+      type:'key',
+      timestamp:0,
+      data: view(buffer, vp9.frames[0])
+    }));
+  }
 
-  let flushPromise = decoder.flush();
+  assert_greater_than(decoder.decodeQueueSize, 0);
+
+  // Wait for the first frame to be decoded.
+  await t.step_wait(() => outputs_before_reset > 0,
+      "Decoded outputs started coming", 10000, 1);
+
+  let saved_outputs_before_reset = outputs_before_reset;
+  assert_greater_than(saved_outputs_before_reset, 0);
+  assert_less_than(saved_outputs_before_reset, 100);
 
   decoder.reset()
-
   assert_equals(decoder.decodeQueueSize, 0);
 
-  await promise_rejects_exactly(t, undefined, flushPromise);
+  decoder.configure({codec: vp9.codec});
+
+  for (let i = 0; i < 5; i++) {
+    decoder.decode(new EncodedVideoChunk({
+      type:'key',
+      timestamp:1,
+      data: view(buffer, vp9.frames[0])
+    }));
+  }
+  await decoder.flush();
+  assert_equals(outputs_after_reset, 5);
+  assert_equals(saved_outputs_before_reset, outputs_before_reset);
+  assert_equals(decoder.decodeQueueSize, 0);
 
   endAfterEventLoopTurn();
 }, 'Verify reset() suppresses output and rejects flush');
diff --git a/third_party/blink/web_tests/external/wpt_automation/css/selectors/hover-002-manual-automation.js b/third_party/blink/web_tests/external/wpt_automation/css/selectors/hover-002-manual-automation.js
deleted file mode 100644
index b4968ca4..0000000
--- a/third_party/blink/web_tests/external/wpt_automation/css/selectors/hover-002-manual-automation.js
+++ /dev/null
@@ -1,7 +0,0 @@
-importAutomationScript('/pointerevents/pointerevent_common_input.js');
-
-function inject_input() {
-  return mouseMoveIntoTarget("#hovered").then(() => {
-    return mouseMoveIntoTarget("#hovered2");
-  });
-}
diff --git a/third_party/blink/web_tests/fast/canvas/color-space/canvas-getImageData.html b/third_party/blink/web_tests/fast/canvas/color-space/canvas-getImageData.html
index 13b28e8..7cb3e46 100644
--- a/third_party/blink/web_tests/fast/canvas/color-space/canvas-getImageData.html
+++ b/third_party/blink/web_tests/fast/canvas/color-space/canvas-getImageData.html
@@ -10,20 +10,9 @@
   var color_style = 'rgb(50, 100, 150)';
 
   var color_srgb_f32 = [50/255., 100/255., 150/255., 1.0];
-  var color_srgb_u8  = [color_srgb_f32[0] * 255, color_srgb_f32[1] * 255, color_srgb_f32[2] * 255, 255];
-  var color_srgb_u16 = [color_srgb_f32[0] * 65535, color_srgb_f32[1] * 65535, color_srgb_f32[2] * 65535, 65535];
-
   var color_p3_f32 = [0.24304, 0.38818, 0.57227, 1.0];
-  var color_p3_u8  = [color_p3_f32[0] * 255, color_p3_f32[1] * 255, color_p3_f32[2] * 255, 255];
-  var color_p3_u16 = [color_p3_f32[0] * 65535, color_p3_f32[1] * 65535, color_p3_f32[2] * 65535, 65535];
-
   var color_rec2020_f32 = [0.34106, 0.41553, 0.59180, 1.0];
-  var color_rec2020_u8  = [color_rec2020_f32[0] * 255, color_rec2020_f32[1] * 255, color_rec2020_f32[2] * 255, 255];
-  var color_rec2020_u16 = [color_rec2020_f32[0] * 65535, color_rec2020_f32[1] * 65535, color_rec2020_f32[2] * 65535, 65535];
-
   var epsilon_f32 =  2 / 255.;
-  var epsilon_u8 = 2;
-  var epsilon_u16 = 2 * 255;
 
   var canvas = document.createElement('canvas');
   canvas.width = 10;
@@ -34,32 +23,27 @@
 
   var pixel = ctx.getImageData(5, 5, 1, 1, {colorSpace: data_color_space, storageFormat:data_storage_format}).data;
 
+  var epsilon = epsilon_f32;
   var pixel_expected;
-  var epsilon;
-  if (data_storage_format == 'float32') {
-    epsilon = epsilon_f32;
-    if (data_color_space == 'srgb')
-        pixel_expected = color_srgb_f32;
-    if (data_color_space == 'p3')
-        pixel_expected = color_p3_f32;
-    if (data_color_space == 'rec2020')
-        pixel_expected = color_rec2020_f32;
-  } else if (data_storage_format == 'uint16') {
-    epsilon = epsilon_u16;
-    if (data_color_space == 'srgb')
-        pixel_expected = color_srgb_u16;
-    if (data_color_space == 'p3')
-        pixel_expected = color_p3_u16;
-    if (data_color_space == 'rec2020')
-        pixel_expected = color_rec2020_u16;
+  if (data_color_space == 'srgb')
+      pixel_expected = color_srgb_f32;
+  else if (data_color_space == 'p3')
+      pixel_expected = color_p3_f32;
+  else if (data_color_space == 'rec2020')
+      pixel_expected = color_rec2020_f32;
+
+  if (data_storage_format == 'uint16') {
+    epsilon *= 65535;
+    pixel_expected = [pixel_expected[0] * 65535,
+                      pixel_expected[1] * 65535,
+                      pixel_expected[2] * 65535,
+                      pixel_expected[3] * 65535];
   } else if (data_storage_format == 'uint8') {
-    epsilon = epsilon_u8;
-    if (data_color_space == 'srgb')
-        pixel_expected = color_srgb_u8;
-    if (data_color_space == 'p3')
-        pixel_expected = color_p3_u8;
-    if (data_color_space == 'rec2020')
-        pixel_expected = color_rec2020_u8;
+    epsilon *= 255;
+    pixel_expected = [pixel_expected[0] * 255,
+                      pixel_expected[1] * 255,
+                      pixel_expected[2] * 255,
+                      pixel_expected[3] * 255];
   }
 
   var passed = true;
@@ -87,13 +71,12 @@
     for (var j = 0; j < 2; ++j) {
       for (var k = 0; k < 3; ++k) {
         for (var l = 0; l < 3; ++l) {
-          // TODO(http://crbug.com/skia/10965): Reading a uint8 canvas from a
-          // uint8 canvas with no color conversion will cause an unexpected
-          // transformation to be performed on the data.
-          if (i == k && canvas_pixel_formats[j] == 'uint8' && image_data_pixel_formats[l] == 'uint8')
-            continue;
-          if (!run_test(color_spaces[i], canvas_pixel_formats[j], color_spaces[k], image_data_pixel_formats[l]))
+          if (!run_test(color_spaces[i],
+                        canvas_pixel_formats[j],
+                        color_spaces[k],
+                        image_data_pixel_formats[l])) {
             passed = false;
+          }
         }
       }
     }
diff --git a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-display-locked-expected.txt b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-display-locked-expected.txt
index 355c8010..7dc199d 100644
--- a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-display-locked-expected.txt
+++ b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-display-locked-expected.txt
@@ -2,26 +2,25 @@
 
 WebArea
   generic
+    text "spacer"
+      InlineTextBox
+  generic
+    text "locked"
     generic
-      text "spacer"
-        InlineTextBox
-    generic
-      text "locked"
+      text "child"
       generic
-        text "child"
-        generic
-          text "grandChild"
-        text
+        text "grandChild"
       text
-      generic
-        text "invisible"
-      text
-      generic
-        text "nested"
-      text "text"
+    text
     generic
+      text "invisible"
+    text
     generic
-    generic
-      text "normal text"
-        InlineTextBox
+      text "nested"
+    text "text"
+  generic
+  generic
+  generic
+    text "normal text"
+      InlineTextBox
 
diff --git a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt
index 8c5f86b1..d47e565f 100644
--- a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt
+++ b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-getFullAXTree-expected.txt
@@ -2,13 +2,12 @@
 
 WebArea
   generic
-    generic
-      text "Some text in a div, also a"
+    text "Some text in a div, also a"
+      InlineTextBox
+    link "link"
+      text "link"
         InlineTextBox
-      link "link"
-        text "link"
-          InlineTextBox
-    button "Hello Button"
-      text "Hello Button"
-        InlineTextBox
+  button "Hello Button"
+    text "Hello Button"
+      InlineTextBox
 
diff --git a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-query-axtree-expected.txt b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-query-axtree-expected.txt
index 40af0d57..a0e8d65 100644
--- a/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-query-axtree-expected.txt
+++ b/third_party/blink/web_tests/inspector-protocol/accessibility/accessibility-query-axtree-expected.txt
@@ -81,59 +81,9 @@
         value : InlineTextBox
     }
 }
-{
-    backendDOMNodeId : <number>
-    ignored : true
-    ignoredReasons : [
-        [0] : {
-            name : ariaHiddenElement
-            value : {
-                type : boolean
-                value : true
-            }
-        }
-    ]
-    name : {
-        type : computedString
-        value : title
-    }
-    nodeId : <string>
-    role : {
-        type : role
-        value : heading
-    }
-}
-{
-    backendDOMNodeId : <number>
-    ignored : true
-    ignoredReasons : [
-        [0] : {
-            name : ariaHiddenSubtree
-            value : {
-                relatedNodes : [
-                    [0] : {
-                        backendDOMNodeId : <number>
-                        idref : hidden
-                    }
-                ]
-                type : idref
-            }
-        }
-    ]
-    name : {
-        type : computedString
-        value : title
-    }
-    nodeId : <string>
-    role : {
-        type : role
-        value : text
-    }
-}
 
 Running test: testGetNodesForSubtreeByAccessibleName
 find all elements with accessible name "foo"
-node3
 node5
 node6
 find all elements with accessible name "foo" inside container
@@ -159,14 +109,11 @@
 find all elements with role "button"
 node5
 node6
-node7
 node8
 node10
 node21
 find all elements with role "heading"
 shown
-hidden
-unrendered
 node11
 node13
 find all elements with role "treeitem"
@@ -176,7 +123,6 @@
 node33
 node34
 find all ignored nodes with role "presentation"
-node12
 
 Running test: testGetNodesForSubtreeByAccessibleNameAndRole
 find all elements with accessible name "foo" and role "button"
diff --git a/third_party/blink/web_tests/virtual/legacy-client-hints-no-fp-delegation/README.md b/third_party/blink/web_tests/virtual/legacy-client-hints-no-fp-delegation/README.md
index c1a219c..81f92461 100644
--- a/third_party/blink/web_tests/virtual/legacy-client-hints-no-fp-delegation/README.md
+++ b/third_party/blink/web_tests/virtual/legacy-client-hints-no-fp-delegation/README.md
@@ -1 +1 @@
-This virtual test suite is for testing the legacy Client Hints behavior when Feature Policy delegation is disabled, and see that when the flag is on, legacy hints are sent to third party origins.
+This virtual test suite is for testing the legacy Client Hints behavior when Permissions Policy delegation is disabled, and see that when the flag is on, legacy hints are sent to third party origins.
diff --git a/third_party/blink/web_tests/virtual/legacy-client-hints/README.md b/third_party/blink/web_tests/virtual/legacy-client-hints/README.md
index 3100d3c..2bd41d3 100644
--- a/third_party/blink/web_tests/virtual/legacy-client-hints/README.md
+++ b/third_party/blink/web_tests/virtual/legacy-client-hints/README.md
@@ -1 +1 @@
-This virtual test suite is for testing the legacy Client Hints behavior alongside Feature Policy delegation, and see that when the flag is on, legacy hints are sent regardless of Feature Policy opt-in.
+This virtual test suite is for testing the legacy Client Hints behavior alongside Permissions Policy delegation, and see that when the flag is on, legacy hints are sent regardless of Permissions Policy opt-in.
diff --git a/third_party/protobuf/BUILD.gn b/third_party/protobuf/BUILD.gn
index 54d668a6..a916f19e 100644
--- a/third_party/protobuf/BUILD.gn
+++ b/third_party/protobuf/BUILD.gn
@@ -133,6 +133,7 @@
   "src/google/protobuf/stubs/template_util.h",
   "src/google/protobuf/stubs/time.cc",
   "src/google/protobuf/stubs/time.h",
+  "src/google/protobuf/util/time_util.h",
   "src/google/protobuf/wire_format_lite.cc",
   "src/google/protobuf/wire_format_lite.h",
 ]
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 4c86394..d1c630d 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -22831,6 +22831,9 @@
 </enum>
 
 <enum name="EnterpriseUserPolicyChromeOSSessionAbortType">
+  <obsolete>
+    Deprecated 11/2020.
+  </obsolete>
   <int value="0" label="Initialization, Google cloud management">
     Abort of asynchronous user policy initialization when the user is managed
     with the Google cloud management.
@@ -43267,6 +43270,7 @@
   <int value="-612480090" label="FasterLocationReload:enabled"/>
   <int value="-610411643" label="enable-printer-app-search"/>
   <int value="-608775184" label="PasswordsWeaknessCheck:enabled"/>
+  <int value="-607925721" label="WebViewVulkan:disabled"/>
   <int value="-606898702" label="MaterialDesignSettings:disabled"/>
   <int value="-606696801" label="TabGroupsUiImprovementsAndroid:enabled"/>
   <int value="-606431158" label="DrawVerticallyEdgeToEdge:enabled"/>
@@ -45578,6 +45582,7 @@
   <int value="1670161209" label="ClickToOpenPDFPlaceholder:enabled"/>
   <int value="1670799163" label="ChromeHomeShowGoogleGWhenUrlCleared:enabled"/>
   <int value="1671021713" label="AutofillImportDynamicForms:disabled"/>
+  <int value="1671985641" label="WebViewVulkan:enabled"/>
   <int value="1673427566" label="ChromeHomeExpandButton:disabled"/>
   <int value="1677167062" label="AutomaticPasswordGeneration:enabled"/>
   <int value="1677258310" label="DragAppsInTabletMode:disabled"/>
@@ -58033,6 +58038,11 @@
   <int value="14" label="Show notification access setup response"/>
 </enum>
 
+<enum name="PhoneHubNotificationInteraction">
+  <int value="0" label="User sent an inline reply from notification"/>
+  <int value="1" label="User dismissed notification"/>
+</enum>
+
 <enum name="PhoneHubQuickAction">
   <int value="0" label="Toggle Hotspot On"/>
   <int value="1" label="Toggle Hotspot Off"/>
diff --git a/tools/metrics/histograms/histograms_xml/apps/histograms.xml b/tools/metrics/histograms/histograms_xml/apps/histograms.xml
index 917a88c6..5af6e1fc 100644
--- a/tools/metrics/histograms/histograms_xml/apps/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/apps/histograms.xml
@@ -140,7 +140,7 @@
 </histogram>
 
 <histogram name="Apps.AppList.AppSearchProvider.ZeroStateLatency" units="ms"
-    expires_after="2020-12-31">
+    expires_after="2021-12-31">
   <owner>jennyz@chromium.org</owner>
   <owner>newcomer@chromium.org</owner>
   <summary>
@@ -325,7 +325,7 @@
 </histogram>
 
 <histogram name="Apps.AppList.LauncherSearchProvider.QueryTime" units="ms"
-    expires_after="2020-12-31">
+    expires_after="2021-12-31">
   <owner>jennyz@chromium.org</owner>
   <owner>newcomer@chromium.org</owner>
   <summary>
@@ -643,7 +643,7 @@
 </histogram>
 
 <histogram name="Apps.AppList.ZeroStateSearchResultRemovalDecision"
-    enum="AppListZeroStateResultRemovalConfirmation" expires_after="2020-12-31">
+    enum="AppListZeroStateResultRemovalConfirmation" expires_after="2021-12-31">
   <owner>jennyz@chromium.org</owner>
   <owner>newcomer@chromium.org</owner>
   <summary>
@@ -655,7 +655,7 @@
 
 <histogram name="Apps.AppList.ZeroStateSearchResultUserActionType"
     enum="AppListZeroStateSearchResultUserActionType"
-    expires_after="2020-12-31">
+    expires_after="2021-12-31">
   <owner>jennyz@chromium.org</owner>
   <owner>newcomer@chromium.org</owner>
   <summary>
@@ -725,7 +725,7 @@
 </histogram>
 
 <histogram name="Apps.AppListDefaultSearchResultOpenType"
-    enum="AppListSearchResult" expires_after="2020-12-31">
+    enum="AppListSearchResult" expires_after="2021-12-31">
   <owner>jennyz@chromium.org</owner>
   <owner>newcomer@chromium.org</owner>
   <summary>
@@ -858,7 +858,7 @@
 </histogram>
 
 <histogram name="Apps.AppListPlayStoreAppLaunchedIndex" units="indices"
-    expires_after="2020-12-31">
+    expires_after="2021-12-31">
   <owner>jennyz@chromium.org</owner>
   <owner>newcomer@chromium.org</owner>
   <summary>
@@ -874,7 +874,7 @@
 </histogram>
 
 <histogram name="Apps.AppListPlayStoreSearchAppsDisplayed" units="apss"
-    expires_after="2020-12-31">
+    expires_after="2021-12-31">
   <owner>jennyz@chromium.org</owner>
   <owner>newcomer@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/arc/histograms.xml b/tools/metrics/histograms/histograms_xml/arc/histograms.xml
index b494dc5..a76f010 100644
--- a/tools/metrics/histograms/histograms_xml/arc/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/arc/histograms.xml
@@ -752,7 +752,7 @@
 </histogram>
 
 <histogram name="Arc.PlayStoreSearch.DefaultResultClickLatency" units="ms"
-    expires_after="2020-12-31">
+    expires_after="2021-12-31">
   <owner>jennyz@chromium.org</owner>
   <owner>newcomer@chromium.org</owner>
   <summary>
@@ -771,7 +771,7 @@
 </histogram>
 
 <histogram name="Arc.PlayStoreSearch.ResultClickLatency" units="ms"
-    expires_after="2020-12-31">
+    expires_after="2021-12-31">
   <owner>jennyz@chromium.org</owner>
   <owner>newcomer@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml
index d4bcd2c..05f6dfd 100644
--- a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml
@@ -1374,6 +1374,9 @@
 <histogram name="Enterprise.UserPolicyChromeOS.SessionAbort"
     enum="EnterpriseUserPolicyChromeOSSessionAbortType"
     expires_after="2020-02-23">
+  <obsolete>
+    Removed 2020/11.
+  </obsolete>
   <owner>emaxx@chromium.org</owner>
   <summary>
     Session abort due to a fatal error of Chrome OS user policy initialization.
diff --git a/tools/metrics/histograms/histograms_xml/others/histograms.xml b/tools/metrics/histograms/histograms_xml/others/histograms.xml
index b6ce344..8533ad2e 100644
--- a/tools/metrics/histograms/histograms_xml/others/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/others/histograms.xml
@@ -21,6 +21,18 @@
 
 <histograms>
 
+<variants name="TextFragmentSource">
+<!-- Should be synced with TextFragmentLinkOpenSource in enums.xml. -->
+
+  <variant name="" summary="all sources">
+    <obsolete>
+      Replaced by split out versions below.
+    </obsolete>
+  </variant>
+  <variant name=".SearchEngine" summary="the default search engine."/>
+  <variant name=".Unknown" summary="unknown but not the default search engine"/>
+</variants>
+
 <histogram name="AccountManager.AccountAdditionSource"
     enum="AccountManagerAccountAdditionSource" expires_after="2021-03-28">
   <owner>sinhak@chromium.org</owner>
@@ -5267,7 +5279,7 @@
 </histogram>
 
 <histogram name="FirstRun.IOSFirebaseConfigured" enum="FirebaseConfiguredState"
-    expires_after="M87">
+    expires_after="M89">
   <owner>ghendel@chromium.org</owner>
   <owner>pkl@chromium.org</owner>
   <summary>Track whether Firebase is enabled or not at app startup.</summary>
@@ -14735,39 +14747,6 @@
   </summary>
 </histogram>
 
-<histogram name="TextFragmentAnchor.AmbiguousMatch" enum="Boolean"
-    expires_after="2021-03-07">
-  <owner>nburris@chromium.org</owner>
-  <owner>bokan@chromium.org</owner>
-  <summary>
-    Whether we found multiple matches for a selector. Recorded when
-    TextFragmentAnchor finishes searching once the page is loaded.
-  </summary>
-</histogram>
-
-<histogram name="TextFragmentAnchor.DidScrollIntoView" enum="Boolean"
-    expires_after="2021-05-09">
-  <owner>nburris@chromium.org</owner>
-  <owner>bokan@chromium.org</owner>
-  <summary>
-    Whether the page did a non-zero scroll in order to scroll the match into
-    view. Only recorded if we found a match and scrolled it into view. Recorded
-    when TextFragmentAnchor finishes searching once the page is loaded.
-  </summary>
-</histogram>
-
-<histogram name="TextFragmentAnchor.DirectiveLength" units="characters"
-    expires_after="2021-05-09">
-  <owner>nburris@chromium.org</owner>
-  <owner>bokan@chromium.org</owner>
-  <summary>
-    The raw length of the directive in the URL (e.g. spaces count as the three
-    characters '%20'), regardless of how many text= terms there are. Recorded if
-    there was a text directive, regardless of whether a match was found.
-    Recorded when TextFragmentAnchor finishes searching once the page is loaded.
-  </summary>
-</histogram>
-
 <histogram name="TextFragmentAnchor.ElementIdFragmentFound" enum="Boolean"
     expires_after="2021-03-07">
   <owner>nburris@chromium.org</owner>
@@ -14779,28 +14758,6 @@
   </summary>
 </histogram>
 
-<histogram name="TextFragmentAnchor.EndTextLength" units="characters"
-    expires_after="2021-03-07">
-  <owner>nburris@chromium.org</owner>
-  <owner>bokan@chromium.org</owner>
-  <summary>
-    The length of the end parameter, in the case of a range match. Only recorded
-    if a match was found. Recorded when TextFragmentAnchor finishes searching
-    once the page is loaded.
-  </summary>
-</histogram>
-
-<histogram name="TextFragmentAnchor.ExactTextLength" units="characters"
-    expires_after="2021-05-09">
-  <owner>nburris@chromium.org</owner>
-  <owner>bokan@chromium.org</owner>
-  <summary>
-    The length of the matched text, in the case of an exact match. Only recorded
-    if a match was found. Recorded when TextFragmentAnchor finishes searching
-    once the page is loaded.
-  </summary>
-</histogram>
-
 <histogram name="TextFragmentAnchor.LinkOpenSource"
     enum="TextFragmentLinkOpenSource" expires_after="2021-05-09">
   <owner>gayane@chromium.org</owner>
@@ -14821,28 +14778,104 @@
   </summary>
 </histogram>
 
-<histogram name="TextFragmentAnchor.ListItemMatch" units="Boolean"
-    expires_after="2021-03-07">
+<histogram name="TextFragmentAnchor{TextFragmentSource}.AmbiguousMatch"
+    enum="Boolean" expires_after="2021-03-07">
+  <owner>nburris@chromium.org</owner>
+  <owner>bokan@chromium.org</owner>
+  <summary>
+    Whether we found multiple matches for a selector. Recorded when
+    TextFragmentAnchor finishes searching once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
+  </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
+</histogram>
+
+<histogram name="TextFragmentAnchor{TextFragmentSource}.DidScrollIntoView"
+    enum="Boolean" expires_after="2021-05-09">
+  <owner>nburris@chromium.org</owner>
+  <owner>bokan@chromium.org</owner>
+  <summary>
+    Whether the page did a non-zero scroll in order to scroll the match into
+    view. Only recorded if we found a match and scrolled it into view. Recorded
+    when TextFragmentAnchor finishes searching once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
+  </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
+</histogram>
+
+<histogram name="TextFragmentAnchor{TextFragmentSource}.DirectiveLength"
+    units="characters" expires_after="2021-05-09">
+  <owner>nburris@chromium.org</owner>
+  <owner>bokan@chromium.org</owner>
+  <summary>
+    The raw length of the directive in the URL (e.g. spaces count as the three
+    characters '%20'), regardless of how many text= terms there are. Recorded if
+    there was a text directive, regardless of whether a match was found.
+    Recorded when TextFragmentAnchor finishes searching once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
+  </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
+</histogram>
+
+<histogram name="TextFragmentAnchor{TextFragmentSource}.EndTextLength"
+    units="characters" expires_after="2021-03-07">
+  <owner>nburris@chromium.org</owner>
+  <owner>bokan@chromium.org</owner>
+  <summary>
+    The length of the end parameter, in the case of a range match. Only recorded
+    if a match was found. Recorded when TextFragmentAnchor finishes searching
+    once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
+  </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
+</histogram>
+
+<histogram name="TextFragmentAnchor{TextFragmentSource}.ExactTextLength"
+    units="characters" expires_after="2021-05-09">
+  <owner>nburris@chromium.org</owner>
+  <owner>bokan@chromium.org</owner>
+  <summary>
+    The length of the matched text, in the case of an exact match. Only recorded
+    if a match was found. Recorded when TextFragmentAnchor finishes searching
+    once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
+  </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
+</histogram>
+
+<histogram name="TextFragmentAnchor{TextFragmentSource}.ListItemMatch"
+    units="Boolean" expires_after="2021-03-07">
   <owner>nburris@chromium.org</owner>
   <owner>bokan@chromium.org</owner>
   <summary>
     Whether the match was within a list item. Only recorded for exact text
     fragments and only if a match was found. Recorded when TextFragmentAnchor
     finishes searching once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
   </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
 </histogram>
 
-<histogram name="TextFragmentAnchor.MatchRate" units="%"
+<histogram name="TextFragmentAnchor{TextFragmentSource}.MatchRate" units="%"
     expires_after="2021-05-09">
   <owner>nburris@chromium.org</owner>
   <owner>bokan@chromium.org</owner>
   <summary>
     The percentage of selectors for which a match was found in the document.
     Recorded when TextFragmentAnchor finishes searching once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
   </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
 </histogram>
 
-<histogram name="TextFragmentAnchor.Parameters"
+<histogram name="TextFragmentAnchor{TextFragmentSource}.Parameters"
     enum="TextFragmentAnchorParameters" expires_after="2021-05-09">
   <owner>nburris@chromium.org</owner>
   <owner>bokan@chromium.org</owner>
@@ -14850,65 +14883,83 @@
     An enum indicating which parameters were specified in the text fragment
     anchor. Only recorded if a match was found. Recorded when TextFragmentAnchor
     finishes searching once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
   </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
 </histogram>
 
-<histogram name="TextFragmentAnchor.RangeMatchLength" units="characters"
-    expires_after="2021-03-07">
+<histogram name="TextFragmentAnchor{TextFragmentSource}.RangeMatchLength"
+    units="characters" expires_after="2021-03-07">
   <owner>nburris@chromium.org</owner>
   <owner>bokan@chromium.org</owner>
   <summary>
     The length of the matched text, in the case of a range match. Only recorded
     if a match was found. Recorded when TextFragmentAnchor finishes searching
     once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
   </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
 </histogram>
 
-<histogram name="TextFragmentAnchor.ScrollCancelled" enum="Boolean"
-    expires_after="2021-03-07">
+<histogram name="TextFragmentAnchor{TextFragmentSource}.ScrollCancelled"
+    enum="Boolean" expires_after="2021-03-07">
   <owner>nburris@chromium.org</owner>
   <owner>bokan@chromium.org</owner>
   <summary>
     Whether the scroll into view was cancelled by a user gesture or programmatic
     scroll. Recorded when TextFragmentAnchor finishes searching once the page is
     loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
   </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
 </histogram>
 
-<histogram name="TextFragmentAnchor.SelectorCount" units="selectors"
-    expires_after="2021-05-09">
+<histogram name="TextFragmentAnchor{TextFragmentSource}.SelectorCount"
+    units="selectors" expires_after="2021-05-09">
   <owner>nburris@chromium.org</owner>
   <owner>bokan@chromium.org</owner>
   <summary>
     The number of selectors in the text fragment anchor if it is present.
     Recorded when TextFragmentAnchor finishes searching once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
   </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
 </histogram>
 
-<histogram name="TextFragmentAnchor.StartTextLength" units="characters"
-    expires_after="2021-03-07">
+<histogram name="TextFragmentAnchor{TextFragmentSource}.StartTextLength"
+    units="characters" expires_after="2021-03-07">
   <owner>nburris@chromium.org</owner>
   <owner>bokan@chromium.org</owner>
   <summary>
     The length of the start parameter, in the case of a range match. Only
     recorded if a match was found. Recorded when TextFragmentAnchor finishes
     searching once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
   </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
 </histogram>
 
-<histogram name="TextFragmentAnchor.TableCellMatch" units="Boolean"
-    expires_after="2021-03-07">
+<histogram name="TextFragmentAnchor{TextFragmentSource}.TableCellMatch"
+    units="Boolean" expires_after="2021-03-07">
   <owner>nburris@chromium.org</owner>
   <owner>bokan@chromium.org</owner>
   <summary>
     Whether the match was within a table cell. Only recorded for exact text
     fragments and only if a match was found. Recorded when TextFragmentAnchor
     finishes searching once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
   </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
 </histogram>
 
-<histogram name="TextFragmentAnchor.TimeToScrollIntoView" units="ms"
-    expires_after="2021-05-09">
+<histogram name="TextFragmentAnchor{TextFragmentSource}.TimeToScrollIntoView"
+    units="ms" expires_after="2021-05-09">
   <owner>nburris@chromium.org</owner>
   <owner>bokan@chromium.org</owner>
   <summary>
@@ -14916,11 +14967,14 @@
     and scrolling the target into view. Only recorded if there is a match and we
     scroll it into view. Recorded when TextFragmentAnchor finishes searching
     once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
   </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
 </histogram>
 
-<histogram name="TextFragmentAnchor.TimeToScrollToTop" units="ms"
-    expires_after="2021-03-07">
+<histogram name="TextFragmentAnchor{TextFragmentSource}.TimeToScrollToTop"
+    units="ms" expires_after="2021-03-07">
   <owner>nburris@chromium.org</owner>
   <owner>bokan@chromium.org</owner>
   <summary>
@@ -14929,7 +14983,10 @@
     recorded if a match is scrolled into view and the user subsequently scrolled
     back to the top of the page. Recorded when TextFragmentAnchor finishes
     searching once the page is loaded.
+
+    Recorded from text fragment links followed from {TextFragmentSource}.
   </summary>
+  <token key="TextFragmentSource" variants="TextFragmentSource"/>
 </histogram>
 
 <histogram name="TextToSpeech.Event" enum="TextToSpeechEvent"
diff --git a/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml b/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml
index 29d214b..ada49f1 100644
--- a/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/phonehub/histograms.xml
@@ -92,6 +92,16 @@
   </summary>
 </histogram>
 
+<histogram name="PhoneHub.NotificationInteraction"
+    enum="PhoneHubNotificationInteraction" expires_after="2021-11-20">
+  <owner>meilinw@chromium.org</owner>
+  <owner>khorimoto@chromium.org</owner>
+  <summary>
+    Events logged after the user interacts with a PhoneHub notification by
+    sending an inline reply or dismissing it.
+  </summary>
+</histogram>
+
 <histogram name="PhoneHub.NotificationOptInEvents"
     enum="PhoneHubInterstitialScreenEvent" expires_after="2021-10-31">
   <owner>tengs@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms_xml/stability/histograms.xml b/tools/metrics/histograms/histograms_xml/stability/histograms.xml
index d10a8ba..ec42af7 100644
--- a/tools/metrics/histograms/histograms_xml/stability/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/stability/histograms.xml
@@ -60,7 +60,7 @@
 </histogram>
 
 <histogram name="Stability.Android.ProcessedRealMinidumps"
-    enum="AndroidProcessedMinidumps" expires_after="2021-05-09">
+    enum="AndroidProcessedMinidumps" expires_after="2021-11-23">
   <owner>mheikal@chromium.org</owner>
   <owner>smaier@chromium.org</owner>
   <owner>wnwen@chromium.org</owner>
@@ -73,7 +73,7 @@
 </histogram>
 
 <histogram name="Stability.Android.ProcessedSimulatedMinidumps"
-    enum="AndroidProcessedMinidumps" expires_after="2021-01-06">
+    enum="AndroidProcessedMinidumps" expires_after="2021-11-23">
   <owner>mheikal@chromium.org</owner>
   <owner>smaier@chromium.org</owner>
   <owner>wnwen@chromium.org</owner>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
index 2d13d5c..44a3eaaf 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
@@ -633,7 +633,7 @@
 <translation id="9148058034647219655">প্রস্থান করুন</translation>
 <translation id="9154418932169119429">এই ইমেজটি অফলাইনে উপলভ্য নয়৷</translation>
 <translation id="9213073329713032541">ইনস্টলেশন চালু হয়েছে।</translation>
-<translation id="9219103736887031265">ছবিগুলি</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="9219908252191632183">লুনার</translation>
 <translation id="939736085109172342">নতুন ফোল্ডার</translation>
 <translation id="942954117721265519">এই ডিরেক্টরিতে কোনো ছবি নেই৷</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
index 2e300f7..3655acaa 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Nevažeći znak: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">Pojednostavljeni kineski</translation>
 <translation id="2208158072373999562">Zip arhiva</translation>
+<translation id="2208919847696382164">Instaliranje uz Linux</translation>
 <translation id="2225536596944493418">Jeste li sigurni da želite izbrisati sljedeći broj stavki: <ph name="NUMBER_OF_ITEMS" />?</translation>
 <translation id="2230062665678605299">Kreiranje foldera "<ph name="FOLDER_NAME" />" nije uspjelo. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Premješteno.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Lokacija fajla</translation>
 <translation id="2672394958563893062">Došlo je do greške. Kliknite da ponovo pokrenete od početka.</translation>
 <translation id="2676946222714718093">Reproducira se na</translation>
+<translation id="2718540689505416944">Instaliranje aplikacije uz Linux</translation>
 <translation id="2735623501230989521">Odobrite da Parallels Desktop pristupa fajlovima u folderu <ph name="FOLDER_NAME" /></translation>
 <translation id="2771816809568414714">Sir</translation>
 <translation id="2781645665747935084">belgijska</translation>
@@ -356,7 +358,7 @@
 <translation id="5428105026674456456">Španska</translation>
 <translation id="5438282218546237410">Nema rezultata za <ph name="SEARCH_TERM" />.</translation>
 <translation id="5449551289610225147">Pogrešna lozinka</translation>
-<translation id="5469868506864199649">Italijanska</translation>
+<translation id="5469868506864199649">italijanski</translation>
 <translation id="5494920125229734069">Odaberi sve</translation>
 <translation id="5500122897333236901">Islandska</translation>
 <translation id="5508696409934741614">Točke</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
index 904e48e..526dbdd 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Caràcter no vàlid: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">Xinès simplificat</translation>
 <translation id="2208158072373999562">Fitxer zip</translation>
+<translation id="2208919847696382164">Instal·la per a Linux</translation>
 <translation id="2225536596944493418">Confirmes que vols suprimir <ph name="NUMBER_OF_ITEMS" /> elements?</translation>
 <translation id="2230062665678605299">No es pot crear la carpeta "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">S'ha mogut.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Ubicació del fitxer</translation>
 <translation id="2672394958563893062">S'ha produït un error. Feu clic per reiniciar des del principi.</translation>
 <translation id="2676946222714718093">En reproducció</translation>
+<translation id="2718540689505416944">Instal·la l'aplicació per a Linux</translation>
 <translation id="2735623501230989521">Dona permís a Parallels Desktop per accedir als fitxers de la carpeta <ph name="FOLDER_NAME" /></translation>
 <translation id="2771816809568414714">Formatge</translation>
 <translation id="2781645665747935084">Belga</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
index c79cd5d..e3390bb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Ugyldigt tegn: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">Kinesisk (forenklet)</translation>
 <translation id="2208158072373999562">Zip-arkiv</translation>
+<translation id="2208919847696382164">Installer med Linux</translation>
 <translation id="2225536596944493418">Er du sikker på, at du vil slette <ph name="NUMBER_OF_ITEMS" /> elementer?</translation>
 <translation id="2230062665678605299">Mappen "<ph name="FOLDER_NAME" />" kunne ikke oprettes. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Blev flyttet.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Filplacering</translation>
 <translation id="2672394958563893062">Der opstod en fejl. Klik her for at starte forfra.</translation>
 <translation id="2676946222714718093">Afspilles i</translation>
+<translation id="2718540689505416944">Installer app med Linux</translation>
 <translation id="2735623501230989521">Giv Parallels Desktop adgang til filer i mappen <ph name="FOLDER_NAME" /></translation>
 <translation id="2771816809568414714">Ost</translation>
 <translation id="2781645665747935084">Belgisk</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_et.xtb b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
index 23425e1..f666d53 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_et.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Sobimatu tähemärk: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">hiina (lihtsustatud)</translation>
 <translation id="2208158072373999562">Zip-arhiiv</translation>
+<translation id="2208919847696382164">Installi Linuxiga</translation>
 <translation id="2225536596944493418">Kas soovite <ph name="NUMBER_OF_ITEMS" /> üksust kindlasti kustutada?</translation>
 <translation id="2230062665678605299">Kausta „<ph name="FOLDER_NAME" />” ei saa luua. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Teisaldatud.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Faili asukoht</translation>
 <translation id="2672394958563893062">Ilmnes viga. Klõpsake uuesti alustamiseks.</translation>
 <translation id="2676946222714718093">Mängib seadmes</translation>
+<translation id="2718540689505416944">Rakenduse installimine Linuxiga</translation>
 <translation id="2735623501230989521">Andke üksusele Parallels Desktop luba pääseda juurde kaustas <ph name="FOLDER_NAME" /> olevatele failidele</translation>
 <translation id="2771816809568414714">Juust</translation>
 <translation id="2781645665747935084">Belgia</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
index 0d32010..d9446e7 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Karaktere honek ez du balio: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">Txinera (sinplifikatua)</translation>
 <translation id="2208158072373999562">ZIP artxiboa</translation>
+<translation id="2208919847696382164">Instalatu Linux-ekin</translation>
 <translation id="2225536596944493418">Ziur <ph name="NUMBER_OF_ITEMS" /> elementu ezabatu nahi dituzula?</translation>
 <translation id="2230062665678605299">Ezin  izan da sortu "<ph name="FOLDER_NAME" />" fitxategia. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Mugitu da.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Fitxategiaren kokapena</translation>
 <translation id="2672394958563893062">Errore bat gertatu da. Berriro hasieratik hasteko, sakatu hau.</translation>
 <translation id="2676946222714718093">Hemen erreproduzitzen:</translation>
+<translation id="2718540689505416944">Instalatu aplikazioa Linux-ekin</translation>
 <translation id="2735623501230989521">Eman <ph name="FOLDER_NAME" /> karpetako fitxategiak atzitzeko baimena Parallels Desktop-i</translation>
 <translation id="2771816809568414714">Gazta</translation>
 <translation id="2781645665747935084">Belgikarra</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
index e7f20393..7ab6b8cc 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Virheellinen merkki: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">yksinkertaistettu kiina</translation>
 <translation id="2208158072373999562">Zip-arkisto</translation>
+<translation id="2208919847696382164">Asenna Linux-versio</translation>
 <translation id="2225536596944493418">Haluatko varmasti poistaa <ph name="NUMBER_OF_ITEMS" /> kohdetta?</translation>
 <translation id="2230062665678605299">Kansiota <ph name="FOLDER_NAME" /> ei voi luoda. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Siirretty</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Tiedoston sijainti</translation>
 <translation id="2672394958563893062">Tapahtui virhe. Aloita alusta klikkaamalla.</translation>
 <translation id="2676946222714718093">Toistetaan Chromecastilla</translation>
+<translation id="2718540689505416944">Asenna Linux-sovellus</translation>
 <translation id="2735623501230989521">Myönnä Parallels Desktopille pääsy kansiossa <ph name="FOLDER_NAME" /> oleviin tiedostoihin</translation>
 <translation id="2771816809568414714">Juusto</translation>
 <translation id="2781645665747935084">belgialainen</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
index 90c6c465..2e5f9b7 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
@@ -632,7 +632,7 @@
 <translation id="9148058034647219655">બહાર નીકળો</translation>
 <translation id="9154418932169119429">આ છબી ઑફલાઇન ઉપલબ્ધ નથી.</translation>
 <translation id="9213073329713032541">ઇન્સ્ટૉલેશન સફળતાપૂર્વક શરૂ થયું.</translation>
-<translation id="9219103736887031265">છબીઓ</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="9219908252191632183">ચંદ્ર</translation>
 <translation id="939736085109172342">નવું ફોલ્ડર</translation>
 <translation id="942954117721265519">આ ડિરેક્ટરીમાં છબીઓ નથી.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
index cfe6dad..102057a5 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">अमान्य वर्ण : <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">सरलीकृत चीनी</translation>
 <translation id="2208158072373999562">ज़िप संग्रह</translation>
+<translation id="2208919847696382164">Linux ऐप्लिकेशन की मदद से इंस्टॉल करें</translation>
 <translation id="2225536596944493418">क्या आप वाकई <ph name="NUMBER_OF_ITEMS" /> आइटम मिटाना चाहते हैं?</translation>
 <translation id="2230062665678605299">"<ph name="FOLDER_NAME" />" फ़ोल्डर बनाने में असमर्थ. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">भेज दिया गया.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">फ़ाइल की जगह</translation>
 <translation id="2672394958563893062">एक गड़बड़ी हुई. शुरुआत से शुरू करने के लिए रिस्टार्ट पर क्लिक करें.</translation>
 <translation id="2676946222714718093">इस पर चलाया जा रहा है:</translation>
+<translation id="2718540689505416944">Linux पर ऐप्लिकेशन की मदद से इंस्टॉल करें</translation>
 <translation id="2735623501230989521">Parallels Desktop को <ph name="FOLDER_NAME" /> फ़ोल्डर की फ़ाइलें ऐक्सेस करने की अनुमति दें</translation>
 <translation id="2771816809568414714">पनीर</translation>
 <translation id="2781645665747935084">बेल्जियाई</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
index f2b4566..cd964d1d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Nevažeći znak: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">pojednostavnjeni kineski</translation>
 <translation id="2208158072373999562">Zip arhiva</translation>
+<translation id="2208919847696382164">Instaliranje uz Linux</translation>
 <translation id="2225536596944493418">Jeste li sigurni da želite izbrisati te stavke (njih <ph name="NUMBER_OF_ITEMS" />)?</translation>
 <translation id="2230062665678605299">Nije moguće izraditi mapu "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Premješteno.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Lokacija datoteke</translation>
 <translation id="2672394958563893062">Dogodila se pogreška. Kliknite za ponovno pokretanje od početka.</translation>
 <translation id="2676946222714718093">Reprodukcija na uređaju</translation>
+<translation id="2718540689505416944">Instaliranje aplikacije uz Linux</translation>
 <translation id="2735623501230989521">Dajte Parallels Desktopu dopuštenje za pristup datotekama u mapi <ph name="FOLDER_NAME" /></translation>
 <translation id="2771816809568414714">Sir</translation>
 <translation id="2781645665747935084">belgijska</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
index d76eeaf..2578073 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">ຕົວອັກສອນໃຊ້ບໍ່ໄດ້: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">ພາສາຈີນຕົວຫຍໍ້</translation>
 <translation id="2208158072373999562">ຄັງເກັບໄຟລ໌ຊິບ</translation>
+<translation id="2208919847696382164">ຕິດຕັ້ງດ້ວຍ Linux</translation>
 <translation id="2225536596944493418">ທ່ານ​ແນ່​ໃຈບໍ່ວ່​າ ​ທ່ານ​ຕ້ອງ​ການ​ລຶບ <ph name="NUMBER_OF_ITEMS" /> ລາຍ​ການ​?</translation>
 <translation id="2230062665678605299">ບໍ່​ສາ​ມາດ​​ສ້າງ​ໂຟລເດີ "<ph name="FOLDER_NAME" />". <ph name="ERROR_MESSAGE" /> ໄດ້</translation>
 <translation id="2275059641601412272">ຍ້າຍແລ້ວ.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">ສະຖານທີ່ຂອງໄຟລ໌</translation>
 <translation id="2672394958563893062">ເກີດຄວາມຜິດພາດຂຶ້ນ. ຄລິກເພື່ອເລີ່ມຈາກການເລີ່ມຕົ້ນ.</translation>
 <translation id="2676946222714718093">ກຳລັງຫຼິ້ນຢູ່</translation>
+<translation id="2718540689505416944">ຕິດຕັ້ງແອັບດ້ວຍ Linux</translation>
 <translation id="2735623501230989521">ອະນຸຍາດໃຫ້ Parallels Desktop ເຂົ້າເຖິງໄຟລ໌ໃນໂຟນເດີ <ph name="FOLDER_NAME" /></translation>
 <translation id="2771816809568414714">ເນີຍແຂງ</translation>
 <translation id="2781645665747935084">ພາສາແບນຊິກ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
index 98a1dc5..04fc5f5 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Netinkamas simbolis: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">Supaprastinta kinų k.</translation>
 <translation id="2208158072373999562">Talpusis archyvas</translation>
+<translation id="2208919847696382164">Diegimas naudojant „Linux“</translation>
 <translation id="2225536596944493418">Ar tikrai norite ištrinti <ph name="NUMBER_OF_ITEMS" /> element.?</translation>
 <translation id="2230062665678605299">Nepavyko sukurti aplanko „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Perkelta.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Failo vieta</translation>
 <translation id="2672394958563893062">Įvyko klaida. Spustelėkite, kad paleistumėte iš naujo nuo pradžios.</translation>
 <translation id="2676946222714718093">Leidžiama</translation>
+<translation id="2718540689505416944">Programos diegimas naudojant „Linux“</translation>
 <translation id="2735623501230989521">Suteikite „Parallels Desktop“ leidimą pasiekti failus aplanke „<ph name="FOLDER_NAME" />“</translation>
 <translation id="2771816809568414714">Sūris</translation>
 <translation id="2781645665747935084">Belgų</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_my.xtb b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
index 72d5737..f1c073d1 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_my.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">အက္ခရာ မမှန်ကန်ပါ- <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">ရိုးရှင်း တရုတ်</translation>
 <translation id="2208158072373999562">Zip မှတ်တမ်း</translation>
+<translation id="2208919847696382164">Linux ဖြင့် ထည့်သွင်းရန်</translation>
 <translation id="2225536596944493418">အကြောင်းအရာ <ph name="NUMBER_OF_ITEMS" />ခုကို ဖျက်လိုသည်မှာ သေချာသလား။</translation>
 <translation id="2230062665678605299">ဖိုလ်ဒါ  "<ph name="FOLDER_NAME" />"ကို ဖန်တီး မရခဲ့ပါ။ <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">ရွှေ့ထားသည်။</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">ဖိုင်တည်နေရာ</translation>
 <translation id="2672394958563893062">အမှား ကြုံခဲ့သည်။ အစမှ ပြန်လည်စတင်ရန် ကလစ်ပါ။</translation>
 <translation id="2676946222714718093">ဖွင့်ပြနေသည်က</translation>
+<translation id="2718540689505416944">အက်ပ်ကို Linux ဖြင့် ထည့်သွင်းရန်</translation>
 <translation id="2735623501230989521"><ph name="FOLDER_NAME" /> ဖိုင်တွဲရှိ ဖိုင်များကို Parallels Desktop အား အသုံးပြုခွင့်ပေးမည်</translation>
 <translation id="2771816809568414714">ဒိန်ခဲ</translation>
 <translation id="2781645665747935084">ဘယ်လ်ဂျီယံ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_no.xtb b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
index 9ce9717c..21abdd8 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_no.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Ugyldig tegn: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">Kinesisk (forenklet)</translation>
 <translation id="2208158072373999562">.zip-arkiv</translation>
+<translation id="2208919847696382164">Installér med Linux</translation>
 <translation id="2225536596944493418">Er du sikker på at du vil slette <ph name="NUMBER_OF_ITEMS" /> elementer?</translation>
 <translation id="2230062665678605299">Kunne ikke opprette mappen «<ph name="FOLDER_NAME" />». <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Flyttet.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Filplassering</translation>
 <translation id="2672394958563893062">Det oppsto en feil. Klikk for å starte på nytt fra begynnelsen.</translation>
 <translation id="2676946222714718093">Spilles av på</translation>
+<translation id="2718540689505416944">Installér app med Linux</translation>
 <translation id="2735623501230989521">Gi Parallels Desktop tilgang til filer i mappen <ph name="FOLDER_NAME" /></translation>
 <translation id="2771816809568414714">Ost</translation>
 <translation id="2781645665747935084">Belgisk</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_or.xtb b/ui/chromeos/translations/ui_chromeos_strings_or.xtb
index 9e17063..abe5e4e99 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_or.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_or.xtb
@@ -628,7 +628,7 @@
 <translation id="9148058034647219655">ପ୍ରସ୍ଥାନ କରନ୍ତୁ</translation>
 <translation id="9154418932169119429">ଏହି ଛବି ଅଫ୍‍ଲାଇନ୍‍‍ରେ ଉପଲବ୍ଧ ନାହିଁ।</translation>
 <translation id="9213073329713032541">ସଫଳତାପୂର୍ବକ ଇନ୍‌ଷ୍ଟଲେସନ୍ ଆରମ୍ଭ ହେଲା।</translation>
-<translation id="9219103736887031265">ଛବିଗୁଡ଼ିକ</translation>
+<translation id="9219103736887031265">Images</translation>
 <translation id="9219908252191632183">ଲୁନାର୍</translation>
 <translation id="939736085109172342">ନୂତନ ଫୋଲ୍ଡର</translation>
 <translation id="942954117721265519">ଏହି ଡିରେକ୍ଟୋରୀରେ କୌଣସି ଛବି ନାହିଁ।</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
index da8ee09d..b95dcd08 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Nieprawidłowy znak: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">chiński uproszczony</translation>
 <translation id="2208158072373999562">Archiwum ZIP</translation>
+<translation id="2208919847696382164">Zainstaluj za pomocą Linuksa</translation>
 <translation id="2225536596944493418">Czy na pewno chcesz usunąć te elementy (<ph name="NUMBER_OF_ITEMS" />)?</translation>
 <translation id="2230062665678605299">Nie można utworzyć folderu „<ph name="FOLDER_NAME" />”. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Przeniesiono.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Lokalizacja pliku</translation>
 <translation id="2672394958563893062">Wystąpił błąd. Kliknij, by odtworzyć od początku.</translation>
 <translation id="2676946222714718093">Odtwarzane na</translation>
+<translation id="2718540689505416944">Zainstaluj za pomocą Linuksa</translation>
 <translation id="2735623501230989521">Przyznaj aplikacji Parallels Desktop uprawnienia dostępu do plików w folderze <ph name="FOLDER_NAME" /></translation>
 <translation id="2771816809568414714">Ser</translation>
 <translation id="2781645665747935084">belgijska klawiatura</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
index 88ab1643..88ec510 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Caracter nevalid: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">Chineză simplificată</translation>
 <translation id="2208158072373999562">Arhivă zip</translation>
+<translation id="2208919847696382164">Instalează cu Linux</translation>
 <translation id="2225536596944493418">Sigur dorești să ștergi <ph name="NUMBER_OF_ITEMS" /> elemente?</translation>
 <translation id="2230062665678605299">Nu s-a putut crea dosarul „<ph name="FOLDER_NAME" />”. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Mutat.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Locația fișierului</translation>
 <translation id="2672394958563893062">A apărut o eroare. Dați clic pentru a relua de la început.</translation>
 <translation id="2676946222714718093">Se redă pe</translation>
+<translation id="2718540689505416944">Instalează aplicația cu Linux</translation>
 <translation id="2735623501230989521">Acordă Parallels Desktop permisiunea de a accesa fișiere din dosarul <ph name="FOLDER_NAME" /></translation>
 <translation id="2771816809568414714">Brânză</translation>
 <translation id="2781645665747935084">Belgiană</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
index b76a64b1..79fbdf4 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Neveljavni znak: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">poenostavljena kitajščina</translation>
 <translation id="2208158072373999562">Arhiv zip</translation>
+<translation id="2208919847696382164">Namestitev z Linuxom</translation>
 <translation id="2225536596944493418">Ali ste prepričani, da želite izbrisati toliko elementov: <ph name="NUMBER_OF_ITEMS" />?</translation>
 <translation id="2230062665678605299">Ni bilo mogoče ustvariti mape »<ph name="FOLDER_NAME" />«. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Premaknjeno.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Mesto datoteke</translation>
 <translation id="2672394958563893062">Prišlo je do napake. Kliknite, da začnete znova od začetka.</translation>
 <translation id="2676946222714718093">Predvajanje v:</translation>
+<translation id="2718540689505416944">Namestitev aplikacije z Linuxom</translation>
 <translation id="2735623501230989521">Programu Parallels Desktop dovolite dostop do datotek v mapi <ph name="FOLDER_NAME" />.</translation>
 <translation id="2771816809568414714">Sir</translation>
 <translation id="2781645665747935084">belgijska</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
index 3edf27a..2f15c52 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Nevažeći znak: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">kineski (pojednostavljeni)</translation>
 <translation id="2208158072373999562">Zip arhiva</translation>
+<translation id="2208919847696382164">Instalirajte pomoću Linux-a</translation>
 <translation id="2225536596944493418">Želite li stvarno da izbrišete stavke (<ph name="NUMBER_OF_ITEMS" />)?</translation>
 <translation id="2230062665678605299">Nije moguće napraviti direktorijum „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Premešteno je.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Lokacija datoteke</translation>
 <translation id="2672394958563893062">Došlo je do greške. Kliknite da biste krenuli iz početka.</translation>
 <translation id="2676946222714718093">Pušteno na</translation>
+<translation id="2718540689505416944">Instalirajte aplikaciju za Linux</translation>
 <translation id="2735623501230989521">Dozvolite da Parallels Desktop pristupa fajlovima u folderu <ph name="FOLDER_NAME" /></translation>
 <translation id="2771816809568414714">Sir</translation>
 <translation id="2781645665747935084">belgijska</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
index 1b9afd7..e49a34fb 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">Неважећи знак: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">кинески (поједностављени)</translation>
 <translation id="2208158072373999562">Zip архива</translation>
+<translation id="2208919847696382164">Инсталирајте помоћу Linux-а</translation>
 <translation id="2225536596944493418">Желите ли стварно да избришете ставке (<ph name="NUMBER_OF_ITEMS" />)?</translation>
 <translation id="2230062665678605299">Није могуће направити директоријум „<ph name="FOLDER_NAME" />“. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">Премештено је.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">Локација датотеке</translation>
 <translation id="2672394958563893062">Дошло је до грешке. Кликните да бисте кренули из почетка.</translation>
 <translation id="2676946222714718093">Пуштено на</translation>
+<translation id="2718540689505416944">Инсталирајте апликацију за Linux</translation>
 <translation id="2735623501230989521">Дозволите да Parallels Desktop приступа фајловима у фолдеру <ph name="FOLDER_NAME" /></translation>
 <translation id="2771816809568414714">Сир</translation>
 <translation id="2781645665747935084">белгијска</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
index ac93015..3ea3223 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -92,6 +92,7 @@
 <translation id="2163152940313951844">చెల్లని అక్షరం: <ph name="CHARACTER_NAME" /></translation>
 <translation id="2198315389084035571">సరళీకృత చైనీస్</translation>
 <translation id="2208158072373999562">జిప్ ఆర్కైవ్</translation>
+<translation id="2208919847696382164">Linuxతో ఇన్‌స్టాల్ చేయండి</translation>
 <translation id="2225536596944493418">మీరు <ph name="NUMBER_OF_ITEMS" /> అంశాలను ఖచ్చితంగా తొలగించాలనుకుంటున్నారా?</translation>
 <translation id="2230062665678605299">"<ph name="FOLDER_NAME" />" ఫోల్డర్‌ను సృష్టించడం సాధ్యపడలేదు. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="2275059641601412272">తరలించబడింది.</translation>
@@ -128,6 +129,7 @@
 <translation id="2664412712123763093">ఫైల్ లొకేషన్</translation>
 <translation id="2672394958563893062">ఎర్ర‌ర్ ఏర్ప‌డింది. మొదటి నుండి పునఃప్రారంభించడానికి క్లిక్ చేయండి.</translation>
 <translation id="2676946222714718093">ఇందులో ప్లే అవుతోంది</translation>
+<translation id="2718540689505416944">Linuxతో యాప్‌ను ఇన్‌స్టాల్ చేయండి</translation>
 <translation id="2735623501230989521"><ph name="FOLDER_NAME" /> ఫోల్డర్‌లోని ఫైల్స్‌ను యాక్సెస్ చేయడానికి Parallels Desktopకు అనుమతిని ఇవ్వండి</translation>
 <translation id="2771816809568414714">జున్ను</translation>
 <translation id="2781645665747935084">బెల్జియన్</translation>
@@ -634,7 +636,7 @@
 <translation id="9148058034647219655">నిష్క్రమించు</translation>
 <translation id="9154418932169119429">ఈ చిత్రం ఆఫ్‌లైన్‌లో అందుబాటులో లేదు.</translation>
 <translation id="9213073329713032541">ఇన్‌స్టాలేషన్ విజయవంతంగా ప్రారంభించబడింది.</translation>
-<translation id="9219103736887031265">చిత్రాలు</translation>
+<translation id="9219103736887031265">ఇమేజ్‌లు</translation>
 <translation id="9219908252191632183">లూనార్</translation>
 <translation id="939736085109172342">క్రొత్త  ఫోల్డర్</translation>
 <translation id="942954117721265519">ఈ డైరెక్టరీలో చిత్రాలు లేవు.</translation>
diff --git a/ui/compositor/BUILD.gn b/ui/compositor/BUILD.gn
index 65a978ae..3fcae95b 100644
--- a/ui/compositor/BUILD.gn
+++ b/ui/compositor/BUILD.gn
@@ -116,6 +116,8 @@
 static_library("test_support") {
   testonly = true
   sources = [
+    "test/animation_throughput_reporter_test_base.cc",
+    "test/animation_throughput_reporter_test_base.h",
     "test/direct_layer_tree_frame_sink.cc",
     "test/direct_layer_tree_frame_sink.h",
     "test/draw_waiter_for_test.cc",
diff --git a/ui/compositor/animation_throughput_reporter_unittest.cc b/ui/compositor/animation_throughput_reporter_unittest.cc
index d39b01b..3693bb4e 100644
--- a/ui/compositor/animation_throughput_reporter_unittest.cc
+++ b/ui/compositor/animation_throughput_reporter_unittest.cc
@@ -6,73 +6,20 @@
 
 #include <memory>
 
-#include "base/run_loop.h"
 #include "base/test/bind.h"
-#include "base/test/task_environment.h"
-#include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
-#include "base/timer/timer.h"
+#include "build/build_config.h"
 #include "cc/metrics/frame_sequence_metrics.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "ui/compositor/compositor.h"
 #include "ui/compositor/layer.h"
 #include "ui/compositor/layer_animation_sequence.h"
 #include "ui/compositor/layer_animator.h"
 #include "ui/compositor/scoped_layer_animation_settings.h"
-#include "ui/compositor/test/test_compositor_host.h"
-#include "ui/compositor/test/test_context_factories.h"
+#include "ui/compositor/test/animation_throughput_reporter_test_base.h"
 #include "ui/gfx/geometry/rect.h"
 
 namespace ui {
 
-class AnimationThroughputReporterTest : public testing::Test {
- public:
-  AnimationThroughputReporterTest()
-      : task_environment_(base::test::TaskEnvironment::MainThreadType::UI) {}
-  AnimationThroughputReporterTest(const AnimationThroughputReporterTest&) =
-      delete;
-  AnimationThroughputReporterTest& operator=(
-      const AnimationThroughputReporterTest&) = delete;
-  ~AnimationThroughputReporterTest() override = default;
-
-  // testing::Test:
-  void SetUp() override {
-    context_factories_ = std::make_unique<TestContextFactories>(false);
-
-    const gfx::Rect bounds(100, 100);
-    host_.reset(TestCompositorHost::Create(
-        bounds, context_factories_->GetContextFactory()));
-    host_->Show();
-
-    compositor()->SetRootLayer(&root_);
-
-    frame_generation_timer_.Start(
-        FROM_HERE, base::TimeDelta::FromMilliseconds(50), this,
-        &AnimationThroughputReporterTest::GenerateOneFrame);
-  }
-
-  void TearDown() override {
-    frame_generation_timer_.Stop();
-    host_.reset();
-    context_factories_.reset();
-  }
-
-  void GenerateOneFrame() { compositor()->ScheduleFullRedraw(); }
-
-  Compositor* compositor() { return host_->GetCompositor(); }
-  Layer* root_layer() { return &root_; }
-
- private:
-  base::test::TaskEnvironment task_environment_;
-
-  std::unique_ptr<TestContextFactories> context_factories_;
-  std::unique_ptr<TestCompositorHost> host_;
-  Layer root_;
-
-  // A timer to generate continuous compositor frames to trigger throughput
-  // data being transferred back.
-  base::RepeatingTimer frame_generation_timer_;
-};
+using AnimationThroughputReporterTest = AnimationThroughputReporterTestBase;
 
 // Tests animation throughput collection with implicit animation scenario.
 TEST_F(AnimationThroughputReporterTest, ImplicitAnimation) {
@@ -90,9 +37,11 @@
                       }));
 
     ScopedLayerAnimationSettings settings(animator);
-    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(50));
+    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(48));
     layer.SetOpacity(1.0f);
   }
+  // The animation starts in next frame (16ms) and ends 48 ms later.
+  Advance(base::TimeDelta::FromMilliseconds(64));
   run_loop.Run();
 }
 
@@ -112,13 +61,13 @@
                       }));
 
     ScopedLayerAnimationSettings settings(animator);
-    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(50));
+    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(48));
     layer.SetOpacity(1.0f);
   }
 
   // Attach to root after animation setup.
   root_layer()->Add(&layer);
-
+  Advance(base::TimeDelta::FromMilliseconds(64));
   run_loop.Run();
 }
 
@@ -140,8 +89,9 @@
 
     animator->ScheduleAnimation(
         new LayerAnimationSequence(LayerAnimationElement::CreateOpacityElement(
-            1.0f, base::TimeDelta::FromMilliseconds(50))));
+            1.0f, base::TimeDelta::FromMilliseconds(48))));
   }
+  Advance(base::TimeDelta::FromMilliseconds(64));
   run_loop.Run();
 }
 
@@ -153,7 +103,7 @@
 
   // Set a persisted animator to |layer|.
   LayerAnimator* animator =
-      new LayerAnimator(base::TimeDelta::FromMilliseconds(50));
+      new LayerAnimator(base::TimeDelta::FromMilliseconds(48));
   layer->SetAnimator(animator);
 
   std::unique_ptr<base::RunLoop> run_loop = std::make_unique<base::RunLoop>();
@@ -166,11 +116,13 @@
 
   // Report data for animation of opacity goes to 1.
   layer->SetOpacity(1.0f);
+  Advance(base::TimeDelta::FromMilliseconds(64));
   run_loop->Run();
 
   // Report data for animation of opacity goes to 0.5.
   run_loop = std::make_unique<base::RunLoop>();
   layer->SetOpacity(0.5f);
+  Advance(base::TimeDelta::FromMilliseconds(64));
   run_loop->Run();
 }
 
@@ -189,7 +141,7 @@
                       }));
 
     ScopedLayerAnimationSettings settings(animator);
-    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(50));
+    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(48));
     layer->SetOpacity(1.0f);
   }
 
@@ -197,11 +149,7 @@
   layer.reset();
 
   // Wait a bit to ensure that report does not happen.
-  base::RunLoop run_loop;
-  base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
-      FROM_HERE, run_loop.QuitClosure(),
-      base::TimeDelta::FromMilliseconds(100));
-  run_loop.Run();
+  Advance(base::TimeDelta::FromMilliseconds(100));
 }
 
 // Tests animation throughput not reported when detached from timeline.
@@ -219,7 +167,7 @@
                       }));
 
     ScopedLayerAnimationSettings settings(animator);
-    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(50));
+    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(48));
     layer->SetOpacity(1.0f);
   }
 
@@ -228,11 +176,7 @@
   root_layer()->Add(layer.get());
 
   // Wait a bit to ensure that report does not happen.
-  base::RunLoop run_loop;
-  base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
-      FROM_HERE, run_loop.QuitClosure(),
-      base::TimeDelta::FromMilliseconds(100));
-  run_loop.Run();
+  Advance(base::TimeDelta::FromMilliseconds(100));
 }
 
 // Tests animation throughput not reported and no leak when animation is stopped
@@ -260,11 +204,7 @@
   animator->StopAnimating();
 
   // Wait a bit to ensure that report does not happen.
-  base::RunLoop run_loop;
-  base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
-      FROM_HERE, run_loop.QuitClosure(),
-      base::TimeDelta::FromMilliseconds(100));
-  run_loop.Run();
+  Advance(base::TimeDelta::FromMilliseconds(100));
 
   // AnimationTracker in |reporter| should not leak in asan.
 }
@@ -305,10 +245,11 @@
     ScopedLayerAnimationSettings settings(animator);
     settings.SetPreemptionStrategy(
         LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
-    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(50));
+    settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(48));
     layer->SetOpacity(1.0f);
     layer->SetBounds(gfx::Rect(0, 0, 5, 6));
   }
+  Advance(base::TimeDelta::FromMilliseconds(64));
   run_loop.Run();
 }
 
diff --git a/ui/compositor/test/animation_throughput_reporter_test_base.cc b/ui/compositor/test/animation_throughput_reporter_test_base.cc
new file mode 100644
index 0000000..861d4521
--- /dev/null
+++ b/ui/compositor/test/animation_throughput_reporter_test_base.cc
@@ -0,0 +1,48 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/compositor/test/animation_throughput_reporter_test_base.h"
+
+#include <memory>
+
+#include "base/run_loop.h"
+#include "base/test/task_environment.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/compositor/test/test_context_factories.h"
+#include "ui/gfx/geometry/rect.h"
+
+namespace ui {
+
+AnimationThroughputReporterTestBase::AnimationThroughputReporterTestBase() =
+    default;
+AnimationThroughputReporterTestBase::~AnimationThroughputReporterTestBase() =
+    default;
+
+void AnimationThroughputReporterTestBase::SetUp() {
+  context_factories_ = std::make_unique<TestContextFactories>(false);
+
+  const gfx::Rect bounds(100, 100);
+  host_.reset(TestCompositorHost::Create(
+      bounds, context_factories_->GetContextFactory()));
+  host_->Show();
+
+  compositor()->SetRootLayer(&root_);
+
+  frame_generation_timer_.Start(
+      FROM_HERE, base::TimeDelta::FromMilliseconds(50), this,
+      &AnimationThroughputReporterTestBase::GenerateOneFrame);
+}
+
+void AnimationThroughputReporterTestBase::TearDown() {
+  frame_generation_timer_.Stop();
+  host_.reset();
+  context_factories_.reset();
+}
+
+void AnimationThroughputReporterTestBase::Advance(
+    const base::TimeDelta& delta) {
+  task_environment_.FastForwardBy(delta);
+}
+
+}  // namespace ui
diff --git a/ui/compositor/test/animation_throughput_reporter_test_base.h b/ui/compositor/test/animation_throughput_reporter_test_base.h
new file mode 100644
index 0000000..c245921
--- /dev/null
+++ b/ui/compositor/test/animation_throughput_reporter_test_base.h
@@ -0,0 +1,57 @@
+// Copyright 2020 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_COMPOSITOR_TEST_ANIMATION_THROUGHPUT_REPORTER_TEST_BASE_H_
+#define UI_COMPOSITOR_TEST_ANIMATION_THROUGHPUT_REPORTER_TEST_BASE_H_
+
+#include <memory>
+
+#include "base/test/task_environment.h"
+#include "base/timer/timer.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/compositor/compositor.h"
+#include "ui/compositor/layer.h"
+#include "ui/compositor/test/test_compositor_host.h"
+
+namespace ui {
+class TestContextFactories;
+
+class AnimationThroughputReporterTestBase : public testing::Test {
+ public:
+  AnimationThroughputReporterTestBase();
+  AnimationThroughputReporterTestBase(
+      const AnimationThroughputReporterTestBase&) = delete;
+  AnimationThroughputReporterTestBase& operator=(
+      const AnimationThroughputReporterTestBase&) = delete;
+  ~AnimationThroughputReporterTestBase() override;
+
+  // testing::Test:
+  void SetUp() override;
+  void TearDown() override;
+
+  void GenerateOneFrame() { compositor()->ScheduleFullRedraw(); }
+
+  Compositor* compositor() { return host_->GetCompositor(); }
+  Layer* root_layer() { return &root_; }
+
+  // Advances the time by |delta|.
+  void Advance(const base::TimeDelta& delta);
+
+ private:
+  base::test::TaskEnvironment task_environment_{
+      base::test::TaskEnvironment::TimeSource::MOCK_TIME,
+      base::test::TaskEnvironment::MainThreadType::UI};
+
+  std::unique_ptr<TestContextFactories> context_factories_;
+  std::unique_ptr<TestCompositorHost> host_;
+  Layer root_;
+
+  // A timer to generate continuous compositor frames to trigger throughput
+  // data being transferred back.
+  base::RepeatingTimer frame_generation_timer_;
+};
+
+}  // namespace ui
+
+#endif  // UI_COMPOSITOR_TEST_ANIMATION_THROUGHPUT_REPORTER_TEST_BASE_H_
diff --git a/ui/events/ozone/device/device_manager_manual.cc b/ui/events/ozone/device/device_manager_manual.cc
index 8c1063b..5262df1 100644
--- a/ui/events/ozone/device/device_manager_manual.cc
+++ b/ui/events/ozone/device/device_manager_manual.cc
@@ -68,8 +68,11 @@
   base::PostTaskAndReplyWithResult(
       blocking_task_runner_.get(), FROM_HERE,
       base::BindOnce(
-          &base::FilePathWatcher::Watch, base::Unretained(watcher_.get()),
-          base::FilePath(kDevInput), false,
+          static_cast<bool (base::FilePathWatcher::*)(
+              const base::FilePath&, bool,
+              const base::FilePathWatcher::Callback&)>(
+              &base::FilePathWatcher::Watch),
+          base::Unretained(watcher_.get()), base::FilePath(kDevInput), false,
           base::BindRepeating(&DeviceManagerManual::OnWatcherEventOnUiSequence,
                               base::SequencedTaskRunnerHandle::Get(),
                               weak_ptr_factory_.GetWeakPtr())),
diff --git a/ui/gl/gl_angle_util_win.cc b/ui/gl/gl_angle_util_win.cc
index ef04c397..46b476ce 100644
--- a/ui/gl/gl_angle_util_win.cc
+++ b/ui/gl/gl_angle_util_win.cc
@@ -23,7 +23,9 @@
     egl_display = gl::GLSurfaceEGL::GetHardwareDisplay();
   }
 
-  if (!gl::GLSurfaceEGL::HasEGLExtension("EGL_EXT_device_query"))
+  // TODO(jmadill): Use client extension only. http://anglebug.com/5372
+  if (!gl::GLSurfaceEGL::HasEGLExtension("EGL_EXT_device_query") &&
+      !gl::GLSurfaceEGL::HasEGLClientExtension("EGL_EXT_device_query"))
     return nullptr;
 
   PFNEGLQUERYDISPLAYATTRIBEXTPROC QueryDisplayAttribEXT = nullptr;
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc
index 054b4b4..9658dfc 100644
--- a/ui/gl/gl_surface_egl.cc
+++ b/ui/gl/gl_surface_egl.cc
@@ -181,6 +181,7 @@
 EGLDisplay g_egl_display = EGL_NO_DISPLAY;
 EGLDisplayPlatform g_native_display(EGL_DEFAULT_DISPLAY);
 
+const char* g_egl_client_extensions = nullptr;
 const char* g_egl_extensions = nullptr;
 bool g_egl_create_context_robustness_supported = false;
 bool g_egl_robustness_video_memory_purge_supported = false;
@@ -952,6 +953,7 @@
 
 // static
 bool GLSurfaceEGL::InitializeOneOffCommon() {
+  g_egl_client_extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
   g_egl_extensions = eglQueryString(g_egl_display, EGL_EXTENSIONS);
 
   g_egl_create_context_robustness_supported =
@@ -1074,6 +1076,7 @@
   if (!initialized_)
     return false;
   g_driver_egl.UpdateConditionalExtensionBindings();
+  g_egl_client_extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
   g_egl_extensions = eglQueryString(g_egl_display, EGL_EXTENSIONS);
 
   return true;
@@ -1096,6 +1099,7 @@
   }
   g_egl_display = EGL_NO_DISPLAY;
 
+  g_egl_client_extensions = nullptr;
   g_egl_extensions = nullptr;
   g_egl_create_context_robustness_supported = false;
   g_egl_robustness_video_memory_purge_supported = false;
@@ -1125,11 +1129,21 @@
 }
 
 // static
+const char* GLSurfaceEGL::GetEGLClientExtensions() {
+  return g_egl_client_extensions ? g_egl_client_extensions : "";
+}
+
+// static
 const char* GLSurfaceEGL::GetEGLExtensions() {
   return g_egl_extensions;
 }
 
 // static
+bool GLSurfaceEGL::HasEGLClientExtension(const char* name) {
+  return ExtensionsContain(GetEGLClientExtensions(), name);
+}
+
+// static
 bool GLSurfaceEGL::HasEGLExtension(const char* name) {
   return ExtensionsContain(GetEGLExtensions(), name);
 }
@@ -1213,12 +1227,9 @@
 
   // If EGL_EXT_client_extensions not supported this call to eglQueryString
   // will return NULL.
-  const char* client_extensions =
-      eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
+  g_egl_client_extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
 
-  bool supports_egl_debug =
-      client_extensions &&
-      ExtensionsContain(client_extensions, "EGL_KHR_debug");
+  bool supports_egl_debug = HasEGLClientExtension("EGL_KHR_debug");
   if (supports_egl_debug) {
     EGLAttrib controls[] = {
         EGL_DEBUG_MSG_CRITICAL_KHR,
@@ -1244,32 +1255,28 @@
   bool supports_angle_egl = false;
   bool supports_angle_metal = false;
   // Check for availability of ANGLE extensions.
-  if (client_extensions &&
-      ExtensionsContain(client_extensions, "EGL_ANGLE_platform_angle")) {
-    supports_angle_d3d =
-        ExtensionsContain(client_extensions, "EGL_ANGLE_platform_angle_d3d");
+  if (HasEGLClientExtension("EGL_ANGLE_platform_angle")) {
+    supports_angle_d3d = HasEGLClientExtension("EGL_ANGLE_platform_angle_d3d");
     supports_angle_opengl =
-        ExtensionsContain(client_extensions, "EGL_ANGLE_platform_angle_opengl");
+        HasEGLClientExtension("EGL_ANGLE_platform_angle_opengl");
     supports_angle_null =
-        ExtensionsContain(client_extensions, "EGL_ANGLE_platform_angle_null");
+        HasEGLClientExtension("EGL_ANGLE_platform_angle_null");
     supports_angle_vulkan =
-        ExtensionsContain(client_extensions, "EGL_ANGLE_platform_angle_vulkan");
-    supports_angle_swiftshader = ExtensionsContain(
-        client_extensions, "EGL_ANGLE_platform_angle_device_type_swiftshader");
-    supports_angle_egl = ExtensionsContain(
-        client_extensions, "EGL_ANGLE_platform_angle_device_type_egl_angle");
+        HasEGLClientExtension("EGL_ANGLE_platform_angle_vulkan");
+    supports_angle_swiftshader = HasEGLClientExtension(
+        "EGL_ANGLE_platform_angle_device_type_swiftshader");
+    supports_angle_egl =
+        HasEGLClientExtension("EGL_ANGLE_platform_angle_device_type_egl_angle");
     supports_angle_metal =
-        ExtensionsContain(client_extensions, "EGL_ANGLE_platform_angle_metal");
+        HasEGLClientExtension("EGL_ANGLE_platform_angle_metal");
   }
 
   bool supports_angle = supports_angle_d3d || supports_angle_opengl ||
                         supports_angle_null || supports_angle_vulkan ||
                         supports_angle_swiftshader || supports_angle_metal;
 
-  if (client_extensions) {
-    g_egl_angle_feature_control_supported =
-        ExtensionsContain(client_extensions, "EGL_ANGLE_feature_control");
-  }
+  g_egl_angle_feature_control_supported =
+      HasEGLClientExtension("EGL_ANGLE_feature_control");
 
   std::vector<DisplayType> init_displays;
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
diff --git a/ui/gl/gl_surface_egl.h b/ui/gl/gl_surface_egl.h
index 9bda1ab..43baa39 100644
--- a/ui/gl/gl_surface_egl.h
+++ b/ui/gl/gl_surface_egl.h
@@ -106,7 +106,9 @@
   // These aren't particularly tied to surfaces, but since we already
   // have the static InitializeOneOff here, it's easiest to reuse its
   // initialization guards.
+  static const char* GetEGLClientExtensions();
   static const char* GetEGLExtensions();
+  static bool HasEGLClientExtension(const char* name);
   static bool HasEGLExtension(const char* name);
   static bool IsCreateContextRobustnessSupported();
   static bool IsRobustnessVideoMemoryPurgeSupported();
diff --git a/ui/strings/translations/ui_strings_bs.xtb b/ui/strings/translations/ui_strings_bs.xtb
index 406e3a5..5230bbbd 100644
--- a/ui/strings/translations/ui_strings_bs.xtb
+++ b/ui/strings/translations/ui_strings_bs.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Ugrađeni ekran</translation>
 <translation id="335581015389089642">Govor</translation>
 <translation id="3389286852084373014">Tekst je predug</translation>
+<translation id="3406306243914553062">HTML sadržaj</translation>
 <translation id="348799646910989694">Polica je automatski skrivena</translation>
 <translation id="3554637740840164787">Stavka <ph name="ITEM_TITLE" /> je zakačena</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{Preostao je još 1 dan}one{Preostao je još # dan}few{Preostala su još # dana}other{Preostalo je još # dana}}</translation>
diff --git a/ui/strings/translations/ui_strings_ca.xtb b/ui/strings/translations/ui_strings_ca.xtb
index 94f29f67..af83f25 100644
--- a/ui/strings/translations/ui_strings_ca.xtb
+++ b/ui/strings/translations/ui_strings_ca.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Pantalla integrada</translation>
 <translation id="335581015389089642">Veu</translation>
 <translation id="3389286852084373014">El text és massa llarg</translation>
+<translation id="3406306243914553062">Contingut HTML</translation>
 <translation id="348799646910989694">El prestatge s'amaga automàticament</translation>
 <translation id="3554637740840164787"><ph name="ITEM_TITLE" /> s'ha fixat</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{1 dia restant}other{# dies restants}}</translation>
diff --git a/ui/strings/translations/ui_strings_da.xtb b/ui/strings/translations/ui_strings_da.xtb
index e2bc2773..695d65d 100644
--- a/ui/strings/translations/ui_strings_da.xtb
+++ b/ui/strings/translations/ui_strings_da.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Indbygget skærm</translation>
 <translation id="335581015389089642">Tale</translation>
 <translation id="3389286852084373014">Teksten er for lang</translation>
+<translation id="3406306243914553062">HTML-indhold</translation>
 <translation id="348799646910989694">Hylden skjules automatisk</translation>
 <translation id="3554637740840164787"><ph name="ITEM_TITLE" /> blev fastgjort</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{1 dag tilbage}one{# dage tilbage}other{# dage tilbage}}</translation>
diff --git a/ui/strings/translations/ui_strings_et.xtb b/ui/strings/translations/ui_strings_et.xtb
index e15f3cc..bd51d89 100644
--- a/ui/strings/translations/ui_strings_et.xtb
+++ b/ui/strings/translations/ui_strings_et.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Sisseehitatud ekraan</translation>
 <translation id="335581015389089642">Kõne</translation>
 <translation id="3389286852084373014">Tekst on liiga pikk</translation>
+<translation id="3406306243914553062">HTML-sisu</translation>
 <translation id="348799646910989694">Riiul on automaatselt peidetud</translation>
 <translation id="3554637740840164787"><ph name="ITEM_TITLE" /> kinnitati</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{1 päev on jäänud}other{# päeva on jäänud}}</translation>
diff --git a/ui/strings/translations/ui_strings_eu.xtb b/ui/strings/translations/ui_strings_eu.xtb
index 7ce8736a..96127789 100644
--- a/ui/strings/translations/ui_strings_eu.xtb
+++ b/ui/strings/translations/ui_strings_eu.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Pantaila integratua</translation>
 <translation id="335581015389089642">Hizketa</translation>
 <translation id="3389286852084373014">Testua luzeegia da</translation>
+<translation id="3406306243914553062">HTML edukia</translation>
 <translation id="348799646910989694">Biltegia automatikoki ezkutatuko da</translation>
 <translation id="3554637740840164787">Ainguratu da <ph name="ITEM_TITLE" /></translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{1 egun gelditzen da}other{# egun gelditzen dira}}</translation>
diff --git a/ui/strings/translations/ui_strings_fi.xtb b/ui/strings/translations/ui_strings_fi.xtb
index 6808859b..86e26293 100644
--- a/ui/strings/translations/ui_strings_fi.xtb
+++ b/ui/strings/translations/ui_strings_fi.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Sisäänrakennettu näyttö</translation>
 <translation id="335581015389089642">Puhe</translation>
 <translation id="3389286852084373014">Teksti on liian suuri</translation>
+<translation id="3406306243914553062">HTML-sisältö</translation>
 <translation id="348799646910989694">Hylly piilotettu automaattisesti</translation>
 <translation id="3554637740840164787"><ph name="ITEM_TITLE" /> kiinnitettiin</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{1 päivä jäljellä}other{# päivää jäljellä}}</translation>
diff --git a/ui/strings/translations/ui_strings_hi.xtb b/ui/strings/translations/ui_strings_hi.xtb
index 8eddf5d..84c3165 100644
--- a/ui/strings/translations/ui_strings_hi.xtb
+++ b/ui/strings/translations/ui_strings_hi.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">पहले से मौजूद डिसप्ले</translation>
 <translation id="335581015389089642">बोली</translation>
 <translation id="3389286852084373014">टेक्स्ट बहुत बड़ा है</translation>
+<translation id="3406306243914553062">एचटीएमएल कॉन्टेंट</translation>
 <translation id="348799646910989694">शेल्फ़ के अपने आप छिपने की सुविधा चालू है</translation>
 <translation id="3554637740840164787"><ph name="ITEM_TITLE" /> को पिन किया गया</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{1 दिन शेष}one{# दिन शेष}other{# दिन शेष}}</translation>
diff --git a/ui/strings/translations/ui_strings_hr.xtb b/ui/strings/translations/ui_strings_hr.xtb
index 3975c2e..9c972501 100644
--- a/ui/strings/translations/ui_strings_hr.xtb
+++ b/ui/strings/translations/ui_strings_hr.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Ugrađeni zaslon</translation>
 <translation id="335581015389089642">Govor</translation>
 <translation id="3389286852084373014">Tekst je prevelik</translation>
+<translation id="3406306243914553062">HTML sadržaj</translation>
 <translation id="348799646910989694">Polica je automatski skrivena</translation>
 <translation id="3554637740840164787">Prikvačena je stavka <ph name="ITEM_TITLE" /></translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{Još 1 dan}one{Još # dan}few{Još # dana}other{Još # dana}}</translation>
diff --git a/ui/strings/translations/ui_strings_lo.xtb b/ui/strings/translations/ui_strings_lo.xtb
index 334bd1f..c5affb4 100644
--- a/ui/strings/translations/ui_strings_lo.xtb
+++ b/ui/strings/translations/ui_strings_lo.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">ຈໍສະແດງຜົນໃນຕົວ</translation>
 <translation id="335581015389089642">ການເວົ້າ</translation>
 <translation id="3389286852084373014">ຂໍ້ຄວາມໃຫຍ່ເກີນໄປ</translation>
+<translation id="3406306243914553062">ເນື້ອຫາ HTML</translation>
 <translation id="348799646910989694">ເຊື່ອງຊັ້ນວາງໂດຍອັດຕະໂນມັດແລ້ວ</translation>
 <translation id="3554637740840164787">ປັກໝຸດ <ph name="ITEM_TITLE" /> ແລ້ວ</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{ຍັງ​ເຫຼືອ 1 ວັນ}other{ຍັງ​ເຫຼືອ # ວັນ}}</translation>
diff --git a/ui/strings/translations/ui_strings_lt.xtb b/ui/strings/translations/ui_strings_lt.xtb
index 4a94db9..347b0ccb 100644
--- a/ui/strings/translations/ui_strings_lt.xtb
+++ b/ui/strings/translations/ui_strings_lt.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Įtaisytasis ekranas</translation>
 <translation id="335581015389089642">Kalba</translation>
 <translation id="3389286852084373014">Teksto pranešimas per didelis</translation>
+<translation id="3406306243914553062">HTML turinys</translation>
 <translation id="348799646910989694">Lentyna automatiškai slepiama</translation>
 <translation id="3554637740840164787">Prisegta: <ph name="ITEM_TITLE" /></translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{Liko 1 diena}one{Liko # diena}few{Liko # dienos}many{Liko # dienos}other{Liko # dienų}}</translation>
diff --git a/ui/strings/translations/ui_strings_my.xtb b/ui/strings/translations/ui_strings_my.xtb
index 84e5544..356f553 100644
--- a/ui/strings/translations/ui_strings_my.xtb
+++ b/ui/strings/translations/ui_strings_my.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">အသင့်ပါ ဖန်သားပြင်ပြသမှု</translation>
 <translation id="335581015389089642">စကားပြောမှု</translation>
 <translation id="3389286852084373014">စာသား အလွန်ကြီးနေသည်</translation>
+<translation id="3406306243914553062">HTML အကြောင်းအရာ</translation>
 <translation id="348799646910989694">စင်ကို အလိုလိုဖျောက်ထားသည်</translation>
 <translation id="3554637740840164787"><ph name="ITEM_TITLE" /> ကို ပင်ထိုးထားသည်</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{၁ ရက်ကျန်၏}other{# ရက်ကျန်၏}}</translation>
diff --git a/ui/strings/translations/ui_strings_no.xtb b/ui/strings/translations/ui_strings_no.xtb
index 432fe797..aeb39f7 100644
--- a/ui/strings/translations/ui_strings_no.xtb
+++ b/ui/strings/translations/ui_strings_no.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Innebygd skjerm</translation>
 <translation id="335581015389089642">Tale</translation>
 <translation id="3389286852084373014">Teksten er for stor</translation>
+<translation id="3406306243914553062">HTML-innhold</translation>
 <translation id="348799646910989694">Hyllen skjules automatisk</translation>
 <translation id="3554637740840164787">Festet <ph name="ITEM_TITLE" /></translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{1 dag igjen}other{# dager igjen}}</translation>
diff --git a/ui/strings/translations/ui_strings_pl.xtb b/ui/strings/translations/ui_strings_pl.xtb
index 0691ee3d..173da38 100644
--- a/ui/strings/translations/ui_strings_pl.xtb
+++ b/ui/strings/translations/ui_strings_pl.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Wyświetlacz wbudowany</translation>
 <translation id="335581015389089642">Mowa</translation>
 <translation id="3389286852084373014">Tekst jest za długi</translation>
+<translation id="3406306243914553062">Treść HTML</translation>
 <translation id="348799646910989694">Półka ukryta automatycznie</translation>
 <translation id="3554637740840164787">Element <ph name="ITEM_TITLE" /> został przypięty</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{Pozostał 1 dzień}few{Pozostały # dni}many{Pozostało # dni}other{Pozostało # dnia}}</translation>
diff --git a/ui/strings/translations/ui_strings_ro.xtb b/ui/strings/translations/ui_strings_ro.xtb
index e1a8d0d3..d424059 100644
--- a/ui/strings/translations/ui_strings_ro.xtb
+++ b/ui/strings/translations/ui_strings_ro.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Ecran încorporat</translation>
 <translation id="335581015389089642">Voce</translation>
 <translation id="3389286852084373014">Textul este prea mare</translation>
+<translation id="3406306243914553062">Conținut HTML</translation>
 <translation id="348799646910989694">Raft ascuns automat</translation>
 <translation id="3554637740840164787">S-a fixat <ph name="ITEM_TITLE" /></translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{O zi rămasă}few{# zile rămase}other{# de zile rămase}}</translation>
diff --git a/ui/strings/translations/ui_strings_sl.xtb b/ui/strings/translations/ui_strings_sl.xtb
index c62e9cd..4b1c74fc9 100644
--- a/ui/strings/translations/ui_strings_sl.xtb
+++ b/ui/strings/translations/ui_strings_sl.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Vgrajeni zaslon</translation>
 <translation id="335581015389089642">Speech</translation>
 <translation id="3389286852084373014">Besedilo je preveliko</translation>
+<translation id="3406306243914553062">Vsebina HTML</translation>
 <translation id="348799646910989694">Polica je samodejno skrita</translation>
 <translation id="3554637740840164787">Element <ph name="ITEM_TITLE" /> je bil pripet</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{Še 1 dan}one{Še # dan}two{Še # dneva}few{Še # dni}other{Še # dni}}</translation>
diff --git a/ui/strings/translations/ui_strings_sr-Latn.xtb b/ui/strings/translations/ui_strings_sr-Latn.xtb
index 8b788de..496b2d9 100644
--- a/ui/strings/translations/ui_strings_sr-Latn.xtb
+++ b/ui/strings/translations/ui_strings_sr-Latn.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Ugrađeni ekran</translation>
 <translation id="335581015389089642">Govor</translation>
 <translation id="3389286852084373014">Tekst je prevelik</translation>
+<translation id="3406306243914553062">HTML sadržaj</translation>
 <translation id="348799646910989694">Polica je automatski sakrivena</translation>
 <translation id="3554637740840164787">Stavka <ph name="ITEM_TITLE" /> je zakačena</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{Još 1 dan}one{Još # dan}few{Još # dana}other{Još # dana}}</translation>
diff --git a/ui/strings/translations/ui_strings_sr.xtb b/ui/strings/translations/ui_strings_sr.xtb
index 62d7954..ae158cd 100644
--- a/ui/strings/translations/ui_strings_sr.xtb
+++ b/ui/strings/translations/ui_strings_sr.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">Уграђени екран</translation>
 <translation id="335581015389089642">Говор</translation>
 <translation id="3389286852084373014">Текст је превелик</translation>
+<translation id="3406306243914553062">HTML садржај</translation>
 <translation id="348799646910989694">Полица је аутоматски сакривена</translation>
 <translation id="3554637740840164787">Ставка <ph name="ITEM_TITLE" /> је закачена</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{Још 1 дан}one{Још # дан}few{Још # дана}other{Још # дана}}</translation>
diff --git a/ui/strings/translations/ui_strings_te.xtb b/ui/strings/translations/ui_strings_te.xtb
index 10c3157..316a7a9 100644
--- a/ui/strings/translations/ui_strings_te.xtb
+++ b/ui/strings/translations/ui_strings_te.xtb
@@ -94,6 +94,7 @@
 <translation id="3306688585798492231">బిల్ట్-ఇన్ డిస్‌ప్లే</translation>
 <translation id="335581015389089642">ప్రసంగం</translation>
 <translation id="3389286852084373014">వచనం చాలా పెద్దదిగా ఉంది</translation>
+<translation id="3406306243914553062">HTML కంటెంట్</translation>
 <translation id="348799646910989694">అర ఆటోమేటిక్‌గా దాచి పెట్టబడుతుంది</translation>
 <translation id="3554637740840164787"><ph name="ITEM_TITLE" /> పిన్ చేయబడింది</translation>
 <translation id="3600566671520689681">{DAYS,plural, =1{1 రోజు మిగిలి ఉంది}other{# రోజులు మిగిలి ఉన్నాయి}}</translation>
diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc
index 5c3e386..c85ec66 100644
--- a/ui/views/controls/menu/menu_controller.cc
+++ b/ui/views/controls/menu/menu_controller.cc
@@ -2720,7 +2720,7 @@
     if (index == stop_index && !include_all_items)
       return nullptr;
     MenuItemView* child = parent->GetSubmenu()->GetMenuItemAt(index);
-    if (child->GetVisible() && child->GetEnabled())
+    if (child->IsTraversableByKeyboard())
       return child;
   } while (index != stop_index);
   return nullptr;
diff --git a/ui/views/controls/menu/menu_item_view.cc b/ui/views/controls/menu/menu_item_view.cc
index 43b455d2..cde36888 100644
--- a/ui/views/controls/menu/menu_item_view.cc
+++ b/ui/views/controls/menu/menu_item_view.cc
@@ -19,6 +19,7 @@
 #include "ui/accessibility/ax_action_data.h"
 #include "ui/accessibility/ax_enums.mojom.h"
 #include "ui/accessibility/ax_node_data.h"
+#include "ui/accessibility/platform/ax_platform_node.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/models/menu_model.h"
 #include "ui/base/ui_base_features.h"
@@ -736,6 +737,12 @@
   return feature_enabled && is_new_;
 }
 
+bool MenuItemView::IsTraversableByKeyboard() const {
+  bool ignore_enabled = ui::AXPlatformNode::GetAccessibilityMode().has_mode(
+      ui::AXMode::kNativeAPIs);
+  return GetVisible() && (ignore_enabled || GetEnabled());
+}
+
 MenuItemView::MenuItemView(MenuItemView* parent,
                            int command,
                            MenuItemView::Type type) {
diff --git a/ui/views/controls/menu/menu_item_view.h b/ui/views/controls/menu/menu_item_view.h
index 73b48ec..5408f114 100644
--- a/ui/views/controls/menu/menu_item_view.h
+++ b/ui/views/controls/menu/menu_item_view.h
@@ -363,6 +363,10 @@
   // Takes into account whether the badging feature is enabled.
   bool ShouldShowNewBadge() const;
 
+  // Returns whether keyboard navigation through the menu should stop on this
+  // item.
+  bool IsTraversableByKeyboard() const;
+
  protected:
   // Creates a MenuItemView. This is used by the various AddXXX methods.
   MenuItemView(MenuItemView* parent, int command, Type type);
diff --git a/ui/webui/resources/cr_components/chromeos/cellular_setup/activation_code_page.html b/ui/webui/resources/cr_components/chromeos/cellular_setup/activation_code_page.html
index 8e9086e..2980510 100644
--- a/ui/webui/resources/cr_components/chromeos/cellular_setup/activation_code_page.html
+++ b/ui/webui/resources/cr_components/chromeos/cellular_setup/activation_code_page.html
@@ -142,7 +142,7 @@
         </div>
         <cr-input id="activationCode"
             label="[[i18n('activationCode')]]"
-            value="{{activationCode_}}">
+            value="{{activationCode}}">
         </cr-input>
       </div>
     </base-page>
diff --git a/ui/webui/resources/cr_components/chromeos/cellular_setup/activation_code_page.js b/ui/webui/resources/cr_components/chromeos/cellular_setup/activation_code_page.js
index eb391054..c5450c36 100644
--- a/ui/webui/resources/cr_components/chromeos/cellular_setup/activation_code_page.js
+++ b/ui/webui/resources/cr_components/chromeos/cellular_setup/activation_code_page.js
@@ -36,10 +36,9 @@
   behaviors: [I18nBehavior],
 
   properties: {
-    /** @private */
-    activationCode_: {
+    activationCode: {
       type: String,
-      value: '',
+      notify: true,
       observer: 'onActivationCodeChanged_',
     },
 
@@ -166,7 +165,7 @@
             oldStream.getTracks()[0].stop();
           }
 
-          this.activationCode_ = '';
+          this.activationCode = '';
           this.state_ = useUserFacingCamera ?
               PageState.SCANNING_USER_FACING :
               PageState.SCANNING_ENVIRONMENT_FACING;
@@ -177,7 +176,7 @@
 
   /**
    * Continuously checks stream if it contains a QR code. If a QR code is
-   * detected, activationCode_ is set to the QR code's value and the detection
+   * detected, activationCode is set to the QR code's value and the detection
    * stops.
    * @param {MediaStream} stream
    * @private
@@ -191,7 +190,7 @@
             const activationCode = await this.detectActivationCode_(frame);
             if (activationCode) {
               clearTimeout(this.qrCodeDetectorTimer_);
-              this.activationCode_ = activationCode;
+              this.activationCode = activationCode;
             }
           }).bind(this),
           QR_CODE_DETECTION_INTERVAL_MS);
@@ -224,7 +223,7 @@
 
   /** @private */
   onActivationCodeChanged_() {
-    const activationCode = this.validateActivationCode_(this.activationCode_);
+    const activationCode = this.validateActivationCode_(this.activationCode);
     this.fire('activation-code-updated', {activationCode: activationCode});
     // TODO(crbug.com/1093185): Handle if activation code is invalid.
     if (activationCode) {
diff --git a/ui/webui/resources/cr_components/chromeos/cellular_setup/esim_flow_ui.html b/ui/webui/resources/cr_components/chromeos/cellular_setup/esim_flow_ui.html
index 3b7d681..ff3ab91 100644
--- a/ui/webui/resources/cr_components/chromeos/cellular_setup/esim_flow_ui.html
+++ b/ui/webui/resources/cr_components/chromeos/cellular_setup/esim_flow_ui.html
@@ -30,7 +30,9 @@
       <profile-discovery-list-page id="profileDiscoveryPage"
           selected-profiles="{{selectedProfiles_}}">
       </profile-discovery-list-page>
-      <activation-code-page id="activationCodePage"></activation-code-page>
+      <activation-code-page id="activationCodePage"
+          activation-code="{{activationCode_}}">
+      </activation-code-page>
       <final-page
         id="finalPage"
         delegate="[[delegate]]"
diff --git a/ui/webui/resources/cr_components/chromeos/cellular_setup/esim_flow_ui.js b/ui/webui/resources/cr_components/chromeos/cellular_setup/esim_flow_ui.js
index ddac58bc..331dacc 100644
--- a/ui/webui/resources/cr_components/chromeos/cellular_setup/esim_flow_ui.js
+++ b/ui/webui/resources/cr_components/chromeos/cellular_setup/esim_flow_ui.js
@@ -16,8 +16,7 @@
     PROFILE_SEARCH: 'profile-search',
     ACTIVATION_CODE_ENTRY: 'activation-code-entry',
     MULTI_PROFILE_SELECTION: 'multi-profile-selection',
-    SETUP_SUCCESS: 'setup-success',
-    SETUP_FAILURE: 'setup-failure',
+    SETUP_FINISH: 'setup-finish',
   };
 
   /**
@@ -71,6 +70,12 @@
       selectedProfiles_: {
         type: Object,
       },
+
+      /** @private */
+      activationCode_: {
+        type: String,
+        value: '',
+      },
     },
 
     /**
@@ -79,6 +84,9 @@
      */
     eSimManagerRemote_: null,
 
+    /** @private {?chromeos.cellularSetup.mojom.EuiccRemote} */
+    euicc_: null,
+
     listeners: {
       'activation-code-updated': 'onActivationCodeUpdated_',
     },
@@ -99,21 +107,20 @@
 
     /** @private */
     fetchProfiles_() {
-      let euicc;
       this.eSimManagerRemote_.getAvailableEuiccs()
           .then(response => {
             // TODO(crbug.com/1093185) User should have at least 1 EUICC or
             // we shouldn't have gotten to this flow. Add check for this in
             // cellular_setup.
-            euicc = response.euiccs[0];
-            return euicc.requestPendingProfiles();
+            this.euicc_ = response.euiccs[0];
+            return this.euicc_.requestPendingProfiles();
           })
           .then(response => {
             if (response.result ===
                 chromeos.cellularSetup.mojom.ESimOperationResult.kFailure) {
               console.error('Error requesting pending profiles: ' + response);
             }
-            return euicc.getProfileList();
+            return this.euicc_.getProfileList();
           })
           .then(response => {
             return this.filterForPendingProfiles_(response.profiles);
@@ -124,10 +131,10 @@
                 this.state_ = ESimUiState.ACTIVATION_CODE_ENTRY;
                 break;
               case 1:
-                // TODO(crbug.com/1093185) Install the
-                // profile. Handle error state. Handle
-                // confirmation code if needed.
-                this.state_ = ESimUiState.SETUP_SUCCESS;
+                // Assume installing the profile doesn't require a confirmation
+                // code, send an empty string.
+                profiles[0].installProfile('').then(
+                    this.handleProfileInstallResponse_.bind(this));
                 break;
               default:
                 // TODO(crbug.com/1093185) Populate the profile discovery with
@@ -160,6 +167,26 @@
       });
     },
 
+    /**
+     * @private
+     * @param {{result: chromeos.cellularSetup.mojom.ProfileInstallResult}}
+     *     response
+     */
+    handleProfileInstallResponse_(response) {
+      // TODO(crbug.com/1093185) Handle
+      // confirmation code if needed.
+      // TODO(crbug.com/1093185) If response.result ===
+      // kErrorInvalidActivationCode, show error in activation code page.
+      this.showError_ = response.result !==
+          chromeos.cellularSetup.mojom.ProfileInstallResult.kSuccess;
+      if (response.result ===
+              chromeos.cellularSetup.mojom.ProfileInstallResult.kSuccess ||
+          response.result ===
+              chromeos.cellularSetup.mojom.ProfileInstallResult.kFailure) {
+        this.state_ = ESimUiState.SETUP_FINISH;
+      }
+    },
+
     /** @private */
     updateSelectedPage_() {
       switch (this.state_) {
@@ -172,7 +199,7 @@
         case ESimUiState.MULTI_PROFILE_SELECTION:
           this.selectedESimPageName_ = ESimPageName.PROFILE_DISCOVERY;
           break;
-        case ESimUiState.SETUP_SUCCESS:
+        case ESimUiState.SETUP_FINISH:
           this.selectedESimPageName_ = ESimPageName.FINAL;
           break;
         default:
@@ -210,7 +237,7 @@
             skipDiscovery: cellularSetup.ButtonState.SHOWN_AND_ENABLED,
           };
           break;
-        case ESimUiState.SETUP_SUCCESS:
+        case ESimUiState.SETUP_FINISH:
           buttonState = {
             backward: cellularSetup.ButtonState.HIDDEN,
             cancel: cellularSetup.ButtonState.HIDDEN,
@@ -256,9 +283,12 @@
     navigateForward() {
       switch (this.state_) {
         case ESimUiState.ACTIVATION_CODE_ENTRY:
-          // TODO(crbug.com/1093185) Install the profile. Handle error state.
-          // Handle confirmation code if needed.
-          this.state_ = ESimUiState.SETUP_SUCCESS;
+          // Assume installing the profile doesn't require a confirmation
+          // code, send an empty string.
+          this.euicc_
+              .installProfileFromActivationCode(
+                  this.activationCode_, /*confirmationCode=*/ '')
+              .then(this.handleProfileInstallResponse_.bind(this));
           break;
         case ESimUiState.MULTI_PROFILE_SELECTION:
           this.state_ = ESimUiState.ACTIVATION_CODE_ENTRY;
diff --git a/weblayer/BUILD.gn b/weblayer/BUILD.gn
index aa44748a..e2735b3 100644
--- a/weblayer/BUILD.gn
+++ b/weblayer/BUILD.gn
@@ -405,6 +405,7 @@
     "//components/page_load_metrics/browser",
     "//components/page_load_metrics/renderer",
     "//components/password_manager/content/browser",
+    "//components/payments/core",
     "//components/permissions",
     "//components/policy/core/browser",
     "//components/pref_registry:pref_registry",
diff --git a/weblayer/DEPS b/weblayer/DEPS
index 30e0bf7..e21bf91 100644
--- a/weblayer/DEPS
+++ b/weblayer/DEPS
@@ -3,6 +3,7 @@
   "+components/js_injection",
   "+components/omnibox/browser",
   "+components/page_info/android",
+  "+components/payments/core",
   "+components/security_state/core/security_state.h",
   "+third_party/metrics_proto/omnibox_input_type.pb.h",
 ]
diff --git a/weblayer/browser/android/metrics/weblayer_metrics_service_client.cc b/weblayer/browser/android/metrics/weblayer_metrics_service_client.cc
index 6b28c6e..59f70bdc 100644
--- a/weblayer/browser/android/metrics/weblayer_metrics_service_client.cc
+++ b/weblayer/browser/android/metrics/weblayer_metrics_service_client.cc
@@ -127,7 +127,7 @@
   return decoded_key;
 }
 
-int WebLayerMetricsServiceClient::GetSampleRatePerMille() {
+int WebLayerMetricsServiceClient::GetSampleRatePerMille() const {
   version_info::Channel channel = version_info::android::GetChannel();
   if (channel == version_info::Channel::STABLE ||
       channel == version_info::Channel::UNKNOWN) {
@@ -161,10 +161,6 @@
   service->RegisterMetricsProvider(std::make_unique<PageLoadMetricsProvider>());
 }
 
-bool WebLayerMetricsServiceClient::IsPersistentHistogramsEnabled() {
-  return true;
-}
-
 bool WebLayerMetricsServiceClient::IsOffTheRecordSessionActive() {
   for (auto* profile : ProfileImpl::GetAllProfiles()) {
     if (profile->GetBrowserContext()->IsOffTheRecord())
diff --git a/weblayer/browser/android/metrics/weblayer_metrics_service_client.h b/weblayer/browser/android/metrics/weblayer_metrics_service_client.h
index 09db1604..2ef44d9 100644
--- a/weblayer/browser/android/metrics/weblayer_metrics_service_client.h
+++ b/weblayer/browser/android/metrics/weblayer_metrics_service_client.h
@@ -42,13 +42,12 @@
   std::string GetUploadSigningKey() override;
 
   // metrics::AndroidMetricsServiceClient:
-  int GetSampleRatePerMille() override;
+  int GetSampleRatePerMille() const override;
   void OnMetricsStart() override;
   void OnMetricsNotStarted() override;
   int GetPackageNameLimitRatePerMille() override;
   void RegisterAdditionalMetricsProviders(
       metrics::MetricsService* service) override;
-  bool IsPersistentHistogramsEnabled() override;
   bool IsOffTheRecordSessionActive() override;
   scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() override;
 
diff --git a/weblayer/browser/browser_context_impl.cc b/weblayer/browser/browser_context_impl.cc
index ddfe182c..a9f3017 100644
--- a/weblayer/browser/browser_context_impl.cc
+++ b/weblayer/browser/browser_context_impl.cc
@@ -13,6 +13,7 @@
 #include "components/embedder_support/pref_names.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/language/core/browser/language_prefs.h"
+#include "components/payments/core/payment_prefs.h"
 #include "components/permissions/permission_manager.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/in_memory_pref_store.h"
@@ -272,6 +273,7 @@
   translate::TranslatePrefs::RegisterProfilePrefs(pref_registry);
   blocked_content::SafeBrowsingTriggeredPopupBlocker::RegisterProfilePrefs(
       pref_registry);
+  payments::RegisterProfilePrefs(pref_registry);
   pref_registry->RegisterBooleanPref(
       ::prefs::kOfferTranslateEnabled, true,
       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/GmsBridge.java b/weblayer/browser/java/org/chromium/weblayer_private/GmsBridge.java
index db3225f..1cece98 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/GmsBridge.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/GmsBridge.java
@@ -72,6 +72,10 @@
         // We don't have this specialized service here.
     }
 
+    public void initializeBuiltInPaymentApps() {
+        // We don't have this specialized service here.
+    }
+
     // Overriding implementations may call "callback" asynchronously. For simplicity (and not
     // because of any technical limitation) we require that "queryMetricsSetting" and "callback"
     // both get called on WebLayer's UI thread.
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java
index f19e09c..7e012363 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/WebLayerImpl.java
@@ -281,6 +281,7 @@
             LibraryLoader.getInstance().ensureInitialized();
         }
         GmsBridge.getInstance().setSafeBrowsingHandler();
+        GmsBridge.getInstance().initializeBuiltInPaymentApps();
 
         MediaStreamManager.onWebLayerInit();
         WebLayerNotificationChannels.updateChannelsIfNecessary();
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/payments/WebLayerPaymentRequestService.java b/weblayer/browser/java/org/chromium/weblayer_private/payments/WebLayerPaymentRequestService.java
index 1167764..583c310 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/payments/WebLayerPaymentRequestService.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/payments/WebLayerPaymentRequestService.java
@@ -21,38 +21,37 @@
      */
     public WebLayerPaymentRequestService(
             PaymentRequestService paymentRequestService, Delegate delegate) {
-        assert false : "Not implemented yet";
     }
 
+    // Implements BrowserPaymentRequest:
     @Override
     public void onPaymentDetailsUpdated(
             PaymentDetails details, boolean hasNotifiedInvokedPaymentApp) {
-        assert false : "Not implemented yet";
     }
 
+    // Implements BrowserPaymentRequest:
     @Override
     public void onPaymentDetailsNotUpdated(String selectedShippingOptionError) {
-        assert false : "Not implemented yet";
     }
 
+    // Implements BrowserPaymentRequest:
     @Override
     public void complete(int result, Runnable onCompleteHandled) {
-        assert false : "Not implemented yet";
     }
 
+    // Implements BrowserPaymentRequest:
     @Override
-    public void retry(PaymentValidationErrors errors) {
-        assert false : "Not implemented yet";
-    }
+    public void onRetry(PaymentValidationErrors errors) {}
 
+    // Implements BrowserPaymentRequest:
     @Override
     public void close() {
-        assert false : "Not implemented yet";
     }
 
+    // Implements BrowserPaymentRequest:
     @Override
     public void addPaymentAppFactories(
             PaymentAppService service, PaymentAppFactoryDelegate delegate) {
-        assert false : "Not implemented yet";
+        // WebLayer only adds the GPay factory, but not using this method.
     }
 }
diff --git a/weblayer/browser/permissions/permission_manager_factory.cc b/weblayer/browser/permissions/permission_manager_factory.cc
index 348c40eb..f743eb29 100644
--- a/weblayer/browser/permissions/permission_manager_factory.cc
+++ b/weblayer/browser/permissions/permission_manager_factory.cc
@@ -8,6 +8,7 @@
 #include "components/background_sync/background_sync_permission_context.h"
 #include "components/content_settings/core/common/content_settings_types.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "components/permissions/contexts/payment_handler_permission_context.h"
 #include "components/permissions/permission_context_base.h"
 #include "components/permissions/permission_manager.h"
 #include "content/public/browser/permission_type.h"
@@ -66,6 +67,9 @@
       std::make_unique<GeolocationPermissionContext>(
           browser_context,
           std::make_unique<GeolocationPermissionContextDelegate>());
+  permission_contexts[ContentSettingsType::PAYMENT_HANDLER] =
+      std::make_unique<payments::PaymentHandlerPermissionContext>(
+          browser_context);
 
 #if defined(OS_CHROMEOS) || defined(OS_ANDROID)
   permission_contexts[ContentSettingsType::PROTECTED_MEDIA_IDENTIFIER] =